通话录音增加上到分离
authorliangzhenying <867174124@qq.com>
Wed, 26 Nov 2025 09:12:41 +0000 (17:12 +0800)
committerliangzhenying <867174124@qq.com>
Wed, 26 Nov 2025 09:12:41 +0000 (17:12 +0800)
147 files changed:
ShenYin/ShenYin/Launch/BleManager.swift
ShenYin/ShenYin/Launch/JoySdkManager.swift
ShenYin/ShenYin/Tools/Extensions/UITextView+Scroll.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Home/CallingRecordVC.swift
ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishCell.swift
ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishVC.swift
ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift
ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordingVC.swift
ShenYin/ShenYin/UI/Home/FieldRecording/RecordBar.swift
ShenYin/ShenYin/UI/Home/FieldRecording/RhythView.swift
ShenYin/ShenYin/UI/Home/RecordTranslateVC.swift
ShenYin/ShenYin/UI/Home/Root/HomeFunctionView.swift
ShenYin/ShenYin/UI/Home/StereoCallVC.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/common/LoadingButton.swift
ShenYin/ShenYin/UI/common/PlaceHolderTextView.swift
ShenYin/ShenYin/lan/Arabic.swift
ShenYin/ShenYin/lan/Filipino.swift
ShenYin/ShenYin/lan/German.swift
ShenYin/ShenYin/lan/TraditionalChinese.swift
ShenYin/ShenYin/lan/Vietnam.swift
ShenYin/ShenYin/lan/chinese.swift
ShenYin/ShenYin/lan/english.swift
ShenYin/ShenYin/lan/french.swift
ShenYin/ShenYin/lan/indonesian.swift
ShenYin/ShenYin/lan/japanese.swift
ShenYin/ShenYin/lan/korean.swift
ShenYin/ShenYin/lan/malay.swift
ShenYin/ShenYin/lan/russian.swift
ShenYin/ShenYin/lan/spanish.swift
ShenYin/ShenYin/lan/thai.swift
document/DeepChordsSdk_iOS/DeepChordsSdk/DeepChordsSdk/DeepChordsSdk.xcodeproj/project.pbxproj
document/DeepChordsSdk_iOS/DeepChordsSdk/DeepChordsSdk/DeepChordsSdk/DCBleManager.swift
document/DeepChordsSdk_iOS/DeepChordsSdk/DeepChordsSdk/DeepChordsSdk/DeepChordsAiSdk.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Any.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/BleSender.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCBleManager.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCDevice.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Data.swift [moved from document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/Data.swift with 80% similarity]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Date.swift [moved from document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/Date.swift with 100% similarity]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DeepChordsAiSdk.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DeepChordsSdk.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Demo.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/LogManager.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/ReceiveManager.swift [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarbaustVoiceChatModel.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrConfig.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrModel.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstConfig.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstFileAsrModel.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstOffLineFile.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstPhoneSdk.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdk.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdkManager.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstStreamModel.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarbusrtSpeaker.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstDecoderConfig.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassChat.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassesSdk.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstMixSdk.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Info.plist [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Modules/module.modulemap [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/PrivacyInfo.xcprivacy [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/StarburstSdk [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1 [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeResources [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/project.pbxproj
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/xcshareddata/xcschemes/DeepChordsSdk.xcscheme [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/Info.plist
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/VC/LogVC.swift
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/VC/SceneDelegate.swift
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/LogManager.swift [deleted file]
document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/Untitled.swift [deleted file]
document/DeepChordsSdk_iOS/DeepChordsSdk/Podfile.lock
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Manifest.lock
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Pods.xcodeproj/project.pbxproj
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/LICENSE [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/LICENSE-examples [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/README.md [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/SRConstants.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/SRConstants.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRWebSocket.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRWebSocket.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SocketRocket.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-Info.plist [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-acknowledgements.markdown [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-acknowledgements.plist [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-dummy.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-umbrella.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.debug.xcconfig [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.modulemap [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.release.xcconfig [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Debug-input-files.xcfilelist
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Debug-output-files.xcfilelist
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Release-input-files.xcfilelist
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Release-output-files.xcfilelist
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks.sh
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-Info.plist [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-umbrella.h [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.modulemap [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig [new file with mode: 0644]
document/DeepChordsSdk_iOS/DeepChordsSdk/podfile

index fcdc992..98ef1e0 100644 (file)
@@ -271,19 +271,20 @@ extension BleManager : JoyGemAIManagerDelegate {
         switch action {
         case .cancel:
             Logger.debug("请求关闭录音功能/通知关闭了对话")
-//            YLprogressHUD.showAutoHiden("请求关闭录音功能/通知关闭了对话")
             if let topVC = App.shared.topVC(), let vc = topVC as? FieldRecordingVC {
                 vc.stopRecord()
             }
             if let topVC = App.shared.topVC(), let vc = topVC as? CallingRecordVC {
                 vc.stopRecord()
             }
+            if let topVC = App.shared.topVC(), let vc = topVC as? StereoCallVC {
+                vc.stopRecord()
+            }
         case .recordLive:
             Logger.debug("请求开启现场录音")
             if App.shared.isInBackground {
                 return
             }
-//            YLprogressHUD.showAutoHiden("请求开启现场录音")
             if let vc = App.shared.topVC() as? FieldRecordingVC {
                 vc.startRecord()
             }
@@ -295,12 +296,21 @@ extension BleManager : JoyGemAIManagerDelegate {
             if App.shared.isInBackground {
                 return
             }
-//            YLprogressHUD.showAutoHiden("请求开启通话录音")
-            if let vc = App.shared.topVC() as? CallingRecordVC {
-                vc.startRecord()
-            }else{
-                App.shared.goToPage(CallingRecordVC(autoStart: true))
+            if JoySdkManager.shared.supportStereo{
+                if let vc = App.shared.topVC() as? StereoCallVC {
+                    vc.startRecord()
+                }else{
+                    App.shared.goToPage(CallingRecordVC(autoStart: true))
+                }
             }
+            else{
+                if let vc = App.shared.topVC() as? CallingRecordVC {
+                    vc.startRecord()
+                }else{
+                    App.shared.goToPage(CallingRecordVC(autoStart: true))
+                }
+            }
+
         case .si:
                 Logger.debug( "请求开启同传听译")
         case .chat:
index a5f8b12..6ac5fde 100644 (file)
@@ -16,6 +16,10 @@ class JoySdkManager:NSObject{
     var dataList:[ChatCellModel] = []
     var chatStateChange:((JoyGemStateCode)->Void)?
     var chatNeedReloadData:(()->Void)?
+    
+    var supportStereo:Bool{
+        return JoyGemCallManager.shared().supportStereo == true
+    }
 }
 extension JoySdkManager {
     func setupSdk(){
diff --git a/ShenYin/ShenYin/Tools/Extensions/UITextView+Scroll.swift b/ShenYin/ShenYin/Tools/Extensions/UITextView+Scroll.swift
new file mode 100644 (file)
index 0000000..002321d
--- /dev/null
@@ -0,0 +1,13 @@
+//
+//  UITextView+Scroll.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/11/26.
+//
+
+public extension UITextView{
+     func scrollToBottom(){
+        let range = NSMakeRange(self.text.count - 1, 1)
+        self.scrollRangeToVisible(range)
+    }
+}
index 9eb8d88..9df93dd 100644 (file)
@@ -53,6 +53,7 @@ class CallingRecordVC:BaseVC{
         rhythView.snp.makeConstraints { make in
             make.width.centerX.equalToSuperview()
             make.top.equalToSuperview().inset(kNavBtm)
+            make.height.equalTo(110)
         }
         toolBar.snp.makeConstraints { make in
             make.width.centerX.equalToSuperview()
@@ -133,35 +134,14 @@ extension CallingRecordVC:FieldRecordBarDelegate{
             JoyGemCallManager.shared().start()
         }
         else if state == .stop{
-            rhythView.stopTimer()
-            JoyGemCallManager.shared().stop()
-            bar.startAnimating {[weak self] in
-                guard let self = self else{return}
-                //toolBar.recordBtn.stopCli()
-                guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
-                let v = PopTextField()
-                v.show()
-                v.cancelTap = {
-                    App.shared.popPage()
-                }
-                v.okTap = { [weak self]  text in
-                    guard let self = self else{return}
-                    
-                    let model = RecordDetailModel()
-                    model.type = .phone
-                    model.from = bar.leftItem.language
-                    model.to = .english
-                    model.name = text
-                    model.path = wavPath
-                    model.duration = YLToos.getDuration(model.path)
-                    model.origin = textView.text
-                    model.translate = ""
-                    App.shared.popPage(animated: false)
-                    App.shared.goToPage(RecordDetailVC(record: model))
-                }
-            }
+            stopAction()
         }
     }
+    func stopAction(){
+        rhythView.stopTimer()
+        JoyGemCallManager.shared().stop()
+        toolBar.startAnimating()
+    }
 }
 extension CallingRecordVC : JoyGemCallManagerDelegate {
     
@@ -170,18 +150,41 @@ extension CallingRecordVC : JoyGemCallManagerDelegate {
             Logger.debug( "用户主动结束")
         } else {
             Logger.debug( "自动结束")
-            rhythView.stopTimer()
-            toolBar.recordBtn.isSelected = false
+            stopAction()
         }
     }
     
     func callManagerNotonCall(_ manager: JoyGemCallManager) {
-        Logger.debug("未处于通话状态")
+        YLprogressHUD.showAutoHiden("未处于通话状态".l10n)
+        rhythView.reset()
+        toolBar.recordBtn.isSelected = false
+        toolBar.leftItem.alpha = 1
     }
     
     func callManager(_ manager: JoyGemCallManager, saveFile path: String) {
         Logger.debug("path: \(path)")
         recordFilePath = path
+        guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
+        let v = PopTextField()
+        v.show()
+        v.cancelTap = {
+            App.shared.popPage()
+        }
+        v.okTap = { [weak self]  text in
+            guard let self = self else{return}
+            
+            let model = RecordDetailModel()
+            model.type = .phone
+            model.from = toolBar.leftItem.language
+            model.to = .english
+            model.name = text
+            model.path = wavPath
+            model.duration = YLToos.getDuration(model.path)
+            model.origin = textView.text
+            model.translate = ""
+            App.shared.popPage(animated: false)
+            App.shared.goToPage(RecordDetailVC(record: model))
+        }
     }
     
     func callManager(_ manager: JoyGemCallManager, stateChange code: JoyGemStateCode) {
index 483e123..3d8863f 100644 (file)
@@ -90,7 +90,7 @@ class Chinese2EnglishCell:BaseTableViewCell{
             make.top.equalTo(line.snp.bottom).offset(15)
             make.left.equalToSuperview().inset(12)
             make.width.lessThanOrEqualTo(kScreenWid - 82)
-            make.bottom.equalToSuperview().inset(47)
+            make.bottom.equalToSuperview().inset(14)
         }
         playIcon.snp.makeConstraints { make in
             make.right.equalToSuperview().inset(12)
index a286ac6..aed5fae 100644 (file)
@@ -13,7 +13,6 @@ class Chinese2EnglishVC:BaseVC{
     let tableView = UITableView(frame: CGRectZero, style: .plain)
     let bg = UIImageView()
     var dataList:[(Chinese2EnglishCellModel,Int)] = []
-    var pcmData = Data()
     var recordFilePath : String?
     var startIndex = 0//记录开始录音的次数,用于区分返回的数据
 
@@ -121,7 +120,6 @@ extension Chinese2EnglishVC:RecordBarDelegate{
     
     func recordBar(_ bar: RecordBar, stateChange state: RecordBarSate) {
         if state == .start {
-            pcmData = Data()
             startIndex += 100000
             JoyGemSIDeviceManager.shared().originalLanguage = bar.leftItem.language.value
             JoyGemSIDeviceManager.shared().targetLanguage = bar.rightItem.language.value
@@ -196,7 +194,6 @@ extension Chinese2EnglishVC:JoyGemSIDeviceManagerDelegate{
         refreshData()
     }
     func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateAudioData data: Data, sampleRate: UInt) {
-        pcmData.append(data)
         PcmSound.sharedInstance().feed(data)
     }
 //    func siDeviceManager(_ manager: JoyGemSIDeviceManager, didUpdateAudioData data: Data) {
index ea41f6b..1538fcd 100644 (file)
@@ -62,14 +62,12 @@ class FieldRecordBar: BaseView {
         }
     }
     
-    func startAnimating(finished:(()->Void)? = nil){
+    func startAnimating(){
         leftItem.alpha = 0.3
-        recordBtn.startAnimating {[weak self] in
-            guard let self = self else{return}
-            leftItem.alpha = 1
-           finished?()
-            
-        }
+        recordBtn.startAnimating()
+    }
+    func stopAnimation(){
+        leftItem.alpha = 1
     }
     @objc func leftAction(){
         if recordBtn.isSelected || recordBtn.activeView.animating {
index 5f6a2cc..8d8835d 100644 (file)
@@ -43,6 +43,7 @@ class FieldRecordingVC:BaseVC{
         rhythView.snp.makeConstraints { make in
             make.width.centerX.equalToSuperview()
             make.top.equalToSuperview().inset(kNavBtm)
+            make.height.equalTo(110)
         }
         toolBar.snp.makeConstraints { make in
             make.width.centerX.equalToSuperview()
@@ -125,31 +126,7 @@ extension FieldRecordingVC:FieldRecordBarDelegate{
         else if state == .stop{
             rhythView.stopTimer()
             JoyGemRecordManager.shared().stop()
-            bar.startAnimating {[weak self] in
-                guard let self = self else{return}
-//                toolBar.recordBtn.stopCli()
-                guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
-                let v = PopTextField()
-                v.show()
-                v.cancelTap = {
-                    App.shared.popPage()
-                }
-                v.okTap = { [weak self]  text in
-                    guard let self = self else{return}
-                    
-                    let model = RecordDetailModel()
-                    model.type = .present
-                    model.from = bar.leftItem.language
-                    model.to = .english
-                    model.name = text
-                    model.path = wavPath
-                    model.duration = YLToos.getDuration(model.path)
-                    model.origin = textView.text
-                    model.translate = ""
-                    App.shared.popPage(animated: false)
-                    App.shared.goToPage(RecordDetailVC(record: model))
-                }
-            }
+            bar.startAnimating()
         }
     }
 }
@@ -191,6 +168,27 @@ extension FieldRecordingVC : JoyGemRecordManagerDelegate {
     func recordManager(_ manager: JoyGemRecordManager, saveFile path: String) {
         Logger.debug("path: \(path)")
         recordFilePath = path
+        guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
+        let v = PopTextField()
+        v.show()
+        v.cancelTap = {
+            App.shared.popPage()
+        }
+        v.okTap = { [weak self]  text in
+            guard let self = self else{return}
+            
+            let model = RecordDetailModel()
+            model.type = .present
+            model.from = toolBar.leftItem.language
+            model.to = .english
+            model.name = text
+            model.path = wavPath
+            model.duration = YLToos.getDuration(model.path)
+            model.origin = textView.text
+            model.translate = ""
+            App.shared.popPage(animated: false)
+            App.shared.goToPage(RecordDetailVC(record: model))
+        }
     }
     
     func recordManager(_ manager: JoyGemRecordManager, stateChange code: JoyGemStateCode) {
index 249a23c..5fbe576 100644 (file)
@@ -69,17 +69,16 @@ class RecordBar: BaseView {
             make.left.equalToSuperview().offset(kScreenWid/2 + 60)
         }
     }
-    func startAnimating(finished:(()->Void)? = nil){
+    func startAnimating(){
         leftItem.alpha = 0.3
         rightItem.alpha = 0.3
-        recordBtn.startAnimating {[weak self] in
-            guard let self = self else{return}
-            leftItem.alpha = 1
-            rightItem.alpha = 1
-            finished?()
-        }
+        recordBtn.startAnimating()
         recordBtn.activeView.backgroundColor = .hexString("#F7F7F7")
     }
+    func stopAnimation(){
+        leftItem.alpha = 1
+        rightItem.alpha = 1
+    }
     @objc func recordBtnAction(){
         if recordBtn.activeView.animating {
             return
index 77f2e1b..09ebd77 100644 (file)
@@ -33,7 +33,6 @@ class RhythView: BaseView {
             make.top.equalToSuperview().inset(40)
             make.left.right.equalToSuperview()
             make.height.equalTo(58)
-            make.bottom.equalToSuperview()
         }
         startWave.snp.makeConstraints { make in
             make.edges.equalTo(stopWave)
@@ -56,4 +55,9 @@ class RhythView: BaseView {
         stopWave.isHidden = false
         timer?.invalidate()
     }
+    func reset(){
+        num = 0
+        stopTimer()
+        lable.text = YLToos.formatSeconds(num)
+    }
 }
index 52f37e3..8e028ae 100644 (file)
@@ -148,30 +148,7 @@ extension RecordTranslateVC:RecordBarDelegate{
         }
         else if state == .stop{
             JoyGemSIManager.shared().stop()
-            bar.startAnimating {[weak self] in
-                guard let self = self else{return}
-                guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
-                let v = PopTextField()
-                v.show()
-                v.cancelTap = {
-                    App.shared.popPage()
-                }
-                v.okTap = { [weak self]  text in
-                    guard let self = self else{return}
-                    
-                    let model = RecordDetailModel()
-                    model.type = .translate
-                    model.from = bar.leftItem.language
-                    model.to = bar.rightItem.language
-                    model.name = text
-                    model.path = wavPath
-                    model.duration = YLToos.getDuration(model.path)
-                    model.origin = textView.text ?? ""
-                    model.translate = translateTextView.text ?? ""
-                    App.shared.popPage(animated: false)
-                    App.shared.goToPage(RecordDetailVC(record: model))
-                }
-            }
+            bar.startAnimating()
         }
     }
 }
@@ -198,7 +175,7 @@ extension RecordTranslateVC : JoyGemSIManagerDelegate {
         textView.text = messageList.compactMap({ (str,idx) in
             return str
         }).joined(separator: "\n")
-        textView.scrollToBottom()
+        textView.textView.scrollToBottom()
     }
     
     func siManager(_ manager: JoyGemSIManager, didUpdateTranslate model: JoyGemAsrModel) {
@@ -215,13 +192,34 @@ extension RecordTranslateVC : JoyGemSIManagerDelegate {
         translateTextView.text = translateList.compactMap({ (str,idx) in
             return str
         }).joined(separator: "\n")
-        translateTextView.scrollToBottom()
+        translateTextView.textView.scrollToBottom()
     }
     
     
     func siManager(_ manager: JoyGemSIManager, saveFile path: String) {
         Logger.debug("path: \(path)")
         recordFilePath = path
+        guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
+        let v = PopTextField()
+        v.show()
+        v.cancelTap = {
+            App.shared.popPage()
+        }
+        v.okTap = { [weak self]  text in
+            guard let self = self else{return}
+            
+            let model = RecordDetailModel()
+            model.type = .translate
+            model.from = toolBar.leftItem.language
+            model.to = toolBar.rightItem.language
+            model.name = text
+            model.path = wavPath
+            model.duration = YLToos.getDuration(model.path)
+            model.origin = textView.text ?? ""
+            model.translate = translateTextView.text ?? ""
+            App.shared.popPage(animated: false)
+            App.shared.goToPage(RecordDetailVC(record: model))
+        }
     }
     
     func siManager(_ manager: JoyGemSIManager, stateChange code: JoyGemStateCode) {
index 19b62ff..5e0b350 100644 (file)
@@ -187,7 +187,12 @@ class HomeCell: BaseView {
         case .fileRecord:
             App.shared.goToPage(FieldRecordingVC())
         case .callRecord:
-            App.shared.goToPage(CallingRecordVC())
+            if JoySdkManager.shared.supportStereo{
+                App.shared.goToPage(StereoCallVC())
+            }
+            else{
+                App.shared.goToPage(CallingRecordVC())
+            }
         case .chinese2English:
             App.shared.goToPage(Chinese2EnglishVC())
         case .recordTranslate:
diff --git a/ShenYin/ShenYin/UI/Home/StereoCallVC.swift b/ShenYin/ShenYin/UI/Home/StereoCallVC.swift
new file mode 100644 (file)
index 0000000..9628e2e
--- /dev/null
@@ -0,0 +1,311 @@
+//
+//  StereoCallVC.swift
+//  ShenYin
+//
+//  Created by liangshi on 2025/11/26.
+//
+
+import UIKit
+import JoyGemAI
+import AVFAudio
+class StereoCallVC:BaseVC{
+    let toolBar = FieldRecordBar()
+    let line = UIView()
+    let selfTextView = UITextView()
+    let otherTextView = UITextView()
+    private let selfLabel = DotLabel()
+    private let otherLabel = DotLabel()
+    let rhythView = RhythView()
+    var selfMessageList : [(String,UInt)] = []
+    var otherMessageList : [(String,UInt)] = []
+    var recordFilePath : String?
+    
+    var autoStart = false
+    
+    init(autoStart :Bool = false) {
+        self.autoStart = autoStart
+        super.init()
+    }
+    override func viewDidLoad() {
+        super.viewDidLoad()
+    }
+    override func setupViews() {
+        navBar.title = "通话录音".l10n
+        navBar.backgroundColor = .white
+        
+        
+        toolBar.do { v in
+            v.delegate = self
+            v.hasRightItem = false
+            v.leftItem.language = AiLanguageCache.get(type: .thly) ?? .chinse
+//            v.backgroundColor = .red
+        }
+        
+        
+        view.backgroundColor = .white
+//        rhythView.backgroundColor = .blue
+        selfTextView.do { v in
+            v.backgroundColor = .white
+            v.isEditable = false
+            v.font = .regular(14)
+            v.text = ""
+            v.textColor = .hexString("#121212")
+            v.contentInset = UIEdgeInsets(top: 0, left: 13, bottom: 0, right: 13)
+//            v.backgroundColor = .green
+        }
+        otherTextView.do { v in
+            v.backgroundColor = .white
+            v.isEditable = false
+            v.font = .regular(14)
+            v.text = ""
+            v.textColor = .hexString("#121212")
+            v.contentInset = UIEdgeInsets(top: 0, left: 13, bottom: 0, right: 13)
+//            v.backgroundColor = .yellow
+        }
+        line.do { v in
+            v.backgroundColor = .hexString("#E9E9E9")
+        }
+        selfLabel.do { v in
+            v.label.text = "你:"
+            v.label.textColor = .hexString("#B9B9B9")
+            v.dot.backgroundColor = v.label.textColor
+//            v.backgroundColor = .red
+        }
+        otherLabel.do { v in
+            v.label.text = "对方:"
+            v.label.textColor = .hexString("#0092E1")
+            v.dot.backgroundColor = v.label.textColor
+//            v.backgroundColor = .red
+        }
+        view.addSubviews([rhythView,selfTextView,otherTextView,toolBar,line,selfLabel,otherLabel])
+        
+    }
+    override func setupLayout() {
+        rhythView.snp.makeConstraints { make in
+            make.width.centerX.equalToSuperview()
+            make.top.equalToSuperview().inset(kNavBtm)
+            make.height.equalTo(110)
+        }
+        toolBar.snp.makeConstraints { make in
+            make.width.centerX.equalToSuperview()
+            make.height.equalTo(120)
+            make.bottom.equalToSuperview().inset(20)
+        }
+        selfLabel.snp.makeConstraints { make in
+            make.height.equalTo(16)
+            make.left.right.equalToSuperview()
+            make.top.equalToSuperview().inset(kNavBtm + 120)
+        }
+        selfTextView.snp.makeConstraints { make in
+            make.top.equalTo(selfLabel.snp.bottom)
+            make.left.right.equalToSuperview()
+            make.height.equalTo((kScreenHei - kNavBtm - 120 - 140 - 25 - 32)/2)
+        }
+        line.snp.makeConstraints { make in
+            make.left.right.equalToSuperview().inset(36)
+            make.height.equalTo(1)
+            make.top.equalTo(selfTextView.snp.bottom).offset(12)
+        }
+        otherLabel.snp.makeConstraints { make in
+            make.height.equalTo(16)
+            make.left.right.equalToSuperview()
+            make.top.equalTo(line.snp.bottom).offset(12)
+        }
+        otherTextView.snp.makeConstraints { make in
+            make.height.equalTo(selfTextView)
+            make.left.right.equalToSuperview()
+            make.top.equalTo(otherLabel.snp.bottom)
+        }
+
+    }
+    override func setupData() {
+        JoyGemCallManager.shared().delegate = self
+        JoyGemCallManager.shared().stereoDelegate = self
+        if autoStart{
+            startRecord()
+        }
+    }
+    
+    override func viewDidAppear(_ animated: Bool) {
+        super.viewDidAppear(animated)
+        navigationController?.fd_fullscreenPopGestureRecognizer?.isEnabled = false
+    }
+    override func viewDidDisappear(_ animated: Bool) {
+        super.viewDidDisappear(animated)
+        navigationController?.fd_fullscreenPopGestureRecognizer?.isEnabled = true
+    }
+    override func navleftViewTapped() {
+        if toolBar.recordBtn.isSelected {
+            CustomAlert.showWith(title: "提示".l10n, messgage: "当前正在录音,确定放弃当前录音吗?".l10n, cancelCallback: {}) {[unowned self] in
+                self.rhythView.stopTimer()
+                JoyGemCallManager.shared().stop()
+                PcmSound.sharedInstance().stopAudioUnit()
+                PcmSound.sharedInstance().cleanup()
+                self.navigationController?.popViewController(animated: true)
+            }
+        }
+        else{
+            super.navleftViewTapped()
+        }
+    }
+    func startRecord(){
+        toolBar.recordBtnAction()
+    }
+    func stopRecord(){
+        toolBar.recordBtnAction()
+    }
+}
+
+extension StereoCallVC:FieldRecordBarDelegate{
+    func fieldRecordBar(_ bar: FieldRecordBar, languageChange language: AiSupportLanguage) {
+        JoyGemCallManager.shared().originalLanguage = language.value
+        AiLanguageCache.save(type: .thly, lan: language)
+    }
+    
+    func fieldRecordBar(_ bar: FieldRecordBar, stateChange state: RecordSate) {
+        if state == .start {
+            selfMessageList.removeAll()
+            otherMessageList.removeAll()
+            selfTextView.text = nil
+            otherTextView.text = nil
+            JoyGemCallManager.shared().start()
+            rhythView.startTimer()
+        }
+        else if state == .stop{
+            stopAction()
+        }
+    }
+    func stopAction(){
+        rhythView.stopTimer()
+        JoyGemCallManager.shared().stop()
+        toolBar.startAnimating()
+    }
+    func gotoDetail( fileName:String,wavPath:String,language:AiSupportLanguage){
+        let model = RecordDetailModel()
+        model.type = .phone
+        model.from = language
+        model.to = .english
+        model.name = fileName
+        model.path = wavPath
+        model.duration = YLToos.getDuration(model.path)
+        model.origin = "你:".l10n + "\n" + selfTextView.text + "\n\n" + "对方:".l10n + "\n" + otherTextView.text
+        model.translate = ""
+        App.shared.popPage(animated: false)
+        App.shared.goToPage(RecordDetailVC(record: model))
+    }
+}
+extension StereoCallVC : JoyGemCallManagerDelegate {
+    
+    func callManagerStopped(_ manager: JoyGemCallManager, reason code: JoyGemRecordStopCode) {
+        if (code == .actively) {
+            Logger.debug( "用户主动结束")
+        } else {
+            Logger.debug( "自动结束")
+            stopAction()
+        }
+    }
+    
+    func callManagerNotonCall(_ manager: JoyGemCallManager) {
+        YLprogressHUD.showAutoHiden("未处于通话状态".l10n)
+        rhythView.reset()
+        toolBar.recordBtn.isSelected = false
+        toolBar.leftItem.alpha = 1
+    }
+    
+    func callManager(_ manager: JoyGemCallManager, saveFile path: String) {
+        Logger.debug("path: \(path)")
+        recordFilePath = path
+        guard let path = recordFilePath,let wavPath = DCFolder.recordFileResave(srcPath: path) else{return}
+        let v = PopTextField()
+        v.show()
+        v.cancelTap = {
+            App.shared.popPage()
+        }
+        v.okTap = { [weak self]  text in
+            guard let self = self else{return}
+            gotoDetail(fileName: text, wavPath: wavPath, language: toolBar.leftItem.language)
+        }
+    }
+    
+    func callManager(_ manager: JoyGemCallManager, stateChange code: JoyGemStateCode) {
+        Logger.debug("code: \(code)")
+    }
+    
+    func callManager(_ manager: JoyGemCallManager, onError code: JoyGemErrorCode) {
+        
+    }
+}
+
+extension StereoCallVC:JoyGemCallStereoDelegate{
+    func callManager(_ manager: JoyGemCallManager, didUpdateStereoAsr model: JoyGemAsrModel, channel index: UInt) {
+        debugPrint("text: \(model.text),index: \(model.index)")
+        if (index == 1) {
+            let msg = self.selfMessageList.firstIndex (where: { (str,idx) in
+                return idx == model.index;
+            })
+            if (msg == nil) {
+                selfMessageList.append((model.text,model.index))
+            } else {
+                selfMessageList[msg!] = (model.text,model.index)
+            }
+            
+            selfTextView.text = selfMessageList.compactMap({ (str,idx) in
+                return str
+            }).joined(separator: "\n")
+            selfTextView.scrollToBottom()
+        } else if (index == 2) {
+            let msg = otherMessageList.firstIndex (where: { (str,idx) in
+                return idx == model.index;
+            })
+            if (msg == nil) {
+                otherMessageList.append((model.text,model.index))
+            } else {
+                otherMessageList[msg!] = (model.text,model.index)
+            }
+            
+            otherTextView.text = otherMessageList.compactMap({ (str,idx) in
+                return str
+            }).joined(separator: "\n")
+            otherTextView.scrollToBottom()
+        }
+    }
+    
+    func callManager(_ manager: JoyGemCallManager, stereoIntensity lists: [[NSNumber]], timestamp: TimeInterval) {
+//        selfIntensitiesView.intensities = lists[0].map{ num in
+//            num.doubleValue
+//        }
+//        otherIntensitiesView.intensities = lists[1].map{ num in
+//            num.doubleValue
+//        }
+    }
+    
+}
+
+fileprivate class DotLabel:BaseView{
+    let dot = UIView()
+    let label = UILabel()
+    
+    override func setupViews() {
+        addSubviews([dot,label])
+        dot.do { v in
+            v.yc.setCornerRadius(3)
+            v.backgroundColor = .hexString("#B9B9B9")
+        }
+        label.do { v in
+            v.font = .regular(12)
+        }
+    }
+    override func setupLayout() {
+        dot.snp.makeConstraints { make in
+            make.size.equalTo(6)
+            make.left.equalToSuperview().inset(18)
+            make.centerY.equalToSuperview()
+        }
+        label.snp.makeConstraints { make in
+            make.left.equalToSuperview().inset(28)
+            make.centerY.equalToSuperview()
+            make.right.equalToSuperview().inset(36)
+        }
+    }
+    
+}
index 1c9f657..93ab386 100644 (file)
@@ -22,14 +22,19 @@ class LoadingButton:UIButton{
     required init?(coder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    func startAnimating(finished:(()->Void)? = nil){
+//    func startAnimating(finished:(()->Void)? = nil){
+//        loading = true
+//        activeView.backgroundColor = .white
+//        activeView.startAnimating()
+//        DispatchQueue.main.asyncAfter(deadline:.now() + 3) {
+//            self.stopAnimating()
+//            finished?()
+//        }
+//    }
+    func startAnimating(){
         loading = true
         activeView.backgroundColor = .white
         activeView.startAnimating()
-        DispatchQueue.main.asyncAfter(deadline:.now() + 2) {
-            self.stopAnimating()
-            finished?()
-        }
     }
     func stopAnimating(){
         loading = false
index 7b4c6d0..cca0fea 100644 (file)
@@ -66,11 +66,6 @@ class PlaceHolderTextView: BaseView {
             make.edges.equalToSuperview()
         }
     }
-    
-    func scrollToBottom(){
-        let range = NSMakeRange(textView.text.count - 1, 1)
-        textView.scrollRangeToVisible(range)
-    }
 }
 class PlaceHolderTextView2: BaseView,UITextViewDelegate {
     let bgView = UIView()
index f180f87..4a069ee 100644 (file)
@@ -245,4 +245,7 @@ let arabicMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"يرجى التأكد من توصيل الجهاز الذكي بالطاقة وموضعه بالقرب من الهاتف المحمول",
     "重新扫描":"مسح مرة أخرى",
     "未发现设备":"لم يتم العثور على الجهاز",
+    "未处于通话状态":"ليست في حالة المكالمة",
+    "你":"أنت",
+    "对方":"الطرف الآخر",
 ]
index 6f887f0..d98e230 100644 (file)
@@ -245,4 +245,7 @@ let filipinoMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Siguraduhin na ang intelihenteng device ay nakakonekta sa kuryente, at nasa malapit sa cellphone",
     "重新扫描":"I-scan Muli",
     "未发现设备":"Walang Nahanap na Device",
+    "未处于通话状态":"Hindi nasa estado ng tawag",
+    "你":"Ikaw",
+    "对方":"Kontrahan",
 ]
index cc72936..6e508f1 100644 (file)
@@ -245,4 +245,7 @@ let germanMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Stellen Sie sicher, dass das intelligente Gerät angeschlossen ist und sich in der Nähe des Handys befindet",
     "重新扫描":"Erneut scannen",
     "未发现设备":"Kein Gerät gefunden",
+    "未处于通话状态":"Nicht in einem Anruf",
+    "你":"Du", // 日常交互场景用 "Du",正式场景可替换为 "Sie"
+    "对方":"Die andere Partei",
 ]
index e25306e..d7479f7 100644 (file)
@@ -246,4 +246,7 @@ let chineseTraditionalMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"請確保智能設備已連接電源,且位於手機附近",
     "重新扫描":"重新掃描",
     "未发现设备":"未發現設備",
+    "未处于通话状态":"未處於通話狀態",
+    "你":"你", // 繁体中文通用表述,若需更口语化可使用"你"(与简体一致,繁体书写无差异)
+    "对方":"對方",
 ]
index dcf3c0c..f6abf18 100644 (file)
@@ -245,4 +245,7 @@ let vietnameseMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Vui lòng đảm bảo thiết bị thông minh đã kết nối nguồn điện và nằm gần điện thoại",
     "重新扫描":"Quét lại",
     "未发现设备":"Không tìm thấy thiết bị",
+    "未处于通话状态":"Không trong trạng thái cuộc gọi",
+    "你":"Bạn",
+    "对方":"Đối phương",
 ]
index 226e270..69217e9 100644 (file)
@@ -247,5 +247,8 @@ let chineseMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"",
     "重新扫描":"",
     "未发现设备":"",
+    "未处于通话状态":"",
+    "你":"",
+    "对方":"",
 ]
 
index 0cf11c0..3a6818d 100644 (file)
@@ -246,4 +246,7 @@ let englishMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Please ensure the smart device is powered on and near the phone",
     "重新扫描":"Rescan",
     "未发现设备":"No device found",
+    "未处于通话状态":"Not in a call",
+    "你":"You",
+    "对方":"The other party",
 ]
index 896f7a4..0b84b20 100644 (file)
@@ -246,4 +246,7 @@ let frenchMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Veuillez vous assurer que l'appareil intelligent est branché et à proximité du téléphone",
     "重新扫描":"Rescanner",
     "未发现设备":"Aucun appareil trouvé",
+    "未处于通话状态":"Pas en appel",
+    "你":"Tu", // 日常交互场景用 "Tu",正式场景可替换为 "Vous"
+    "对方":"L'autre partie",
 ]
index 70bb0a2..1489054 100644 (file)
@@ -246,4 +246,7 @@ let indonesianMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Silakan pastikan perangkat cerdas terhubung ke daya dan berada di dekat ponsel",
     "重新扫描":"Scan Ulang",
     "未发现设备":"Perangkat Tidak Ditemukan",
+    "未处于通话状态":"Tidak dalam panggilan",
+    "你":"Kamu", // 日常交互场景,正式场景可替换为 "Anda"
+    "对方":"Pihak lain",
 ]
index b7b4f5f..7c74acb 100644 (file)
@@ -246,4 +246,7 @@ let japaneseMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"スマートデバイスが電源に接続され、携帯電話の近くにあることを確認してください",
     "重新扫描":"再スキャン",
     "未发现设备":"デバイスが見つかりません",
+    "未处于通话状态":"通話中ではない",
+    "你":"あなた",
+    "对方":"相手",
 ]
index 849e175..e77f58a 100644 (file)
@@ -246,4 +246,7 @@ let koreanMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"지능형 장치가 전원에 연결되어 있고 휴대폰 근처에 있는지 확인하세요",
     "重新扫描":"다시 스캔",
     "未发现设备":"장치를 찾을 수 없음",
+    "未处于通话状态":"통화 중이 아님",
+    "你":"당신",
+    "对方":"상대방",
 ]
index bebfc1e..983f80b 100644 (file)
@@ -245,4 +245,7 @@ let malayMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Sila pastikan peranti pintar disambungkan kepada kuasa dan berada berhampiran telefon",
     "重新扫描":"Scan Semula",
     "未发现设备":"Peranti Tidak Ditemui",
+    "未处于通话状态":"Tidak dalam panggilan",
+    "你":"Awak", // 日常交互场景,正式场景可替换为 "Anda"
+    "对方":"Pihak satu lagi",
 ]
index cf4aef1..b994b77 100644 (file)
@@ -246,4 +246,7 @@ let russianMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Пожалуйста, убедитесь, что интеллектуальное устройство подключено к электропитанию и находится поблизости от телефона",
     "重新扫描":"Повторное сканирование",
     "未发现设备":"Устройство не найдено",
+    "未处于通话状态":"Не в звонке",
+    "你":"Ты", // 日常交互场景,正式场景可替换为 "Вы"
+    "对方":"Другая сторона",
 ]
index 0c25836..d70555b 100644 (file)
@@ -245,4 +245,7 @@ let spanishMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"Por favor, asegúrate de que el dispositivo inteligente esté conectado a la fuente de energía y cerca del teléfono",
     "重新扫描":"Escanear nuevamente",
     "未发现设备":"No se encontró el dispositivo",
+    "未处于通话状态":"No en llamada",
+    "你":"Tú", // 日常交互场景用 "Tú",正式场景可替换为 "Usted"
+    "对方":"La otra parte",
 ]
index 042221b..4fd0998 100644 (file)
@@ -245,4 +245,7 @@ let thaiMap:[String:String] =
     "请确保智能设备已连接电源,且位于手机附近":"โปรดตรวจสอบให้แน่ใจว่าอุปกรณ์ชาญฉลาดเชื่อมต่อแหล่งจ่ายไฟ และอยู่ใกล้โทรศัพท์มือถือ",
     "重新扫描":"สแกนอีกครั้ง",
     "未发现设备":"ไม่พบอุปกรณ์",
+    "未处于通话状态":"ไม่อยู่ในสถานะการโทรศัพท์",
+    "你":"คุณ",
+    "对方":"ฝ่ายตรงข้าม",
 ]
index f9b7bb9..2251754 100644 (file)
@@ -6,13 +6,24 @@
        objectVersion = 77;
        objects = {
 
+/* Begin PBXBuildFile section */
+               3F3F136C2ED5A22E0038A1C8 /* StarburstSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F3F136B2ED5A22E0038A1C8 /* StarburstSdk.framework */; };
+               D73D7454A559775C8509DED8 /* Pods_DeepChordsSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D18BA322C9EA11864268108 /* Pods_DeepChordsSdk.framework */; };
+/* End PBXBuildFile section */
+
 /* Begin PBXFileReference section */
+               17B96CE5C2D98C0ADD6178A2 /* Pods-DeepChordsSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DeepChordsSdk.debug.xcconfig"; path = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.debug.xcconfig"; sourceTree = "<group>"; };
                3F3F01C92ED44F730038A1C8 /* DeepChordsSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+               3F3F136B2ED5A22E0038A1C8 /* StarburstSdk.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = StarburstSdk.framework; sourceTree = "<group>"; };
+               6EE04442B3D4D41107912962 /* Pods-DeepChordsSdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DeepChordsSdk.release.xcconfig"; path = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.release.xcconfig"; sourceTree = "<group>"; };
+               7D18BA322C9EA11864268108 /* Pods_DeepChordsSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFileSystemSynchronizedRootGroup section */
                3F3F01CB2ED44F730038A1C8 /* DeepChordsSdk */ = {
                        isa = PBXFileSystemSynchronizedRootGroup;
+                       exceptions = (
+                       );
                        path = DeepChordsSdk;
                        sourceTree = "<group>";
                };
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               3F3F136C2ED5A22E0038A1C8 /* StarburstSdk.framework in Frameworks */,
+                               D73D7454A559775C8509DED8 /* Pods_DeepChordsSdk.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+               307CE89A03DD9FBA70338107 /* Pods */ = {
+                       isa = PBXGroup;
+                       children = (
+                               17B96CE5C2D98C0ADD6178A2 /* Pods-DeepChordsSdk.debug.xcconfig */,
+                               6EE04442B3D4D41107912962 /* Pods-DeepChordsSdk.release.xcconfig */,
+                       );
+                       name = Pods;
+                       path = ../Pods;
+                       sourceTree = "<group>";
+               };
                3F3F01BF2ED44F730038A1C8 = {
                        isa = PBXGroup;
                        children = (
+                               3F3F136B2ED5A22E0038A1C8 /* StarburstSdk.framework */,
                                3F3F01CB2ED44F730038A1C8 /* DeepChordsSdk */,
                                3F3F01CA2ED44F730038A1C8 /* Products */,
+                               307CE89A03DD9FBA70338107 /* Pods */,
+                               4BB8E763A1CE0D92C14AFAA9 /* Frameworks */,
                        );
                        sourceTree = "<group>";
                };
                        name = Products;
                        sourceTree = "<group>";
                };
+               4BB8E763A1CE0D92C14AFAA9 /* Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7D18BA322C9EA11864268108 /* Pods_DeepChordsSdk.framework */,
+                       );
+                       name = Frameworks;
+                       sourceTree = "<group>";
+               };
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
@@ -62,6 +96,7 @@
                        isa = PBXNativeTarget;
                        buildConfigurationList = 3F3F01D02ED44F730038A1C8 /* Build configuration list for PBXNativeTarget "DeepChordsSdk" */;
                        buildPhases = (
+                               462F2EA8BC431272853A0953 /* [CP] Check Pods Manifest.lock */,
                                3F3F01C42ED44F730038A1C8 /* Headers */,
                                3F3F01C52ED44F730038A1C8 /* Sources */,
                                3F3F01C62ED44F730038A1C8 /* Frameworks */,
                                3F3F01CB2ED44F730038A1C8 /* DeepChordsSdk */,
                        );
                        name = DeepChordsSdk;
-                       packageProductDependencies = (
-                       );
                        productName = DeepChordsSdk;
                        productReference = 3F3F01C92ED44F730038A1C8 /* DeepChordsSdk.framework */;
                        productType = "com.apple.product-type.framework";
                };
 /* End PBXResourcesBuildPhase section */
 
+/* Begin PBXShellScriptBuildPhase section */
+               462F2EA8BC431272853A0953 /* [CP] Check Pods Manifest.lock */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                               "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+                               "${PODS_ROOT}/Manifest.lock",
+                       );
+                       name = "[CP] Check Pods Manifest.lock";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                               "$(DERIVED_FILE_DIR)/Pods-DeepChordsSdk-checkManifestLockResult.txt",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+                       showEnvVarsInLog = 0;
+               };
+/* End PBXShellScriptBuildPhase section */
+
 /* Begin PBXSourcesBuildPhase section */
                3F3F01C52ED44F730038A1C8 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                };
                3F3F01D12ED44F730038A1C8 /* Debug */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 17B96CE5C2D98C0ADD6178A2 /* Pods-DeepChordsSdk.debug.xcconfig */;
                        buildSettings = {
                                BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
                                CODE_SIGN_STYLE = Automatic;
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = YES;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                                       "$(PROJECT_DIR)",
+                               );
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_KEY_NSHumanReadableCopyright = "";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                };
                3F3F01D22ED44F730038A1C8 /* Release */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 6EE04442B3D4D41107912962 /* Pods-DeepChordsSdk.release.xcconfig */;
                        buildSettings = {
                                BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
                                CODE_SIGN_STYLE = Automatic;
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = YES;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                                       "$(PROJECT_DIR)",
+                               );
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_KEY_NSHumanReadableCopyright = "";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
index b2cf2d2..c999b27 100644 (file)
@@ -20,6 +20,12 @@ public class DCBleManager{
             connectPeripheral.writeValue(sender.data, for: writeCha, type:.withoutResponse)
         }
     }
+    func sendToStarburst(_ data:Data){
+        if let connectPeripheral = connectPeripheral, let writeCha = writeCha {
+            Logger.debug("发送数据 = ",writeCha.uuid.uuidString,data.joined())
+            connectPeripheral.writeValue(data, for: writeCha, type:.withoutResponse)
+        }
+    }
 }
 
 public extension DCBleManager{
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/DeepChordsSdk/DeepChordsSdk/DeepChordsAiSdk.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/DeepChordsSdk/DeepChordsSdk/DeepChordsAiSdk.swift
new file mode 100644 (file)
index 0000000..0586f1c
--- /dev/null
@@ -0,0 +1,68 @@
+//
+//  DeepChords.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+import Foundation
+import StarburstSdk
+public class DeepChordsAiSdk{
+    public static let shared = DeepChordsAiSdk()
+    
+    
+    
+    public func initSDK(){
+//        StarburstConfig.shared().switch(to: .ble)
+//        StarburstConfig.shared().appId =  "app_ro4n4nwljr20kwqo"
+//        //MARK: 配置缓存路径
+//        StarburstConfig.shared().sdkFolder = NSTemporaryDirectory()
+//        StarburstConfig.shared().isDebug = true
+//        StarburstConfig.shared().enableTextSyncToDevice = true
+//        StarburstConfig.shared().enableEmotionSyncToDevice = true
+//        StarburstConfig.shared().enableEarbudsSwitchSync = true
+        
+        //切换sdk
+        StarburstConfig.shared().switch(to: .ble)
+        //设置appid
+        StarburstConfig.shared().appId = "app_ro4n4nwljr20kwqo"
+        //debug模式会打印日志
+        StarburstConfig.shared().isDebug = true
+        // sdk缓存路径
+        StarburstConfig.shared().sdkFolder = NSHomeDirectory() + "/Documents/AiSdk"
+        // 日志路径
+        StarburstConfig.shared().logPath = logPath()
+        //        //是否下发文字到耳机仓
+        //        StarburstConfig.shared().enableTextSyncToDevice = true;
+        //        //主从耳机切换是否同步sdk信息到耳机
+        //        StarburstConfig.shared().enableEarbudsSwitchSync = true;
+        //        //耳机仓表情下发开关
+        //        StarburstConfig.shared().enableEmotionSyncToDevice = true;
+        //添加调试信息
+        StarburstConfig.shared().debugInfo = [
+            "x-use-ppe":"1",
+            "x-tt-env": "ppe_tischarge_test",
+        ]
+        // voicechat配置
+        StarburstConfig.shared().user_custom_prompt_init = "1.用户位置在上海市杨浦区。2.用户名称叫小明。"
+        
+        StarburstSdk.shared().authCallback = {[weak self] (code,msg) in
+            
+        }
+        //sdk发给蓝牙设备
+        StarburstSdk.shared().sendToBleCallback = {data in
+            guard let data = data else {return}
+            DCBleManager.shared.sendToStarburst(data)
+        }
+        StarburstSdk.shared().bleRecordStateCallback = {[weak self] state in
+            
+        }
+    }
+    
+    func logPath()->String{
+        let format = DateFormatter()
+        format.dateFormat = "yyyyMMddHHmmss"
+        let text = format.string(from: Date())
+        return NSHomeDirectory() + "/Documents/\(text).log"
+    }
+    
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Any.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Any.swift
new file mode 100644 (file)
index 0000000..9ecfd13
--- /dev/null
@@ -0,0 +1,194 @@
+//
+//  Untitled.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+
+import Foundation
+
+/// 判断可选类型是否为 nil
+func isNil(_ any: Any?) -> Bool {
+    switch any {
+    case .none: return true
+    case .some: return false
+    }
+}
+
+/// 判断可选类型是否有值
+func isValue(_ any: Any?) -> Bool {
+    return isNil(any) == false
+}
+
+/// for Array
+func isEmpty(_ value: [Any]?) -> Bool {
+    return isNil(value) || value!.count == 0
+}
+
+/// for Array
+func isNotEmpty(_ value: [Any]?) -> Bool {
+    return isEmpty(value) == false
+}
+
+/// for Dictionary
+func isEmpty(_ value: [AnyHashable: Any]?) -> Bool {
+    return isNil(value) || value!.count == 0
+}
+
+/// for Dictionary
+func isNotEmpty(_ value: [AnyHashable: Any]?) -> Bool {
+    return isEmpty(value) == false
+}
+
+/// for String
+func isEmpty(_ value: String?) -> Bool {
+    return isNil(value) || value!.count == 0
+}
+
+/// for String
+func isNotEmpty(_ value: String?) -> Bool {
+    return isEmpty(value) == false
+}
+
+public extension String {
+    
+    /// 补足8位(长度为8的整数倍)
+    var binary: String {
+        let bytes = (Double(count) / 8.0).upInt
+        let offset = bytes * 8 - count
+        let prefix = Array(repeating: "0", count: offset).joined()
+        return prefix + self
+    }
+}
+
+public extension Double {
+    var upInt: Int { Int(ceil(self)) }
+}
+
+public extension Int {
+    private static let binaryPack = 0b11111111
+    
+    /// convert to data with byte (max is 4294967295)
+    ///
+    /// 低位 --> 高位
+    var bytes: [UInt8] {
+        var mutatingSelf = self
+        var bytes = [UInt8(mutatingSelf & Self.binaryPack)]
+        
+        var count = 1
+        mutatingSelf = mutatingSelf >> (count * 8)
+        while mutatingSelf > 0 {
+            bytes.append(UInt8(mutatingSelf & Self.binaryPack))
+            mutatingSelf = mutatingSelf >> (count * 8)
+            count = count + 1
+        }
+        return bytes
+    }
+    
+    /// convert to data with 1 byte
+    var byte: UInt8 {
+        UInt8(self & Self.binaryPack)
+    }
+    
+    /// convert to data with 2 byte
+    ///
+    /// 低位 --> 高位
+    var byte2: [UInt8] {
+        [
+            UInt8(self & Self.binaryPack),
+            UInt8(self >> 8 & Self.binaryPack)
+        ]
+    }
+    
+    /// convert to data with 3 byte
+    ///
+    /// 低位 --> 高位
+    var byte3: [UInt8] {
+        [
+            UInt8(self & Self.binaryPack),
+            UInt8(self >> 8 & Self.binaryPack),
+            UInt8(self >> 16 & Self.binaryPack)
+        ]
+    }
+    
+    /// convert to data with 4 byte
+    ///
+    /// 低位 --> 高位
+    var byte4: [UInt8] {
+        [
+            UInt8(self & Self.binaryPack),
+            UInt8(self >> 8 & Self.binaryPack),
+            UInt8(self >> 16 & Self.binaryPack),
+            UInt8(self >> 24 & Self.binaryPack)
+        ]
+    }
+}
+
+public extension BinaryInteger {
+    
+    /// e.g. 0000100110010101
+    var binaryString: String {
+        .init(self, radix: 2).binary
+    }
+}
+
+public extension Array where Element == UInt8 {
+    
+    var int: Int {
+        self
+            .map { Int($0) }
+            .enumerated()
+            .map { $1 << ($0 * 8) }
+            .reduce(0, { partialResult, value in
+                partialResult | value
+            })
+    }
+    
+    var data: Data { Data(self) }
+}
+
+public extension Data {
+    
+    func joined(format: String = "%02x", _ separator: String = "") -> String {
+        self
+            .map { String(format: format, $0) }
+            .joined(separator: separator)
+    }
+    
+    func reversedJoined(format: String = "%02x", _ separator: String = "") -> String {
+        self
+            .map { String(format: format, $0) }
+            .reversed()
+            .joined(separator: separator)
+    }
+    
+    var int: Int {
+        self
+            .map { Int($0) }
+            .enumerated()
+            .map { $1 << ($0 * 8) }
+            .reduce(0, { partialResult, value in
+                partialResult | value
+            })
+    }
+    
+}
+
+public extension UInt8 {
+    var int: Int { Int(self) }
+}
+
+
+extension Data{
+    var float: Float {
+        var floatValue: Float = 0.0
+        let size = MemoryLayout<Float>.size
+        guard self.count >= size else { return 0 }
+        
+        self.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) -> Void in
+            _ = memcpy(&floatValue, buffer.baseAddress!, size)
+        }
+        
+        return floatValue
+    }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/BleSender.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/BleSender.swift
new file mode 100644 (file)
index 0000000..d39a40d
--- /dev/null
@@ -0,0 +1,125 @@
+//
+//  BleSender.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+
+import Foundation
+
+class BleSender{
+    var completion: DCCompletionHandler!
+    var data = Data()
+    
+    static var all: [BleSender] = []
+    
+    init() {
+        Self.all.append(self)
+        startTimer()
+    }
+    var timer: Timer?
+    func startTimer() {
+        deinitTimer()
+        
+        self.timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: false, block: { [unowned self] _ in
+            deinitTimer()
+            self.completion?(.response.code(.timeout))
+            self.remove()
+        })
+    }
+    
+    @discardableResult
+    func deinitTimer() ->Self{
+        guard let _ = self.timer else { return self}
+        self.timer?.invalidate()
+        self.timer = nil
+        //        Logger.log("销毁定时器")
+        return self
+    }
+    
+    /// 从缓存实例集合中移除该实例
+    func remove() {
+        Self.all.removeAll { $0 === self }
+    }
+    
+    func isAnswer(_ receiveData:Data)->Bool{
+        if data.count < 3{
+            return false
+        }
+        if receiveData[1] == data[1] {
+            return true
+        }
+        return false
+    }
+    
+    static func answer(_ data: Data) -> BleSender? {
+        if data.count < 3{
+            return nil
+        }
+        for item in Self.all {
+            if item.isAnswer(data) {
+                return item
+            }
+        }
+        return nil
+    }
+}
+
+public typealias DCCompletionHandler = (_ result: DCResponse) -> Void
+
+/// 状态码
+public enum DCCode: Int,CustomStringConvertible {
+    
+    public var description: String{
+        return "MSCode(rawValue:\(rawValue), message:\(message))"
+    }
+    
+    /// 操作成功
+    case success = 1000
+    /// 操作失败
+    case failure = 1001
+    /// 请求超时
+    case timeout = 1004
+    /// 未知错误
+    case unknow = 1005
+    
+    var message:String{
+        switch self {
+        case .failure:
+            return "失败"
+        case .success:
+            return "成功"
+        case .timeout:
+            return "超时"
+        default:
+            return "未知错误"
+        }
+    }
+}
+
+public class DCResponse {
+    public private(set) var code: DCCode = .success
+    public private(set) var data: Data = Data()
+    static var response: DCResponse { DCResponse() }
+    
+    
+    var isSuccess:Bool{
+        return code == .success
+    }
+    
+    public var description: String{
+        return code.description + "data = " +  data.joined()
+    }
+    
+    @discardableResult
+    func code(_ value: DCCode) -> Self {
+        code = value
+        return self
+    }
+    
+    @discardableResult
+    func value(_ value: Data) -> Self {
+        self.data = value
+        return self
+    }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCBleManager.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCBleManager.swift
new file mode 100644 (file)
index 0000000..d771e89
--- /dev/null
@@ -0,0 +1,85 @@
+//
+//  Untitled.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+
+import Foundation
+import CoreBluetooth
+import StarburstSdk
+
+public class DCBleManager{
+    
+    public static let shared = DCBleManager()
+    private var connectPeripheral: CBPeripheral?
+    private var writeCha: CBCharacteristic?
+
+    func send(_ sender:BleSender){
+        if let connectPeripheral = connectPeripheral, let writeCha = writeCha {
+            Logger.debug("发送数据 = ",writeCha.uuid.uuidString,sender.data.joined())
+            connectPeripheral.writeValue(sender.data, for: writeCha, type:.withoutResponse)
+        }
+    }
+    func sendToStarburst(_ data:Data){
+        var full = Data.dataWithHexString("BA0D")
+        full.append(data)
+        if let connectPeripheral = connectPeripheral, let writeCha = writeCha {
+            Logger.debug("发送数据 = ",writeCha.uuid.uuidString,full.joined())
+            connectPeripheral.writeValue(full, for: writeCha, type:.withoutResponse)
+        }
+    }
+}
+
+public extension DCBleManager{
+    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
+        Logger.debug("蓝牙已连接 \(peripheral)")
+        connectPeripheral = peripheral
+    }
+    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
+        Logger.debug("peripheral: %@ failed to connect", peripheral)
+    }
+    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
+        Logger.debug("蓝牙已断开 \(peripheral)")
+        StarburstSdk.shared().bleDisConnected()
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
+        Logger.debug("发现服务成功")
+        for service in peripheral.services! {
+            Logger.debug("peripheral service: %@", service)
+            peripheral.discoverCharacteristics(nil, for: service)
+        }
+
+    }
+    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
+        if let list = service.characteristics{
+            Logger.debug("发现特征",list)
+            for char in  list{
+                Logger.debug(char)
+                peripheral.setNotifyValue(true, for: char)
+                if char.uuid.uuidString == "AE03" {
+                    writeCha = char
+                    StarburstSdk.shared().bleConnected()
+                }
+            }
+        }
+    }
+    
+    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
+        Logger.debug("收到数据 ===UUID",characteristic.uuid,characteristic.value?.joined() ?? "")
+        guard let data = characteristic.value else { return  }
+        
+        if let sender = BleSender.answer(data) {
+            sender.completion?(.response.code(.success).value(data))
+            sender.deinitTimer()
+            sender.remove()
+            return
+        }
+        else if data[1] == 0x0D{
+            let subData = data.subdata(in: 2..<data.count)
+            Logger.debug("字节数据",subData.joined())
+            StarburstSdk.shared().receiveBleData(data)
+        }
+    }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCDevice.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCDevice.swift
new file mode 100644 (file)
index 0000000..7b32f46
--- /dev/null
@@ -0,0 +1,73 @@
+//
+//  DCDevice.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+
+import Foundation
+
+public class DCDevice{
+    public static let shared = DCDevice()
+
+    public func getBatery(finished:@escaping ((Int,Int)?)->Void){
+        var data = Data.dataWithHexString("BA090000")
+        data.addCrc()
+
+        let sender = BleSender()
+        sender.data = data
+        sender.completion = { result in
+            Logger.debug("\(result.description)")
+            if result.isSuccess{
+                let leftValue = result.data[3].int
+                let rightValue = result.data[5].int
+                Logger.debug(leftValue,rightValue)
+                finished((leftValue,rightValue))
+            }
+            else{
+                finished(nil)
+            }
+        }
+        DCBleManager.shared.send(sender)
+    }
+    public func getSoftVersion(finished:@escaping (String?)->Void){
+        var data = Data.dataWithHexString("BA0A0001")
+        data.addCrc()
+        
+        let sender = BleSender()
+        sender.data = data
+        sender.completion = { result in
+            Logger.debug("\(result.description)")
+            if result.isSuccess{
+                let data = result.data[2...6]
+                let text = String(data: data, encoding:.utf8)
+                Logger.debug(text)
+                finished((text))
+            }
+            else{
+                finished(nil)
+            }
+        }
+        DCBleManager.shared.send(sender)
+    }
+    public func getHardVersion(finished:@escaping (String?)->Void){
+        var data = Data.dataWithHexString("BA0A0101")
+        data.addCrc()
+        
+        let sender = BleSender()
+        sender.data = data
+        sender.completion = { result in
+            Logger.debug("\(result.description)")
+            if result.isSuccess{
+                let data = result.data[2...6]
+                let text = String(data: data, encoding:.utf8)
+                Logger.debug(text)
+                finished((text))
+            }
+            else{
+                finished(nil)
+            }
+        }
+        DCBleManager.shared.send(sender)
+    }
+}
@@ -7,21 +7,7 @@
 import Foundation
 
 extension Data {
-    var bytes: UnsafePointer<UInt8> {
-        return self.withUnsafeBytes { $0.bindMemory(to: UInt8.self).baseAddress! }
-    }
-    func joined(format: String = "%02x", _ separator: String = "") -> String {
-        self
-            .map { String(format: format, $0) }
-            .joined(separator: separator)
-    }
-    
-    func reversedJoined(format: String = "%02x", _ separator: String = "") -> String {
-        self
-            .map { String(format: format, $0) }
-            .reversed()
-            .joined(separator: separator)
-    }
+
     
     static func dataWithHexString(_ hexStr: String) -> Data {
         let hexStrWithoutSpaces = hexStr.replacingOccurrences(of: " ", with: "")
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DeepChordsAiSdk.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DeepChordsAiSdk.swift
new file mode 100644 (file)
index 0000000..59382e1
--- /dev/null
@@ -0,0 +1,67 @@
+//
+//  DeepChords.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+import Foundation
+import StarburstSdk
+public class DeepChordsAiSdk{
+    public static let shared = DeepChordsAiSdk()
+    
+    
+    
+    public func initSDK(){
+        StarburstConfig.shared().switch(to: .ble)
+        StarburstConfig.shared().appId =  "app_ro4n4nwljr20kwqo"
+        //MARK: 配置缓存路径
+        StarburstConfig.shared().sdkFolder = NSTemporaryDirectory()
+        StarburstConfig.shared().isDebug = true
+        StarburstConfig.shared().enableTextSyncToDevice = true
+        StarburstConfig.shared().enableEmotionSyncToDevice = true
+        StarburstConfig.shared().enableEarbudsSwitchSync = true
+        
+        StarburstConfig.shared().switch(to: .ble)
+        //设置appid
+        StarburstConfig.shared().appId = "app_ro4n4nwljr20kwqo"
+        //debug模式会打印日志
+        StarburstConfig.shared().isDebug = true
+        // sdk缓存路径
+        StarburstConfig.shared().sdkFolder = NSHomeDirectory() + "/Documents/AiSdk"
+        // 日志路径
+        StarburstConfig.shared().logPath = logPath()
+        //        //是否下发文字到耳机仓
+        //        StarburstConfig.shared().enableTextSyncToDevice = true;
+        //        //主从耳机切换是否同步sdk信息到耳机
+        //        StarburstConfig.shared().enableEarbudsSwitchSync = true;
+        //        //耳机仓表情下发开关
+        //        StarburstConfig.shared().enableEmotionSyncToDevice = true;
+        //添加调试信息
+        StarburstConfig.shared().debugInfo = [
+            "x-use-ppe":"1",
+            "x-tt-env": "ppe_tischarge_test",
+        ]
+        // voicechat配置
+        StarburstConfig.shared().user_custom_prompt_init = "1.用户位置在上海市杨浦区。2.用户名称叫小明。"
+        
+        StarburstSdk.shared().authCallback = {[weak self] (code,msg) in
+            
+        }
+        //sdk发给蓝牙设备
+        StarburstSdk.shared().sendToBleCallback = {data in
+            guard let data = data else {return}
+            DCBleManager.shared.sendToStarburst(data)
+        }
+        StarburstSdk.shared().bleRecordStateCallback = {[weak self] state in
+            
+        }
+    }
+    
+    func logPath()->String{
+        let format = DateFormatter()
+        format.dateFormat = "yyyyMMddHHmmss"
+        let text = format.string(from: Date())
+        return NSHomeDirectory() + "/Documents/\(text).log"
+    }
+    
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DeepChordsSdk.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DeepChordsSdk.swift
new file mode 100644 (file)
index 0000000..7c4aefc
--- /dev/null
@@ -0,0 +1,9 @@
+//
+//  DeepChordsSdk.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/24.
+//
+
+import Foundation
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Demo.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/Demo.swift
new file mode 100644 (file)
index 0000000..68abb80
--- /dev/null
@@ -0,0 +1,14 @@
+//
+//  Demo.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/24.
+//
+
+import UIKit
+
+public class DeepChordsSdkDemo{
+    static public func log(){
+        print("1111")
+    }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/LogManager.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/LogManager.swift
new file mode 100644 (file)
index 0000000..2a6c991
--- /dev/null
@@ -0,0 +1,64 @@
+//
+//  LogManager.swift
+//  Example
+//
+//  Created by liangshi on 2025/11/24.
+//
+
+import Foundation
+
+/// 日记管理
+public class Logger {
+    static var isDebug: Bool = true
+    
+    fileprivate static let shared = Logger()
+    private var fileHandle:FileHandle?
+    private init() {
+        let path = getPath()
+        fileHandle = FileHandle(forWritingAtPath: path)!
+        //fileHandle?.seekToEndOfFile()
+    }
+    
+    fileprivate var dateString: String { Date().format(.full) }
+    
+    public static var logs: [String] = []
+    
+    
+    private func getPath()->String{
+        let foldPath = NSHomeDirectory() + "/Documents/"
+        let fileManager = FileManager.default
+        if !fileManager.fileExists(atPath: foldPath) {
+            do {
+                try FileManager.default.createDirectory(atPath: foldPath, withIntermediateDirectories: true, attributes: nil)
+            } catch {
+                return ""
+            }
+        }
+        let path = foldPath + "Example_\(Date().format(.middle)).log"
+        if !FileManager.default.fileExists(atPath: path) {
+            FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)
+            
+        }
+        return path
+    }
+}
+
+extension Logger {
+    public static func debug(_ logs: Any..., line: Int = #line, separator: String = " ", terminator: String = "\n") {
+        objc_sync_enter(Logger.shared)
+        if Logger.isDebug {
+            print(Logger.shared.dateString, terminator: " [DeepChordsSdk-\(String(format: "%03d", line))]: ")
+            print(logs, separator: separator, terminator: terminator)
+            let logString = Logger.shared.dateString + " [DeepChordsSdk-\(String(format: "%03d", line))]: " + logs.map({ "\($0)" }).joined(separator: separator) + terminator
+            Self.logs.append(logString)
+            Logger.shared.saveLog(log: logString)
+        }
+        objc_sync_exit(Logger.shared)
+        
+        
+    }
+    
+    private func saveLog(log:String){
+        fileHandle?.write(log.data(using: .utf8)!)
+    }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/ReceiveManager.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/ReceiveManager.swift
new file mode 100644 (file)
index 0000000..e482cd6
--- /dev/null
@@ -0,0 +1,15 @@
+//
+//  ReceiveManager.swift
+//  DeepChordsSdk
+//
+//  Created by liangshi on 2025/11/25.
+//
+import Foundation
+
+class ReceiveManager{
+    
+    
+    static func receiveData(_ data:Data){
+        
+    }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarbaustVoiceChatModel.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarbaustVoiceChatModel.h
new file mode 100644 (file)
index 0000000..1b1e33e
--- /dev/null
@@ -0,0 +1,28 @@
+//
+//  StarbaustVoiceChatModel.h
+//  StarburstSdk
+//
+//  Created by incar on 2024/11/22.
+//
+
+#import <Foundation/Foundation.h>
+#import <StarburstSdk/StarburstAsrModel.h>
+
+@interface StarbaustVoiceChatModel : NSObject
+@property (nonatomic, assign) NSInteger code;/// 状态码,200成功
+@property (nonatomic, strong) NSString *msg;/// 提示语
+@property (nonatomic, strong) NSString *requestId;/// 请求id
+@property (nonatomic, assign) NSInteger dialogId;/// 对话id
+@property (nonatomic, strong) NSString *textResult;/// 语⾳识别结果⽚段内容
+@property (nonatomic, strong) NSString *responseText;/// 响应结果⽚段内容
+@property (nonatomic, strong) NSString *intent;/// 意图
+@property (nonatomic, assign) NSInteger sequence;/// 响应的编号
+@property (nonatomic, assign) BOOL definite;/// 语⾳识别结果⽚段是否已确定,后序不会有变化
+@property (nonatomic, assign) NSInteger definiteIndex;/// 已确定的识别结果序列号
+//@property (nonatomic, assign) NSInteger conversationIndex;/// 已确定的响应结果序列号
+@property (nonatomic, assign) BOOL conversationFinish;/// 对话是否结束
+@property (nonatomic, strong) StarburstTranslateResult *translateResult;///翻译结果
+@property (nonatomic, strong) StarburstAsrTtsResult *ttsResult;///tts音频流
+
+@end
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrConfig.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrConfig.h
new file mode 100644 (file)
index 0000000..70275c1
--- /dev/null
@@ -0,0 +1,66 @@
+//
+//  StarburstAsrConfig.h
+//  StarburstSdk
+//
+//  Created by incar on 2024/9/14.
+//
+
+#import <Foundation/Foundation.h>
+
+//语言
+//简体中文 zh-CN
+//四川话 sc
+//粤语 cant
+//上海话 zh_shanghai
+//英文  en-US
+//日语 ja-JP
+//韩语 ko-KR
+//法语 fr-FR
+//西班牙语 es-MX
+//葡萄牙语 pt-BR
+//印尼语 id-ID
+//俄语 ru-RU
+//马来语 ms-MY
+
+/// voice chat配置
+@interface StarburstVoiceChatConfig : NSObject
+@property (nonatomic, strong) NSString *role;/// 对话⻆⾊设定;默认为⽆特⾊的智能助⼿
+//@property (nonatomic, assign) int channel;/// 默认为1,只⽀持1:单声道、2:双声道
+@property (nonatomic, strong) NSString *language;/// 语⾔编码,默认为普通话(zh-CN)
+@property (nonatomic, assign) BOOL tts;/// 是否进⾏Tts,默认false
+@property (nonatomic, strong) NSString *ttsAudioFormat;/// 默认pcm。⽀持pcm / ogg_opus / mp3
+@property (nonatomic, strong) NSString *ttsSpeakerType;/// tts声⾊类型,仅当传"clone"时,ttsSpeaker为单⾊克隆⽣成的speakerId
+@property (nonatomic, strong) NSString *ttsSpeakerId;/// tts声⾊设置,默认使⽤“⾃然⼥声”
+@end
+
+/// 手机录音asr配置
+@interface StarburstAsrConfig : NSObject
+@property (nonatomic, assign) BOOL isTranslate;/// 是否翻译,默认false。如果为true翻译源语言和目标语言不能是同一种语言
+@property (nonatomic, strong) NSString *fromLanguage;/// 语⾔编码,默认为普通话(zh-CN),auto_lang自动识别
+@property (nonatomic, strong) NSString *toLanguage;/// ⽬标语⾔编码,默认为英语(en-US),auto_lang自动识别
+@property (nonatomic, assign) BOOL isTTs;/// 是否进⾏Tts,默认false
+@property (nonatomic, strong) NSString *ttsFormat;/// 默认pcm ⽀持pcm / ogg_opus / mp3
+@property (nonatomic, strong) NSString *ttsType;/// 默认只⽀持"stream",
+@property (nonatomic, strong) NSString *ttsSpeaker;/// tts声⾊设置
+@end
+
+/// 蓝牙耳机录音asr配置
+@interface StarburstBleAsrConfig : NSObject
+@property (nonatomic, assign) NSInteger type;/// 0x00实时录音,0x0c通话录音,其他待定
+@end
+
+/// 文件/文本asr配置
+@interface StarburstAsrFileConfig : NSObject
+@property (nonatomic, assign) BOOL isTranslate;/// 是否翻译,默认false
+@property (nonatomic, strong) NSString *fromLanguage;/// 语⾔编码
+@property (nonatomic, strong) NSString *toLanguage;/// ⽬标语⾔编码
+@property (nonatomic, assign) BOOL summary;/// 是否进行总结,默认false
+@property (nonatomic, assign) BOOL speakerSplit;/// 是否区分说话人,默认false
+@end
+
+
+/// 翻译配置
+@interface StarburstTslConfig : NSObject
+@property (nonatomic, strong) NSString *fromLanguage;/// 语⾔编码
+@property (nonatomic, strong) NSString *toLanguage;/// ⽬标语⾔编码
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrModel.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrModel.h
new file mode 100644 (file)
index 0000000..e09478f
--- /dev/null
@@ -0,0 +1,40 @@
+//
+//  StarburstAsrModel.h
+//  StarburstSdk
+//
+//  Created by incar on 2024/9/13.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 翻译结果
+@interface StarburstTranslateResult : NSObject
+@property (nonatomic, strong) NSString *text;/// 语⾳识别后翻译的结果⽚段
+@property (nonatomic, assign) BOOL definite;/// 当前翻译⽚段是否确定
+@property (nonatomic, assign) int definiteIndex;/// 已翻译⽚段序号
+@end
+
+/// tts音频流
+@interface StarburstAsrTtsResult : NSObject
+@property (nonatomic, assign) NSInteger index;/// 音频数据⽚段的序号
+@property (nonatomic, assign) NSInteger translateIndex;/// 翻译的序号
+@property (nonatomic, strong) NSString *streamPiece;/// 音频流
+@end
+
+
+/// 识别结果
+@interface StarburstAsrModel : NSObject
+@property (nonatomic, assign) NSInteger channel;/// 0非立体声,1左声道,2右声道
+@property (nonatomic, assign) NSInteger code;/// 状态码
+@property (nonatomic, strong) NSString *msg;/// 提示语
+@property (nonatomic, strong) NSString *requestId;/// 请求id
+@property (nonatomic, strong) NSString *textResult;/// 语⾳识别结果⽚段内容
+@property (nonatomic, assign) NSInteger sequence;/// 响应的编号
+@property (nonatomic, assign) BOOL definite;/// 语⾳识别结果⽚段是否已确定,后序不会有变化
+@property (nonatomic, assign) NSInteger definiteIndex;/// 已确定的识别结果序列号
+@property (nonatomic, strong) StarburstTranslateResult *translateResult;///翻译结果
+@property (nonatomic, strong) StarburstAsrTtsResult *ttsResult;///tts音频流
+
++ (StarburstAsrModel *)modelWith:(NSDictionary *)dict;
+@end
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstConfig.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstConfig.h
new file mode 100644 (file)
index 0000000..9b4dd0a
--- /dev/null
@@ -0,0 +1,42 @@
+//
+//  StarburstConfig.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2025/6/18.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef NS_OPTIONS(NSInteger,StarburstSdkType) {
+    StarburstSdkType_Ble = 1,/// 设备鉴权+设备拾音
+    StarburstSdkType_Phone = 2,/// 账号鉴权+手机拾音
+    StarburstSdkType_Mix = 3,/// 设备鉴权+手机拾音
+    StarburstSdkType_Glasses_Ble = 4,/// 眼镜板+设备鉴权
+    StarburstSdkType_Glasses_Account = 5,/// 眼镜板+账号鉴权
+};
+
+
+@interface StarburstConfig : NSObject
+@property (nonatomic, readonly)NSString *logs;/// 获取日志
+@property (nonatomic, strong)void (^logCallback)(NSString *log);/// 日志输出回调
+@property (nonatomic, assign)BOOL isDebug;/// 是否打印日志,默认false
+@property (nonatomic, strong)NSString *logPath;/// 日志路径,不设置不保存日志
+@property (nonatomic, strong)NSString *sdkFolder;/// sdk路径,可以自定义
+@property (nonatomic, strong)NSDictionary *debugInfo;/// 调试信息
+@property (nonatomic, strong)NSString *user_custom_prompt_init;/// voicechat配置
+
+@property (nonatomic, assign)BOOL enableEarbudsSwitchSync;/// 主从耳机切换是否同步sdk信息到耳机,默认false
+@property (nonatomic, assign)BOOL enableTextSyncToDevice;/// 是否下发文字到耳机仓,默认false
+@property (nonatomic, assign)BOOL enableEmotionSyncToDevice;/// 耳机仓表情下发开关,默认false
+@property (nonatomic, assign)NSInteger callRecordChannel;/// 通话录音声道数。1:单声道 ;2:⽴体声;默认单声道
+//enableExternalOpusDecoder
+@property (nonatomic, strong)NSString *appId;/// 分配的id
+@property (nonatomic, readonly)StarburstSdkType sdkType;/// sdk类型
+
+/// 单利
++ (instancetype)shared;
+
+/// 切换sdk
+- (void)switchTo:(StarburstSdkType)type;
+@end
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstFileAsrModel.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstFileAsrModel.h
new file mode 100644 (file)
index 0000000..b409f7b
--- /dev/null
@@ -0,0 +1,36 @@
+//
+//  StarburstFileAsrModel.h
+//  StarburstSdk
+//
+//  Created by incar on 2024/9/27.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 该段说话人
+@interface StarburstFileAsrAdditions : NSObject
+@property (nonatomic, strong) NSString *speaker;/// 该段说话人编号
+@end
+
+/// 识别片段
+@interface StarburstFileAsrPieces : NSObject
+@property (nonatomic, strong) NSString *text;/// 片段识别的内筒
+@property (nonatomic, assign) NSInteger start_time;///片段对应文件进度,单位毫秒
+@property (nonatomic, assign) NSInteger end_time;///  片段对应文件进度,单位毫秒
+@property (nonatomic, strong) StarburstFileAsrAdditions *additions;///该段说话人
+@end
+
+/// 文件识别结果模型
+@interface StarburstFileAsrModel : NSObject
+@property (nonatomic, assign) NSInteger code;/// 状态码
+@property (nonatomic, strong) NSString *msg;/// 提示语
+@property (nonatomic, strong) NSString *requestId;/// 请求id
+@property (nonatomic, strong) NSString *taskId;/// 任务id
+@property (nonatomic, strong) NSString *text;/// 语⾳识别内容
+@property (nonatomic, strong) NSString *summary;/// 识别摘要内容
+@property (nonatomic, strong) NSString *transText;///识别后翻译结果
+@property (nonatomic, strong) NSArray<StarburstFileAsrPieces *> *pieces;///识别片段
+
++ (StarburstFileAsrModel *)modelWith:(NSDictionary *)dict;
+@end
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstOffLineFile.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstOffLineFile.h
new file mode 100644 (file)
index 0000000..9e7a192
--- /dev/null
@@ -0,0 +1,20 @@
+//
+//  StarburstOffLineFile.h
+//  StarburstSdk
+//
+//  Created by incar on 2024/10/8.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 离线文件
+@interface StarburstOffLineFile : NSObject
+
+@property (nonatomic, assign) uint8_t fileType;/// 0x00所有文件、0x01左耳列表、0x02右耳列表
+@property (nonatomic, assign) NSInteger fileId;/// 文件id
+@property (nonatomic, assign) NSInteger fileSize;/// 文件大小
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstPhoneSdk.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstPhoneSdk.h
new file mode 100644 (file)
index 0000000..903da21
--- /dev/null
@@ -0,0 +1,121 @@
+//
+//  StarburstPhoneSdk.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2025/3/11.
+//
+
+#import <Foundation/Foundation.h>
+#import <StarburstSdk/StarburstSdkManager.h>
+#import <StarburstSdk/StarburstAsrConfig.h>
+#import <StarburstSdk/StarburstAsrModel.h>
+#import <StarburstSdk/StarbaustVoiceChatModel.h>
+#import <StarburstSdk/StarburstFileAsrModel.h>
+#import <StarburstSdk/StarburstOffLineFile.h>
+#import <StarburstSdk/StarburstStreamModel.h>
+#import <StarburstSdk/StarbusrtSpeaker.h>
+
+
+@interface StarburstPhoneSdk : NSObject
+@property (nonatomic, readonly)BOOL didAuth;/// 是否已经鉴权
+@property (nonatomic, strong)void (^websocketStateCallback)(BOOL connected);/// websocket状态回调,true为已连接,false未链接
+
+
+/// 单利
++ (instancetype)shared;
+
+///  注册
+/// - Parameters:
+///   - productKey: 产品key
+///   - productSecret:  产品秘钥,经过aes/cbc/7Padding加密后的data
+///   - deviceName:  设备名称
+///   - random:  加密随机数
+///   - finished: 结果回调
+- (void)registerWithProductKey:(NSString *)productKey productSecret:(NSData *)productSecret deviceName:(NSString *)deviceName random:(NSString *)random finished:(void (^)(NSString *deviceSecret,NSError *error))finished;
+
+///  登录
+/// - Parameters:
+///   - productKey: 产品key
+///   - deviceName:  设备名称
+///   - deviceSecret:  设备密码
+///   - finished: 结果回调
+- (void)connectWithProductKey:(NSString *)productKey deviceName:(NSString *)deviceName deviceSecret:(NSString *)deviceSecret finished:(void (^)(BOOL isSuccess,NSError *error))finished;
+
+///// 【文件摘要】
+///// - Parameters:
+/////   - path: 文件路径
+/////   - recognize: 识别结果回调
+/////   - error: 错误回调
+//- (void)asrByFile:(NSURL *)filePath config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本摘要】
+/// - Parameters:
+///   - text: 识别的文本
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本摘要】--流式
+/// - Parameters:
+///   - text: 摘要的文字
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本摘要】--流式
+-(void)cancelSummaryByTextWithSplit;
+
+/// 【文本翻译】
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本翻译】--流式
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本翻译】--流式
+-(void)cancelTranslateByTextWithSplit;
+
+/// 【同声传译】开始手机拾音
+/// - Parameters:
+///   - config: 识别配置
+///   - voiceRecordData: 录音音频流回调
+///   - recognizeText: 识别回调
+///   - stateChange: 状态回调
+- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+
+/// 【同声传译】结束手机拾音
+/// - Parameter fileCallback: 录音文件回调
+- (void)stopRecordAsr:(void(^)(NSString *filePath))fileCallback;
+
+/// 手机拾音对话设置
+/// - Parameters:
+///   - config: 对话配置
+///   - startCallBack: 开始回调
+///   - textCallBack: 文本识别回调
+///   - voiceCallBack: AI语音回复回调
+///   - stateChange: 状态回调
+///   - finished:录音地址回调
+- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+/// 手机拾音,开始对话
+/// - Parameter vadType: 0 vad检测,1不启用vad(手动控制开始/结束讲话)
+- (void)startPhoneChat:(int)vadType;
+
+/// 结束手机拾音对话
+- (void)stopPhoneChat;
+
+/// 获取音色列表
+/// - Parameter callBack: 结果回调
+- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
+
+@end
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdk.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdk.h
new file mode 100644 (file)
index 0000000..422071c
--- /dev/null
@@ -0,0 +1,32 @@
+//
+//  Starburst.h
+//  Starburst
+//
+//  Created by cookies on 2023/6/12.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for Starburst.
+//FOUNDATION_EXPORT double StarburstSdkVersionNumber;
+
+//! Project version string for Starburst.
+//FOUNDATION_EXPORT const unsigned char StarburstSdkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <StarburstSdk/PublicHeader.h>
+
+#import <StarburstSdk/StarburstSdkManager.h>
+#import <StarburstSdk/StarburstConfig.h>
+#import <StarburstSdk/StarburstPhoneSdk.h>
+#import <StarburstSdk/StartburstMixSdk.h>
+#import <StarburstSdk/StartburstGlassesSdk.h>
+#import <StarburstSdk/StartburstGlassChat.h>
+#import <StarburstSdk/StarburstAsrConfig.h>
+#import <StarburstSdk/StarburstAsrModel.h>
+#import <StarburstSdk/StarburstFileAsrModel.h>
+#import <StarburstSdk/StarbaustVoiceChatModel.h>
+#import <StarburstSdk/StarbusrtSpeaker.h>
+#import <StarburstSdk/StarburstStreamModel.h>
+#import <StarburstSdk/StarburstOffLineFile.h>
+#import <StarburstSdk/StartburstDecoderConfig.h>
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdkManager.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdkManager.h
new file mode 100644 (file)
index 0000000..94af429
--- /dev/null
@@ -0,0 +1,169 @@
+//
+//  StarburstSdk.h
+//  VoiceDemo
+//
+//  Created by incar on 2024/9/12.
+//
+
+#import <Foundation/Foundation.h>
+#import <StarburstSdk/StarburstAsrConfig.h>
+#import <StarburstSdk/StarburstAsrModel.h>
+#import <StarburstSdk/StarbaustVoiceChatModel.h>
+#import <StarburstSdk/StarburstFileAsrModel.h>
+#import <StarburstSdk/StarburstOffLineFile.h>
+#import <StarburstSdk/StarburstStreamModel.h>
+#import <StarburstSdk/StarbusrtSpeaker.h>
+#import <StarburstSdk/StartburstDecoderConfig.h>
+
+typedef NS_OPTIONS(NSInteger,StarburstCode) {
+    StarburstCode_Start_Record = 20001,///开始录音
+    StarburstCode_Stop_Record = 20002,///停止录音
+    StarburstCode_Record_Error = 20003,///录音出错
+    StarburstCode_Ble_Disconected = 20004,///蓝牙断开
+    StarburstCode_Websocket_Connected = 30001,///socket连上
+    StarburstCode_Websocket_Disconnected = 30002,///socket断开连接
+    StarburstCode_Websocket_Connecting = 30003,///socket连接中...
+    StarburstCode_Websocket_pingTimeOut = 30004,///ping超时
+    StarburstCode_Net_Error = 50000,///网络错误
+    StarburstCode_UnAuth = 60000,///未鉴权
+};
+
+
+@interface StarburstSdk : NSObject
+//@property (nonatomic, strong)void (^authSuccessCallback)(void);/// 鉴权成功回调
+@property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
+@property (nonatomic, readonly)BOOL didAuth;// 是否已经鉴权
+@property (nonatomic, strong)void (^websocketStateCallback)(BOOL connected);/// websocket状态回调,true为已连接,false未链接
+@property (nonatomic, strong)void (^bleRecordStateCallback)(int state);/// 耳机录音状态回调,1录音,2结束录音
+@property (nonatomic, strong)void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
+
+/// 单利
++ (instancetype)shared;
+
+/// 收到蓝牙设备传过来的数据,交给sdk处理
+/// - Parameter data:数据
+- (void)receiveBleData:(NSData *)data;
+
+/// 蓝牙设备已经连上(蓝牙连接和断开都需要通知sdk)
+- (void)bleConnected;
+
+/// 蓝牙断开连接(在监听到蓝牙断开的时候,调用该方法通知sdk结束当前任务)
+- (void)bleDisConnected;
+
+///// 【文本摘要】
+///// - Parameters:
+/////   - text: 识别的文本
+/////   - recognize: 识别结果回调
+/////   - error: 错误回调
+- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本摘要】--流式
+/// - Parameters:
+///   - text: 摘要的文字
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本摘要】--流式
+-(void)cancelSummaryByTextWithSplit;
+
+/// 【文本翻译】
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本翻译】--流式
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+
+/// 取消 【文本翻译】--流式
+-(void)cancelTranslateByTextWithSplit;
+
+/// 【同声传译】开始手机拾音
+/// - Parameters:
+///   - config: 识别配置
+///   - voiceRecordData: 录音音频流回调
+///   - recognizeText: 识别回调
+///   - stateChange: 状态回调
+///   - interrupt:打断回调(接听电话等打断)
+- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+
+/// 【同声传译】结束手机拾音
+/// - Parameter fileCallback: 录音文件回调
+- (void)stopRecordAsr:(void(^)(NSString *filePath))callback;
+
+/// 开始耳机拾音
+/// - Parameters:
+///   - config: 识别配置
+- (void)startDeviceRecord:(StarburstBleAsrConfig*)config;
+
+/// 结束耳机拾音
+- (void)stopDeviceRecord;
+
+/// 设置耳机拾音回调
+/// - Parameters:
+///   - recordPath: 录音文件保存的路径。如果文件已经存在,则音频数据会追加到尾部;如果不存在,则创建新文件;传nil则会按之前时间格式创建新文件
+///   - asrConfig: 识别配置
+///   - bleConfig: 耳机录音类型回调
+///   - recognize: 识别回调
+///   - stateChange: 状态回调
+///   - path: 录音结束,录音文件地址回调
+- (void)setupDeviceRecordWith:(NSString *)recordPath asrConfig:(StarburstAsrConfig*)asrConfig bleConfig:(void (^)(StarburstBleAsrConfig*))bleConfig recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+
+/// opus输出给app,app解码后将数据通过inputPcmData传回给sdk
+- (void)outputOpusData:(void (^)(StartburstDecoderConfig *copusConfig,NSData*opusData))recordCallBack;
+
+/// opus解码后传给sdk
+- (void)inputPcmData:(NSData *)pcmData;
+
+
+
+
+
+/// 获取音色列表
+/// - Parameter callBack: 结果回调
+- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
+
+///  设置voice chat回调,目前只支持蓝牙设备发起对话
+/// - Parameters:
+///   - config: 对话配置
+///   - startCallBack: 开始回调
+///   - textCallBack: 文本识别回调
+///   - voiceCallBack: AI语音回复回调
+///   - stateChange: 状态回调
+///   - finished:录音地址回调
+- (void)setupVoiceChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+/// 终止voice chat对话
+- (void)stopVoiceChat:(NSInteger)dialogId;
+
+/// 开始播放tts
+- (void)startPlayTtsAudio:(NSInteger)dialogId;
+
+/// 结束播放tts
+- (void)stopPlayTtsAudio:(NSInteger)dialogId;
+
+
+
+
+//不可用
+- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+//不可用
+- (void)startPhoneChat:(int)vadType;
+//不可用
+- (void)stopPhoneChat;
+//不可用
+- (void)registerWithProductKey:(NSString *)productKey productSecret:(NSString *)productSecret deviceName:(NSString *)deviceName random:(NSString *)random finished:(void (^)(NSString *deviceSecret,NSError *error))finished;
+//不可用
+- (void)connectWithProductKey:(NSString *)productKey  deviceName:(NSString *)deviceName deviceSecret:(NSString *)deviceSecret finished:(void (^)(BOOL isSuccess,NSError *error))finished;
+@end
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstStreamModel.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstStreamModel.h
new file mode 100644 (file)
index 0000000..fa0ad1f
--- /dev/null
@@ -0,0 +1,20 @@
+//
+//  StarburstStreamModel.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2024/12/20.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface StarburstStreamModel : NSObject
+@property (nonatomic, assign) NSInteger code;//1: processing, 10: complete -1:fail
+@property (nonatomic, strong) NSString *msg;//提示文字
+@property (nonatomic, strong) NSString *failReason;//失败原因
+@property (nonatomic, strong) NSString *llmResponse;// 增量返回的⽂本内容
+@property (nonatomic, assign) BOOL complete;// ⽂本内容是否完成
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarbusrtSpeaker.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StarbusrtSpeaker.h
new file mode 100644 (file)
index 0000000..2b2dae4
--- /dev/null
@@ -0,0 +1,19 @@
+//
+//  StarbusrtSpeaker.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2025/2/18.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface StarbusrtSpeaker : NSObject
+@property (nonatomic, strong) NSString *sid;/// 音色id
+@property (nonatomic, strong) NSString *name;/// 名称
+@property (nonatomic, strong) NSString *type;/// 类型
+@property (nonatomic, strong) NSString *role;/// 角色
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstDecoderConfig.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstDecoderConfig.h
new file mode 100644 (file)
index 0000000..7e47aa2
--- /dev/null
@@ -0,0 +1,18 @@
+////
+////  Startburst.h
+////  StarburstSdk
+////
+////  Created by liangshi on 2025/6/11.
+////
+//
+#import <Foundation/Foundation.h>
+
+@interface StartburstDecoderConfig : NSObject
+@property (nonatomic, assign)NSInteger sampleRate;/// 采样率
+@property (nonatomic, assign)NSInteger numChannels;/// 声道数
+@property (nonatomic, assign)NSInteger encodedFrameLength;/// 编码后每帧字节数
+@property (nonatomic, assign)NSInteger originalSamplesPerFrame;/// 编码前每帧采样点数
+@property (nonatomic, assign)NSInteger bitDepth;/// 采样位深(16/24/32)
+@end
+
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassChat.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassChat.h
new file mode 100644 (file)
index 0000000..3df995d
--- /dev/null
@@ -0,0 +1,49 @@
+//
+//  StartburstGlassChat.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2025/5/6.
+//
+
+#import <Foundation/Foundation.h>
+#import <StarburstSdk/StarburstSdkManager.h>
+#import <StarburstSdk/StarbaustVoiceChatModel.h>
+#import <StarburstSdk/StarbusrtSpeaker.h>
+
+
+@interface StartburstGlassChat : NSObject
+///
+/// 对话设置
+/// - Parameters:
+///   - config: 对话配置
+///   - textCallBack: 文本识别回调
+///   - voiceCallBack: AI语音回复回调
+///   - stateChange: 状态回调
+///   - finished:录音地址回调
+- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+/// 开始对话
+- (void)start;
+
+/// 结束对话
+- (void)stop;
+
+/// 分发数据
+/// - Parameter data:音频流
+- (void)fireAudioData:(NSData *)data;
+
+/// 通知vad状态变化
+/// - Parameter isVadStarted: ture表⽰vad检测到说话开始,false表⽰vad检测到说话结束
+- (void)vadStateChange:(BOOL)isVadStarted;
+
+/// 分发数据
+/// - Parameter data:图片流
+- (void)fireImageData:(NSData *)data;
+
+/// 分发数据
+/// - Parameter text:文本
+- (void)fireText:(NSString *)text;
+
+@end
+
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassesSdk.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassesSdk.h
new file mode 100644 (file)
index 0000000..862a1a2
--- /dev/null
@@ -0,0 +1,110 @@
+//
+//  StartburstGlassesSdk.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2025/4/29.
+//
+
+
+#import <Foundation/Foundation.h>
+#import <StarburstSdk/StarburstSdkManager.h>
+#import <StarburstSdk/StarburstAsrConfig.h>
+#import <StarburstSdk/StarburstAsrModel.h>
+#import <StarburstSdk/StarbaustVoiceChatModel.h>
+#import <StarburstSdk/StarburstFileAsrModel.h>
+#import <StarburstSdk/StarburstOffLineFile.h>
+#import <StarburstSdk/StarburstStreamModel.h>
+#import <StarburstSdk/StarbusrtSpeaker.h>
+#import <StarburstSdk/StartburstGlassChat.h>
+
+@interface StartburstGlassesSdk : NSObject
+@property (nonatomic, strong)void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
+@property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
+@property (nonatomic, readonly)BOOL didAuth;/// 是否已经鉴权
+@property (nonatomic, strong)StartburstGlassChat *chat;/// 对话对象
+
+/// 单利
++ (instancetype)shared;
+
+/// 收到蓝牙设备传过来的数据,交给sdk处理
+/// - Parameter data:数据
+- (void)receiveBleData:(NSData *)data;
+
+/// 蓝牙设备已经连上
+- (void)bleConnected;
+
+/// 蓝牙断开连接(在监听到蓝牙断开的时候,调用该方法通知sdk结束当前任务)
+- (void)bleDisConnected;
+
+///  注册
+/// - Parameters:
+///   - productKey: 产品key
+///   - productSecret:  产品秘钥,经过aes/cbc/7Padding加密后的data
+///   - deviceName:  设备名称
+///   - random:  加密随机数
+///   - finished: 结果回调
+- (void)registerWithProductKey:(NSString *)productKey productSecret:(NSData *)productSecret deviceName:(NSString *)deviceName random:(NSString *)random finished:(void (^)(NSString *deviceSecret,NSError *error))finished;
+
+///  登录
+/// - Parameters:
+///   - productKey: 产品key
+///   - deviceName:  设备名称
+///   - deviceSecret:  设备密码
+///   - finished: 结果回调
+- (void)connectWithProductKey:(NSString *)productKey deviceName:(NSString *)deviceName deviceSecret:(NSString *)deviceSecret finished:(void (^)(BOOL isSuccess,NSError *error))finished;
+
+/// 【文本摘要】
+/// - Parameters:
+///   - text: 识别的文本
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本摘要】--流式
+/// - Parameters:
+///   - text: 摘要的文字
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本摘要】--流式
+-(void)cancelSummaryByTextWithSplit;
+
+/// 【文本翻译】
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本翻译】--流式
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本翻译】--流式
+-(void)cancelTranslateByTextWithSplit;
+
+/// 【同声传译】开始手机拾音
+/// - Parameters:
+///   - config: 识别配置
+///   - voiceRecordData: 录音音频流回调
+///   - recognizeText: 识别回调
+///   - stateChange: 状态回调
+- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+
+/// 【同声传译】结束手机拾音
+/// - Parameter fileCallback: 录音文件回调
+- (void)stopRecordAsr:(void(^)(NSString *filePath))fileCallback;
+
+/// 获取音色列表
+/// - Parameter callBack: 结果回调
+- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
+
+@end
+
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstMixSdk.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstMixSdk.h
new file mode 100644 (file)
index 0000000..aa4ba37
--- /dev/null
@@ -0,0 +1,111 @@
+//
+//  StartburstMixSdk.h
+//  StarburstSdk
+//
+//  Created by liangshi on 2025/4/22.
+//
+
+#import <Foundation/Foundation.h>
+#import <StarburstSdk/StarburstSdkManager.h>
+#import <StarburstSdk/StarburstAsrConfig.h>
+#import <StarburstSdk/StarburstAsrModel.h>
+#import <StarburstSdk/StarbaustVoiceChatModel.h>
+#import <StarburstSdk/StarburstFileAsrModel.h>
+#import <StarburstSdk/StarburstOffLineFile.h>
+#import <StarburstSdk/StarburstStreamModel.h>
+#import <StarburstSdk/StarbusrtSpeaker.h>
+
+@interface StartburstMixSdk : NSObject
+
+@property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
+@property (nonatomic, readonly)BOOL didAuth;/// 是否已经鉴权
+@property (nonatomic, strong)void (^websocketStateCallback)(BOOL connected);/// websocket状态回调,true为已连接,false未链接
+@property (nonatomic, strong)void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
+
+/// 单利
++ (instancetype)shared;
+
+/// 收到蓝牙设备传过来的数据,交给sdk处理
+/// - Parameter data:数据
+- (void)receiveBleData:(NSData *)data;
+
+/// 蓝牙设备已经连上
+- (void)bleConnected;
+
+/// 蓝牙断开连接(在监听到蓝牙断开的时候,调用该方法通知sdk结束当前任务)
+- (void)bleDisConnected;
+
+
+/// 【文本摘要】
+/// - Parameters:
+///   - text: 识别的文本
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本摘要】--流式
+/// - Parameters:
+///   - text: 摘要的文字
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本摘要】--流式
+-(void)cancelSummaryByTextWithSplit;
+
+/// 【文本翻译】
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本翻译】--流式
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本翻译】--流式
+-(void)cancelTranslateByTextWithSplit;
+
+/// 【同声传译】开始手机拾音
+/// - Parameters:
+///   - config: 识别配置
+///   - voiceRecordData: 录音音频流回调
+///   - recognizeText: 识别回调
+///   - stateChange: 状态回调
+- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+
+/// 【同声传译】结束手机拾音
+/// - Parameter fileCallback: 录音文件回调
+- (void)stopRecordAsr:(void(^)(NSString *filePath))fileCallback;
+
+/// 手机拾音对话设置
+/// - Parameters:
+///   - config: 对话配置
+///   - startCallBack: 开始回调
+///   - textCallBack: 文本识别回调
+///   - voiceCallBack: AI语音回复回调
+///   - stateChange: 状态回调
+///   - finished:录音地址回调
+- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+
+/// 手机拾音,开始对话
+/// - Parameter vadType: 0 vad检测,1不启用vad
+- (void)startPhoneChat:(int)vadType;
+
+/// 结束手机拾音对话
+- (void)stopPhoneChat;
+
+/// 获取音色列表
+/// - Parameter callBack: 结果回调
+- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
+
+@end
+
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Info.plist b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Info.plist
new file mode 100644 (file)
index 0000000..5d0891e
Binary files /dev/null and b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Info.plist differ
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Modules/module.modulemap b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/Modules/module.modulemap
new file mode 100644 (file)
index 0000000..7426ade
--- /dev/null
@@ -0,0 +1,6 @@
+framework module StarburstSdk {
+  umbrella header "StarburstSdk.h"
+  export *
+
+  module * { export * }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/PrivacyInfo.xcprivacy b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/PrivacyInfo.xcprivacy
new file mode 100644 (file)
index 0000000..c8b6829
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>NSPrivacyTracking</key>
+       <false/>
+       <key>NSPrivacyCollectedDataTypes</key>
+       <array>
+               <dict>
+                       <key>NSPrivacyCollectedDataType</key>
+                       <string>NSPrivacyCollectedDataTypeAudioData</string>
+                       <key>NSPrivacyCollectedDataTypeLinked</key>
+                       <false/>
+                       <key>NSPrivacyCollectedDataTypeTracking</key>
+                       <false/>
+                       <key>NSPrivacyCollectedDataTypePurposes</key>
+                       <array>
+                               <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
+                       </array>
+               </dict>
+       </array>
+       <key>NSPrivacyTrackingDomains</key>
+       <array/>
+       <key>NSPrivacyAccessedAPITypes</key>
+       <array/>
+</dict>
+</plist>
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/StarburstSdk b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/StarburstSdk
new file mode 100644 (file)
index 0000000..0444933
Binary files /dev/null and b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/StarburstSdk differ
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory
new file mode 100644 (file)
index 0000000..ccd2d67
Binary files /dev/null and b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory differ
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements
new file mode 100644 (file)
index 0000000..c528e57
Binary files /dev/null and b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements differ
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1 b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1
new file mode 100644 (file)
index 0000000..07e5514
Binary files /dev/null and b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1 differ
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeResources b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeResources
new file mode 100644 (file)
index 0000000..040d597
--- /dev/null
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>files</key>
+       <dict>
+               <key>Headers/StarbaustVoiceChatModel.h</key>
+               <data>
+               I6GwpMWb210AbU3/v9YLrfddoEA=
+               </data>
+               <key>Headers/StarburstAsrConfig.h</key>
+               <data>
+               O5iJsUMPvwiRYlgGCgXp4TmAllQ=
+               </data>
+               <key>Headers/StarburstAsrModel.h</key>
+               <data>
+               iiw2ZgUm4OBP2p0P0RSXd6gOwBY=
+               </data>
+               <key>Headers/StarburstConfig.h</key>
+               <data>
+               /Bp9QOl1Vlv/1q1uwSh5zjn5IPA=
+               </data>
+               <key>Headers/StarburstFileAsrModel.h</key>
+               <data>
+               KCay85nepjWFLxW32vUBaknoYTk=
+               </data>
+               <key>Headers/StarburstOffLineFile.h</key>
+               <data>
+               28IGQ1ND/MHAAnUNKNBxuvS5ROc=
+               </data>
+               <key>Headers/StarburstPhoneSdk.h</key>
+               <data>
+               Qyvk+mUwCA6e59P6MqEGlKXAoV4=
+               </data>
+               <key>Headers/StarburstSdk.h</key>
+               <data>
+               UXMAS15KF45xW0cc4/2dI4vQTCQ=
+               </data>
+               <key>Headers/StarburstSdkManager.h</key>
+               <data>
+               SO4o81CoyyO4XOPAsZo1GUvl1p4=
+               </data>
+               <key>Headers/StarburstStreamModel.h</key>
+               <data>
+               cdW3VKYRIjOHM5xn0Zzt3fioFro=
+               </data>
+               <key>Headers/StarbusrtSpeaker.h</key>
+               <data>
+               SBlLEersGuEueZNxVNc2uyepfts=
+               </data>
+               <key>Headers/StartburstDecoderConfig.h</key>
+               <data>
+               CEyiYJhRwvumcRqNLLoJARHeU24=
+               </data>
+               <key>Headers/StartburstGlassChat.h</key>
+               <data>
+               utqD1cN73IP2Kj6ThbunMmpf3S8=
+               </data>
+               <key>Headers/StartburstGlassesSdk.h</key>
+               <data>
+               PWqGuJ/I4XGFgkETcPBwQWnDEzg=
+               </data>
+               <key>Headers/StartburstMixSdk.h</key>
+               <data>
+               bemNunuDBWDRu5cPpr/qtzb51HE=
+               </data>
+               <key>Info.plist</key>
+               <data>
+               TbwY6qSKiZSNAQ4zKoI1WNFwZSA=
+               </data>
+               <key>Modules/module.modulemap</key>
+               <data>
+               0SW07sgC8aptSEw6560m065YdrY=
+               </data>
+               <key>PrivacyInfo.xcprivacy</key>
+               <data>
+               SRctDO3cqibONLEG7CPcNZVBnXw=
+               </data>
+       </dict>
+       <key>files2</key>
+       <dict>
+               <key>Headers/StarbaustVoiceChatModel.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       I6GwpMWb210AbU3/v9YLrfddoEA=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       1h090jtb3WRV25cr3cYc+NPRWUvlbO3j4QqjmThCV9c=
+                       </data>
+               </dict>
+               <key>Headers/StarburstAsrConfig.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       O5iJsUMPvwiRYlgGCgXp4TmAllQ=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       9ieYYQ/XtFmG0peIjWVyt2juVka68xC3vcJqEwQ8qHM=
+                       </data>
+               </dict>
+               <key>Headers/StarburstAsrModel.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       iiw2ZgUm4OBP2p0P0RSXd6gOwBY=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       4P7mnRJalvX4ISPvk5QKj1CSZ762p7L8HNbs3dIVa9A=
+                       </data>
+               </dict>
+               <key>Headers/StarburstConfig.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       /Bp9QOl1Vlv/1q1uwSh5zjn5IPA=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       JMBJ67zUYPjxdjB6vpgfPtv5P5iPeEVIzIvo6tnFAmo=
+                       </data>
+               </dict>
+               <key>Headers/StarburstFileAsrModel.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       KCay85nepjWFLxW32vUBaknoYTk=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       Y1+wOB3+K0CSFktnWVRMaxl9SsvQMDAZcFup9gudCFg=
+                       </data>
+               </dict>
+               <key>Headers/StarburstOffLineFile.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       28IGQ1ND/MHAAnUNKNBxuvS5ROc=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       JqjH7qjguq8OEs3MklD/pyfD9ULJzpCwIyS37AvPIe8=
+                       </data>
+               </dict>
+               <key>Headers/StarburstPhoneSdk.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       Qyvk+mUwCA6e59P6MqEGlKXAoV4=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       U7UlFVbYvM2vSO810pr82LySA9HeLA4uMBh6PnCY5aE=
+                       </data>
+               </dict>
+               <key>Headers/StarburstSdk.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       UXMAS15KF45xW0cc4/2dI4vQTCQ=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       OT9NyhWFaPzjchBx437Llm8zPGQdOJ1e/F2dRGEQEN8=
+                       </data>
+               </dict>
+               <key>Headers/StarburstSdkManager.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       SO4o81CoyyO4XOPAsZo1GUvl1p4=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       zYNzKgVctWkBxMvEJoFC+QgA9HMqVHL4rZ0ID3ef1/0=
+                       </data>
+               </dict>
+               <key>Headers/StarburstStreamModel.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       cdW3VKYRIjOHM5xn0Zzt3fioFro=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       XC3yJkUL3sL1YkFBUADx+q+Q47YB040DrB7QEhOJa7w=
+                       </data>
+               </dict>
+               <key>Headers/StarbusrtSpeaker.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       SBlLEersGuEueZNxVNc2uyepfts=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       yCNcI1umW3Pgn7rtgMv5kZTDZXr/QxvPNRoNjcIrTJU=
+                       </data>
+               </dict>
+               <key>Headers/StartburstDecoderConfig.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       CEyiYJhRwvumcRqNLLoJARHeU24=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       PlYBO1RRT96qRTFSidHUui8kpiVj0/pQW85jqIjCtzY=
+                       </data>
+               </dict>
+               <key>Headers/StartburstGlassChat.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       utqD1cN73IP2Kj6ThbunMmpf3S8=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       VaH6J5gUMxZ8Whr9yIF3iefTz8SKIWwpyY9dq3mMWYk=
+                       </data>
+               </dict>
+               <key>Headers/StartburstGlassesSdk.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       PWqGuJ/I4XGFgkETcPBwQWnDEzg=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       Kql2VWlouLzv+FTfPR9+WlIFxgJUw4NpHhMzCTfAz8o=
+                       </data>
+               </dict>
+               <key>Headers/StartburstMixSdk.h</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       bemNunuDBWDRu5cPpr/qtzb51HE=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       S6yNxpkYJSgoOVUAyuIhC8ourDLd4Pu6tKFnRkM+Me0=
+                       </data>
+               </dict>
+               <key>Modules/module.modulemap</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       0SW07sgC8aptSEw6560m065YdrY=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       js/u3ymUzjIe0pCJDIjb2G3IBfLvIq7aILJo9tH8J8k=
+                       </data>
+               </dict>
+               <key>PrivacyInfo.xcprivacy</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       SRctDO3cqibONLEG7CPcNZVBnXw=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       cuaVRkQIQRl8fLAPRH2XlUdsPxO0W90uL0WcSHvmSnY=
+                       </data>
+               </dict>
+       </dict>
+       <key>rules</key>
+       <dict>
+               <key>^.*</key>
+               <true/>
+               <key>^.*\.lproj/</key>
+               <dict>
+                       <key>optional</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1000</real>
+               </dict>
+               <key>^.*\.lproj/locversion.plist$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1100</real>
+               </dict>
+               <key>^Base\.lproj/</key>
+               <dict>
+                       <key>weight</key>
+                       <real>1010</real>
+               </dict>
+               <key>^version.plist$</key>
+               <true/>
+       </dict>
+       <key>rules2</key>
+       <dict>
+               <key>.*\.dSYM($|/)</key>
+               <dict>
+                       <key>weight</key>
+                       <real>11</real>
+               </dict>
+               <key>^(.*/)?\.DS_Store$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>2000</real>
+               </dict>
+               <key>^.*</key>
+               <true/>
+               <key>^.*\.lproj/</key>
+               <dict>
+                       <key>optional</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1000</real>
+               </dict>
+               <key>^.*\.lproj/locversion.plist$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1100</real>
+               </dict>
+               <key>^Base\.lproj/</key>
+               <dict>
+                       <key>weight</key>
+                       <real>1010</real>
+               </dict>
+               <key>^Info\.plist$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^PkgInfo$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^embedded\.provisionprofile$</key>
+               <dict>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^version\.plist$</key>
+               <dict>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+       </dict>
+</dict>
+</plist>
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature
new file mode 100644 (file)
index 0000000..b0642f2
Binary files /dev/null and b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature differ
index 86335e0..2cfb8a5 100644 (file)
@@ -7,26 +7,43 @@
        objects = {
 
 /* Begin PBXBuildFile section */
-               3F3F021A2ED454680038A1C8 /* DeepChordsSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F3F02162ED452DC0038A1C8 /* DeepChordsSdk.framework */; };
+               111E0F1C572CCDE29D292F2C /* Pods_DeepChordsSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D9D4F11FC88844BFEAE4C3 /* Pods_DeepChordsSdk.framework */; };
+               3F3F14032ED5A9A50038A1C8 /* DeepChordsSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F3F13E32ED5A8C10038A1C8 /* DeepChordsSdk.framework */; };
                6A05823333B2C2EB854DC2D7 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BA0D452D1F1A03B9DE590FF /* Pods_Example.framework */; };
 /* End PBXBuildFile section */
 
-/* Begin PBXContainerItemProxy section */
-               3F3F02152ED452DC0038A1C8 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 3F3F020B2ED452DC0038A1C8 /* DeepChordsSdk.xcodeproj */;
-                       proxyType = 2;
-                       remoteGlobalIDString = 3F3F01C92ED44F730038A1C8;
-                       remoteInfo = DeepChordsSdk;
-               };
-/* End PBXContainerItemProxy section */
+/* Begin PBXCopyFilesBuildPhase section */
+               3F3F14432ED5AC240038A1C8 /* Embed Frameworks */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                       );
+                       name = "Embed Frameworks";
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               3F3F14492ED5AC570038A1C8 /* Embed Frameworks */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                       );
+                       name = "Embed Frameworks";
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+               23C20F392C077DCC8875F909 /* Pods-DeepChordsSdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DeepChordsSdk.release.xcconfig"; path = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.release.xcconfig"; sourceTree = "<group>"; };
                3F3F01E32ED451920038A1C8 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
-               3F3F020B2ED452DC0038A1C8 /* DeepChordsSdk.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = DeepChordsSdk.xcodeproj; path = ../DeepChordsSdk/DeepChordsSdk.xcodeproj; sourceTree = SOURCE_ROOT; };
+               3F3F13E32ED5A8C10038A1C8 /* DeepChordsSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
                55108288A4959871FAF7AC5F /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
                6A0C11EDFE570E63DB17064A /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
                7BA0D452D1F1A03B9DE590FF /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+               A3D9D4F11FC88844BFEAE4C3 /* Pods_DeepChordsSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+               C91EC257243FCFD24EEE8863 /* Pods-DeepChordsSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DeepChordsSdk.debug.xcconfig"; path = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.debug.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
                        );
                        target = 3F3F01E22ED451920038A1C8 /* Example */;
                };
+               3F3F14462ED5AC420038A1C8 /* Exceptions for "DeepChordsSdk" folder in "Example" target */ = {
+                       isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+                       membershipExceptions = (
+                               StarburstSdk.framework,
+                       );
+                       target = 3F3F01E22ED451920038A1C8 /* Example */;
+               };
 /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
 
+/* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
+               3F3F14442ED5AC240038A1C8 /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "DeepChordsSdk" target */ = {
+                       isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
+                       attributesByRelativePath = {
+                               StarburstSdk.framework = (CodeSignOnCopy, RemoveHeadersOnCopy, );
+                       };
+                       buildPhase = 3F3F14432ED5AC240038A1C8 /* Embed Frameworks */;
+                       membershipExceptions = (
+                               StarburstSdk.framework,
+                       );
+               };
+               3F3F144A2ED5AC570038A1C8 /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "Example" target */ = {
+                       isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
+                       attributesByRelativePath = {
+                               StarburstSdk.framework = (CodeSignOnCopy, RemoveHeadersOnCopy, );
+                       };
+                       buildPhase = 3F3F14492ED5AC570038A1C8 /* Embed Frameworks */;
+                       membershipExceptions = (
+                               StarburstSdk.framework,
+                       );
+               };
+/* End PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
+
 /* Begin PBXFileSystemSynchronizedRootGroup section */
                3F3F01E52ED451920038A1C8 /* Example */ = {
                        isa = PBXFileSystemSynchronizedRootGroup;
                        path = Example;
                        sourceTree = "<group>";
                };
+               3F3F13E42ED5A8C10038A1C8 /* DeepChordsSdk */ = {
+                       isa = PBXFileSystemSynchronizedRootGroup;
+                       exceptions = (
+                               3F3F14462ED5AC420038A1C8 /* Exceptions for "DeepChordsSdk" folder in "Example" target */,
+                               3F3F144A2ED5AC570038A1C8 /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "Example" target */,
+                               3F3F14442ED5AC240038A1C8 /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "DeepChordsSdk" target */,
+                       );
+                       path = DeepChordsSdk;
+                       sourceTree = "<group>";
+               };
 /* End PBXFileSystemSynchronizedRootGroup section */
 
 /* Begin PBXFrameworksBuildPhase section */
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               3F3F021A2ED454680038A1C8 /* DeepChordsSdk.framework in Frameworks */,
+                               3F3F14032ED5A9A50038A1C8 /* DeepChordsSdk.framework in Frameworks */,
                                6A05823333B2C2EB854DC2D7 /* Pods_Example.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               3F3F13E02ED5A8C10038A1C8 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               111E0F1C572CCDE29D292F2C /* Pods_DeepChordsSdk.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
                3F3F01DA2ED451920038A1C8 = {
                        isa = PBXGroup;
                        children = (
-                               3F3F020B2ED452DC0038A1C8 /* DeepChordsSdk.xcodeproj */,
                                3F3F01E52ED451920038A1C8 /* Example */,
+                               3F3F13E42ED5A8C10038A1C8 /* DeepChordsSdk */,
                                3F3F01E42ED451920038A1C8 /* Products */,
                                CC7A28DFCD6405C009EC973C /* Pods */,
                                C0F54FE5A9CB8F871597A553 /* Frameworks */,
                        isa = PBXGroup;
                        children = (
                                3F3F01E32ED451920038A1C8 /* Example.app */,
-                       );
-                       name = Products;
-                       sourceTree = "<group>";
-               };
-               3F3F02122ED452DC0038A1C8 /* Products */ = {
-                       isa = PBXGroup;
-                       children = (
-                               3F3F02162ED452DC0038A1C8 /* DeepChordsSdk.framework */,
+                               3F3F13E32ED5A8C10038A1C8 /* DeepChordsSdk.framework */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                        isa = PBXGroup;
                        children = (
                                7BA0D452D1F1A03B9DE590FF /* Pods_Example.framework */,
+                               A3D9D4F11FC88844BFEAE4C3 /* Pods_DeepChordsSdk.framework */,
                        );
                        name = Frameworks;
                        sourceTree = "<group>";
                        children = (
                                55108288A4959871FAF7AC5F /* Pods-Example.debug.xcconfig */,
                                6A0C11EDFE570E63DB17064A /* Pods-Example.release.xcconfig */,
+                               C91EC257243FCFD24EEE8863 /* Pods-DeepChordsSdk.debug.xcconfig */,
+                               23C20F392C077DCC8875F909 /* Pods-DeepChordsSdk.release.xcconfig */,
                        );
                        name = Pods;
                        path = ../Pods;
                };
 /* End PBXGroup section */
 
+/* Begin PBXHeadersBuildPhase section */
+               3F3F13DE2ED5A8C10038A1C8 /* Headers */ = {
+                       isa = PBXHeadersBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXHeadersBuildPhase section */
+
 /* Begin PBXNativeTarget section */
                3F3F01E22ED451920038A1C8 /* Example */ = {
                        isa = PBXNativeTarget;
                                3F3F01E02ED451920038A1C8 /* Frameworks */,
                                3F3F01E12ED451920038A1C8 /* Resources */,
                                31C287F34CEEBF9AF3C42349 /* [CP] Embed Pods Frameworks */,
+                               3F3F14492ED5AC570038A1C8 /* Embed Frameworks */,
                        );
                        buildRules = (
                        );
                        productReference = 3F3F01E32ED451920038A1C8 /* Example.app */;
                        productType = "com.apple.product-type.application";
                };
+               3F3F13E22ED5A8C10038A1C8 /* DeepChordsSdk */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 3F3F13EB2ED5A8C10038A1C8 /* Build configuration list for PBXNativeTarget "DeepChordsSdk" */;
+                       buildPhases = (
+                               8D997A91CC5B5810A80A417F /* [CP] Check Pods Manifest.lock */,
+                               3F3F13DE2ED5A8C10038A1C8 /* Headers */,
+                               3F3F13DF2ED5A8C10038A1C8 /* Sources */,
+                               3F3F13E02ED5A8C10038A1C8 /* Frameworks */,
+                               3F3F13E12ED5A8C10038A1C8 /* Resources */,
+                               3F3F14432ED5AC240038A1C8 /* Embed Frameworks */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       fileSystemSynchronizedGroups = (
+                               3F3F13E42ED5A8C10038A1C8 /* DeepChordsSdk */,
+                       );
+                       name = DeepChordsSdk;
+                       productName = DeepChordsSdk;
+                       productReference = 3F3F13E32ED5A8C10038A1C8 /* DeepChordsSdk.framework */;
+                       productType = "com.apple.product-type.framework";
+               };
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
                                        3F3F01E22ED451920038A1C8 = {
                                                CreatedOnToolsVersion = 16.4;
                                        };
+                                       3F3F13E22ED5A8C10038A1C8 = {
+                                               CreatedOnToolsVersion = 16.4;
+                                       };
                                };
                        };
                        buildConfigurationList = 3F3F01DE2ED451920038A1C8 /* Build configuration list for PBXProject "Example" */;
                        preferredProjectObjectVersion = 77;
                        productRefGroup = 3F3F01E42ED451920038A1C8 /* Products */;
                        projectDirPath = "";
-                       projectReferences = (
-                               {
-                                       ProductGroup = 3F3F02122ED452DC0038A1C8 /* Products */;
-                                       ProjectRef = 3F3F020B2ED452DC0038A1C8 /* DeepChordsSdk.xcodeproj */;
-                               },
-                       );
                        projectRoot = "";
                        targets = (
                                3F3F01E22ED451920038A1C8 /* Example */,
+                               3F3F13E22ED5A8C10038A1C8 /* DeepChordsSdk */,
                        );
                };
 /* End PBXProject section */
 
-/* Begin PBXReferenceProxy section */
-               3F3F02162ED452DC0038A1C8 /* DeepChordsSdk.framework */ = {
-                       isa = PBXReferenceProxy;
-                       fileType = wrapper.framework;
-                       path = DeepChordsSdk.framework;
-                       remoteRef = 3F3F02152ED452DC0038A1C8 /* PBXContainerItemProxy */;
-                       sourceTree = BUILT_PRODUCTS_DIR;
-               };
-/* End PBXReferenceProxy section */
-
 /* Begin PBXResourcesBuildPhase section */
                3F3F01E12ED451920038A1C8 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               3F3F13E12ED5A8C10038A1C8 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
                        shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n";
                        showEnvVarsInLog = 0;
                };
+               8D997A91CC5B5810A80A417F /* [CP] Check Pods Manifest.lock */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                               "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+                               "${PODS_ROOT}/Manifest.lock",
+                       );
+                       name = "[CP] Check Pods Manifest.lock";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                               "$(DERIVED_FILE_DIR)/Pods-DeepChordsSdk-checkManifestLockResult.txt",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+                       showEnvVarsInLog = 0;
+               };
                920C714DEF2228CDD463DAA2 /* [CP] Check Pods Manifest.lock */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               3F3F13DF2ED5A8C10038A1C8 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
 /* End PBXSourcesBuildPhase section */
 
 /* Begin XCBuildConfiguration section */
                                CODE_SIGN_STYLE = Automatic;
                                CURRENT_PROJECT_VERSION = 1;
                                DEVELOPMENT_TEAM = G23X75CJ67;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                               );
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_FILE = Example/Info.plist;
+                               INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "使用蓝牙哦";
                                INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
                                INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
                                INFOPLIST_KEY_UIMainStoryboardFile = Main;
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 1.0;
-                               PRODUCT_BUNDLE_IDENTIFIER = demo.Example;
+                               OTHER_LDFLAGS = (
+                                       "$(inherited)",
+                                       "-l\"icucore\"",
+                                       "-l\"swiftCoreGraphics\"",
+                                       "-framework",
+                                       "\"CFNetwork\"",
+                                       "-framework",
+                                       "\"Combine\"",
+                                       "-framework",
+                                       "\"IQKeyboardCore\"",
+                                       "-framework",
+                                       "\"IQKeyboardManagerSwift\"",
+                                       "-framework",
+                                       "\"IQKeyboardNotification\"",
+                                       "-framework",
+                                       "\"IQKeyboardReturnManager\"",
+                                       "-framework",
+                                       "\"IQKeyboardToolbar\"",
+                                       "-framework",
+                                       "\"IQKeyboardToolbarManager\"",
+                                       "-framework",
+                                       "\"IQTextInputViewNotification\"",
+                                       "-framework",
+                                       "\"IQTextView\"",
+                                       "-framework",
+                                       "\"QuartzCore\"",
+                                       "-framework",
+                                       "\"Security\"",
+                                       "-framework",
+                                       "\"SnapKit\"",
+                                       "-framework",
+                                       "\"SocketRocket\"",
+                                       "-framework",
+                                       "\"Toast_Swift\"",
+                                       "-framework",
+                                       "\"UIKit\"",
+                                       "-ObjC",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = deepchords.guchuandao.Example;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                SWIFT_VERSION = 5.0;
                                CODE_SIGN_STYLE = Automatic;
                                CURRENT_PROJECT_VERSION = 1;
                                DEVELOPMENT_TEAM = G23X75CJ67;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                               );
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_FILE = Example/Info.plist;
+                               INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "使用蓝牙哦";
                                INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
                                INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
                                INFOPLIST_KEY_UIMainStoryboardFile = Main;
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 1.0;
-                               PRODUCT_BUNDLE_IDENTIFIER = demo.Example;
+                               OTHER_LDFLAGS = (
+                                       "$(inherited)",
+                                       "-l\"icucore\"",
+                                       "-l\"swiftCoreGraphics\"",
+                                       "-framework",
+                                       "\"CFNetwork\"",
+                                       "-framework",
+                                       "\"Combine\"",
+                                       "-framework",
+                                       "\"IQKeyboardCore\"",
+                                       "-framework",
+                                       "\"IQKeyboardManagerSwift\"",
+                                       "-framework",
+                                       "\"IQKeyboardNotification\"",
+                                       "-framework",
+                                       "\"IQKeyboardReturnManager\"",
+                                       "-framework",
+                                       "\"IQKeyboardToolbar\"",
+                                       "-framework",
+                                       "\"IQKeyboardToolbarManager\"",
+                                       "-framework",
+                                       "\"IQTextInputViewNotification\"",
+                                       "-framework",
+                                       "\"IQTextView\"",
+                                       "-framework",
+                                       "\"QuartzCore\"",
+                                       "-framework",
+                                       "\"Security\"",
+                                       "-framework",
+                                       "\"SnapKit\"",
+                                       "-framework",
+                                       "\"SocketRocket\"",
+                                       "-framework",
+                                       "\"Toast_Swift\"",
+                                       "-framework",
+                                       "\"UIKit\"",
+                                       "-ObjC",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = deepchords.guchuandao.Example;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                SWIFT_VERSION = 5.0;
                        };
                        name = Release;
                };
+               3F3F13EC2ED5A8C10038A1C8 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = C91EC257243FCFD24EEE8863 /* Pods-DeepChordsSdk.debug.xcconfig */;
+                       buildSettings = {
+                               BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEAD_CODE_STRIPPING = NO;
+                               DEVELOPMENT_TEAM = G23X75CJ67;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = YES;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                               );
+                               GENERATE_INFOPLIST_FILE = YES;
+                               INFOPLIST_KEY_NSHumanReadableCopyright = "";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MACH_O_TYPE = staticlib;
+                               MARKETING_VERSION = 1.0;
+                               MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+                               MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+                               OTHER_LDFLAGS = (
+                                       "$(inherited)",
+                                       "-l\"icucore\"",
+                                       "-framework",
+                                       "\"CFNetwork\"",
+                                       "-framework",
+                                       "\"Security\"",
+                                       "-framework",
+                                       "\"SocketRocket\"",
+                                       "-ObjC",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = demo.DeepChordsSdk;
+                               PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+                               SKIP_INSTALL = YES;
+                               SWIFT_EMIT_LOC_STRINGS = YES;
+                               SWIFT_INSTALL_MODULE = YES;
+                               SWIFT_INSTALL_OBJC_HEADER = NO;
+                               SWIFT_VERSION = 5.0;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
+                       };
+                       name = Debug;
+               };
+               3F3F13ED2ED5A8C10038A1C8 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 23C20F392C077DCC8875F909 /* Pods-DeepChordsSdk.release.xcconfig */;
+                       buildSettings = {
+                               BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEAD_CODE_STRIPPING = NO;
+                               DEVELOPMENT_TEAM = G23X75CJ67;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = YES;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                               );
+                               GENERATE_INFOPLIST_FILE = YES;
+                               INFOPLIST_KEY_NSHumanReadableCopyright = "";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MACH_O_TYPE = staticlib;
+                               MARKETING_VERSION = 1.0;
+                               MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+                               MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+                               OTHER_LDFLAGS = (
+                                       "$(inherited)",
+                                       "-l\"icucore\"",
+                                       "-framework",
+                                       "\"CFNetwork\"",
+                                       "-framework",
+                                       "\"Security\"",
+                                       "-framework",
+                                       "\"SocketRocket\"",
+                                       "-ObjC",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = demo.DeepChordsSdk;
+                               PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+                               SKIP_INSTALL = YES;
+                               SWIFT_EMIT_LOC_STRINGS = YES;
+                               SWIFT_INSTALL_MODULE = YES;
+                               SWIFT_INSTALL_OBJC_HEADER = NO;
+                               SWIFT_VERSION = 5.0;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
+                       };
+                       name = Release;
+               };
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               3F3F13EB2ED5A8C10038A1C8 /* Build configuration list for PBXNativeTarget "DeepChordsSdk" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               3F3F13EC2ED5A8C10038A1C8 /* Debug */,
+                               3F3F13ED2ED5A8C10038A1C8 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
 /* End XCConfigurationList section */
        };
        rootObject = 3F3F01DB2ED451920038A1C8 /* Project object */;
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/xcshareddata/xcschemes/DeepChordsSdk.xcscheme b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example.xcodeproj/xcshareddata/xcschemes/DeepChordsSdk.xcscheme
new file mode 100644 (file)
index 0000000..75f652e
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1640"
+   version = "1.7">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES"
+      buildArchitectures = "Automatic">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "3F3F13E22ED5A8C10038A1C8"
+               BuildableName = "DeepChordsSdk.framework"
+               BlueprintName = "DeepChordsSdk"
+               ReferencedContainer = "container:Example.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Release"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "3F3F13E22ED5A8C10038A1C8"
+            BuildableName = "DeepChordsSdk.framework"
+            BlueprintName = "DeepChordsSdk"
+            ReferencedContainer = "container:Example.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
index fb4e325..dd3c9af 100644 (file)
@@ -21,7 +21,5 @@
                        </array>
                </dict>
        </dict>
-       <key>NSBluetoothAlwaysUsageDescription</key>
-       <string>使用蓝牙哦</string>
 </dict>
 </plist>
index 424bb67..dcd6df8 100644 (file)
@@ -51,6 +51,10 @@ class LogVC: UIViewController {
         vc.delegate = self
         vc.modalPresentationStyle = .overFullScreen
         self.present(vc, animated: true, completion: nil)
+        
+//        let vc = UIActivityViewController(activityItems: [URL(fileURLWithPath: filePath)], applicationActivities: nil)
+//        vc.modalPresentationStyle = .overFullScreen
+//        App.shared.topVC().present(vc, animated: true)
     }
 }
 
index 56a8db4..321585c 100644 (file)
@@ -6,7 +6,7 @@
 //
 
 import UIKit
-
+import DeepChordsSdk
 class SceneDelegate: UIResponder, UIWindowSceneDelegate {
 
     var window: UIWindow?
@@ -19,6 +19,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
         guard let _ = (scene as? UIWindowScene) else { return }
         App.shared.window = window
         window?.rootViewController = UINavigationController(rootViewController: HomeVC())
+        DeepChordsAiSdk.shared.initSDK()
     }
 
     func sceneDidDisconnect(_ scene: UIScene) {
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/LogManager.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/LogManager.swift
deleted file mode 100644 (file)
index 38b5c78..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-////
-////  LogManager.swift
-////  Example
-////
-////  Created by liangshi on 2025/11/24.
-////
-//
-//import Foundation
-//
-///// 日记管理
-//class Logger {
-//    static var isDebug: Bool = true
-//    
-//    fileprivate static let shared = Logger()
-//    private var fileHandle:FileHandle?
-//    private init() {
-//        let path = getPath()
-//        fileHandle = FileHandle(forWritingAtPath: path)!
-//        //fileHandle?.seekToEndOfFile()
-//    }
-//    
-//    fileprivate var dateString: String { Date().format(.full) }
-//    
-//    static var logs: [String] = []
-//    
-//    
-//    private func getPath()->String{
-//        let foldPath = NSHomeDirectory() + "/Documents/"
-//        let fileManager = FileManager.default
-//        if !fileManager.fileExists(atPath: foldPath) {
-//            do {
-//                try FileManager.default.createDirectory(atPath: foldPath, withIntermediateDirectories: true, attributes: nil)
-//            } catch {
-//                return ""
-//            }
-//        }
-//        let path = foldPath + "\(Date().format(.middle)).log"
-//        if !FileManager.default.fileExists(atPath: path) {
-//            FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)
-//            
-//        }
-//        return path
-//    }
-//}
-//
-//extension Logger {
-//    static func debug(_ logs: Any..., line: Int = #line, separator: String = " ", terminator: String = "\n") {
-//        objc_sync_enter(Logger.shared)
-//        if Logger.isDebug {
-//            print(Logger.shared.dateString, terminator: " [Example-\(String(format: "%03d", line))]: ")
-//            print(logs, separator: separator, terminator: terminator)
-//            let logString = Logger.shared.dateString + " [Example-\(String(format: "%03d", line))]: " + logs.map({ "\($0)" }).joined(separator: separator) + terminator
-//            Self.logs.append(logString)
-//            Logger.shared.saveLog(log: logString)
-//        }
-//        objc_sync_exit(Logger.shared)
-//        
-//        
-//    }
-//    
-//    private func saveLog(log:String){
-//        fileHandle?.write(log.data(using: .utf8)!)
-//    }
-//}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/Untitled.swift b/document/DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/tools/Untitled.swift
deleted file mode 100644 (file)
index f97f11d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-//
-//  Untitled.swift
-//  Example
-//
-//  Created by liangshi on 2025/11/25.
-//
-
index 8f5ff74..4d306eb 100644 (file)
@@ -40,11 +40,13 @@ PODS:
   - IQTextView (1.0.5):
     - IQKeyboardToolbar/Placeholderable
   - SnapKit (5.7.1)
+  - SocketRocket (0.7.1)
   - Toast-Swift (5.1.1)
 
 DEPENDENCIES:
   - IQKeyboardManagerSwift
   - SnapKit (~> 5.7.0)
+  - SocketRocket
   - Toast-Swift
 
 SPEC REPOS:
@@ -58,6 +60,7 @@ SPEC REPOS:
     - IQTextInputViewNotification
     - IQTextView
     - SnapKit
+    - SocketRocket
     - Toast-Swift
 
 SPEC CHECKSUMS:
@@ -70,8 +73,9 @@ SPEC CHECKSUMS:
   IQTextInputViewNotification: f5e954d8881fd9808b744e49e024cc0d4bcfe572
   IQTextView: ae13b4922f22e6f027f62c557d9f4f236b19d5c7
   SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
+  SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
   Toast-Swift: 7a03a532afe3a560d4044bc7c237e2864d295173
 
-PODFILE CHECKSUM: 5d97c5bf393ba3a0211c0fe64821f515e1d9488f
+PODFILE CHECKSUM: 3b64f91d7c4f6c0036af83b3b1ff330c07d705a8
 
 COCOAPODS: 1.16.2
index 8f5ff74..4d306eb 100644 (file)
@@ -40,11 +40,13 @@ PODS:
   - IQTextView (1.0.5):
     - IQKeyboardToolbar/Placeholderable
   - SnapKit (5.7.1)
+  - SocketRocket (0.7.1)
   - Toast-Swift (5.1.1)
 
 DEPENDENCIES:
   - IQKeyboardManagerSwift
   - SnapKit (~> 5.7.0)
+  - SocketRocket
   - Toast-Swift
 
 SPEC REPOS:
@@ -58,6 +60,7 @@ SPEC REPOS:
     - IQTextInputViewNotification
     - IQTextView
     - SnapKit
+    - SocketRocket
     - Toast-Swift
 
 SPEC CHECKSUMS:
@@ -70,8 +73,9 @@ SPEC CHECKSUMS:
   IQTextInputViewNotification: f5e954d8881fd9808b744e49e024cc0d4bcfe572
   IQTextView: ae13b4922f22e6f027f62c557d9f4f236b19d5c7
   SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
+  SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
   Toast-Swift: 7a03a532afe3a560d4044bc7c237e2864d295173
 
-PODFILE CHECKSUM: 5d97c5bf393ba3a0211c0fe64821f515e1d9488f
+PODFILE CHECKSUM: 3b64f91d7c4f6c0036af83b3b1ff330c07d705a8
 
 COCOAPODS: 1.16.2
index 75530f1..e0e2481 100644 (file)
        objects = {
 
 /* Begin PBXBuildFile section */
-               01216C042B056FFF0FC7EE32A002C38A /* IQKeyboardCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 488126919669AEE0AB6BD8855DBA7E1D /* IQKeyboardCore-dummy.m */; };
-               0185547536624B4BC74DA12FF9D14085 /* IQKeyboardToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB854D7CA85BFEEFB6266DFA1E9D61B8 /* IQKeyboardToolbarManager.swift */; };
-               05F4664FC4EF89925161A064AA6481BB /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27FF931A64B73FEE5D4A85928D51804A /* IQKeyboardManager+Position.swift */; };
-               064D909CD827405E8DCC309DB1B7775A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB1CED982DADF5E89D9B7C4994281A20 /* ConstraintLayoutSupportDSL.swift */; };
-               070601D9903BE1D11DD6DD1367C3F012 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               07F73EA22A5F4AA24C081D7739D6652C /* IQKeyboardToolbarConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 668BB2AC6F690F784C35587B8BF5F759 /* IQKeyboardToolbarConstants.swift */; };
-               09D303C994021652DF841C463DBD1DC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               09E1F569A93FAD4B9149E30B9301F44A /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ECEAA4A365919AC774C896E18E759AA /* ConstraintPriority.swift */; };
-               09FABB7674B8063235602CC7AEBFAF3D /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BEC044A89EDCA943365E4156BE49F6A /* IQBarButtonItem.swift */; };
-               0A7F4733B11AE10847063A9D648C9F2C /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288DC5C96A5DECE79EDC44987BF2A77C /* Combine.framework */; };
-               0AE37480557069924C434356A50CB99D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               0C7E48CC6391092D8F5B4341E1EE7485 /* Toast-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D6041C81E4991A91F5A45F589A80282E /* Toast-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               0CA7A132ABE7018DE9295456732F38BB /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADFD372200F5622C3E275C18DAEF64C /* ConstraintAttributes.swift */; };
-               0DE5DB9C6227B3416778D8417DD95EA9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A61B701D8AF835B15A01AC3B3ABDFB /* ConstraintView+Extensions.swift */; };
-               103706F1CB831BCC4745A590866274ED /* UIView+IQKeyboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6F24EDA81C0D3AF65C1C30A74BC8466 /* UIView+IQKeyboardExtension.swift */; };
-               10B43C98D0F772130D75F66A1984E68C /* IQKeyboardReturnManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 612302F0FAD21B517B996AB187CA6449 /* IQKeyboardReturnManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               1194E62AA3F6F506799B1A43B16942B5 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C64F946A6CF4B3D30483C6FCDE237D46 /* ConstraintDirectionalInsets.swift */; };
-               154230695B4E3D61B8D2BD02DAA2CE91 /* IQKeyboardManager+Appearance_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33C48FDE215E1319970EE8067F27C546 /* IQKeyboardManager+Appearance_Deprecated.swift */; };
-               172B6B4E5550420B8131FBD62C975821 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70722A63D8C3F991856EF872356AFB1 /* Toast.swift */; };
-               181E35D74C67FFDE9F8A5A870F5F60B1 /* IQKeyboardToolbarManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442771E28F516C75AF67BCAA132E4A56 /* IQKeyboardToolbarManager+Toolbar.swift */; };
-               18D58CD25F5E8B4A86170A1D907516C3 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */ = {isa = PBXBuildFile; fileRef = 110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */; };
-               1D06D98BA3B7C6A1D7BFEF8DB9CB1948 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9A926C38DDD5B0CB77DBF7BE94EF672E /* PrivacyInfo.xcprivacy */; };
-               205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               24637C51989929A62E5E75585544A14D /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28400A2CE3EE2B07169489BF74B7FE98 /* IQKeyboardManager+Debug.swift */; };
-               25BE643B401DBC4C6DC006ED6871486D /* IQTextView-IQTextView in Resources */ = {isa = PBXBuildFile; fileRef = 847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */; };
-               2B067825708D13E7E455426389397D1A /* UIView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8E4BB35A9C12143A016443E5B5AF064 /* UIView+IQKeyboardManagerExtension.swift */; };
-               2B2EB369550CE92CEEFCBFD3D32B8A3F /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1B695DB3D9B30B1E895FE056EDB0D2 /* ConstraintInsetTarget.swift */; };
-               30D6F928FC08B13B5BFEEB154A2089C1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B6A56AC9E28078E6884FB890E1B4F3 /* IQKeyboardManager.swift */; };
-               332EB3263B1002A5A0A146CCE70501AD /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD6E85B5A6A0DAC92CE30328684DD7C8 /* IQRootControllerConfiguration.swift */; };
-               355A2A3962A82AE25D219DB774CB6AEE /* UIView+ResignObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = E78AC8B5EF810FFB832428E336AF5659 /* UIView+ResignObjc.swift */; };
-               3577F172FA68CBAE47CFEE6FE25C5404 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF2D58EB40EE8221B053FACB532A13C1 /* ConstraintOffsetTarget.swift */; };
-               36C3C4911A9F44D14023276D2FEB61FC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = BD749634E8E36AB77EC9F46FE998985D /* PrivacyInfo.xcprivacy */; };
-               378BD5280F6C07B11CF30B253D824972 /* IQKeyboardExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D298A925E306A10B586FBD63C04A81F /* IQKeyboardExtended.swift */; };
-               39B33D7873CD89C6A7E96ACD36A1EDFB /* UIScrollView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF7B9A8FF0D82C370F68F2653F54B11 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */; };
-               3A6B20BEE4F7A5B5835DE5D1E509754E /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8159912988182904A096C5A3036AA65 /* IQActiveConfiguration.swift */; };
-               3C9F55B7C2C67A67897AC53281139677 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               3D3B646B4988314275B40E97BEB16C7F /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964B48760245F36728533BAAD3F7C58D /* ConstraintLayoutGuideDSL.swift */; };
-               3E715D5BADDEACEEF30D6A4CA82CDA9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               3E8CD7E5D86973B25CF99233C524ED43 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               3EE1D20B4B3D689A0E336B4637441CE1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               40BB4A23AD4A18E81678F58EAA90EB85 /* UIScrollView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C2845BF731838039657B93E29F7BD5F /* UIScrollView+IQKeyboardManagerExtension.swift */; };
-               42AE30E987B1F2183EEE1414C5108662 /* IQTextView+Placeholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AD91692C7EF9CB5B47DCFFDBCF2BF1F /* IQTextView+Placeholderable.swift */; };
-               431168277840D15391CA0C4A59E81418 /* IQKeyboardToolbarManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7717832333BD8513940DC7E1C94C2EBC /* IQKeyboardToolbarManager+Debug.swift */; };
-               43B865B4E034A97737024C4ACBC60866 /* IQKeyboardToolbar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D0E7899589D00C50376C1B07158AC50 /* IQKeyboardToolbar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               45D50B26F412D12C2DF12F804CB08FEF /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 053B43B12209A016C25BFB227BD91974 /* PrivacyInfo.xcprivacy */; };
-               46ECF78EB1506D9CB79AA7D6D2383800 /* IQKeyboardNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7683AA5C3B2022EED0FC68DA18C8CD8F /* IQKeyboardNotification-dummy.m */; };
-               47B732921A7B90BB28D526626DDB061C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               47C9A000C20E04EC69BFEEF3C6AC6256 /* IQKeyboardAppearanceManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1081457464A541862ABFB75CFF611B1 /* IQKeyboardAppearanceManager+Internal.swift */; };
-               4C484793E290AB422E3600CF962F9792 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               4D055AD31ECB4F14AA2CD02DB2155BE0 /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */ = {isa = PBXBuildFile; fileRef = F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */; };
-               4F4DEB687C0E4834A5B291DEE0651D6A /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71B0C2CECF35343E42C956FB7F6F996F /* ConstraintMaker.swift */; };
-               50224027880A4546066B64EE1B1C51CF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               527FF29C02A555B242FEACAB7AE97287 /* IQKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D76E404E67961840A2FA9E8B592C51 /* IQKeyboardNotification.swift */; };
-               52B0DA7ED06413C2CC26D5CBF31F8352 /* IQKeyboardToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7278B677DCE375A2402B9587C28AC4E9 /* IQKeyboardToolbarConfiguration.swift */; };
-               57C4F6EFB30DDD14E960AC2D6B34F904 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 090EF934D945BE1D4018F0D2D19007E0 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               5922A6A0AE7152CF436356B3556F1835 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 679C6C1E29E033FE6D3AF5FAF79916A0 /* ConstraintItem.swift */; };
-               59F34874DA4ABB2F5C4E09EA6865936B /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 125B7ADD9F6F9E6FEAA2172EBF355938 /* ConstraintLayoutGuide.swift */; };
-               61C3C9CD69B4AD5D26416201A45A80E2 /* IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC9C89E0D0A3A0CBF2646E4FFB03FD79 /* IQKeyboardToolbar.swift */; };
-               61ED64340371AB30B936A019C22C376D /* UIView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54E68DA1C9D605BCA82C37688A0D6C22 /* UIView+IQKeyboardManagerExtensionObjc.swift */; };
-               62B90C6FC83F91F91A4BF12022C7B050 /* UIView+Parent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37E4894C5CC2317619C7ECD09116882 /* UIView+Parent.swift */; };
-               636E78B80031F9F7AB749AA161B6E2E2 /* Array+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2527373B09781527CFB5F6FCCAE7B821 /* Array+Sort.swift */; };
-               644BBAB0F823E2D81A4EF7114F2F264E /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */ = {isa = PBXBuildFile; fileRef = 80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */; };
-               6B95FAC4BA6CBF1B1A33BFA00B521A1B /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D68B5BFA92A84156B07F2625E12FD12 /* IQKeyboardReturnManager+UITextViewDelegate.swift */; };
+               01216C042B056FFF0FC7EE32A002C38A /* IQKeyboardCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BFB6F598FCE7D6294584E7334E04ECF2 /* IQKeyboardCore-dummy.m */; };
+               020799C53BF7A383514499A2B455C635 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */ = {isa = PBXBuildFile; fileRef = 110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */; };
+               0362BB03F32EC9FB6013DEE29E8E33EF /* SRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = ED22317A1312CBBA0134A8E449ABD201 /* SRHTTPConnectMessage.m */; };
+               04986EEC139DC7C45DAB58056315FDC8 /* SRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = B278701FAF564A3D25B8F87CCDB798D6 /* SRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               05F4664FC4EF89925161A064AA6481BB /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 936A804D23E5F53A2A38402D624D6EA2 /* IQKeyboardManager+Position.swift */; };
+               064D909CD827405E8DCC309DB1B7775A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55BC45618B737DBC6885D98DC8C9C0C /* ConstraintLayoutSupportDSL.swift */; };
+               06B16BF7C2EA99B47539C34FF4150ABF /* Array+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7594A52F0B7E0AD0D9F26BE8026E1E4C /* Array+Sort.swift */; };
+               070601D9903BE1D11DD6DD1367C3F012 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               07543B1010D44AA155CAFADBF03E66DB /* IQKeyboardToolbarManager+Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782D18DB9D0B7B74F8613026BAD77E86 /* IQKeyboardToolbarManager+Action.swift */; };
+               075FBDF5D186F8BF4537BC34E526F9DB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               07632D281C5DED61CC7866B079BC9D2C /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EF0C08E9D339F2CB75ED0C9E7FA2C0B /* SocketRocket.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               09D303C994021652DF841C463DBD1DC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               09E1F569A93FAD4B9149E30B9301F44A /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6058A4E7C2EAB9B01A8DBB5AAD7E72A2 /* ConstraintPriority.swift */; };
+               0B380F6921261E661C9EF26B02E5D634 /* IQKeyboardNotification-IQKeyboardNotification in Resources */ = {isa = PBXBuildFile; fileRef = 120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */; };
+               0C7E48CC6391092D8F5B4341E1EE7485 /* Toast-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0CA09E0900EA77648A05D608CBA29F /* Toast-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               0CA7A132ABE7018DE9295456732F38BB /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = E293311AF50DC30E5B7F7D2D91BEB28A /* ConstraintAttributes.swift */; };
+               0DE5DB9C6227B3416778D8417DD95EA9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C674397D453B6D18F9DE46BC55B6FF /* ConstraintView+Extensions.swift */; };
+               0EB83A2AC8AAECEE26C8739477B3A431 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3649D66694159EF7F40B5A7377AC04D1 /* PrivacyInfo.xcprivacy */; };
+               1194E62AA3F6F506799B1A43B16942B5 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE50CC6D98E37DA330EADC9F9C949F0 /* ConstraintDirectionalInsets.swift */; };
+               11A3EB5BE3623EC013AA37B49813E56C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               1213C5A29D13B6F2E3AE2356CB9F5807 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               154230695B4E3D61B8D2BD02DAA2CE91 /* IQKeyboardManager+Appearance_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD0C3C29384D3EEBCB4BE346B1CA890 /* IQKeyboardManager+Appearance_Deprecated.swift */; };
+               164062B86FCAFF355EE04D7A23A6EA1C /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6C4219D35CB16DFEC9A662797E27F4D8 /* PrivacyInfo.xcprivacy */; };
+               172B6B4E5550420B8131FBD62C975821 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D134ED7EB13A9F9FADC82CC86BC10FA /* Toast.swift */; };
+               1A117EC847E321871E40EB39F3576D11 /* SRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = B4BBB6B50C15DFF1221CD8E66DC2D354 /* SRDelegateController.m */; };
+               1A67B4D6FA3F8FB9A1083EF74C966F64 /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F565A673CEEF3B818D7A75F2A2EE8B0 /* UIView+IQKeyboardExtensionDeprecated.swift */; };
+               1B5995FCE11B496E4102AC5AD357249A /* IQTextInputViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10288C630688257B185941E1EA55E346 /* IQTextInputViewInfoModel.swift */; };
+               1CCB9F1FA415F93E8F4AD0E4692E4BC6 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C97A233DEE5D1279877CD8292A10AD84 /* PrivacyInfo.xcprivacy */; };
+               205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               20B8C7C05E3AF3032935F30500EF5550 /* SRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = A6C0BF00B3D547B50DBE54D99A1307F4 /* SRIOConsumerPool.m */; };
+               2409EDE57DC13E13E7C7A81E9E2DDD9E /* IQTextView-IQTextView in Resources */ = {isa = PBXBuildFile; fileRef = 847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */; };
+               24637C51989929A62E5E75585544A14D /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B0C5FFB36CB099605387F3B9F34032 /* IQKeyboardManager+Debug.swift */; };
+               24A7645685912B02F96A1291D607DBAA /* UIView+IQKeyboardExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A599D5DDFD46F7296A5F93623AB6C3A /* UIView+IQKeyboardExtensionObjc.swift */; };
+               2A1DE175A760E9F7CF7AF711BF549BC9 /* IQKeyboardReturnManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DA9BF97689FA8F63852FC5D7EE814D2D /* IQKeyboardReturnManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               2B067825708D13E7E455426389397D1A /* UIView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFB64A96CC2B18E25FF662E37821253 /* UIView+IQKeyboardManagerExtension.swift */; };
+               2B2EB369550CE92CEEFCBFD3D32B8A3F /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C5C459A1F7BF6872A58A16B7092803 /* ConstraintInsetTarget.swift */; };
+               2B518589AC1F3F54CE14633027E81734 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = BC590BB41230B885D405920A55DAD210 /* PrivacyInfo.xcprivacy */; };
+               2B7184BD487141C385B3CC3F3984AA55 /* SRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = C33C375328643D5A9A1D1EA02C88D419 /* SRSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               30D6F928FC08B13B5BFEEB154A2089C1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 895778DCA58AE753D96DD48F3E036F4F /* IQKeyboardManager.swift */; };
+               310A311043229B0F1C21B72E9FD37271 /* IQKeyboardToolbarManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F992A0DC4578F2D62CB095A497114CC /* IQKeyboardToolbarManager+Debug.swift */; };
+               332EB3263B1002A5A0A146CCE70501AD /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10C547231342B150BEC39F40295D087E /* IQRootControllerConfiguration.swift */; };
+               355A2A3962A82AE25D219DB774CB6AEE /* UIView+ResignObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12415404E6E70407610188D7ADDC1D02 /* UIView+ResignObjc.swift */; };
+               3577F172FA68CBAE47CFEE6FE25C5404 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B77F72F31D132841951EF8E4FA67360A /* ConstraintOffsetTarget.swift */; };
+               378BD5280F6C07B11CF30B253D824972 /* IQKeyboardExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0F99DC81F369C1B739E19DE3923C65A /* IQKeyboardExtended.swift */; };
+               37E0B956B90DE65985C993A4DF4D6CA3 /* UIView+Responders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D19ACC9A79A3CF24DA377E12303E12 /* UIView+Responders.swift */; };
+               380EA4E3E2A772560E3A0670B6406450 /* IQTextInputViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ECC82996747BDD9C0FF35EC1ECF0751 /* IQTextInputViewInfo.swift */; };
+               39B33D7873CD89C6A7E96ACD36A1EDFB /* UIScrollView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF1258267E4FF8FA1F298C5303B0E86 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */; };
+               3A6B20BEE4F7A5B5835DE5D1E509754E /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63292C39BAA9B9EB776AAA03EABD932 /* IQActiveConfiguration.swift */; };
+               3BB0B5D924BE769E95E64A5E6FC1675D /* NSRunLoop+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AE37E30F693ED15CA31B520ED420454 /* NSRunLoop+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               3D1D0BFA512309AE63825C811A1BFC81 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9939F486FEF106F98BDD0806CA8E0624 /* IQInvocation.swift */; };
+               3D3B646B4988314275B40E97BEB16C7F /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BBB0405889161CCDDCD4F166723CBF /* ConstraintLayoutGuideDSL.swift */; };
+               3E715D5BADDEACEEF30D6A4CA82CDA9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               3F89C7F7F091BA0DFD648E0286E5665D /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF60B19D2E8B68520E5121EFFF5A7D4B /* IQKeyboardToolbarPlaceholderConfiguration.swift */; };
+               40BB4A23AD4A18E81678F58EAA90EB85 /* UIScrollView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F70480B31A6883BEDFC6C623FC76A32 /* UIScrollView+IQKeyboardManagerExtension.swift */; };
+               444E95921E2BDCE7512867EAA1A6B381 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = D389D10DEC7EB9B503CD45CE58851CA6 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               44EFA9A76932F81582D03076A8346A4B /* SRIOConsumerPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C4CE911087AC8260002E6859821FAF0 /* SRIOConsumerPool.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               47C9A000C20E04EC69BFEEF3C6AC6256 /* IQKeyboardAppearanceManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6381011924A059A30C85325FB30E74A7 /* IQKeyboardAppearanceManager+Internal.swift */; };
+               49D83EC94BF242A406B6553F44E52024 /* IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CAFAB9111F6F5AAEFD9E00CD0AF892 /* IQKeyboardToolbar.swift */; };
+               49F88DA1CED23ACF70ED0D51D2BCCE4F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C688B508E11EFC4D24CB920CAF96B948 /* PrivacyInfo.xcprivacy */; };
+               4B2FB381B6E14F9E0F442557ADDAA2F8 /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */ = {isa = PBXBuildFile; fileRef = F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */; };
+               4C1E30BD1A58C10DE84E572ECD5DB54D /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */ = {isa = PBXBuildFile; fileRef = 80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */; };
+               4C26DF4F8D6AC77894F18EC89896258B /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B11EBC98CF5A275C2F8077CDEA1F18 /* IQKeyboardInfo.swift */; };
+               4DC15DC2DF3C4BBA344C86B112C9C68B /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 95BCD7B08FF0A2A4F9B0A36B92688E27 /* SRWebSocket.m */; };
+               4E7BB3FBF4B3680AF358C0A0A0F34011 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               4F4DEB687C0E4834A5B291DEE0651D6A /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4C8C6089794ACE3010224A9FB1D90EA /* ConstraintMaker.swift */; };
+               50ECD138DA8BC1FBBEBFBF3CE5CEB5FF /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 643F1AECE038E1886712C3619E367201 /* PrivacyInfo.xcprivacy */; };
+               548F940AC071FBFD9D8DF209775771E5 /* UIView+IQKeyboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9976447B92E50DDDCA64DBDE5A47FD7F /* UIView+IQKeyboardExtension.swift */; };
+               56851E11140A140A15088A41DC4C33BD /* NSURLRequest+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3187DDFEE4C490953B2AEF7B0D19EB1B /* NSURLRequest+SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               56E30C414ED43846B453D6FDE75DF3B5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 25BADE0B95009E3B02C9E6EBB47417A3 /* PrivacyInfo.xcprivacy */; };
+               57A34E19799F03EB53206496FD362449 /* SRURLUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 27DA2684B87B3639C3D3D439F177E219 /* SRURLUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               57C4F6EFB30DDD14E960AC2D6B34F904 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBCEC8A83AB63E7D141D4EA274517BA /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               5922A6A0AE7152CF436356B3556F1835 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 080D923BC81BB12EE5B738187A72A0D4 /* ConstraintItem.swift */; };
+               59F34874DA4ABB2F5C4E09EA6865936B /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2793937CF93115D3117A82FB873124B /* ConstraintLayoutGuide.swift */; };
+               5B67445AE2F3934BDA08D407BBA3028B /* SocketRocket-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E46C7EF1F6BD003E0DEC56B05B15DDF /* SocketRocket-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               5BB666D0986483D015712429F9FF2674 /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E229F790E827392A80B7F4C7A6110F /* IQKeyboardReturnManager+UITextViewDelegate.swift */; };
+               5DFD87881941225F0A5EAE64EB247708 /* SRSIMDHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E9444EE5839429C60E9A16651BAD78 /* SRSIMDHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               5E7E257AE5D618E46EF57A5818010F85 /* NSRunLoop+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FB6A208FD72153F040D4E1354F225B4 /* NSRunLoop+SRWebSocket.m */; };
+               6135798CCD656C1B3A6EA5738A23190A /* SRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A2B3566A43C15186D3A1D9F91DB662 /* SRSIMDHelpers.m */; };
+               61ED64340371AB30B936A019C22C376D /* UIView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D8DC22EC08F3E72E7E53ADA12E80CC0 /* UIView+IQKeyboardManagerExtensionObjc.swift */; };
+               62B90C6FC83F91F91A4BF12022C7B050 /* UIView+Parent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8F3D9A02DBFA1FF9899DD8933A95DA /* UIView+Parent.swift */; };
+               64365C2671D733D3AAE1E25684E73255 /* Pods-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B05AAE9D91B32B46928A2293611FF4 /* Pods-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               6464C345447C71904DA3706AACA3F55D /* SRProxyConnect.h in Headers */ = {isa = PBXBuildFile; fileRef = 32080BC56EEB26340C6292BA94F068B6 /* SRProxyConnect.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               64684CAF22CAC1002958805187019FD7 /* IQDeepResponderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 484ECEC55CB9E98BAF0AE020F8FFF767 /* IQDeepResponderContainerView.swift */; };
+               65ABC841033E6707C3419B304C1DDD50 /* IQKeyboardNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA85287A9C3D760A6324EF926C0C44CE /* IQKeyboardNotification-dummy.m */; };
+               65E5693A457A8AEE3E5758075D1E2792 /* SRError.h in Headers */ = {isa = PBXBuildFile; fileRef = E7EE2526E40B99B0F243808A2396A01C /* SRError.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               6645E9FB4265C5712E38055C931E1630 /* NSURLRequest+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = ED7286BA89901CA1D622A1FCF81E718C /* NSURLRequest+SRWebSocket.m */; };
+               6735CEF5CEDBE284902139B3ED3F2E73 /* UIView+RespondersObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAD5B92B7CF2B0746297208D610D3CD /* UIView+RespondersObjc.swift */; };
                6DE9FD143CBC24075601F8FE2ADC4115 /* IQKeyboardCore-IQKeyboardCore in Resources */ = {isa = PBXBuildFile; fileRef = 6E897F35E5E27028AC58B14B552FBC8D /* IQKeyboardCore-IQKeyboardCore */; };
-               6E39129FC8643A70C276801FEF4C280D /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA15CE80784F2ABB4BC5A66CFF93FA26 /* Constraint.swift */; };
-               700B342543C8220BF44DC2F2448F70C6 /* UIView+Responders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648E8949F15F11A016686DAB0E5B508E /* UIView+Responders.swift */; };
-               7012CE5AAAF1AEAA878B00AA9B7A3A23 /* IQTextInputViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9285BD914CCA73118032F2F1792F68 /* IQTextInputViewNotification.swift */; };
-               702C60CEA26061730A208FD9AD3148A3 /* IQTextView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2918DFD6FEDA148940283A8ED415E2 /* IQTextView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               72B966A1388CD724413648ADE6819481 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = A8051AF85E41AF3CE961220AB4E33AFE /* PrivacyInfo.xcprivacy */; };
-               737F408F45BEB0CB13FEFD5E406996A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               766984BB04C114C7717FA84FD10CEC77 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               769B4905AD35AD554AA9DE98DA8E4E11 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D541D12A563E883F4018584090E33DB /* IQKeyboardManager+Deprecated.swift */; };
-               77F1B40C21EFF28350EDA6A12263B098 /* IQKeyboardManager+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C7EDD0BE0032658D0A03A3BB7CF623 /* IQKeyboardManager+Appearance.swift */; };
-               7AF516B98D45391B909D507D0244104C /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F474BB8F008181749A6BEDD3FF6B03E /* ConstraintDescription.swift */; };
-               7B0BC17748C9775A8299A96D501CE5A8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72D1C2A015F7D41AEDD14BCE9FA22C03 /* QuartzCore.framework */; };
-               7B6FECCE2D5B00F838A8938B4A87D5E4 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */ = {isa = PBXBuildFile; fileRef = A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */; };
-               7CBA95E07A492F7311C7DD8EDF0B4172 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C581F1999F4CCA213DECDF99D28E47A /* IQScrollViewConfiguration.swift */; };
-               7D42390CDB4FA147504B03DA2A174A0C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334D1CD5A38B79DE9FE482556C492DFA /* ConstraintViewDSL.swift */; };
-               7EDEEAAEA314F2D8221F9ED0179A7843 /* IQTextInputViewNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1445F9B020E299209EDE5CD49F2EF94D /* IQTextInputViewNotification-dummy.m */; };
-               829CA2939955B57238D8CF3C53F3F404 /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB2B9CC26612D71D9645DAE895E0A6E3 /* UIView+IQKeyboardExtensionDeprecated.swift */; };
-               8475FCAD5EF1A75BC9BAF027EAB87AAF /* IQKeyboardToolbarManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1DF4BC58C1E1E0F060079D0689EC20 /* IQKeyboardToolbarManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               868A9F524A7985BDA1EA124D9BF4CA63 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AE6E9F7BEA7559570D1C4611BC97BA /* ConstraintDSL.swift */; };
-               868AD263A86B61C7722575FBCAD4056A /* Pods-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */; };
-               86CAB01D950C8BC35EDE0BDC01A2500B /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93572343CE1D7CC5E903F82DF724A64 /* ConstraintView.swift */; };
+               6E39129FC8643A70C276801FEF4C280D /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47BC329529726FFACA942239310E3841 /* Constraint.swift */; };
+               71311BC21C92A7DE376CAD928E325979 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4BC9A0614A1C63539C14C08655781F /* IQKeyboardToolbarManager+Deprecated.swift */; };
+               7174D48AADABCBE6FC53185C5442B952 /* NSURLRequest+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = FA41F5D42C8280BA202FDE26BDBDFFA3 /* NSURLRequest+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               721D0AFDE15FCC46F4579069672719B9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               737CE5F34A1D2B09DEF3038425A40877 /* IQTextView+Placeholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F86119EB8AFCE72C0BA2356BBA4C46 /* IQTextView+Placeholderable.swift */; };
+               769B4905AD35AD554AA9DE98DA8E4E11 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0689F5C192D1672448116583D233922 /* IQKeyboardManager+Deprecated.swift */; };
+               77F1B40C21EFF28350EDA6A12263B098 /* IQKeyboardManager+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = A44F945B3203BCA4B178E49ED53E5391 /* IQKeyboardManager+Appearance.swift */; };
+               782981022BF319DFD85AE89A392639A2 /* SRMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = CEA0C9AAC08B9E0D20DE8BC894AE3FDE /* SRMutex.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               7AF516B98D45391B909D507D0244104C /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF4B96374C0DB9D56AB95C3D5A31B152 /* ConstraintDescription.swift */; };
+               7B0BC17748C9775A8299A96D501CE5A8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 133A600484839BF74BDD51C8B0BB6EBE /* QuartzCore.framework */; };
+               7BA968278DAB1050E34D0B65E56E5846 /* IQKeyboardToolbar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 994130CE96E0F8ED28DCF165B03CB200 /* IQKeyboardToolbar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               7BBD64ADF2DD2B427F258E87F3EDA284 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E8E02D90547D6DBD75A856D8A4E1275 /* IQTitleBarButtonItem.swift */; };
+               7BEAD7E859FB5BFCACD23CE492484CC4 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1B2703C190723870111C925A464468 /* IQPlaceholderable.swift */; };
+               7CBA95E07A492F7311C7DD8EDF0B4172 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F6CB0808BEA63D36E484B5D53B6436 /* IQScrollViewConfiguration.swift */; };
+               7D42390CDB4FA147504B03DA2A174A0C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53921D76AE7ECC63293C2263C9325A0 /* ConstraintViewDSL.swift */; };
+               7F30D73D46CAD9D21A25738B11A6DDDA /* SRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 390BB9902E7A26E5A753B9CF32673BE9 /* SRURLUtilities.m */; };
+               7FCA9A032C39444BD74F08A5F3927839 /* Pods-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6BD2261427B29C50F84843B6BAB7DEA /* Pods-Example-dummy.m */; };
+               809199B64088AA02A6B900316396A83D /* IQKeyboardToolbarManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA718E8C5B46720F8012D7471BC6BF37 /* IQKeyboardToolbarManager+Toolbar.swift */; };
+               860017D588B23C12B08A3C4390BAEA56 /* IQKeyboardNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 822DD0DAF7E4428BCCDFE28EAD683ADD /* IQKeyboardNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               8667EBBAD4365F7E2DECFE792D488128 /* IQTextView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 64607CC28651258E6DAB2D1358080FB5 /* IQTextView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               868A9F524A7985BDA1EA124D9BF4CA63 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFCB22B3ED6C05251CBD3059AAE51013 /* ConstraintDSL.swift */; };
+               86CAB01D950C8BC35EDE0BDC01A2500B /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BBDD1BF37BF58D4C467C1D1F21D462 /* ConstraintView.swift */; };
+               870DC4F98094456228D282F5F6200609 /* IQTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B560A38E28D510B4A50AFF9595D57670 /* IQTextView-dummy.m */; };
+               8762AC084551DBB2E00C3091CAF011ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
                87E921A1D8B0C683DA2133709C867859 /* Toast-Swift-Toast-Swift in Resources */ = {isa = PBXBuildFile; fileRef = 13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */; };
-               883EDEE1C699497CF2A77C3B8A32A790 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42892A584E9AC22D35E1D9FE68B53469 /* ConstraintMultiplierTarget.swift */; };
-               894A8EA7637D4C761EC74FB4F16BEFD3 /* IQTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 71450C650474E14E27C58DC6031DED15 /* IQTextView-dummy.m */; };
-               8ACE9296AA479804EFD2D3CC417DE801 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               8AD605858D16DC3D7B735572F0C7ED8E /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 231CDDC4DB13BC0B46D3EB8176FFE464 /* IQPlaceholderable.swift */; };
-               8B0CD445CE2368FD1D2E5A97917004DA /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B10297739CDE35118B5C7226834CD882 /* PrivacyInfo.xcprivacy */; };
-               8BABA32F7B94A25D8E9208C0A8D90B2E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E142A384801F69E54EECA3E3F8667AF /* ConstraintMakerRelatable+Extensions.swift */; };
-               8C41EA954997897C3E30C5754010C05F /* UIViewController+ParentContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DAD88CD28AA6C418EA42F22ED77F6BE /* UIViewController+ParentContainer.swift */; };
-               8CBC72065F0261B373B958696985AF99 /* IQKeyboardResignHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078038EA55CCEFB2FCFDAC364A3A475F /* IQKeyboardResignHandler.swift */; };
-               908714BB1129E58E79E45ABBAFC67F5F /* Pods-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               91CA63A8C62222E89FBB8FA2B7FE9CDE /* IQKeyboardManager+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA0BFED3F4B8F736E248BED9F016F046 /* IQKeyboardManager+Resign.swift */; };
-               92884C4C1C02E75A52CC712EC8A34421 /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F708C6E5D928E67F9C3E7613BCB59A0D /* IQBarButtonItemConfiguration.swift */; };
-               9298CB7C2E4AC4E751E535DA15BEEFA8 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C9682F1DA72621A7697B6CC652E5564 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               93FA76E7D394EF1BE061B8AEB4E8F603 /* IQKeyboardNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCF122A4CCCE14CB1CC9357A7D12E0E /* IQKeyboardNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               98403A634D6A5D0ED83E9F41A1A84AB2 /* UIView+RespondersObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACE56E6AC8845E4C5C29E55E4CA9B2FF /* UIView+RespondersObjc.swift */; };
-               9D22F88B7F1AF054C2BF025DFB767154 /* IQKeyboardManager+ToolbarManagerDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 117ED6DB1BD04E643776E77477BB0EF1 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */; };
+               883EDEE1C699497CF2A77C3B8A32A790 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750817E69AAE97D1AF5F958FC5904BF2 /* ConstraintMultiplierTarget.swift */; };
+               89CAC1E5DC5833EE630A652957D253A7 /* SRLog.h in Headers */ = {isa = PBXBuildFile; fileRef = AF5E93556B3B98CA5218F3B9E49304F6 /* SRLog.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               8ACE9296AA479804EFD2D3CC417DE801 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               8BA78192EBB4433C386A932BE198C2AD /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = CF362111EEE4CBA3A09DDC5814422B70 /* PrivacyInfo.xcprivacy */; };
+               8BA91314914C4486DACA16122819AF1C /* IQTextInputViewNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C2878B4F3D509987EC767604F46AD0E1 /* IQTextInputViewNotification-dummy.m */; };
+               8BABA32F7B94A25D8E9208C0A8D90B2E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 529559A67714BC64192FD9BF92B33312 /* ConstraintMakerRelatable+Extensions.swift */; };
+               8C41EA954997897C3E30C5754010C05F /* UIViewController+ParentContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995B281C84F1083BE4DB31B75BCC029C /* UIViewController+ParentContainer.swift */; };
+               8CBC72065F0261B373B958696985AF99 /* IQKeyboardResignHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 261E9C437FF6FFF72C01BBB73341409D /* IQKeyboardResignHandler.swift */; };
+               8D0D15CE4E92BA4433AE7EA578FE3E15 /* SRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6839FC9EB46E8CB05E17C35E5A5B579F /* SRSecurityPolicy.m */; };
+               8DC89975CCCA53253DE9DB5646E468FB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               91CA63A8C62222E89FBB8FA2B7FE9CDE /* IQKeyboardManager+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = 236C98A9FAEF3200D70937E889092818 /* IQKeyboardManager+Resign.swift */; };
+               92571FFBEF3A7B2F4F633624013010EE /* SRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 8609C41722C0D97335DBF43B1CE7AB03 /* SRRunLoopThread.m */; };
+               9298CB7C2E4AC4E751E535DA15BEEFA8 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C8BDF6ED7A0F1533FC84E97705B2878 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               939EE0216FC02064B2F5894E87628182 /* SRRunLoopThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 43CBF3C99F0BF342AEE8D7C7BE945B62 /* SRRunLoopThread.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               95A620A5272057BA126D00CC498F9B8A /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED18FF4963E7B4F60DBBA903E25C67B /* Combine.framework */; };
+               975E6903FBA7CF724108613000500E7E /* IQKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A14C9A838BD693FFDCAF82F4D5604A /* IQKeyboardNotification.swift */; };
+               992815E207201EE57916809E07ADBD74 /* IQKeyboardToolbarConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC713814A822ABA18A07C72E6B97AE04 /* IQKeyboardToolbarConstants.swift */; };
+               9A3761D8CEFB0E2131D2EFA2DEBB3A99 /* SRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 68443C8F28AD901E531D6BFA7559C683 /* SRRandom.m */; };
+               9A3B9C740BC8FE0500132251551E5BE7 /* SRIOConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FE696F5243F520CB872AC051139FE5 /* SRIOConsumer.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               9CFA943AABBDB657A85AAAF2FB4DED67 /* IQKeyboardToolbarManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2460EF332DB152D7A7B9869C8F4032 /* IQKeyboardToolbarManager-dummy.m */; };
+               9D22F88B7F1AF054C2BF025DFB767154 /* IQKeyboardManager+ToolbarManagerDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61F58870F6E8F6EEF25FA9A6A0E7F60 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */; };
+               9D71239428D38EB9B5E7F5AA51E3E1BB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
                9E0045B41BFE697DB4ADE151228024D2 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; };
-               A0AB639AB77EC86109B51D023E788297 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               A102FFF603219976098A876E2E14CF6A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */; };
-               A1C2AAD2AF8E9E50DA1A078AC74400A9 /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D66880441D4B9000B03722BC09971E9 /* IQKeyboardInfo.swift */; };
-               A39FE5F72261B202CC63722A7B357206 /* IQTextInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9259BB742B0F6B1D52074F71BD71B42F /* IQTextInputView.swift */; };
-               A61774BEF07AB7C1107C3FDA1297E5BB /* IQTextInputViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8AA0C87B06CB08F33F1C9C7749E0DF /* IQTextInputViewInfo.swift */; };
-               A6C834360B4DDD0238C232ED530E46F9 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5DDF11C94E0521FF93720B78FF737EA /* IQKeyboardToolbarManager+Deprecated.swift */; };
-               A6F1EFC3CDA009A4BE6CCBB01248DA21 /* UICollectionView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = B627ECEFAF29D21C3B5D4634873DC799 /* UICollectionView+IndexPaths.swift */; };
-               A74F5C96D4E6C5927CD31690CBBD40F9 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2DDB1A49CDC72CEC4AC3A0667142BB2 /* IQTitleBarButtonItem.swift */; };
-               A983CCA5F6596F030EFCC1E27C1E766E /* UITableView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F70375CE5D16313A9CC78E1FFAC5536 /* UITableView+IndexPaths.swift */; };
-               A9B5C45C3C4D517B581E536DE846A078 /* Toast-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A7ACF9EC00F202138E2D10D8C2DE771D /* Toast-Swift-dummy.m */; };
-               A9C64D3EF4B2D97F8AA93A0C6D3F1018 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288DC5C96A5DECE79EDC44987BF2A77C /* Combine.framework */; };
-               A9F6F279F9AE6B3EB30CC9ADE242E7C5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 168C7D47B997C62E8CB232D83F0310AB /* PrivacyInfo.xcprivacy */; };
-               AABEF13464BA7F4621BD94736C1D057C /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF398810396855B6BEE8D80C8EF6518A /* ConstraintMakerPrioritizable.swift */; };
-               AC22AD1E1EF9CD9D6E242F3630A9A012 /* IQKeyboardManager+ToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BFD04CC97A0992D34437E786ACA4D3 /* IQKeyboardManager+ToolbarManager.swift */; };
-               AE224EDB6D044C0FE86B086E950FC2F9 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 789D34626E9F27F10F113B699A0936D7 /* Debugging.swift */; };
-               AE5E125694A1F601CBC7ED5362DA54E8 /* UIView+IQKeyboardExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0F784B4D89883BEA9DBDA5D3427CF0 /* UIView+IQKeyboardExtensionObjc.swift */; };
-               AEAE611FB5BD66AD2DBE734140C75C12 /* IQTextInputViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 425F3E2CCAC6FE05E103DD993BE61B34 /* IQTextInputViewInfoModel.swift */; };
-               AF760C78F1C7E11BF7CB9E9B29903530 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859853A4B800A598CFCE06A228A4E5DB /* ConstraintInsets.swift */; };
-               B0875E3AB8718E7DFE5C53497C02A15E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = B027F0500294FFF3F8823CC8C93B34DC /* ConstraintLayoutSupport.swift */; };
-               B903049E7C1BED7918DAB208754107C7 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABFD1CA60E15B4B7FCB561F401E9ECDC /* ConstraintMakerFinalizable.swift */; };
-               BA2FB695DEB0D179253EEB8DFCE3578B /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FC7A70F2E2D28124280A06C1FD9760B /* SnapKit-dummy.m */; };
-               BCA36C0165E90BE953EDB5DF596E961C /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = FB9E0FF56143337737133FDD5DFF1373 /* PrivacyInfo.xcprivacy */; };
-               BDA5C7CC91E86448237CF40954FAC5AF /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 583D0819254BED967661EC2359B98F18 /* ConstraintMakerRelatable.swift */; };
-               BDA87F0C05C9C4A2AA0A0D2B98C33E8C /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5FA5B7CA13253C1FC9B86FA274000F3F /* PrivacyInfo.xcprivacy */; };
-               BF1AE4D97E813B95C43EA4A298B973D1 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 629AE0F7346599178ABEF604C7BB964F /* LayoutConstraint.swift */; };
-               C00D516DBF4BD4AD8DC4CEF51C5DD8D0 /* IQKeyboardToolbarManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B017A824A4E1A13FDACEB926F92C62FA /* IQKeyboardToolbarManager-dummy.m */; };
-               C07CB3E9A4D1BF00F841E4285629A2B2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E85E98FFCFC789BC6D8C97871841FB5 /* ConstraintRelatableTarget.swift */; };
-               C0AD493AE4A8DC8FF960D753D6D971E3 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FB32CD2529DBAA6A58EE1C218F3F26B /* IQKeyboardManagerSwift-dummy.m */; };
-               C14F10B663FE2898EACAB90C202B3F50 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB0B399D6B51466AFD1D3DABBB19C1A /* ConstraintMakerEditable.swift */; };
-               C20ECE96A97688090D5FE186DCF7B5D9 /* IQKeyboardManager+Resign_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E4C8BDDCD249D53F68B657894D3C33 /* IQKeyboardManager+Resign_Deprecated.swift */; };
-               C2A846F101C12CC0E946ED40A0C2C33B /* IQDeepResponderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4AFEFA1716D5281D0EA17603944826 /* IQDeepResponderContainerView.swift */; };
-               C6A4302ACE006C4E2CDD481287E2916B /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1818F69B6E5828B7B096AEDA2284766 /* Typealiases.swift */; };
-               C6F45595676957ADBEC18EB3F23EAEC4 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA29B4610AE76CC6CC7A09F3BA316FA3 /* LayoutConstraintItem.swift */; };
-               C7C6F1AD0C44C79C4A3416FCB32B0233 /* IQKeyboardResignHandler+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E9A660E884B1EFF55785DC5472CA56 /* IQKeyboardResignHandler+Internal.swift */; };
-               C945CB4EC42271D435BF23E7749BE6BF /* IQKeyboardConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA792EF08162ADE7BAC7607327CBAED /* IQKeyboardConstants.swift */; };
-               CB64410E0CF8BF6ADD6054B90C06E0DB /* IQTextInputViewNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CBC06BCB9A7BAD3F1CB9489020EFAA4 /* IQTextInputViewNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               CB6B20426E6FD0E9970A1514451DE634 /* IQKeyboardReturnManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A543731802B05A4CF7F5D8024952273 /* IQKeyboardReturnManager.swift */; };
-               CD5C1FEDB9C4C34CB6E33A8A29D6ADA3 /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AE4CFFFB83D44D25692067A36EE407A /* IQKeyboardReturnManager+UITextFieldDelegate.swift */; };
-               CE593943A9E7CF83822CF60304BCAD43 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B2D1FC7F34EF685AF2452AC43FFE816 /* ConstraintConstantTarget.swift */; };
-               CF42B90B9D36F1A8370820AE19E549D4 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9915B34E81CF6906E0C1C0AA6D681726 /* IQTextView.swift */; };
-               CFB66030405436F94DE6E8C2D9175A0E /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92335BB8898DE45ED349EF272C417E5F /* IQInvocation.swift */; };
-               D2AB53462493B2F2B42D070A1D7E54F2 /* IQKeyboardReturnManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C997F74F024831561D7BCC7832899644 /* IQKeyboardReturnManager-dummy.m */; };
-               D2E2744A0122A5447E6FD80BBA6FB36A /* IQKeyboardNotification-IQKeyboardNotification in Resources */ = {isa = PBXBuildFile; fileRef = 120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */; };
-               D4218DA55B2BA45937589200CC0DF1FB /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0EC753684DB9D548B2F21B240AB183 /* ConstraintMakerExtendable.swift */; };
-               D6B15F2F110BC58F7635A9FD7A985C79 /* IQKeyboardManager+ActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A05DE88657E839818EACAAED4CD60B34 /* IQKeyboardManager+ActiveConfiguration.swift */; };
-               D6EFA9EAA562143F338EB164836B7837 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               DBA4803F4765E1650B8C6841157F5D73 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3863E29A7A589B2F92E5FA4658C10A7 /* ConstraintPriorityTarget.swift */; };
-               DF23DA299917B90E658EC4A4844A6464 /* IQKeyboardToolbarManager+Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96778D30391C6741ED9D0A46200EF18C /* IQKeyboardToolbarManager+Action.swift */; };
-               E007B42A515F1B4D6C1477ACA9AD43C0 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3DC059D4E73E400F389B683A21D3A187 /* PrivacyInfo.xcprivacy */; };
-               E1734E56DB48E6F238408C9A232C7051 /* UIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1FEE90906065AB1BED6A249EE74C5CB /* UIView+Hierarchy.swift */; };
-               E37671A03B4C17A1CF3766A6125833BB /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65CE8BABA0B27FB3861EFDC42FAF7936 /* ConstraintDirectionalInsetTarget.swift */; };
-               E3D779DEE753C0B0D33BA8E73A980265 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4A1A93E1ED51A08661C32F4EDBBA11 /* ConstraintLayoutGuide+Extensions.swift */; };
-               E4A29F8C3ED424A7BC912DB796D03AFB /* UIView+ParentObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 024EBC1EBC8B76295C273069400071F2 /* UIView+ParentObjc.swift */; };
+               A3585531EE4D8466B74A5A6F7958EC79 /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B1F45CBD7E407DB108D6FAD8FF0A1415 /* SocketRocket-dummy.m */; };
+               A39FE5F72261B202CC63722A7B357206 /* IQTextInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 502964DCE1567348B5B03211445AEA35 /* IQTextInputView.swift */; };
+               A564D0B0EE8AED950D943A75C2B3092E /* SRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = D7EF3525F706753F05EA05BD1819EC4E /* SRMutex.m */; };
+               A6F1EFC3CDA009A4BE6CCBB01248DA21 /* UICollectionView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = 115E19C96EB6123FE27F3A530B3BE30D /* UICollectionView+IndexPaths.swift */; };
+               A802B52FE5903601486CB77E2FDCF18B /* IQKeyboardToolbarManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 158193B636D7824993DB68D81AE2C233 /* IQKeyboardToolbarManager+Internal.swift */; };
+               A92367989121B0877023A09BF2F96F15 /* IQKeyboardToolbarManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D8DCDE8A3DFBFEA690BD5A6081C5762 /* IQKeyboardToolbarManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               A983CCA5F6596F030EFCC1E27C1E766E /* UITableView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15B541658FAC5E8233C91001D7888EC /* UITableView+IndexPaths.swift */; };
+               A98E7BF0F63124A6CB7FC2BB19B1DCBE /* IQKeyboardReturnManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224FAFA7B0169BBAAFD0FA422D7D11A6 /* IQKeyboardReturnManager.swift */; };
+               A9B5C45C3C4D517B581E536DE846A078 /* Toast-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B98BCBD470DE1E0FC19C5E1F3AF37195 /* Toast-Swift-dummy.m */; };
+               AA3E0F99979D1B54EE9DCD8FE01816CF /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB23C93E47AFBF1FA651D132F7AC06E2 /* IQKeyboardReturnManager+UITextFieldDelegate.swift */; };
+               AABEF13464BA7F4621BD94736C1D057C /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9101BAF3027E387E34B0301BE000FA50 /* ConstraintMakerPrioritizable.swift */; };
+               AB12501C57FFF722131F674ACB425944 /* SRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 77195404B1F7ADCD8B3008B1B89F5C03 /* SRError.m */; };
+               AC22AD1E1EF9CD9D6E242F3630A9A012 /* IQKeyboardManager+ToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A737607DB763EBB681D8D0F6E6AB5FB /* IQKeyboardManager+ToolbarManager.swift */; };
+               AC68F7636D1D7832E4B5B18DD2BF2941 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               AD9EF3D3778212D1147044DC3A971C80 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               AE224EDB6D044C0FE86B086E950FC2F9 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8A90925F3434F73BD6A036480A5A473 /* Debugging.swift */; };
+               AEA1A05086EA1256D504393FAED3CF4B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               AF760C78F1C7E11BF7CB9E9B29903530 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DFE571CD6A634198545BB1149A5399C /* ConstraintInsets.swift */; };
+               B0875E3AB8718E7DFE5C53497C02A15E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D8726D60E6EF3E455768E64432DA57 /* ConstraintLayoutSupport.swift */; };
+               B1990109AA9AF8F57180C17D4A04EF6B /* IQKeyboardToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB176716E9339D1CA456C696313236FE /* IQKeyboardToolbarManager.swift */; };
+               B4C82668A78939FE910FEA0D314F06C1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91B24E7C9EB4215BEA2C0A23D3960815 /* Security.framework */; };
+               B543A1E1882CAEA19589891FCE2D17EA /* NSRunLoop+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 306B6BBB2D0B4D417ADD4B82D7D51E82 /* NSRunLoop+SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               B5C5EBCC5EC278EA704D27FB2D333B22 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED18FF4963E7B4F60DBBA903E25C67B /* Combine.framework */; };
+               B7D5043A8EC4C7C38F6C1688ACA93185 /* IQKeyboardReturnManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8FACB5BCF825223E394FFECCE4AA031 /* IQKeyboardReturnManager-dummy.m */; };
+               B893C0DD5BE32FAE1D6895E1ED392B7A /* SRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = A284951838ACA1015F31DBE6C5A8D45F /* SRConstants.m */; };
+               B903049E7C1BED7918DAB208754107C7 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24926E8158D8FAD9BE42C760B3154B55 /* ConstraintMakerFinalizable.swift */; };
+               BA2FB695DEB0D179253EEB8DFCE3578B /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 02EDA2792EBD3343A7DBC6B427F1F041 /* SnapKit-dummy.m */; };
+               BDA5C7CC91E86448237CF40954FAC5AF /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BFDD7C500F5D6D58D212CB15B52E08 /* ConstraintMakerRelatable.swift */; };
+               BF1AE4D97E813B95C43EA4A298B973D1 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C0366C8DAD8762352B37EDB4DD62E2E /* LayoutConstraint.swift */; };
+               C07CB3E9A4D1BF00F841E4285629A2B2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFB853532F59E8A63D1C93202280CEE9 /* ConstraintRelatableTarget.swift */; };
+               C0AD493AE4A8DC8FF960D753D6D971E3 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E23D7305E51271DEFF79A9CADBF926 /* IQKeyboardManagerSwift-dummy.m */; };
+               C14F10B663FE2898EACAB90C202B3F50 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB474AD377D72ECDF638D46A73B7D687 /* ConstraintMakerEditable.swift */; };
+               C20ECE96A97688090D5FE186DCF7B5D9 /* IQKeyboardManager+Resign_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC73E02165E26ABFCACC677AF94DD8B /* IQKeyboardManager+Resign_Deprecated.swift */; };
+               C36214D8311B615CDA115276934926DC /* SRRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = D1B2801FD44E489C5B7F202C13D651F2 /* SRRandom.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               C433EA40A4C18AC4714CF6C9BC1172CA /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0F6A2BF98BD227110E60762E29808CEC /* PrivacyInfo.xcprivacy */; };
+               C4CC8FC7015DCE5912B7607AFB238EFE /* Pods-DeepChordsSdk-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 284AC2E81CAAA90FEA12A250A16B11AB /* Pods-DeepChordsSdk-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               C6A4302ACE006C4E2CDD481287E2916B /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEF5BBB7C4ACF7C06BBD262B6C1145CE /* Typealiases.swift */; };
+               C6F45595676957ADBEC18EB3F23EAEC4 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD6C692550BC0661BA84378E58F6BA8A /* LayoutConstraintItem.swift */; };
+               C749F0EFAF3D6CAE7C3C0B198665DFA5 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2BADF249E4A558D7EE5BB1077C1DE1 /* IQTextView.swift */; };
+               C7C6F1AD0C44C79C4A3416FCB32B0233 /* IQKeyboardResignHandler+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E39AF10B1F50FF70721677FFF69BED27 /* IQKeyboardResignHandler+Internal.swift */; };
+               C92D93F48E74B79C08A2C5B81B68FD7D /* SRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3DB74B2C40BCD9F3AFA585DA322FF5 /* SRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               C945CB4EC42271D435BF23E7749BE6BF /* IQKeyboardConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBC1F980FADF5CA26AF9C77CF3D9B1A2 /* IQKeyboardConstants.swift */; };
+               CA547E1928ADED547C368A3AB7CE9267 /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A61C146CFCDB5CEC8508DC60360819 /* IQBarButtonItemConfiguration.swift */; };
+               CE593943A9E7CF83822CF60304BCAD43 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = C23ABFD4CEF6F11C0094E61729745DE3 /* ConstraintConstantTarget.swift */; };
+               CF6554D8A9380CAC0F51D5043769D930 /* SRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = F930ACB6AC5D06295D698ED0249EB0AB /* SRLog.m */; };
+               D25185C12789EA624C8BAC6A6432E77B /* SRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AF7DA075D6BD7E141707379E62BFA63 /* SRPinningSecurityPolicy.m */; };
+               D2E460754683003AE9ECF32A831D401F /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C917A6291C02472ECB91FD7B8B2CFC1 /* CFNetwork.framework */; };
+               D4218DA55B2BA45937589200CC0DF1FB /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37445197B6E56B3F3CA861A7F21F1C41 /* ConstraintMakerExtendable.swift */; };
+               D623A6CB33709C4D87766C66A756A0F7 /* SRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F49C31FFD05F4734B464D5C31979FB /* SRProxyConnect.m */; };
+               D6B15F2F110BC58F7635A9FD7A985C79 /* IQKeyboardManager+ActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 792548D571F70D8E7FA3B52FA58D9591 /* IQKeyboardManager+ActiveConfiguration.swift */; };
+               D6EFA9EAA562143F338EB164836B7837 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               DBA4803F4765E1650B8C6841157F5D73 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B932A928D72C73FB59FC964A82AC2723 /* ConstraintPriorityTarget.swift */; };
+               DD4291CF0D9971BFED1BD55FB65ACA32 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E3B1CECC33970571F4F9AF61CB1D3DCD /* PrivacyInfo.xcprivacy */; };
+               DEEC14319D7619F96C4E93415A6D577D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               DF011D18EBB28ECE459B6D96D3E460D8 /* SRHTTPConnectMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = FB26ACEBA0181227271430FB01A76848 /* SRHTTPConnectMessage.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               E1734E56DB48E6F238408C9A232C7051 /* UIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A368339039F84E09260E0C59DD294DF3 /* UIView+Hierarchy.swift */; };
+               E3535804CAC5D872E37CD8639C930771 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               E37671A03B4C17A1CF3766A6125833BB /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58E0237741E33CAFB3DB96DAA7559910 /* ConstraintDirectionalInsetTarget.swift */; };
+               E3D779DEE753C0B0D33BA8E73A980265 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E554E7AE314B29D9C07A10667261BE /* ConstraintLayoutGuide+Extensions.swift */; };
+               E4A0C00A361F30B7848B8AE7653C9C60 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A92BC97913B825589680C917211C138 /* UIKit.framework */; };
+               E4A29F8C3ED424A7BC912DB796D03AFB /* UIView+ParentObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD0BDF557D8D8D7CFB04CB9C9482634 /* UIView+ParentObjc.swift */; };
+               E51720E5CBEEB2151A69D4FDF36B7E2D /* IQKeyboardToolbar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48CA3ADFB16E0C4E235D89C552572332 /* IQKeyboardToolbar-dummy.m */; };
                E6FE2596512201193E95FC356C6E3351 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift in Resources */ = {isa = PBXBuildFile; fileRef = 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; };
-               E84C30FA4A382D9C330E87FB32C009AE /* IQKeyboardAppearanceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6824C490150831540A8B6007E6B0B0EF /* IQKeyboardAppearanceManager.swift */; };
-               EBF34312A1F64FE81987440230E5BC49 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B1A7FE44491E9065CDE0EC638D84820 /* IQKeyboardManager+Internal.swift */; };
-               ECC5C2ADC2682F9171FEA22AF10DCE53 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8783F3308A893AC9F1E8B1450DB38B3 /* ConstraintRelation.swift */; };
-               F239DABFACA179E89920C7F09D67336B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               F4B6A7F0EDE77E5C46C63C4C2125D1D9 /* IQKeyboardToolbarManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CE4193979A1692CB7524C594A33F5F /* IQKeyboardToolbarManager+Internal.swift */; };
-               F4D65B0771272C500F2E872705893146 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5EB5C94FD93112688DCB0AC41215A68F /* PrivacyInfo.xcprivacy */; };
-               F5EA9B9630BC0ABCA401EBB41ACF0CAA /* IQKeyboardToolbar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 903F0FF8B72AF2E84101EE1AD8E525B8 /* IQKeyboardToolbar-dummy.m */; };
-               F6F33E8B268F3D41075374D95B8088DC /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6BC2BCCF67E34C8D4DF08BBE177A05A /* UILayoutSupport+Extensions.swift */; };
-               F943E8FEFBAB09B9DA17295178CD80A1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */; };
-               F9EBA65892D78A31C068D727D84BCB88 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8510B576847C74847E63FDFB695CF836 /* ConstraintConfig.swift */; };
-               FA1E4DF059F9D021A2B913A8DA9D1CBE /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85F474F9E7D6BD1F6B7663352D31EC40 /* IQKeyboardToolbarPlaceholderConfiguration.swift */; };
-               FD552610731EB624F8A47C3ACA927A15 /* UIView+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E9C7F86EF79309A7D62796C50BD2C4 /* UIView+Resign.swift */; };
-               FE0D3260BF27D388B0200F1AC8151619 /* IQKeyboardCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2570B16F7E9DBA42AAF1C41E54783C89 /* IQKeyboardCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               FF020D50D3B0742EFED9C172269D9D83 /* IQKeyboardAppearanceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5563167CBEFFA8F84B6DCD2C1CF029A /* IQKeyboardAppearanceConfiguration.swift */; };
+               E84C30FA4A382D9C330E87FB32C009AE /* IQKeyboardAppearanceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25ABD3C4935A40132346F656CA1AA7C /* IQKeyboardAppearanceManager.swift */; };
+               EB3BCE9B36BF814DA3069FA077168301 /* SRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 109E37988FF06586D32321CEA99162B0 /* SRHash.m */; };
+               EBDF215E376C3DF934F05D201833DDDC /* IQTextInputViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0578E47B5AE5713CF21EA86848CA87DD /* IQTextInputViewNotification.swift */; };
+               EBF34312A1F64FE81987440230E5BC49 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92A13F8C77041A7711D1764A76C37A3 /* IQKeyboardManager+Internal.swift */; };
+               EC8DB2CC9791B7DC686DCC78EFBB56C5 /* SRDelegateController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2582EC469D9940C7AAE3F903A495E86A /* SRDelegateController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               ECC5C2ADC2682F9171FEA22AF10DCE53 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363F0A017C453E3DC084A7B5BDB87911 /* ConstraintRelation.swift */; };
+               F020DBD67EA8E12A860BE211F6BE04D5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */; };
+               F1E1B1AC67AA1B21E1AF8D3AB5C9849C /* IQTextInputViewNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EA467055B207002F9B70E96F08A0FF86 /* IQTextInputViewNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               F312D740135121FC4C7D0EB4A5F76F90 /* IQKeyboardToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44AFC022F6D6DD0DF30E10F9B7C4615A /* IQKeyboardToolbarConfiguration.swift */; };
+               F3D41915714BC875B1DC32F49293A8B6 /* Pods-DeepChordsSdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5278EBCB01A333274C163B9281DE38B /* Pods-DeepChordsSdk-dummy.m */; };
+               F4B260EE81F1B5801FC6DA3097F2E433 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D6EF89B651DCBED1F5A7FA5D36D1FA6 /* IQBarButtonItem.swift */; };
+               F5F31138D70F9AEBD476D8AE418F37F9 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */ = {isa = PBXBuildFile; fileRef = A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */; };
+               F6E948E2688CC08D3843DAA74F6328E8 /* SRHash.h in Headers */ = {isa = PBXBuildFile; fileRef = F2183FF2315FBF68B5F334EC6EB19A9B /* SRHash.h */; settings = {ATTRIBUTES = (Project, ); }; };
+               F6F33E8B268F3D41075374D95B8088DC /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E54219744D41CC6C6674908699602DD9 /* UILayoutSupport+Extensions.swift */; };
+               F9EBA65892D78A31C068D727D84BCB88 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 972CC8A48122693582F02385A70853A0 /* ConstraintConfig.swift */; };
+               FCFC8D5B48F3DC4BC8942320631D8C1B /* SRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D1545C4C0C2474FD103EFECB90E9C5 /* SRIOConsumer.m */; };
+               FD552610731EB624F8A47C3ACA927A15 /* UIView+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = B704D82F61A7F3E0FF10EBDE953E7E49 /* UIView+Resign.swift */; };
+               FE0D3260BF27D388B0200F1AC8151619 /* IQKeyboardCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F657D2C1582A8BFEADD06E527D796B2 /* IQKeyboardCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               FF020D50D3B0742EFED9C172269D9D83 /* IQKeyboardAppearanceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4B79F3BC3201907DE2B7A2671776C1 /* IQKeyboardAppearanceConfiguration.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
-               00F0DC7B61401655CA2B4F07931B44B9 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
-                       remoteInfo = IQKeyboardCore;
-               };
-               0C35F82AFEAA8CEBC12C81F2D5248473 /* PBXContainerItemProxy */ = {
+               186EFCD32F2BEEE1514385E97F48B014 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5;
                        remoteInfo = IQKeyboardToolbarManager;
                };
-               1708F2EF228CBF9B2A6AB17CAF389904 /* PBXContainerItemProxy */ = {
+               1CC338AE066CE11E9D4C832A727D9C61 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
-                       remoteInfo = IQKeyboardCore;
+                       remoteGlobalIDString = EEE261386011CDF271BE289F73FF5959;
+                       remoteInfo = "IQKeyboardCore-IQKeyboardCore";
                };
-               18898E41CB6825094A12ED9DADD5CF80 /* PBXContainerItemProxy */ = {
+               1E3FD4E83C3BACBC0EE2DD7F457AA6E9 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = B990BD87169C76A3ED3FE8A9258D91A3;
-                       remoteInfo = "Toast-Swift";
+                       remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69;
+                       remoteInfo = IQTextView;
                };
-               1BBEB339A4BA742D13B5D2CCEEB77C70 /* PBXContainerItemProxy */ = {
+               2DE1780C07830F70EB974DDA0E002280 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = EEE261386011CDF271BE289F73FF5959;
-                       remoteInfo = "IQKeyboardCore-IQKeyboardCore";
+                       remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4;
+                       remoteInfo = IQKeyboardManagerSwift;
                };
-               32D05F1AB78AE48011D6E9E0203F4737 /* PBXContainerItemProxy */ = {
+               32B49C1963D38D5E1E60E037311DCDEF /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 88810798DA63A2F6611B0970EA276DEC;
-                       remoteInfo = "IQKeyboardReturnManager-IQKeyboardReturnManager";
+                       remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054;
+                       remoteInfo = IQKeyboardReturnManager;
                };
-               372862B6668E1DB2CCD2D7423C0B38B8 /* PBXContainerItemProxy */ = {
+               4294839685D9EA7EF6090113DB9528A3 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69;
-                       remoteInfo = IQTextView;
+                       remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A;
+                       remoteInfo = "SnapKit-SnapKit_Privacy";
                };
-               38C3E138887D23F98FA6B811D30BFFD6 /* PBXContainerItemProxy */ = {
+               43A509886BF66DE03AA2357743AC5769 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 4502C7427440BEB17A50C0BF6E638A85;
-                       remoteInfo = "IQTextInputViewNotification-IQTextInputViewNotification";
+                       remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69;
+                       remoteInfo = IQTextView;
                };
-               45341E287C20B448A537FD1F897A05AE /* PBXContainerItemProxy */ = {
+               4BEE988A3465649375AC57D797ABF617 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5;
-                       remoteInfo = IQKeyboardToolbarManager;
+                       remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E;
+                       remoteInfo = IQTextInputViewNotification;
                };
-               48FBB4A28EC9FA70CCC88ED390275D62 /* PBXContainerItemProxy */ = {
+               548AF3FE70CC81B2ABBAEF65818BA3A6 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4;
-                       remoteInfo = IQKeyboardManagerSwift;
+                       remoteGlobalIDString = B990BD87169C76A3ED3FE8A9258D91A3;
+                       remoteInfo = "Toast-Swift";
                };
-               588F3D8DD7248AC48468DA05E1605928 /* PBXContainerItemProxy */ = {
+               57A1C5DB51B6CD350C79C7B055A7F66B /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 7C5613175BBC4BF67E36DB4FBEBC01D0;
-                       remoteInfo = "IQKeyboardToolbarManager-IQKeyboardToolbarManager";
+                       remoteGlobalIDString = C344E85893FCDEE5B70436E0A4A3472B;
+                       remoteInfo = "Toast-Swift-Toast-Swift";
                };
-               639BD9FF9BA7192485B4F917947EB7B7 /* PBXContainerItemProxy */ = {
+               6130D9140D152F57AA543D42CA625298 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69;
-                       remoteInfo = IQTextView;
+                       remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1;
+                       remoteInfo = IQKeyboardToolbar;
                };
-               6887DA1C8583123202CFE8CCD0114D70 /* PBXContainerItemProxy */ = {
+               64F6091A60F53F5A90BEE2C59126E133 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E;
-                       remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift";
+                       remoteGlobalIDString = 2B8FF445A5162845FAB9EC00FC92B694;
+                       remoteInfo = "IQKeyboardNotification-IQKeyboardNotification";
                };
-               68FACE05FDF37AD58CB1E8DBD213317C /* PBXContainerItemProxy */ = {
+               6795B29B74A0DFB983C8C121DAC73B8F /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
-                       remoteInfo = IQKeyboardCore;
+                       remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990;
+                       remoteInfo = IQKeyboardNotification;
                };
-               702967F91B360154587EAF7A3E6E5FE0 /* PBXContainerItemProxy */ = {
+               6C9C732B28DF0513A21CE6E248F89072 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E;
                        remoteInfo = IQTextInputViewNotification;
                };
-               706CD7E6D12A879E778A910FA680C4E3 /* PBXContainerItemProxy */ = {
+               7C1DC3C44CB9ED8404023CBE11C3A841 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990;
-                       remoteInfo = IQKeyboardNotification;
+                       remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;
+                       remoteInfo = SocketRocket;
                };
-               7A006DA632FA3C0EBCCE76968F857A1A /* PBXContainerItemProxy */ = {
+               7D69ABF84486EAFB55FB87BC9B44D3F6 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = B247F77A0CD5E19C8187A9BA1EB58C09;
-                       remoteInfo = "IQKeyboardToolbar-IQKeyboardToolbar";
+                       remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1;
+                       remoteInfo = IQKeyboardToolbar;
                };
-               800F28AAF8E18E00B53F6C32799DAF22 /* PBXContainerItemProxy */ = {
+               8031384E87ED727FE68F4242803FF742 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A;
-                       remoteInfo = "SnapKit-SnapKit_Privacy";
+                       remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054;
+                       remoteInfo = IQKeyboardReturnManager;
                };
-               82B27615B5CA1FD97F7A8DBCAF5AA360 /* PBXContainerItemProxy */ = {
+               8581EB306F93FE5BF5504824295F3722 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 2B8FF445A5162845FAB9EC00FC92B694;
-                       remoteInfo = "IQKeyboardNotification-IQKeyboardNotification";
+                       remoteGlobalIDString = B247F77A0CD5E19C8187A9BA1EB58C09;
+                       remoteInfo = "IQKeyboardToolbar-IQKeyboardToolbar";
                };
-               89E300EC786E5D7673A67AC97D2EE1EE /* PBXContainerItemProxy */ = {
+               925132ADAAA2012B51EAE2C13D1BD31F /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1;
-                       remoteInfo = IQKeyboardToolbar;
+                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
+                       remoteInfo = IQKeyboardCore;
                };
-               92B42FC203D9B7A77B162665E26974A4 /* PBXContainerItemProxy */ = {
+               92C92FF2930D007DABF544DC7AC08060 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4;
                        remoteInfo = SnapKit;
                };
-               A69D14A28BD4F695373B894B83DC79B0 /* PBXContainerItemProxy */ = {
+               94872272C37CF76A4C27D08B5EC60D6D /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054;
-                       remoteInfo = IQKeyboardReturnManager;
+                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
+                       remoteInfo = IQKeyboardCore;
                };
-               C1038B841E8ED4F36EFA5B37AB9B3CC7 /* PBXContainerItemProxy */ = {
+               9A200DA2E207287B114783961A389F97 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
-                       remoteInfo = IQKeyboardCore;
+                       remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E;
+                       remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift";
                };
-               C3F103E89D84D1B12D2D9F7EEACD1156 /* PBXContainerItemProxy */ = {
+               9D53E47458385470A91D7295E48E0FD6 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1;
                        remoteInfo = IQKeyboardToolbar;
                };
-               CA95E7DE958C9E11A32E3AD3AB58DFCD /* PBXContainerItemProxy */ = {
+               A24EA8C0FD67224523A2A8049A529730 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990;
                        remoteInfo = IQKeyboardNotification;
                };
-               D0E1C04F54B8D007689B29ABE9DD60E6 /* PBXContainerItemProxy */ = {
+               BACED4BB4D08C0B382C214709ABE6A91 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E;
-                       remoteInfo = IQTextInputViewNotification;
+                       remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;
+                       remoteInfo = SocketRocket;
                };
-               D72F2F53A0379A93208CF4F91FD0C100 /* PBXContainerItemProxy */ = {
+               C7AFFBB48EEA1AF602657886DA4FE905 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1;
-                       remoteInfo = IQKeyboardToolbar;
+                       remoteGlobalIDString = 88810798DA63A2F6611B0970EA276DEC;
+                       remoteInfo = "IQKeyboardReturnManager-IQKeyboardReturnManager";
                };
-               E59379C6B9F90539CF5EDC2160A4A44E /* PBXContainerItemProxy */ = {
+               C96EFF1386F982C542C2B03977A6FFD6 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = C344E85893FCDEE5B70436E0A4A3472B;
-                       remoteInfo = "Toast-Swift-Toast-Swift";
+                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
+                       remoteInfo = IQKeyboardCore;
                };
-               E7856FD48E3CAE02F84A77F821511AAB /* PBXContainerItemProxy */ = {
+               D0E89F4255608F3B229AA3E8DFD93CF9 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = A6602BCAA6F4F932A586C41D0B7E019C;
-                       remoteInfo = "IQTextView-IQTextView";
+                       remoteGlobalIDString = 4502C7427440BEB17A50C0BF6E638A85;
+                       remoteInfo = "IQTextInputViewNotification-IQTextInputViewNotification";
+               };
+               D3993F1F1D303ACFD97829D6D9115BA0 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5;
+                       remoteInfo = IQKeyboardToolbarManager;
+               };
+               D3C8D19228BDBCB03280ABF945D775BA /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4;
+                       remoteInfo = IQKeyboardCore;
                };
-               EE7C8A2F9421920413779D8E1F207DF7 /* PBXContainerItemProxy */ = {
+               D7076AE16282F5B2F87DAD903E05C6C4 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E;
                        remoteInfo = IQTextInputViewNotification;
                };
-               FE3107107D5B289341BD608148335E3B /* PBXContainerItemProxy */ = {
+               D72B40330912494BEDC722CCB167FF77 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054;
-                       remoteInfo = IQKeyboardReturnManager;
+                       remoteGlobalIDString = 7C5613175BBC4BF67E36DB4FBEBC01D0;
+                       remoteInfo = "IQKeyboardToolbarManager-IQKeyboardToolbarManager";
+               };
+               F68560EF2AF1432CDC4EDEE224F0B10F /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = A6602BCAA6F4F932A586C41D0B7E019C;
+                       remoteInfo = "IQTextView-IQTextView";
                };
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-               0162BAFB778BF2E7D66A112029D508AB /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = "<group>"; };
-               024EBC1EBC8B76295C273069400071F2 /* UIView+ParentObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ParentObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+ParentObjc.swift"; sourceTree = "<group>"; };
-               04D424EE2CE0897D1A9D495245578DB7 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = "<group>"; };
-               053B43B12209A016C25BFB227BD91974 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               01E23D7305E51271DEFF79A9CADBF926 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = "<group>"; };
+               02E139B151EDFA1F4F63EA119D2269C7 /* Toast-Swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.debug.xcconfig"; sourceTree = "<group>"; };
+               02EDA2792EBD3343A7DBC6B427F1F041 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = "<group>"; };
+               0578E47B5AE5713CF21EA86848CA87DD /* IQTextInputViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewNotification.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewNotification.swift; sourceTree = "<group>"; };
                06E5B413FEA5A600D76636DA132F8FB9 /* IQTextInputViewNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQTextInputViewNotification; path = IQTextInputViewNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               078038EA55CCEFB2FCFDAC364A3A475F /* IQKeyboardResignHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardResignHandler.swift; path = IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler.swift; sourceTree = "<group>"; };
-               07D76E404E67961840A2FA9E8B592C51 /* IQKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardNotification.swift; path = IQKeyboardNotification/Classes/IQKeyboardNotification.swift; sourceTree = "<group>"; };
-               090EF934D945BE1D4018F0D2D19007E0 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = "<group>"; };
-               0B21B1D5CEC2F4C2602EFA71D8417344 /* IQTextView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextView.modulemap; sourceTree = "<group>"; };
-               0BBF04F3ACCC6329B881C1679E0733BB /* IQKeyboardToolbar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.release.xcconfig; sourceTree = "<group>"; };
-               0D0E7899589D00C50376C1B07158AC50 /* IQKeyboardToolbar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-umbrella.h"; sourceTree = "<group>"; };
-               0D1B695DB3D9B30B1E895FE056EDB0D2 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = "<group>"; };
+               06FEEB0FA2AA89DF42A1C6525F644FBF /* Pods-DeepChordsSdk */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-DeepChordsSdk"; path = Pods_DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+               07FD04B2D25C4767E2AACE039E3E77A8 /* IQTextInputViewNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextInputViewNotification.modulemap; sourceTree = "<group>"; };
+               080D923BC81BB12EE5B738187A72A0D4 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = "<group>"; };
+               0A8C10276B315358D1F985B8F641683A /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = "<group>"; };
+               0AE37E30F693ED15CA31B520ED420454 /* NSRunLoop+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h"; sourceTree = "<group>"; };
+               0AF7DA075D6BD7E141707379E62BFA63 /* SRPinningSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRPinningSecurityPolicy.m; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.m; sourceTree = "<group>"; };
+               0C917A6291C02472ECB91FD7B8B2CFC1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; };
                0DFD4541FF9DAA31A2FC2A7F6D03ED22 /* IQTextView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQTextView; path = IQTextView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               0FC7A70F2E2D28124280A06C1FD9760B /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = "<group>"; };
+               0EE50CC6D98E37DA330EADC9F9C949F0 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = "<group>"; };
+               0F6A2BF98BD227110E60762E29808CEC /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextView/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               10288C630688257B185941E1EA55E346 /* IQTextInputViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfoModel.swift; path = IQKeyboardReturnManager/Classes/IQTextInputViewInfoModel.swift; sourceTree = "<group>"; };
+               109E37988FF06586D32321CEA99162B0 /* SRHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHash.m; path = SocketRocket/Internal/Utilities/SRHash.m; sourceTree = "<group>"; };
+               10C547231342B150BEC39F40295D087E /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQRootControllerConfiguration.swift; sourceTree = "<group>"; };
+               10CAAD795A45AB49A0EE4D6805AB7A1F /* SocketRocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.release.xcconfig; sourceTree = "<group>"; };
                110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardReturnManager-IQKeyboardReturnManager"; path = IQKeyboardReturnManager.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               117ED6DB1BD04E643776E77477BB0EF1 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManagerDeprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManagerDeprecated.swift"; sourceTree = "<group>"; };
+               115E19C96EB6123FE27F3A530B3BE30D /* UICollectionView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UICollectionView+IndexPaths.swift"; sourceTree = "<group>"; };
                120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardNotification-IQKeyboardNotification"; path = IQKeyboardNotification.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               125B7ADD9F6F9E6FEAA2172EBF355938 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = "<group>"; };
-               130A1731BEBE0674DF4B874494BFF139 /* IQKeyboardNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-prefix.pch"; sourceTree = "<group>"; };
+               12415404E6E70407610188D7ADDC1D02 /* UIView+ResignObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ResignObjc.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+ResignObjc.swift"; sourceTree = "<group>"; };
+               133A600484839BF74BDD51C8B0BB6EBE /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
                13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "Toast-Swift-Toast-Swift"; path = "Toast-Swift.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
-               1445F9B020E299209EDE5CD49F2EF94D /* IQTextInputViewNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextInputViewNotification-dummy.m"; sourceTree = "<group>"; };
+               14A61C146CFCDB5CEC8508DC60360819 /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItemConfiguration.swift; sourceTree = "<group>"; };
+               1515EB933E55F8DF1275984150311F6F /* IQTextInputViewNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.release.xcconfig; sourceTree = "<group>"; };
+               158193B636D7824993DB68D81AE2C233 /* IQKeyboardToolbarManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Internal.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Internal.swift"; sourceTree = "<group>"; };
                15848DEC7727A809830E7F6FC1B6CE0F /* IQKeyboardReturnManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardReturnManager; path = IQKeyboardReturnManager.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               168C7D47B997C62E8CB232D83F0310AB /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               18C7EDD0BE0032658D0A03A3BB7CF623 /* IQKeyboardManager+Appearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance.swift"; sourceTree = "<group>"; };
-               1D298A925E306A10B586FBD63C04A81F /* IQKeyboardExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardExtended.swift; path = IQKeyboardCore/Classes/IQKeyboardExtended.swift; sourceTree = "<group>"; };
-               1D541D12A563E883F4018584090E33DB /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Deprecated/IQKeyboardManager+Deprecated.swift"; sourceTree = "<group>"; };
+               159C74980AC55D136945F073F6CEDC14 /* IQKeyboardToolbar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.debug.xcconfig; sourceTree = "<group>"; };
+               15FF3E312676449AB12DADDDB8D5C352 /* IQKeyboardNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardNotification.modulemap; sourceTree = "<group>"; };
+               170AE4D919026EA3D1FB264423443921 /* IQTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-prefix.pch"; sourceTree = "<group>"; };
+               1917E3D591E530CFE1940C6F4E878690 /* Pods-DeepChordsSdk-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DeepChordsSdk-Info.plist"; sourceTree = "<group>"; };
+               1AB8D5FD6175CD8FCC7153B71E6DD77A /* IQKeyboardNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.release.xcconfig; sourceTree = "<group>"; };
+               1D8DCDE8A3DFBFEA690BD5A6081C5762 /* IQKeyboardToolbarManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-umbrella.h"; sourceTree = "<group>"; };
+               1E2BADF249E4A558D7EE5BB1077C1DE1 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQTextView/Classes/IQTextView.swift; sourceTree = "<group>"; };
+               1EEC9E9674D2F2735A1237FEC96C44CB /* IQKeyboardReturnManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardReturnManager.modulemap; sourceTree = "<group>"; };
                1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-Example"; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               1FB0B399D6B51466AFD1D3DABBB19C1A /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = "<group>"; };
-               231CDDC4DB13BC0B46D3EB8176FFE464 /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardToolbar/Placeholderable/IQPlaceholderable.swift; sourceTree = "<group>"; };
-               243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
-               2527373B09781527CFB5F6FCCAE7B821 /* Array+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Sort.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/Array+Sort.swift"; sourceTree = "<group>"; };
-               2570B16F7E9DBA42AAF1C41E54783C89 /* IQKeyboardCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-umbrella.h"; sourceTree = "<group>"; };
-               267AC3B58CA7E99D46B70842A2CD1255 /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; sourceTree = "<group>"; };
-               27FF931A64B73FEE5D4A85928D51804A /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = "<group>"; };
-               28400A2CE3EE2B07169489BF74B7FE98 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Debug/IQKeyboardManager+Debug.swift"; sourceTree = "<group>"; };
-               288DC5C96A5DECE79EDC44987BF2A77C /* Combine.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Combine.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Combine.framework; sourceTree = DEVELOPER_DIR; };
-               2B7459F0C8EEFEF3A4B8406D396BC764 /* IQKeyboardReturnManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardReturnManager.modulemap; sourceTree = "<group>"; };
-               2CD6955DD3969A106AF4982FF7008B0F /* IQKeyboardToolbarManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-prefix.pch"; sourceTree = "<group>"; };
-               2EDDE4B8CE41298570515C4EBF67CA45 /* Toast-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Toast-Swift.modulemap"; sourceTree = "<group>"; };
-               31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-Info.plist"; sourceTree = "<group>"; };
-               334D1CD5A38B79DE9FE482556C492DFA /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = "<group>"; };
-               33C48FDE215E1319970EE8067F27C546 /* IQKeyboardManager+Appearance_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance_Deprecated.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance_Deprecated.swift"; sourceTree = "<group>"; };
-               3579ECE9098CFE0A18918D8F0F6BBC16 /* IQKeyboardCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.release.xcconfig; sourceTree = "<group>"; };
-               35B03A32DAB0EC00D0F7CE971723BD7C /* IQKeyboardNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardNotification.modulemap; sourceTree = "<group>"; };
-               35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Example.modulemap"; sourceTree = "<group>"; };
-               3A0EC753684DB9D548B2F21B240AB183 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = "<group>"; };
-               3DC059D4E73E400F389B683A21D3A187 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               425F3E2CCAC6FE05E103DD993BE61B34 /* IQTextInputViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfoModel.swift; path = IQKeyboardReturnManager/Classes/IQTextInputViewInfoModel.swift; sourceTree = "<group>"; };
-               42892A584E9AC22D35E1D9FE68B53469 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = "<group>"; };
-               42F154595907A9B7C232A08628BBC592 /* IQKeyboardToolbar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-prefix.pch"; sourceTree = "<group>"; };
-               441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Example-acknowledgements.markdown"; sourceTree = "<group>"; };
-               442771E28F516C75AF67BCAA132E4A56 /* IQKeyboardToolbarManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Toolbar.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Toolbar.swift"; sourceTree = "<group>"; };
-               44B578B4BB9C2CE2BF3D0618DD618E6E /* IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardCore-Info.plist"; sourceTree = "<group>"; };
-               45AE6E9F7BEA7559570D1C4611BC97BA /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = "<group>"; };
-               45E9A660E884B1EFF55785DC5472CA56 /* IQKeyboardResignHandler+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardResignHandler+Internal.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler+Internal.swift"; sourceTree = "<group>"; };
-               46363399D08CEC56582B10CBA23FE101 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = "<group>"; };
-               48287E0AEAB23085B0FF5012495D3C9D /* IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardNotification-Info.plist"; sourceTree = "<group>"; };
-               488126919669AEE0AB6BD8855DBA7E1D /* IQKeyboardCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardCore-dummy.m"; sourceTree = "<group>"; };
-               4C4A1A93E1ED51A08661C32F4EDBBA11 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = "<group>"; };
-               4CBC06BCB9A7BAD3F1CB9489020EFAA4 /* IQTextInputViewNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-umbrella.h"; sourceTree = "<group>"; };
-               51E4C8BDDCD249D53F68B657894D3C33 /* IQKeyboardManager+Resign_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign_Deprecated.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign_Deprecated.swift"; sourceTree = "<group>"; };
-               54E68DA1C9D605BCA82C37688A0D6C22 /* UIView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = "<group>"; };
-               583D0819254BED967661EC2359B98F18 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = "<group>"; };
-               5A543731802B05A4CF7F5D8024952273 /* IQKeyboardReturnManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnManager.swift; path = IQKeyboardReturnManager/Classes/IQKeyboardReturnManager.swift; sourceTree = "<group>"; };
-               5AD8C08E06D5E01990AA80544C0901BA /* IQKeyboardToolbarManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.debug.xcconfig; sourceTree = "<group>"; };
-               5BEBDD0CF7D42D6159D8E2EF081BD93B /* IQKeyboardToolbarManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.release.xcconfig; sourceTree = "<group>"; };
-               5BF7B9A8FF0D82C370F68F2653F54B11 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = "<group>"; };
-               5C581F1999F4CCA213DECDF99D28E47A /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQScrollViewConfiguration.swift; sourceTree = "<group>"; };
-               5C9682F1DA72621A7697B6CC652E5564 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = "<group>"; };
-               5CA792EF08162ADE7BAC7607327CBAED /* IQKeyboardConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConstants.swift; path = IQKeyboardCore/Classes/Constants/IQKeyboardConstants.swift; sourceTree = "<group>"; };
-               5E6E2ED6E4CC42A0E37225A15EC2C6F1 /* IQTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-prefix.pch"; sourceTree = "<group>"; };
-               5EB5C94FD93112688DCB0AC41215A68F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextInputViewNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               5F474BB8F008181749A6BEDD3FF6B03E /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = "<group>"; };
-               5FA5B7CA13253C1FC9B86FA274000F3F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Toast/Resources/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               60CE4193979A1692CB7524C594A33F5F /* IQKeyboardToolbarManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Internal.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Internal.swift"; sourceTree = "<group>"; };
-               612302F0FAD21B517B996AB187CA6449 /* IQKeyboardReturnManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-umbrella.h"; sourceTree = "<group>"; };
-               629AE0F7346599178ABEF604C7BB964F /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = "<group>"; };
-               648E8949F15F11A016686DAB0E5B508E /* UIView+Responders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Responders.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+Responders.swift"; sourceTree = "<group>"; };
-               64FDAD67044464E102D4F1F14A995D44 /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; sourceTree = "<group>"; };
-               65CE8BABA0B27FB3861EFDC42FAF7936 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = "<group>"; };
-               668BB2AC6F690F784C35587B8BF5F759 /* IQKeyboardToolbarConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConstants.swift; path = IQKeyboardToolbarManager/Classes/Constants/IQKeyboardToolbarConstants.swift; sourceTree = "<group>"; };
-               679C6C1E29E033FE6D3AF5FAF79916A0 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = "<group>"; };
-               67BCA4DE5DC478383D44A61FADBBB1A1 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = "<group>"; };
-               6824C490150831540A8B6007E6B0B0EF /* IQKeyboardAppearanceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceManager.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager.swift; sourceTree = "<group>"; };
-               6AD91692C7EF9CB5B47DCFFDBCF2BF1F /* IQTextView+Placeholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQTextView+Placeholderable.swift"; path = "IQTextView/Classes/IQTextView+Placeholderable.swift"; sourceTree = "<group>"; };
-               6B1A7FE44491E9065CDE0EC638D84820 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = "<group>"; };
-               6B2D1FC7F34EF685AF2452AC43FFE816 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = "<group>"; };
-               6C2845BF731838039657B93E29F7BD5F /* UIScrollView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtension.swift"; sourceTree = "<group>"; };
-               6D68B5BFA92A84156B07F2625E12FD12 /* IQKeyboardReturnManager+UITextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextViewDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextViewDelegate.swift"; sourceTree = "<group>"; };
+               21E9444EE5839429C60E9A16651BAD78 /* SRSIMDHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSIMDHelpers.h; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.h; sourceTree = "<group>"; };
+               224FAFA7B0169BBAAFD0FA422D7D11A6 /* IQKeyboardReturnManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnManager.swift; path = IQKeyboardReturnManager/Classes/IQKeyboardReturnManager.swift; sourceTree = "<group>"; };
+               236C98A9FAEF3200D70937E889092818 /* IQKeyboardManager+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign.swift"; sourceTree = "<group>"; };
+               24926E8158D8FAD9BE42C760B3154B55 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = "<group>"; };
+               2582EC469D9940C7AAE3F903A495E86A /* SRDelegateController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRDelegateController.h; path = SocketRocket/Internal/Delegate/SRDelegateController.h; sourceTree = "<group>"; };
+               25BADE0B95009E3B02C9E6EBB47417A3 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               261E9C437FF6FFF72C01BBB73341409D /* IQKeyboardResignHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardResignHandler.swift; path = IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler.swift; sourceTree = "<group>"; };
+               26FE696F5243F520CB872AC051139FE5 /* SRIOConsumer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumer.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.h; sourceTree = "<group>"; };
+               27296D8B66561FF21E0EB354428156C7 /* IQKeyboardNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-prefix.pch"; sourceTree = "<group>"; };
+               27DA2684B87B3639C3D3D439F177E219 /* SRURLUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRURLUtilities.h; path = SocketRocket/Internal/Utilities/SRURLUtilities.h; sourceTree = "<group>"; };
+               284AC2E81CAAA90FEA12A250A16B11AB /* Pods-DeepChordsSdk-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DeepChordsSdk-umbrella.h"; sourceTree = "<group>"; };
+               2C45BE81EF6A9A12E115F2EDB69FC7D7 /* Pods-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Example-acknowledgements.markdown"; sourceTree = "<group>"; };
+               2E8E02D90547D6DBD75A856D8A4E1275 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQTitleBarButtonItem.swift; sourceTree = "<group>"; };
+               2EFB802792096CDDF8FD170084E303BC /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; sourceTree = "<group>"; };
+               306B6BBB2D0B4D417ADD4B82D7D51E82 /* NSRunLoop+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocket.h"; path = "SocketRocket/NSRunLoop+SRWebSocket.h"; sourceTree = "<group>"; };
+               3187DDFEE4C490953B2AEF7B0D19EB1B /* NSURLRequest+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocket.h"; path = "SocketRocket/NSURLRequest+SRWebSocket.h"; sourceTree = "<group>"; };
+               319AC1D7C71149C2DD5EF02DECE3F511 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = "<group>"; };
+               32080BC56EEB26340C6292BA94F068B6 /* SRProxyConnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRProxyConnect.h; path = SocketRocket/Internal/Proxy/SRProxyConnect.h; sourceTree = "<group>"; };
+               32B4B8845C7824A1AB6C42EB0B32845E /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; sourceTree = "<group>"; };
+               363F0A017C453E3DC084A7B5BDB87911 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = "<group>"; };
+               3649D66694159EF7F40B5A7377AC04D1 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbarManager/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               3725B14D6A408FA007F106F8CA983CE3 /* Pods-DeepChordsSdk-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DeepChordsSdk-acknowledgements.markdown"; sourceTree = "<group>"; };
+               37445197B6E56B3F3CA861A7F21F1C41 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = "<group>"; };
+               390BB9902E7A26E5A753B9CF32673BE9 /* SRURLUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRURLUtilities.m; path = SocketRocket/Internal/Utilities/SRURLUtilities.m; sourceTree = "<group>"; };
+               39B4B067040847EC4A5CE870C4E0C5A1 /* IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbarManager-Info.plist"; sourceTree = "<group>"; };
+               3A92BC97913B825589680C917211C138 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+               3D0CA09E0900EA77648A05D608CBA29F /* Toast-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-umbrella.h"; sourceTree = "<group>"; };
+               3D8DC22EC08F3E72E7E53ADA12E80CC0 /* UIView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = "<group>"; };
+               3ECA1919991B8674C3FD3253CD02BE4B /* IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextInputViewNotification-Info.plist"; sourceTree = "<group>"; };
+               3ED18FF4963E7B4F60DBBA903E25C67B /* Combine.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Combine.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Combine.framework; sourceTree = DEVELOPER_DIR; };
+               3F70480B31A6883BEDFC6C623FC76A32 /* UIScrollView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtension.swift"; sourceTree = "<group>"; };
+               3F8F3D9A02DBFA1FF9899DD8933A95DA /* UIView+Parent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Parent.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+Parent.swift"; sourceTree = "<group>"; };
+               3F992A0DC4578F2D62CB095A497114CC /* IQKeyboardToolbarManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Debug.swift"; path = "IQKeyboardToolbarManager/Classes/Debug/IQKeyboardToolbarManager+Debug.swift"; sourceTree = "<group>"; };
+               42E3FC1A9F2FBB9AE28FDE3285B70F2C /* IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardCore-Info.plist"; sourceTree = "<group>"; };
+               43CBF3C99F0BF342AEE8D7C7BE945B62 /* SRRunLoopThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRunLoopThread.h; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.h; sourceTree = "<group>"; };
+               44AFC022F6D6DD0DF30E10F9B7C4615A /* IQKeyboardToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConfiguration.swift; path = IQKeyboardToolbarManager/Classes/Configuration/IQKeyboardToolbarConfiguration.swift; sourceTree = "<group>"; };
+               455A2446E1A8F92123FBE90A1D4B8D0B /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
+               45E554E7AE314B29D9C07A10667261BE /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = "<group>"; };
+               47BC329529726FFACA942239310E3841 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = "<group>"; };
+               47F6CB0808BEA63D36E484B5D53B6436 /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQScrollViewConfiguration.swift; sourceTree = "<group>"; };
+               484ECEC55CB9E98BAF0AE020F8FFF767 /* IQDeepResponderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQDeepResponderContainerView.swift; path = IQKeyboardToolbarManager/Classes/IQDeepResponderContainerView.swift; sourceTree = "<group>"; };
+               48CA3ADFB16E0C4E235D89C552572332 /* IQKeyboardToolbar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbar-dummy.m"; sourceTree = "<group>"; };
+               4AB6723E60A4A0D494C4DCA4686CD3F0 /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; };
+               4B6ABE8E0C199299C26E4B5977886B71 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = "<group>"; };
+               4BF6C697C2EB03CCBCE9CA841EA31F47 /* Pods-DeepChordsSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DeepChordsSdk.debug.xcconfig"; sourceTree = "<group>"; };
+               4D6EF89B651DCBED1F5A7FA5D36D1FA6 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItem.swift; sourceTree = "<group>"; };
+               4EF1258267E4FF8FA1F298C5303B0E86 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = "<group>"; };
+               4F8CA916A31362AD762A33A32B0D936C /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; sourceTree = "<group>"; };
+               4FB988C66900BB1BEEF5C5CA21B14AC9 /* IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextView-Info.plist"; sourceTree = "<group>"; };
+               502964DCE1567348B5B03211445AEA35 /* IQTextInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputView.swift; path = IQKeyboardCore/Classes/IQTextInputView.swift; sourceTree = "<group>"; };
+               5084335EF29A15EB6C31DFB1ACA15349 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = "<group>"; };
+               50A2B3566A43C15186D3A1D9F91DB662 /* SRSIMDHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSIMDHelpers.m; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.m; sourceTree = "<group>"; };
+               529559A67714BC64192FD9BF92B33312 /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = "<group>"; };
+               58E0237741E33CAFB3DB96DAA7559910 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = "<group>"; };
+               5AF0EBE9A79115D36EF40E456919D63B /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = "<group>"; };
+               5C0366C8DAD8762352B37EDB4DD62E2E /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = "<group>"; };
+               5C8BDF6ED7A0F1533FC84E97705B2878 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = "<group>"; };
+               5EF0C08E9D339F2CB75ED0C9E7FA2C0B /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = "<group>"; };
+               5FB6A208FD72153F040D4E1354F225B4 /* NSRunLoop+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRunLoop+SRWebSocket.m"; path = "SocketRocket/NSRunLoop+SRWebSocket.m"; sourceTree = "<group>"; };
+               6058A4E7C2EAB9B01A8DBB5AAD7E72A2 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = "<group>"; };
+               61AD3899C2D649897E11DA65A33ABCEE /* Toast-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-prefix.pch"; sourceTree = "<group>"; };
+               6381011924A059A30C85325FB30E74A7 /* IQKeyboardAppearanceManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardAppearanceManager+Internal.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager+Internal.swift"; sourceTree = "<group>"; };
+               63CAFAB9111F6F5AAEFD9E00CD0AF892 /* IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbar.swift; path = IQKeyboardToolbar/Classes/IQKeyboardToolbar.swift; sourceTree = "<group>"; };
+               643F1AECE038E1886712C3619E367201 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               64607CC28651258E6DAB2D1358080FB5 /* IQTextView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-umbrella.h"; sourceTree = "<group>"; };
+               66E229F790E827392A80B7F4C7A6110F /* IQKeyboardReturnManager+UITextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextViewDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextViewDelegate.swift"; sourceTree = "<group>"; };
+               67B06A63B2F6FDD332A5D14963BFC3E3 /* IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardReturnManager-Info.plist"; sourceTree = "<group>"; };
+               6839FC9EB46E8CB05E17C35E5A5B579F /* SRSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSecurityPolicy.m; path = SocketRocket/SRSecurityPolicy.m; sourceTree = "<group>"; };
+               68443C8F28AD901E531D6BFA7559C683 /* SRRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRandom.m; path = SocketRocket/Internal/Utilities/SRRandom.m; sourceTree = "<group>"; };
+               6937B145AC462041831CC9D76D3CF28A /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = "<group>"; };
+               6A3DB74B2C40BCD9F3AFA585DA322FF5 /* SRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRConstants.h; path = SocketRocket/Internal/SRConstants.h; sourceTree = "<group>"; };
+               6A599D5DDFD46F7296A5F93623AB6C3A /* UIView+IQKeyboardExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionObjc.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionObjc.swift"; sourceTree = "<group>"; };
+               6A737607DB763EBB681D8D0F6E6AB5FB /* IQKeyboardManager+ToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManager.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManager.swift"; sourceTree = "<group>"; };
+               6C4219D35CB16DFEC9A662797E27F4D8 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardCore/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               6D134ED7EB13A9F9FADC82CC86BC10FA /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = Toast/Toast.swift; sourceTree = "<group>"; };
+               6DFE571CD6A634198545BB1149A5399C /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = "<group>"; };
                6E897F35E5E27028AC58B14B552FBC8D /* IQKeyboardCore-IQKeyboardCore */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardCore-IQKeyboardCore"; path = IQKeyboardCore.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               6FB32CD2529DBAA6A58EE1C218F3F26B /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = "<group>"; };
-               71450C650474E14E27C58DC6031DED15 /* IQTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextView-dummy.m"; sourceTree = "<group>"; };
-               7181351BD01340D69B83002F942C6238 /* Toast-Swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.release.xcconfig"; sourceTree = "<group>"; };
-               71B0C2CECF35343E42C956FB7F6F996F /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = "<group>"; };
-               7278B677DCE375A2402B9587C28AC4E9 /* IQKeyboardToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConfiguration.swift; path = IQKeyboardToolbarManager/Classes/Configuration/IQKeyboardToolbarConfiguration.swift; sourceTree = "<group>"; };
-               72D1C2A015F7D41AEDD14BCE9FA22C03 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
-               76334455F598BE0C113D08A675132729 /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; sourceTree = "<group>"; };
-               7683AA5C3B2022EED0FC68DA18C8CD8F /* IQKeyboardNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardNotification-dummy.m"; sourceTree = "<group>"; };
-               7717832333BD8513940DC7E1C94C2EBC /* IQKeyboardToolbarManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Debug.swift"; path = "IQKeyboardToolbarManager/Classes/Debug/IQKeyboardToolbarManager+Debug.swift"; sourceTree = "<group>"; };
-               7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Example-umbrella.h"; sourceTree = "<group>"; };
-               789D34626E9F27F10F113B699A0936D7 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = "<group>"; };
-               7A8AA0C87B06CB08F33F1C9C7749E0DF /* IQTextInputViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfo.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewInfo.swift; sourceTree = "<group>"; };
-               7AD2B04F0FA541294181478CCE734D25 /* IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextInputViewNotification-Info.plist"; sourceTree = "<group>"; };
-               7BEC044A89EDCA943365E4156BE49F6A /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItem.swift; sourceTree = "<group>"; };
-               7D66880441D4B9000B03722BC09971E9 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardNotification/Classes/IQKeyboardInfo.swift; sourceTree = "<group>"; };
-               7DC62F5E57E6012851C6645C3C59034B /* Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Toast-Swift-Info.plist"; sourceTree = "<group>"; };
+               6EC73E02165E26ABFCACC677AF94DD8B /* IQKeyboardManager+Resign_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign_Deprecated.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign_Deprecated.swift"; sourceTree = "<group>"; };
+               6F879A10A3809420736A229A9720D75A /* IQKeyboardReturnManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-prefix.pch"; sourceTree = "<group>"; };
+               73D26C4F196C661EA1DB04BCC2471A24 /* Pods-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Example-frameworks.sh"; sourceTree = "<group>"; };
+               750817E69AAE97D1AF5F958FC5904BF2 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = "<group>"; };
+               7594A52F0B7E0AD0D9F26BE8026E1E4C /* Array+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Sort.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/Array+Sort.swift"; sourceTree = "<group>"; };
+               761B4D8A688672EC9D13AB178F184A16 /* IQKeyboardToolbar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbar.modulemap; sourceTree = "<group>"; };
+               77195404B1F7ADCD8B3008B1B89F5C03 /* SRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRError.m; path = SocketRocket/Internal/Utilities/SRError.m; sourceTree = "<group>"; };
+               77B67B7AD3900B61154BC9C1973DD611 /* SocketRocket.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SocketRocket.modulemap; sourceTree = "<group>"; };
+               782D18DB9D0B7B74F8613026BAD77E86 /* IQKeyboardToolbarManager+Action.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Action.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Action.swift"; sourceTree = "<group>"; };
+               78882EBBF9DB9EAA48F3FFBF14D1E0B5 /* IQKeyboardToolbar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.release.xcconfig; sourceTree = "<group>"; };
+               78F95F4E86380B049117A093BFC1CD7B /* IQTextInputViewNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.debug.xcconfig; sourceTree = "<group>"; };
+               792548D571F70D8E7FA3B52FA58D9591 /* IQKeyboardManager+ActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ActiveConfiguration.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ActiveConfiguration.swift"; sourceTree = "<group>"; };
+               79E6154EEE25D08664ACFE66C69DDFA0 /* Toast-Swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.release.xcconfig"; sourceTree = "<group>"; };
+               7E07F795F5513269A6EA62DE5EE8C187 /* IQKeyboardCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-prefix.pch"; sourceTree = "<group>"; };
+               7E46C7EF1F6BD003E0DEC56B05B15DDF /* SocketRocket-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-umbrella.h"; sourceTree = "<group>"; };
+               7E6C82BDAFC8E25852BD0F53480C2FE2 /* IQKeyboardToolbarManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-prefix.pch"; sourceTree = "<group>"; };
+               7F565A673CEEF3B818D7A75F2A2EE8B0 /* UIView+IQKeyboardExtensionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionDeprecated.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionDeprecated.swift"; sourceTree = "<group>"; };
                80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardToolbarManager-IQKeyboardToolbarManager"; path = IQKeyboardToolbarManager.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               81A4530B3DFED1CF5D377C4320215A4A /* IQKeyboardReturnManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.release.xcconfig; sourceTree = "<group>"; };
-               81C8D08EE2B731D17BFDF51DB75C7FD4 /* IQTextInputViewNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.release.xcconfig; sourceTree = "<group>"; };
-               83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+               822DD0DAF7E4428BCCDFE28EAD683ADD /* IQKeyboardNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-umbrella.h"; sourceTree = "<group>"; };
                847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQTextView-IQTextView"; path = IQTextView.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               8510B576847C74847E63FDFB695CF836 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = "<group>"; };
-               859853A4B800A598CFCE06A228A4E5DB /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = "<group>"; };
-               85F474F9E7D6BD1F6B7663352D31EC40 /* IQKeyboardToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarPlaceholderConfiguration.swift; path = IQKeyboardToolbar/Classes/Placeholder/IQKeyboardToolbarPlaceholderConfiguration.swift; sourceTree = "<group>"; };
-               8AE4CFFFB83D44D25692067A36EE407A /* IQKeyboardReturnManager+UITextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextFieldDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextFieldDelegate.swift"; sourceTree = "<group>"; };
-               8B2918DFD6FEDA148940283A8ED415E2 /* IQTextView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-umbrella.h"; sourceTree = "<group>"; };
-               8BAEA3E897A92AD6ABF227954A59DB29 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; };
-               8BC190548C4E12A7F2A38DB809F88934 /* Toast-Swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Toast-Swift.debug.xcconfig"; sourceTree = "<group>"; };
-               8C80464FA646E2505448549CED65DFF1 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = "<group>"; };
-               8D338917B2BCFE987917671C13FABE6E /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; };
+               84BBB0405889161CCDDCD4F166723CBF /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = "<group>"; };
+               85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SocketRocket; path = SocketRocket.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+               8609C41722C0D97335DBF43B1CE7AB03 /* SRRunLoopThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRunLoopThread.m; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.m; sourceTree = "<group>"; };
+               87F05B4E0307C30EB4FC212724C8F157 /* IQKeyboardNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.debug.xcconfig; sourceTree = "<group>"; };
+               888ACD87ACA8BCCE5527AAC76E41A5A3 /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; sourceTree = "<group>"; };
+               895778DCA58AE753D96DD48F3E036F4F /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = "<group>"; };
+               8981CA762CD2FDB68D15FEEA091439B5 /* IQKeyboardToolbarManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.release.xcconfig; sourceTree = "<group>"; };
+               8B5BF34764325604D366CC5C6F31A43A /* IQKeyboardToolbarManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbarManager.modulemap; sourceTree = "<group>"; };
+               8BD0BDF557D8D8D7CFB04CB9C9482634 /* UIView+ParentObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ParentObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+ParentObjc.swift"; sourceTree = "<group>"; };
+               8C2460EF332DB152D7A7B9869C8F4032 /* IQKeyboardToolbarManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbarManager-dummy.m"; sourceTree = "<group>"; };
+               8C4CE911087AC8260002E6859821FAF0 /* SRIOConsumerPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumerPool.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h; sourceTree = "<group>"; };
                8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; path = IQKeyboardManagerSwift.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               8E142A384801F69E54EECA3E3F8667AF /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = "<group>"; };
-               8E4ED9BFDF71764CBE3D2C853E329AC8 /* IQKeyboardCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.debug.xcconfig; sourceTree = "<group>"; };
-               8E85E98FFCFC789BC6D8C97871841FB5 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = "<group>"; };
-               8ECEAA4A365919AC774C896E18E759AA /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = "<group>"; };
-               8F70375CE5D16313A9CC78E1FFAC5536 /* UITableView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UITableView+IndexPaths.swift"; sourceTree = "<group>"; };
-               8FE0C4981E2732BCC6938C0CC26922A2 /* ResourceBundle-IQTextView-IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextView-IQTextView-Info.plist"; sourceTree = "<group>"; };
-               903F0FF8B72AF2E84101EE1AD8E525B8 /* IQKeyboardToolbar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbar-dummy.m"; sourceTree = "<group>"; };
-               92335BB8898DE45ED349EF272C417E5F /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQInvocation.swift; sourceTree = "<group>"; };
-               9259BB742B0F6B1D52074F71BD71B42F /* IQTextInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputView.swift; path = IQKeyboardCore/Classes/IQTextInputView.swift; sourceTree = "<group>"; };
-               93B6A56AC9E28078E6884FB890E1B4F3 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = "<group>"; };
-               95251F6BFD6A006568D4215EC8605879 /* IQTextInputViewNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextInputViewNotification.modulemap; sourceTree = "<group>"; };
-               964B48760245F36728533BAAD3F7C58D /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = "<group>"; };
-               96778D30391C6741ED9D0A46200EF18C /* IQKeyboardToolbarManager+Action.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Action.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Action.swift"; sourceTree = "<group>"; };
-               969958CCDF4F680B2CEA8E4DD27B72C7 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = "<group>"; };
-               96ED5DD9A8DC870C9E93546874FAD053 /* IQKeyboardReturnManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-prefix.pch"; sourceTree = "<group>"; };
+               8EE7DE8BEE69315B9018594B62622247 /* SocketRocket-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SocketRocket-Info.plist"; sourceTree = "<group>"; };
+               8F74E325EE2B99C0C5504B461E558136 /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; sourceTree = "<group>"; };
+               90A0A417BB33C9C0B15A1946762E0142 /* Pods-Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-Info.plist"; sourceTree = "<group>"; };
+               9101BAF3027E387E34B0301BE000FA50 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = "<group>"; };
+               914B3416C83998074DDAB130CB468706 /* IQKeyboardReturnManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.release.xcconfig; sourceTree = "<group>"; };
+               91511868D1335C41FD84563EF906555C /* Pods-DeepChordsSdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DeepChordsSdk.release.xcconfig"; sourceTree = "<group>"; };
+               91B24E7C9EB4215BEA2C0A23D3960815 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; };
+               92C5C459A1F7BF6872A58A16B7092803 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = "<group>"; };
+               936A804D23E5F53A2A38402D624D6EA2 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = "<group>"; };
+               9374F8A0206251FC7979A888F803B656 /* IQKeyboardCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.debug.xcconfig; sourceTree = "<group>"; };
+               93B05AAE9D91B32B46928A2293611FF4 /* Pods-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Example-umbrella.h"; sourceTree = "<group>"; };
+               95BCD7B08FF0A2A4F9B0A36B92688E27 /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = "<group>"; };
+               972CC8A48122693582F02385A70853A0 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = "<group>"; };
                979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               98AA99C68FB3D6ED22719CAE6606E9EA /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = "<group>"; };
-               9915B34E81CF6906E0C1C0AA6D681726 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQTextView/Classes/IQTextView.swift; sourceTree = "<group>"; };
-               99A357D21311D4CAEF91E8D645B9EF1B /* IQKeyboardNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.debug.xcconfig; sourceTree = "<group>"; };
-               9A926C38DDD5B0CB77DBF7BE94EF672E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbarManager/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               97D19ACC9A79A3CF24DA377E12303E12 /* UIView+Responders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Responders.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+Responders.swift"; sourceTree = "<group>"; };
+               9939F486FEF106F98BDD0806CA8E0624 /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQInvocation.swift; sourceTree = "<group>"; };
+               994130CE96E0F8ED28DCF165B03CB200 /* IQKeyboardToolbar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-umbrella.h"; sourceTree = "<group>"; };
+               995B281C84F1083BE4DB31B75BCC029C /* UIViewController+ParentContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+ParentContainer.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIViewController+ParentContainer.swift"; sourceTree = "<group>"; };
+               9976447B92E50DDDCA64DBDE5A47FD7F /* UIView+IQKeyboardExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtension.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtension.swift"; sourceTree = "<group>"; };
+               99B82533878EEF9F0E2FB3560695FF8A /* IQTextView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.debug.xcconfig; sourceTree = "<group>"; };
+               9D3FF860EEACD6D1A4A582CB31FC31C1 /* Pods-DeepChordsSdk-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DeepChordsSdk-acknowledgements.plist"; sourceTree = "<group>"; };
                9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
-               9DAD88CD28AA6C418EA42F22ED77F6BE /* UIViewController+ParentContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+ParentContainer.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIViewController+ParentContainer.swift"; sourceTree = "<group>"; };
-               A05DE88657E839818EACAAED4CD60B34 /* IQKeyboardManager+ActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ActiveConfiguration.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ActiveConfiguration.swift"; sourceTree = "<group>"; };
+               9ECC82996747BDD9C0FF35EC1ECF0751 /* IQTextInputViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfo.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewInfo.swift; sourceTree = "<group>"; };
+               9F272A689E05B2AA0C0ED18AD4383DDE /* SocketRocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.debug.xcconfig; sourceTree = "<group>"; };
+               9F657D2C1582A8BFEADD06E527D796B2 /* IQKeyboardCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-umbrella.h"; sourceTree = "<group>"; };
+               A0F99DC81F369C1B739E19DE3923C65A /* IQKeyboardExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardExtended.swift; path = IQKeyboardCore/Classes/IQKeyboardExtended.swift; sourceTree = "<group>"; };
+               A15B541658FAC5E8233C91001D7888EC /* UITableView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UITableView+IndexPaths.swift"; sourceTree = "<group>"; };
                A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardToolbar-IQKeyboardToolbar"; path = IQKeyboardToolbar.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               A1818F69B6E5828B7B096AEDA2284766 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = "<group>"; };
-               A1FEE90906065AB1BED6A249EE74C5CB /* UIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Hierarchy.swift"; path = "IQKeyboardCore/Classes/UIKitExtensions/UIView+Hierarchy.swift"; sourceTree = "<group>"; };
-               A37E4894C5CC2317619C7ECD09116882 /* UIView+Parent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Parent.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+Parent.swift"; sourceTree = "<group>"; };
-               A7ACF9EC00F202138E2D10D8C2DE771D /* Toast-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-Swift-dummy.m"; sourceTree = "<group>"; };
-               A8051AF85E41AF3CE961220AB4E33AFE /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextView/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               A8E4BB35A9C12143A016443E5B5AF064 /* UIView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtension.swift"; sourceTree = "<group>"; };
+               A1B189AA95276D5EC85F6B80EED66624 /* Pods-DeepChordsSdk.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DeepChordsSdk.modulemap"; sourceTree = "<group>"; };
+               A284951838ACA1015F31DBE6C5A8D45F /* SRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRConstants.m; path = SocketRocket/Internal/SRConstants.m; sourceTree = "<group>"; };
+               A368339039F84E09260E0C59DD294DF3 /* UIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Hierarchy.swift"; path = "IQKeyboardCore/Classes/UIKitExtensions/UIView+Hierarchy.swift"; sourceTree = "<group>"; };
+               A44F945B3203BCA4B178E49ED53E5391 /* IQKeyboardManager+Appearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance.swift"; sourceTree = "<group>"; };
+               A55BC45618B737DBC6885D98DC8C9C0C /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = "<group>"; };
+               A6BD2261427B29C50F84843B6BAB7DEA /* Pods-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Example-dummy.m"; sourceTree = "<group>"; };
+               A6C0BF00B3D547B50DBE54D99A1307F4 /* SRIOConsumerPool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumerPool.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m; sourceTree = "<group>"; };
+               A8BBDD1BF37BF58D4C467C1D1F21D462 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = "<group>"; };
                A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManagerSwift; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               AA29B4610AE76CC6CC7A09F3BA316FA3 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = "<group>"; };
-               AADFD372200F5622C3E275C18DAEF64C /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = "<group>"; };
-               AB854D7CA85BFEEFB6266DFA1E9D61B8 /* IQKeyboardToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarManager.swift; path = IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager.swift; sourceTree = "<group>"; };
-               ABFD1CA60E15B4B7FCB561F401E9ECDC /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = "<group>"; };
-               ACE56E6AC8845E4C5C29E55E4CA9B2FF /* UIView+RespondersObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+RespondersObjc.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+RespondersObjc.swift"; sourceTree = "<group>"; };
-               AE0F784B4D89883BEA9DBDA5D3427CF0 /* UIView+IQKeyboardExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionObjc.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionObjc.swift"; sourceTree = "<group>"; };
-               AF8B43F557099CFFDFCE29B27283089F /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; sourceTree = "<group>"; };
-               AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Example-frameworks.sh"; sourceTree = "<group>"; };
-               B017A824A4E1A13FDACEB926F92C62FA /* IQKeyboardToolbarManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbarManager-dummy.m"; sourceTree = "<group>"; };
-               B027F0500294FFF3F8823CC8C93B34DC /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = "<group>"; };
-               B057F1FE2FF50734827A356AFE1C3763 /* IQTextView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.release.xcconfig; sourceTree = "<group>"; };
-               B10297739CDE35118B5C7226834CD882 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbar/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               B148DDA9F2C353D7D89E11352B57A789 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = "<group>"; };
-               B2E5A5B9F96103B68EFF7B3BFF9D0D2E /* IQKeyboardToolbarManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbarManager.modulemap; sourceTree = "<group>"; };
-               B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
+               A8FACB5BCF825223E394FFECCE4AA031 /* IQKeyboardReturnManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardReturnManager-dummy.m"; sourceTree = "<group>"; };
+               A925E59D0B05DC5A56E631BD47C64317 /* IQTextView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextView.modulemap; sourceTree = "<group>"; };
+               AA485EB92636FB68E91AF3FCC1CE9C5E /* IQKeyboardCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.release.xcconfig; sourceTree = "<group>"; };
+               AB0D6BE05753DE859156BD2E8FCD55AD /* IQTextInputViewNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-prefix.pch"; sourceTree = "<group>"; };
+               AEF5BBB7C4ACF7C06BBD262B6C1145CE /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = "<group>"; };
+               AF5E93556B3B98CA5218F3B9E49304F6 /* SRLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRLog.h; path = SocketRocket/Internal/Utilities/SRLog.h; sourceTree = "<group>"; };
+               AFBCEC8A83AB63E7D141D4EA274517BA /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = "<group>"; };
+               B1F45CBD7E407DB108D6FAD8FF0A1415 /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = "<group>"; };
+               B1F86119EB8AFCE72C0BA2356BBA4C46 /* IQTextView+Placeholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQTextView+Placeholderable.swift"; path = "IQTextView/Classes/IQTextView+Placeholderable.swift"; sourceTree = "<group>"; };
+               B278701FAF564A3D25B8F87CCDB798D6 /* SRPinningSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRPinningSecurityPolicy.h; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.h; sourceTree = "<group>"; };
+               B3AA4CA7BB409A5191DBD08356FE703A /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
                B4B1A58096F15199A14069C5D6AA1C99 /* IQKeyboardToolbar */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardToolbar; path = IQKeyboardToolbar.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               B5563167CBEFFA8F84B6DCD2C1CF029A /* IQKeyboardAppearanceConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceConfiguration.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceConfiguration.swift; sourceTree = "<group>"; };
-               B627ECEFAF29D21C3B5D4634873DC799 /* UICollectionView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UICollectionView+IndexPaths.swift"; sourceTree = "<group>"; };
-               B6BC2BCCF67E34C8D4DF08BBE177A05A /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = "<group>"; };
-               B8159912988182904A096C5A3036AA65 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQActiveConfiguration.swift; sourceTree = "<group>"; };
-               B8783F3308A893AC9F1E8B1450DB38B3 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = "<group>"; };
-               B93572343CE1D7CC5E903F82DF724A64 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = "<group>"; };
-               B96E6AE7F8B203883A206CD26BD909D0 /* Toast-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-prefix.pch"; sourceTree = "<group>"; };
+               B4BBB6B50C15DFF1221CD8E66DC2D354 /* SRDelegateController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRDelegateController.m; path = SocketRocket/Internal/Delegate/SRDelegateController.m; sourceTree = "<group>"; };
+               B560A38E28D510B4A50AFF9595D57670 /* IQTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextView-dummy.m"; sourceTree = "<group>"; };
+               B5D1545C4C0C2474FD103EFECB90E9C5 /* SRIOConsumer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumer.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.m; sourceTree = "<group>"; };
+               B704D82F61A7F3E0FF10EBDE953E7E49 /* UIView+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+Resign.swift"; sourceTree = "<group>"; };
+               B77F72F31D132841951EF8E4FA67360A /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = "<group>"; };
+               B7AEC5DC6E5D0A8EAE327461A3FAFE6B /* ResourceBundle-IQTextView-IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextView-IQTextView-Info.plist"; sourceTree = "<group>"; };
+               B7EC4834CE090AEAE5858B4D8B4513C7 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; sourceTree = "<group>"; };
+               B8A90925F3434F73BD6A036480A5A473 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = "<group>"; };
+               B932A928D72C73FB59FC964A82AC2723 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = "<group>"; };
+               B98BCBD470DE1E0FC19C5E1F3AF37195 /* Toast-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-Swift-dummy.m"; sourceTree = "<group>"; };
                B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SnapKit-SnapKit_Privacy"; path = SnapKit_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               B9E5B7ACA1C4831DB0FC6F6DC415806B /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = "<group>"; };
-               BA15CE80784F2ABB4BC5A66CFF93FA26 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = "<group>"; };
-               BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
-               BCCF122A4CCCE14CB1CC9357A7D12E0E /* IQKeyboardNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-umbrella.h"; sourceTree = "<group>"; };
-               BD6E85B5A6A0DAC92CE30328684DD7C8 /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQRootControllerConfiguration.swift; sourceTree = "<group>"; };
-               BD749634E8E36AB77EC9F46FE998985D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardReturnManager/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
-               BE1DF4BC58C1E1E0F060079D0689EC20 /* IQKeyboardToolbarManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-umbrella.h"; sourceTree = "<group>"; };
-               BE4AFEFA1716D5281D0EA17603944826 /* IQDeepResponderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQDeepResponderContainerView.swift; path = IQKeyboardToolbarManager/Classes/IQDeepResponderContainerView.swift; sourceTree = "<group>"; };
-               BEC0587EC3B7B9A0BC5BB1A63BCDE662 /* IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardReturnManager-Info.plist"; sourceTree = "<group>"; };
-               C1081457464A541862ABFB75CFF611B1 /* IQKeyboardAppearanceManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardAppearanceManager+Internal.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager+Internal.swift"; sourceTree = "<group>"; };
-               C11B662EA98DB1DB2E0BBB631FFCB9BC /* IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextView-Info.plist"; sourceTree = "<group>"; };
-               C2DDB1A49CDC72CEC4AC3A0667142BB2 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQTitleBarButtonItem.swift; sourceTree = "<group>"; };
-               C2FE0524AC7581B2CCDF2765D76D4454 /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; sourceTree = "<group>"; };
-               C54CD51A4611587F72A12DCFF57547B3 /* IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbar-Info.plist"; sourceTree = "<group>"; };
-               C5BFD04CC97A0992D34437E786ACA4D3 /* IQKeyboardManager+ToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManager.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManager.swift"; sourceTree = "<group>"; };
-               C64F946A6CF4B3D30483C6FCDE237D46 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = "<group>"; };
-               C8482B39147BBBDB16D770864BDE1CD5 /* IQTextView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.debug.xcconfig; sourceTree = "<group>"; };
-               C8C1B3AFD0A52650DF90D553FC72040D /* IQKeyboardReturnManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.debug.xcconfig; sourceTree = "<group>"; };
-               C8E9C7F86EF79309A7D62796C50BD2C4 /* UIView+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+Resign.swift"; sourceTree = "<group>"; };
-               C997F74F024831561D7BCC7832899644 /* IQKeyboardReturnManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardReturnManager-dummy.m"; sourceTree = "<group>"; };
-               CA0BFED3F4B8F736E248BED9F016F046 /* IQKeyboardManager+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign.swift"; sourceTree = "<group>"; };
-               CEDA17E76A289361BA57D894985793E8 /* IQKeyboardToolbar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbar.modulemap; sourceTree = "<group>"; };
-               D36423993D0DC2D82438F5A0E2D49149 /* ResourceBundle-Toast-Swift-Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Toast-Swift-Toast-Swift-Info.plist"; sourceTree = "<group>"; };
-               D6041C81E4991A91F5A45F589A80282E /* Toast-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-Swift-umbrella.h"; sourceTree = "<group>"; };
+               BA718E8C5B46720F8012D7471BC6BF37 /* IQKeyboardToolbarManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Toolbar.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Toolbar.swift"; sourceTree = "<group>"; };
+               BB176716E9339D1CA456C696313236FE /* IQKeyboardToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarManager.swift; path = IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager.swift; sourceTree = "<group>"; };
+               BC06E9DFB77603B36FDA218B323243F1 /* Toast-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Toast-Swift.modulemap"; sourceTree = "<group>"; };
+               BC590BB41230B885D405920A55DAD210 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbar/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               BC713814A822ABA18A07C72E6B97AE04 /* IQKeyboardToolbarConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConstants.swift; path = IQKeyboardToolbarManager/Classes/Constants/IQKeyboardToolbarConstants.swift; sourceTree = "<group>"; };
+               BDFB64A96CC2B18E25FF662E37821253 /* UIView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtension.swift"; sourceTree = "<group>"; };
+               BF4BC9A0614A1C63539C14C08655781F /* IQKeyboardToolbarManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Deprecated.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Deprecated.swift"; sourceTree = "<group>"; };
+               BF60B19D2E8B68520E5121EFFF5A7D4B /* IQKeyboardToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarPlaceholderConfiguration.swift; path = IQKeyboardToolbar/Classes/Placeholder/IQKeyboardToolbarPlaceholderConfiguration.swift; sourceTree = "<group>"; };
+               BFB6F598FCE7D6294584E7334E04ECF2 /* IQKeyboardCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardCore-dummy.m"; sourceTree = "<group>"; };
+               C0B11EBC98CF5A275C2F8077CDEA1F18 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardNotification/Classes/IQKeyboardInfo.swift; sourceTree = "<group>"; };
+               C1C674397D453B6D18F9DE46BC55B6FF /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = "<group>"; };
+               C23ABFD4CEF6F11C0094E61729745DE3 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = "<group>"; };
+               C2878B4F3D509987EC767604F46AD0E1 /* IQTextInputViewNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextInputViewNotification-dummy.m"; sourceTree = "<group>"; };
+               C2E377B4F7062BE5BC6007798C6619AD /* IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardNotification-Info.plist"; sourceTree = "<group>"; };
+               C33C375328643D5A9A1D1EA02C88D419 /* SRSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSecurityPolicy.h; path = SocketRocket/SRSecurityPolicy.h; sourceTree = "<group>"; };
+               C3F49C31FFD05F4734B464D5C31979FB /* SRProxyConnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRProxyConnect.m; path = SocketRocket/Internal/Proxy/SRProxyConnect.m; sourceTree = "<group>"; };
+               C4B0C5FFB36CB099605387F3B9F34032 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Debug/IQKeyboardManager+Debug.swift"; sourceTree = "<group>"; };
+               C53921D76AE7ECC63293C2263C9325A0 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = "<group>"; };
+               C61F58870F6E8F6EEF25FA9A6A0E7F60 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManagerDeprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManagerDeprecated.swift"; sourceTree = "<group>"; };
+               C688B508E11EFC4D24CB920CAF96B948 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               C8BFDD7C500F5D6D58D212CB15B52E08 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = "<group>"; };
+               C97A233DEE5D1279877CD8292A10AD84 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextInputViewNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               CC93FCE609BBB131B2F1C23EEA6B9997 /* IQKeyboardCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardCore.modulemap; sourceTree = "<group>"; };
+               CCC7F61220FD5938841683501167A10F /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = "<group>"; };
+               CDD93D5045280AD0FFBB587ADD1D3B83 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = "<group>"; };
+               CEA0C9AAC08B9E0D20DE8BC894AE3FDE /* SRMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRMutex.h; path = SocketRocket/Internal/Utilities/SRMutex.h; sourceTree = "<group>"; };
+               CEAD5B92B7CF2B0746297208D610D3CD /* UIView+RespondersObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+RespondersObjc.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+RespondersObjc.swift"; sourceTree = "<group>"; };
+               CF362111EEE4CBA3A09DDC5814422B70 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Toast/Resources/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               CFB853532F59E8A63D1C93202280CEE9 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = "<group>"; };
+               CFCB22B3ED6C05251CBD3059AAE51013 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = "<group>"; };
+               D0689F5C192D1672448116583D233922 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Deprecated/IQKeyboardManager+Deprecated.swift"; sourceTree = "<group>"; };
+               D1B2801FD44E489C5B7F202C13D651F2 /* SRRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRandom.h; path = SocketRocket/Internal/Utilities/SRRandom.h; sourceTree = "<group>"; };
+               D2793937CF93115D3117A82FB873124B /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = "<group>"; };
+               D389D10DEC7EB9B503CD45CE58851CA6 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = "<group>"; };
+               D4C8C6089794ACE3010224A9FB1D90EA /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = "<group>"; };
+               D5278EBCB01A333274C163B9281DE38B /* Pods-DeepChordsSdk-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DeepChordsSdk-dummy.m"; sourceTree = "<group>"; };
+               D5434748DD18D8B60013ABF3FFC5B95F /* IQTextView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.release.xcconfig; sourceTree = "<group>"; };
+               D5BD8A09B0B0972162CDD072ACB69843 /* IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbar-Info.plist"; sourceTree = "<group>"; };
+               D5EC7B9244C6E5B0C7776ADA35992A5D /* Pods-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-acknowledgements.plist"; sourceTree = "<group>"; };
                D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Toast-Swift"; path = Toast_Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Example-dummy.m"; sourceTree = "<group>"; };
-               D6F24EDA81C0D3AF65C1C30A74BC8466 /* UIView+IQKeyboardExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtension.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtension.swift"; sourceTree = "<group>"; };
-               D70722A63D8C3F991856EF872356AFB1 /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = Toast/Toast.swift; sourceTree = "<group>"; };
-               DB6E29CDC3D716E3A34D01A60A665503 /* IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbarManager-Info.plist"; sourceTree = "<group>"; };
-               DD9285BD914CCA73118032F2F1792F68 /* IQTextInputViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewNotification.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewNotification.swift; sourceTree = "<group>"; };
-               DF398810396855B6BEE8D80C8EF6518A /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = "<group>"; };
-               DFCB9340841640E5C5B330DA1777A78E /* IQKeyboardNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.release.xcconfig; sourceTree = "<group>"; };
-               E3863E29A7A589B2F92E5FA4658C10A7 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = "<group>"; };
-               E5DDF11C94E0521FF93720B78FF737EA /* IQKeyboardToolbarManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Deprecated.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Deprecated.swift"; sourceTree = "<group>"; };
-               E78AC8B5EF810FFB832428E336AF5659 /* UIView+ResignObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ResignObjc.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+ResignObjc.swift"; sourceTree = "<group>"; };
-               E8519902BF501028CEE5387E0C358BE6 /* IQKeyboardCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-prefix.pch"; sourceTree = "<group>"; };
-               E86FC2B39794AC78EFE33B8105C529A8 /* IQTextInputViewNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-prefix.pch"; sourceTree = "<group>"; };
-               EA1EDABA1BE078F9646EF88F4C71CBFA /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = "<group>"; };
-               EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-acknowledgements.plist"; sourceTree = "<group>"; };
-               EF2D58EB40EE8221B053FACB532A13C1 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = "<group>"; };
-               EF780280B45D05B3F28826EF5C144118 /* IQKeyboardToolbar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.debug.xcconfig; sourceTree = "<group>"; };
-               F05EC3D3A34DD35BD3BC1C95E19C34B8 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; sourceTree = "<group>"; };
-               F6A61B701D8AF835B15A01AC3B3ABDFB /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = "<group>"; };
-               F708C6E5D928E67F9C3E7613BCB59A0D /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItemConfiguration.swift; sourceTree = "<group>"; };
+               D63292C39BAA9B9EB776AAA03EABD932 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQActiveConfiguration.swift; sourceTree = "<group>"; };
+               D7EF3525F706753F05EA05BD1819EC4E /* SRMutex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRMutex.m; path = SocketRocket/Internal/Utilities/SRMutex.m; sourceTree = "<group>"; };
+               D8D8726D60E6EF3E455768E64432DA57 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = "<group>"; };
+               DA85287A9C3D760A6324EF926C0C44CE /* IQKeyboardNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardNotification-dummy.m"; sourceTree = "<group>"; };
+               DA9BF97689FA8F63852FC5D7EE814D2D /* IQKeyboardReturnManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-umbrella.h"; sourceTree = "<group>"; };
+               DCDF74B5DEAC5E25CFC4D9F9B16EFBEB /* IQKeyboardToolbarManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.debug.xcconfig; sourceTree = "<group>"; };
+               DD6C692550BC0661BA84378E58F6BA8A /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = "<group>"; };
+               DD7D32B2F1F5F83790A39F4CDEBBFF96 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = "<group>"; };
+               E1CAF7BAA0421C27EFE212A343F56870 /* ResourceBundle-Toast-Swift-Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Toast-Swift-Toast-Swift-Info.plist"; sourceTree = "<group>"; };
+               E25ABD3C4935A40132346F656CA1AA7C /* IQKeyboardAppearanceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceManager.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager.swift; sourceTree = "<group>"; };
+               E293311AF50DC30E5B7F7D2D91BEB28A /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = "<group>"; };
+               E39AF10B1F50FF70721677FFF69BED27 /* IQKeyboardResignHandler+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardResignHandler+Internal.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler+Internal.swift"; sourceTree = "<group>"; };
+               E3B1CECC33970571F4F9AF61CB1D3DCD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardReturnManager/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               E54219744D41CC6C6674908699602DD9 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = "<group>"; };
+               E6A14C9A838BD693FFDCAF82F4D5604A /* IQKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardNotification.swift; path = IQKeyboardNotification/Classes/IQKeyboardNotification.swift; sourceTree = "<group>"; };
+               E7EE2526E40B99B0F243808A2396A01C /* SRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRError.h; path = SocketRocket/Internal/Utilities/SRError.h; sourceTree = "<group>"; };
+               E8366BB09BA070DB9FB5CB54F726B2C0 /* IQKeyboardToolbar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-prefix.pch"; sourceTree = "<group>"; };
+               E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+               E9BAAEAF59FEC4ED102911D4A47849CB /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = "<group>"; };
+               EA467055B207002F9B70E96F08A0FF86 /* IQTextInputViewNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-umbrella.h"; sourceTree = "<group>"; };
+               EAED633C414062FCB78BD8A5896433FC /* Toast-Swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Toast-Swift-Info.plist"; sourceTree = "<group>"; };
+               ED22317A1312CBBA0134A8E449ABD201 /* SRHTTPConnectMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHTTPConnectMessage.m; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m; sourceTree = "<group>"; };
+               ED7286BA89901CA1D622A1FCF81E718C /* NSURLRequest+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+SRWebSocket.m"; path = "SocketRocket/NSURLRequest+SRWebSocket.m"; sourceTree = "<group>"; };
+               EE1B2703C190723870111C925A464468 /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardToolbar/Placeholderable/IQPlaceholderable.swift; sourceTree = "<group>"; };
+               EF4B79F3BC3201907DE2B7A2671776C1 /* IQKeyboardAppearanceConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceConfiguration.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceConfiguration.swift; sourceTree = "<group>"; };
+               F2183FF2315FBF68B5F334EC6EB19A9B /* SRHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHash.h; path = SocketRocket/Internal/Utilities/SRHash.h; sourceTree = "<group>"; };
+               F528CE7CB37911E316CD1F5622E5B931 /* IQKeyboardReturnManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.debug.xcconfig; sourceTree = "<group>"; };
+               F5522D8F6ABFFF15E2334E694691DD5E /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = "<group>"; };
+               F92A13F8C77041A7711D1764A76C37A3 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = "<group>"; };
+               F930ACB6AC5D06295D698ED0249EB0AB /* SRLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRLog.m; path = SocketRocket/Internal/Utilities/SRLog.m; sourceTree = "<group>"; };
                F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQTextInputViewNotification-IQTextInputViewNotification"; path = IQTextInputViewNotification.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
-               F9E2D89710990C7046505C7864F45ED7 /* IQTextInputViewNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.debug.xcconfig; sourceTree = "<group>"; };
+               FA41F5D42C8280BA202FDE26BDBDFFA3 /* NSURLRequest+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h"; sourceTree = "<group>"; };
                FA727BF5D9541C98C22C9ECC911576E2 /* IQKeyboardToolbarManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardToolbarManager; path = IQKeyboardToolbarManager.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               FB1CED982DADF5E89D9B7C4994281A20 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = "<group>"; };
-               FB2B9CC26612D71D9645DAE895E0A6E3 /* UIView+IQKeyboardExtensionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionDeprecated.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionDeprecated.swift"; sourceTree = "<group>"; };
-               FB9E0FF56143337737133FDD5DFF1373 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardCore/Assets/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
+               FB23C93E47AFBF1FA651D132F7AC06E2 /* IQKeyboardReturnManager+UITextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextFieldDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextFieldDelegate.swift"; sourceTree = "<group>"; };
+               FB26ACEBA0181227271430FB01A76848 /* SRHTTPConnectMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHTTPConnectMessage.h; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h; sourceTree = "<group>"; };
+               FB474AD377D72ECDF638D46A73B7D687 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = "<group>"; };
+               FBC1F980FADF5CA26AF9C77CF3D9B1A2 /* IQKeyboardConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConstants.swift; path = IQKeyboardCore/Classes/Constants/IQKeyboardConstants.swift; sourceTree = "<group>"; };
                FC7F0CF2EA5DF59C59D9995890DA5C47 /* IQKeyboardCore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardCore; path = IQKeyboardCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               FC9C89E0D0A3A0CBF2646E4FFB03FD79 /* IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbar.swift; path = IQKeyboardToolbar/Classes/IQKeyboardToolbar.swift; sourceTree = "<group>"; };
-               FDCB3A60E0E69B85F6A6D09A3386D833 /* IQKeyboardCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardCore.modulemap; sourceTree = "<group>"; };
+               FD07CC20E3828AFE18630B7C25BCCA92 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = "<group>"; };
+               FDD0C3C29384D3EEBCB4BE346B1CA890 /* IQKeyboardManager+Appearance_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance_Deprecated.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance_Deprecated.swift"; sourceTree = "<group>"; };
                FEF9AC89E9C4BD37AC0AB78B535D1CFC /* IQKeyboardNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardNotification; path = IQKeyboardNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+               FF3B6C922ADF7DB53066B95C9359B445 /* Pods-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Example.modulemap"; sourceTree = "<group>"; };
+               FF4B96374C0DB9D56AB95C3D5A31B152 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
-               04BE6D07E21323B9CEF8A64DB1F090CC /* Frameworks */ = {
+               2BE4574EA7A2208A3273A02C5D2F1D1B /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               13370F62359EA40214FB32CCB782E91A /* Frameworks */ = {
+               33428AC36668E3ED52DB70316F843FB8 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               14F7D5F67076860B84A84E202E620308 /* Frameworks */ = {
+               3683C5D0C8F465D221926E5B41E0B565 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               3E8CD7E5D86973B25CF99233C524ED43 /* Foundation.framework in Frameworks */,
-                               F943E8FEFBAB09B9DA17295178CD80A1 /* UIKit.framework in Frameworks */,
+                               4E7BB3FBF4B3680AF358C0A0A0F34011 /* Foundation.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               206DAEEAC5B1D52E8D12E9BF1571C67B /* Frameworks */ = {
+               4F320E16D10A7BE9185BA7C5A5CCDA43 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               0AE37480557069924C434356A50CB99D /* Foundation.framework in Frameworks */,
-                               F239DABFACA179E89920C7F09D67336B /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               303B17403FC51446D947C78825258D78 /* Frameworks */ = {
+               51FB4B943D35F3E908360703B96C7E25 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               95A620A5272057BA126D00CC498F9B8A /* Combine.framework in Frameworks */,
+                               8762AC084551DBB2E00C3091CAF011ED /* Foundation.framework in Frameworks */,
+                               AC68F7636D1D7832E4B5B18DD2BF2941 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               33428AC36668E3ED52DB70316F843FB8 /* Frameworks */ = {
+               524D81F2C5CE61FB9EB4A47C9DEE4C1E /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               4A9B7C7D9A2CD8049C8E4EDD7F25DC71 /* Frameworks */ = {
+               5B8C51C6BFA979E81A28179CCC2C0936 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               09D303C994021652DF841C463DBD1DC5 /* Foundation.framework in Frameworks */,
+                               8ACE9296AA479804EFD2D3CC417DE801 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               593A1D66DE0099584227B2B9C0CF7DB9 /* Frameworks */ = {
+               5C50EB2041FA8E3A1BB9E243091C260E /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               5B8C51C6BFA979E81A28179CCC2C0936 /* Frameworks */ = {
+               5FCE427163262BB0862B486F5E093C1C /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               743D51EAD768EDE4D4AB7D3C665C7D2E /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               09D303C994021652DF841C463DBD1DC5 /* Foundation.framework in Frameworks */,
-                               8ACE9296AA479804EFD2D3CC417DE801 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               8687CBCEBF972D480F700C4A0D1CBEBA /* Frameworks */ = {
+               7802B8C3260B2A1D85C8EFC0C6929B18 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               737F408F45BEB0CB13FEFD5E406996A9 /* Foundation.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AC775A265EBB1A2969CF830711FDFC36 /* Frameworks */ = {
+               796567F81D938DA74DF71A2AFF3F8F3D /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               A9C64D3EF4B2D97F8AA93A0C6D3F1018 /* Combine.framework in Frameworks */,
-                               47B732921A7B90BB28D526626DDB061C /* Foundation.framework in Frameworks */,
-                               4C484793E290AB422E3600CF962F9792 /* UIKit.framework in Frameworks */,
+                               D2E460754683003AE9ECF32A831D401F /* CFNetwork.framework in Frameworks */,
+                               DEEC14319D7619F96C4E93415A6D577D /* Foundation.framework in Frameworks */,
+                               B4C82668A78939FE910FEA0D314F06C1 /* Security.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               B0639BBF382C714C07A4780B0937F3DD /* Frameworks */ = {
+               9688A049F13521CC698EF57654CF2443 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               E3535804CAC5D872E37CD8639C930771 /* Foundation.framework in Frameworks */,
+                               8DC89975CCCA53253DE9DB5646E468FB /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               B71FB9CF090F3995F09D74676CB6A38F /* Frameworks */ = {
+               B0A1DA8C8E42CD15049F6F2D79726D7D /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               A102FFF603219976098A876E2E14CF6A /* Foundation.framework in Frameworks */,
-                               3C9F55B7C2C67A67897AC53281139677 /* UIKit.framework in Frameworks */,
+                               1213C5A29D13B6F2E3AE2356CB9F5807 /* Foundation.framework in Frameworks */,
+                               11A3EB5BE3623EC013AA37B49813E56C /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               C2B597C3382CFBEDD298B0A9ED88D7EA /* Frameworks */ = {
+               B4BF16B463F2EC49D7CBC102A2936235 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               075FBDF5D186F8BF4537BC34E526F9DB /* Foundation.framework in Frameworks */,
+                               721D0AFDE15FCC46F4579069672719B9 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               CC0D2D1B4E9DF573CAB4864E913EEF08 /* Frameworks */ = {
+               D07B79E83A18E3018EFA8CE654EF97CB /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               3E715D5BADDEACEEF30D6A4CA82CDA9B /* Foundation.framework in Frameworks */,
+                               D6EFA9EAA562143F338EB164836B7837 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               CC8D09BBF8B8F6D33E40ED1BAA1F8113 /* Frameworks */ = {
+               D5899CD7924A4C13CEA79F5428436874 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               AEA1A05086EA1256D504393FAED3CF4B /* Foundation.framework in Frameworks */,
+                               E4A0C00A361F30B7848B8AE7653C9C60 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               D07B79E83A18E3018EFA8CE654EF97CB /* Frameworks */ = {
+               D603B521417D6EFBEB7EAECC9C431345 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               3E715D5BADDEACEEF30D6A4CA82CDA9B /* Foundation.framework in Frameworks */,
-                               D6EFA9EAA562143F338EB164836B7837 /* UIKit.framework in Frameworks */,
+                               AD9EF3D3778212D1147044DC3A971C80 /* Foundation.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               D69032A0184C58B6180580EC9740DF5D /* Frameworks */ = {
+               D7208CA103D7DAE87F900A6B91736DCC /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               ED936A52EC136457464BFD2C700FB0A3 /* Frameworks */ = {
+               D9611FA61C59D2592877A687EEBEEFE4 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               0A7F4733B11AE10847063A9D648C9F2C /* Combine.framework in Frameworks */,
-                               3EE1D20B4B3D689A0E336B4637441CE1 /* Foundation.framework in Frameworks */,
-                               766984BB04C114C7717FA84FD10CEC77 /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               FCF44B7D1CF6026F5C4E8FAD6F93496A /* Frameworks */ = {
+               F94D8D7F47FD316BA431BF216418ADF4 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               FBA90047961BDAD70FDA139EC0C30DD0 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               50224027880A4546066B64EE1B1C51CF /* Foundation.framework in Frameworks */,
-                               A0AB639AB77EC86109B51D023E788297 /* UIKit.framework in Frameworks */,
+                               B5C5EBCC5EC278EA704D27FB2D333B22 /* Combine.framework in Frameworks */,
+                               F020DBD67EA8E12A860BE211F6BE04D5 /* Foundation.framework in Frameworks */,
+                               9D71239428D38EB9B5E7F5AA51E3E1BB /* UIKit.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-               0EACCA925CF9C4599FAAC20986D820F6 /* Products */ = {
+               13E2B5C1BC359C44AB73F5D24BAFDDD5 /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               FC7F0CF2EA5DF59C59D9995890DA5C47 /* IQKeyboardCore */,
-                               6E897F35E5E27028AC58B14B552FBC8D /* IQKeyboardCore-IQKeyboardCore */,
-                               A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */,
-                               8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */,
-                               FEF9AC89E9C4BD37AC0AB78B535D1CFC /* IQKeyboardNotification */,
-                               120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */,
-                               15848DEC7727A809830E7F6FC1B6CE0F /* IQKeyboardReturnManager */,
-                               110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */,
-                               B4B1A58096F15199A14069C5D6AA1C99 /* IQKeyboardToolbar */,
-                               A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */,
-                               FA727BF5D9541C98C22C9ECC911576E2 /* IQKeyboardToolbarManager */,
-                               80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */,
-                               06E5B413FEA5A600D76636DA132F8FB9 /* IQTextInputViewNotification */,
-                               F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */,
-                               0DFD4541FF9DAA31A2FC2A7F6D03ED22 /* IQTextView */,
-                               847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */,
-                               1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */,
-                               979486118B3E90C08386079D57962701 /* SnapKit */,
-                               B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */,
-                               D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */,
-                               13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */,
+                               BC590BB41230B885D405920A55DAD210 /* PrivacyInfo.xcprivacy */,
                        );
-                       name = Products;
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               21D1C96E5F13E6B8835FB020AB766453 /* Support Files */ = {
+               1BF8BA79F8DEAC3F899EE1DFFF731A01 /* IQKeyboardCore */ = {
                        isa = PBXGroup;
                        children = (
-                               2B7459F0C8EEFEF3A4B8406D396BC764 /* IQKeyboardReturnManager.modulemap */,
-                               C997F74F024831561D7BCC7832899644 /* IQKeyboardReturnManager-dummy.m */,
-                               BEC0587EC3B7B9A0BC5BB1A63BCDE662 /* IQKeyboardReturnManager-Info.plist */,
-                               96ED5DD9A8DC870C9E93546874FAD053 /* IQKeyboardReturnManager-prefix.pch */,
-                               612302F0FAD21B517B996AB187CA6449 /* IQKeyboardReturnManager-umbrella.h */,
-                               C8C1B3AFD0A52650DF90D553FC72040D /* IQKeyboardReturnManager.debug.xcconfig */,
-                               81A4530B3DFED1CF5D377C4320215A4A /* IQKeyboardReturnManager.release.xcconfig */,
-                               C2FE0524AC7581B2CCDF2765D76D4454 /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */,
+                               FBC1F980FADF5CA26AF9C77CF3D9B1A2 /* IQKeyboardConstants.swift */,
+                               A0F99DC81F369C1B739E19DE3923C65A /* IQKeyboardExtended.swift */,
+                               502964DCE1567348B5B03211445AEA35 /* IQTextInputView.swift */,
+                               A368339039F84E09260E0C59DD294DF3 /* UIView+Hierarchy.swift */,
+                               50CDA1F6060CF0BC3D55DA36A001EA9D /* Resources */,
+                               A4931A6EF436A36B49F767979C6DFC2C /* Support Files */,
                        );
-                       name = "Support Files";
-                       path = "../Target Support Files/IQKeyboardReturnManager";
+                       name = IQKeyboardCore;
+                       path = IQKeyboardCore;
                        sourceTree = "<group>";
                };
-               23DFE6390F48A399EA522FE320A6EA48 /* iOS */ = {
+               1D63BF5EA7169C494BFD74466E0A946E /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               288DC5C96A5DECE79EDC44987BF2A77C /* Combine.framework */,
-                               83D92008D686D90200D0E2D8BE76582B /* Foundation.framework */,
-                               72D1C2A015F7D41AEDD14BCE9FA22C03 /* QuartzCore.framework */,
-                               BB4934EF6FC043A1A5719CC4ACA8C0F2 /* UIKit.framework */,
+                               1EEC9E9674D2F2735A1237FEC96C44CB /* IQKeyboardReturnManager.modulemap */,
+                               A8FACB5BCF825223E394FFECCE4AA031 /* IQKeyboardReturnManager-dummy.m */,
+                               67B06A63B2F6FDD332A5D14963BFC3E3 /* IQKeyboardReturnManager-Info.plist */,
+                               6F879A10A3809420736A229A9720D75A /* IQKeyboardReturnManager-prefix.pch */,
+                               DA9BF97689FA8F63852FC5D7EE814D2D /* IQKeyboardReturnManager-umbrella.h */,
+                               F528CE7CB37911E316CD1F5622E5B931 /* IQKeyboardReturnManager.debug.xcconfig */,
+                               914B3416C83998074DDAB130CB468706 /* IQKeyboardReturnManager.release.xcconfig */,
+                               2EFB802792096CDDF8FD170084E303BC /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */,
                        );
-                       name = iOS;
+                       name = "Support Files";
+                       path = "../Target Support Files/IQKeyboardReturnManager";
                        sourceTree = "<group>";
                };
-               2976C5AB711BFD82E3B2C8EFEC88A625 /* Resources */ = {
+               1D7583ECA74F66EE34F3E9D627C627BA /* Targets Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               5EB5C94FD93112688DCB0AC41215A68F /* PrivacyInfo.xcprivacy */,
+                               23FD8BC105B5E0EE727A6A6F33FC884D /* Pods-DeepChordsSdk */,
+                               B3257EA856A4DD50C7E8688B28071AAA /* Pods-Example */,
                        );
-                       name = Resources;
+                       name = "Targets Support Files";
                        sourceTree = "<group>";
                };
-               2F9ADA8091FB3E05181AFBD044C59B5E /* Support Files */ = {
+               1FCA4E5DDAB2C58C6C3DA814626EF4AF /* iOS */ = {
                        isa = PBXGroup;
                        children = (
-                               35B03A32DAB0EC00D0F7CE971723BD7C /* IQKeyboardNotification.modulemap */,
-                               7683AA5C3B2022EED0FC68DA18C8CD8F /* IQKeyboardNotification-dummy.m */,
-                               48287E0AEAB23085B0FF5012495D3C9D /* IQKeyboardNotification-Info.plist */,
-                               130A1731BEBE0674DF4B874494BFF139 /* IQKeyboardNotification-prefix.pch */,
-                               BCCF122A4CCCE14CB1CC9357A7D12E0E /* IQKeyboardNotification-umbrella.h */,
-                               99A357D21311D4CAEF91E8D645B9EF1B /* IQKeyboardNotification.debug.xcconfig */,
-                               DFCB9340841640E5C5B330DA1777A78E /* IQKeyboardNotification.release.xcconfig */,
-                               F05EC3D3A34DD35BD3BC1C95E19C34B8 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */,
+                               0C917A6291C02472ECB91FD7B8B2CFC1 /* CFNetwork.framework */,
+                               3ED18FF4963E7B4F60DBBA903E25C67B /* Combine.framework */,
+                               E88E50F432B6DEA7E36A35EA934B002C /* Foundation.framework */,
+                               133A600484839BF74BDD51C8B0BB6EBE /* QuartzCore.framework */,
+                               91B24E7C9EB4215BEA2C0A23D3960815 /* Security.framework */,
+                               3A92BC97913B825589680C917211C138 /* UIKit.framework */,
                        );
-                       name = "Support Files";
-                       path = "../Target Support Files/IQKeyboardNotification";
+                       name = iOS;
                        sourceTree = "<group>";
                };
-               30649105A36891FA38A918D9E19276C1 /* IQKeyboardToolbarManager */ = {
+               23FD8BC105B5E0EE727A6A6F33FC884D /* Pods-DeepChordsSdk */ = {
                        isa = PBXGroup;
                        children = (
-                               2527373B09781527CFB5F6FCCAE7B821 /* Array+Sort.swift */,
-                               BE4AFEFA1716D5281D0EA17603944826 /* IQDeepResponderContainerView.swift */,
-                               7278B677DCE375A2402B9587C28AC4E9 /* IQKeyboardToolbarConfiguration.swift */,
-                               668BB2AC6F690F784C35587B8BF5F759 /* IQKeyboardToolbarConstants.swift */,
-                               AB854D7CA85BFEEFB6266DFA1E9D61B8 /* IQKeyboardToolbarManager.swift */,
-                               96778D30391C6741ED9D0A46200EF18C /* IQKeyboardToolbarManager+Action.swift */,
-                               7717832333BD8513940DC7E1C94C2EBC /* IQKeyboardToolbarManager+Debug.swift */,
-                               E5DDF11C94E0521FF93720B78FF737EA /* IQKeyboardToolbarManager+Deprecated.swift */,
-                               60CE4193979A1692CB7524C594A33F5F /* IQKeyboardToolbarManager+Internal.swift */,
-                               442771E28F516C75AF67BCAA132E4A56 /* IQKeyboardToolbarManager+Toolbar.swift */,
-                               648E8949F15F11A016686DAB0E5B508E /* UIView+Responders.swift */,
-                               ACE56E6AC8845E4C5C29E55E4CA9B2FF /* UIView+RespondersObjc.swift */,
-                               B088B7BB018A62F62DDBFB0B241C20A4 /* Resources */,
-                               A6EB665039B401942EFAF35C2EBFBB32 /* Support Files */,
-                       );
-                       name = IQKeyboardToolbarManager;
-                       path = IQKeyboardToolbarManager;
+                               A1B189AA95276D5EC85F6B80EED66624 /* Pods-DeepChordsSdk.modulemap */,
+                               3725B14D6A408FA007F106F8CA983CE3 /* Pods-DeepChordsSdk-acknowledgements.markdown */,
+                               9D3FF860EEACD6D1A4A582CB31FC31C1 /* Pods-DeepChordsSdk-acknowledgements.plist */,
+                               D5278EBCB01A333274C163B9281DE38B /* Pods-DeepChordsSdk-dummy.m */,
+                               1917E3D591E530CFE1940C6F4E878690 /* Pods-DeepChordsSdk-Info.plist */,
+                               284AC2E81CAAA90FEA12A250A16B11AB /* Pods-DeepChordsSdk-umbrella.h */,
+                               4BF6C697C2EB03CCBCE9CA841EA31F47 /* Pods-DeepChordsSdk.debug.xcconfig */,
+                               91511868D1335C41FD84563EF906555C /* Pods-DeepChordsSdk.release.xcconfig */,
+                       );
+                       name = "Pods-DeepChordsSdk";
+                       path = "Target Support Files/Pods-DeepChordsSdk";
                        sourceTree = "<group>";
                };
-               30B18B74EEB6DA324B56635569BECF75 /* IQKeyboardCore */ = {
+               27556D70EE23F0F08BF16229FD0E531E /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               5CA792EF08162ADE7BAC7607327CBAED /* IQKeyboardConstants.swift */,
-                               1D298A925E306A10B586FBD63C04A81F /* IQKeyboardExtended.swift */,
-                               9259BB742B0F6B1D52074F71BD71B42F /* IQTextInputView.swift */,
-                               A1FEE90906065AB1BED6A249EE74C5CB /* UIView+Hierarchy.swift */,
-                               9581F590260A7A39DABFBC09635C5350 /* Resources */,
-                               C31AA5BFD51EAF9A8A165FF294FA5A9D /* Support Files */,
+                               CF362111EEE4CBA3A09DDC5814422B70 /* PrivacyInfo.xcprivacy */,
                        );
-                       name = IQKeyboardCore;
-                       path = IQKeyboardCore;
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               33974C8DB3931E63B3303D14A3996D95 /* Pods */ = {
+               28309F6F20D52ED4CD8FF99A9C1660E7 /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               30B18B74EEB6DA324B56635569BECF75 /* IQKeyboardCore */,
-                               E32734C02906DE7EB010E7C79FDBCEB4 /* IQKeyboardManagerSwift */,
-                               D980CF2A43EFA3B850A00946B02695D3 /* IQKeyboardNotification */,
-                               34AE5308D11365AC4D9A2123D39CB1AC /* IQKeyboardReturnManager */,
-                               8C3770C6EC98B3687CD2C954912D433A /* IQKeyboardToolbar */,
-                               30649105A36891FA38A918D9E19276C1 /* IQKeyboardToolbarManager */,
-                               DC08D428E307F6527EE62D0B30B8396E /* IQTextInputViewNotification */,
-                               433F86A6C63C7F6D7155A53312849DD7 /* IQTextView */,
-                               4BD3FF42394B72A71BC7BCB9AE52C1B4 /* SnapKit */,
-                               6CA56227A91262AE4DE5411D672E159D /* Toast-Swift */,
+                               0F6A2BF98BD227110E60762E29808CEC /* PrivacyInfo.xcprivacy */,
                        );
-                       name = Pods;
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               34AE5308D11365AC4D9A2123D39CB1AC /* IQKeyboardReturnManager */ = {
+               2C2FAE5EF6DD9554D932D5EFD9116CAF /* Toast-Swift */ = {
                        isa = PBXGroup;
                        children = (
-                               5A543731802B05A4CF7F5D8024952273 /* IQKeyboardReturnManager.swift */,
-                               8AE4CFFFB83D44D25692067A36EE407A /* IQKeyboardReturnManager+UITextFieldDelegate.swift */,
-                               6D68B5BFA92A84156B07F2625E12FD12 /* IQKeyboardReturnManager+UITextViewDelegate.swift */,
-                               425F3E2CCAC6FE05E103DD993BE61B34 /* IQTextInputViewInfoModel.swift */,
-                               B702F9EF24696D734D26D854719EC05F /* Resources */,
-                               21D1C96E5F13E6B8835FB020AB766453 /* Support Files */,
+                               6D134ED7EB13A9F9FADC82CC86BC10FA /* Toast.swift */,
+                               27556D70EE23F0F08BF16229FD0E531E /* Resources */,
+                               D9C1D5F2F67176B3E300A9D87ACBD68C /* Support Files */,
                        );
-                       name = IQKeyboardReturnManager;
-                       path = IQKeyboardReturnManager;
+                       name = "Toast-Swift";
+                       path = "Toast-Swift";
                        sourceTree = "<group>";
                };
-               3EC7025AD79BF8DE0FB84CF190D85555 /* Placeholderable */ = {
+               346904CC6058F4E1176842D4FBB1C297 /* IQKeyboardManagerSwift */ = {
                        isa = PBXGroup;
                        children = (
-                               231CDDC4DB13BC0B46D3EB8176FFE464 /* IQPlaceholderable.swift */,
+                               CDD0B85A0330B1E5B6A1922E992D6D74 /* Appearance */,
+                               609A1498D37F4C29C58C45EFCB47A49F /* Core */,
+                               D1DA56D0B201AACDCF6837C820268F5C /* IQKeyboardToolbarManager */,
+                               988D9336740C0F448BAA393FDDF28A0C /* Resign */,
+                               A76710793188CE18938A1F3AE19BCA99 /* Resources */,
+                               A8F67839F6044F4381759B3BB49258DA /* Support Files */,
                        );
-                       name = Placeholderable;
+                       name = IQKeyboardManagerSwift;
+                       path = IQKeyboardManagerSwift;
                        sourceTree = "<group>";
                };
-               433F86A6C63C7F6D7155A53312849DD7 /* IQTextView */ = {
+               386ACAC75067BB6189F2C50B03C8280B /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               9915B34E81CF6906E0C1C0AA6D681726 /* IQTextView.swift */,
-                               6AD91692C7EF9CB5B47DCFFDBCF2BF1F /* IQTextView+Placeholderable.swift */,
-                               87DF8D94FE3D73F6F597BD92DAA19FBB /* Resources */,
-                               5612E372DAF8D59265ACA63F50964E1A /* Support Files */,
+                               77B67B7AD3900B61154BC9C1973DD611 /* SocketRocket.modulemap */,
+                               B1F45CBD7E407DB108D6FAD8FF0A1415 /* SocketRocket-dummy.m */,
+                               8EE7DE8BEE69315B9018594B62622247 /* SocketRocket-Info.plist */,
+                               F5522D8F6ABFFF15E2334E694691DD5E /* SocketRocket-prefix.pch */,
+                               7E46C7EF1F6BD003E0DEC56B05B15DDF /* SocketRocket-umbrella.h */,
+                               9F272A689E05B2AA0C0ED18AD4383DDE /* SocketRocket.debug.xcconfig */,
+                               10CAAD795A45AB49A0EE4D6805AB7A1F /* SocketRocket.release.xcconfig */,
                        );
-                       name = IQTextView;
-                       path = IQTextView;
+                       name = "Support Files";
+                       path = "../Target Support Files/SocketRocket";
                        sourceTree = "<group>";
                };
-               4BD3FF42394B72A71BC7BCB9AE52C1B4 /* SnapKit */ = {
+               472C5FB976462E83207651E16BEEAA5D /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               BA15CE80784F2ABB4BC5A66CFF93FA26 /* Constraint.swift */,
-                               AADFD372200F5622C3E275C18DAEF64C /* ConstraintAttributes.swift */,
-                               8510B576847C74847E63FDFB695CF836 /* ConstraintConfig.swift */,
-                               6B2D1FC7F34EF685AF2452AC43FFE816 /* ConstraintConstantTarget.swift */,
-                               5F474BB8F008181749A6BEDD3FF6B03E /* ConstraintDescription.swift */,
-                               C64F946A6CF4B3D30483C6FCDE237D46 /* ConstraintDirectionalInsets.swift */,
-                               65CE8BABA0B27FB3861EFDC42FAF7936 /* ConstraintDirectionalInsetTarget.swift */,
-                               45AE6E9F7BEA7559570D1C4611BC97BA /* ConstraintDSL.swift */,
-                               859853A4B800A598CFCE06A228A4E5DB /* ConstraintInsets.swift */,
-                               0D1B695DB3D9B30B1E895FE056EDB0D2 /* ConstraintInsetTarget.swift */,
-                               679C6C1E29E033FE6D3AF5FAF79916A0 /* ConstraintItem.swift */,
-                               125B7ADD9F6F9E6FEAA2172EBF355938 /* ConstraintLayoutGuide.swift */,
-                               4C4A1A93E1ED51A08661C32F4EDBBA11 /* ConstraintLayoutGuide+Extensions.swift */,
-                               964B48760245F36728533BAAD3F7C58D /* ConstraintLayoutGuideDSL.swift */,
-                               B027F0500294FFF3F8823CC8C93B34DC /* ConstraintLayoutSupport.swift */,
-                               FB1CED982DADF5E89D9B7C4994281A20 /* ConstraintLayoutSupportDSL.swift */,
-                               71B0C2CECF35343E42C956FB7F6F996F /* ConstraintMaker.swift */,
-                               1FB0B399D6B51466AFD1D3DABBB19C1A /* ConstraintMakerEditable.swift */,
-                               3A0EC753684DB9D548B2F21B240AB183 /* ConstraintMakerExtendable.swift */,
-                               ABFD1CA60E15B4B7FCB561F401E9ECDC /* ConstraintMakerFinalizable.swift */,
-                               DF398810396855B6BEE8D80C8EF6518A /* ConstraintMakerPrioritizable.swift */,
-                               583D0819254BED967661EC2359B98F18 /* ConstraintMakerRelatable.swift */,
-                               8E142A384801F69E54EECA3E3F8667AF /* ConstraintMakerRelatable+Extensions.swift */,
-                               42892A584E9AC22D35E1D9FE68B53469 /* ConstraintMultiplierTarget.swift */,
-                               EF2D58EB40EE8221B053FACB532A13C1 /* ConstraintOffsetTarget.swift */,
-                               8ECEAA4A365919AC774C896E18E759AA /* ConstraintPriority.swift */,
-                               E3863E29A7A589B2F92E5FA4658C10A7 /* ConstraintPriorityTarget.swift */,
-                               8E85E98FFCFC789BC6D8C97871841FB5 /* ConstraintRelatableTarget.swift */,
-                               B8783F3308A893AC9F1E8B1450DB38B3 /* ConstraintRelation.swift */,
-                               B93572343CE1D7CC5E903F82DF724A64 /* ConstraintView.swift */,
-                               F6A61B701D8AF835B15A01AC3B3ABDFB /* ConstraintView+Extensions.swift */,
-                               334D1CD5A38B79DE9FE482556C492DFA /* ConstraintViewDSL.swift */,
-                               789D34626E9F27F10F113B699A0936D7 /* Debugging.swift */,
-                               629AE0F7346599178ABEF604C7BB964F /* LayoutConstraint.swift */,
-                               AA29B4610AE76CC6CC7A09F3BA316FA3 /* LayoutConstraintItem.swift */,
-                               A1818F69B6E5828B7B096AEDA2284766 /* Typealiases.swift */,
-                               B6BC2BCCF67E34C8D4DF08BBE177A05A /* UILayoutSupport+Extensions.swift */,
-                               ACF6B2672779734AACABB1F520C0CEF3 /* Resources */,
-                               C438DA52C16A13EE4499777BED885A2C /* Support Files */,
+                               3649D66694159EF7F40B5A7377AC04D1 /* PrivacyInfo.xcprivacy */,
                        );
-                       name = SnapKit;
-                       path = SnapKit;
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               5612E372DAF8D59265ACA63F50964E1A /* Support Files */ = {
+               4C6F9E06DF0DA1DF8AC4B116BBF4C9C0 /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               0B21B1D5CEC2F4C2602EFA71D8417344 /* IQTextView.modulemap */,
-                               71450C650474E14E27C58DC6031DED15 /* IQTextView-dummy.m */,
-                               C11B662EA98DB1DB2E0BBB631FFCB9BC /* IQTextView-Info.plist */,
-                               5E6E2ED6E4CC42A0E37225A15EC2C6F1 /* IQTextView-prefix.pch */,
-                               8B2918DFD6FEDA148940283A8ED415E2 /* IQTextView-umbrella.h */,
-                               C8482B39147BBBDB16D770864BDE1CD5 /* IQTextView.debug.xcconfig */,
-                               B057F1FE2FF50734827A356AFE1C3763 /* IQTextView.release.xcconfig */,
-                               8FE0C4981E2732BCC6938C0CC26922A2 /* ResourceBundle-IQTextView-IQTextView-Info.plist */,
+                               A925E59D0B05DC5A56E631BD47C64317 /* IQTextView.modulemap */,
+                               B560A38E28D510B4A50AFF9595D57670 /* IQTextView-dummy.m */,
+                               4FB988C66900BB1BEEF5C5CA21B14AC9 /* IQTextView-Info.plist */,
+                               170AE4D919026EA3D1FB264423443921 /* IQTextView-prefix.pch */,
+                               64607CC28651258E6DAB2D1358080FB5 /* IQTextView-umbrella.h */,
+                               99B82533878EEF9F0E2FB3560695FF8A /* IQTextView.debug.xcconfig */,
+                               D5434748DD18D8B60013ABF3FFC5B95F /* IQTextView.release.xcconfig */,
+                               B7AEC5DC6E5D0A8EAE327461A3FAFE6B /* ResourceBundle-IQTextView-IQTextView-Info.plist */,
                        );
                        name = "Support Files";
                        path = "../Target Support Files/IQTextView";
                        sourceTree = "<group>";
                };
-               5E1F5A0EB6F602CA36CF53DC3958CB68 /* Resources */ = {
+               4E55C56B4EBD419565958D777C1D742F /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               3DC059D4E73E400F389B683A21D3A187 /* PrivacyInfo.xcprivacy */,
+                               25BADE0B95009E3B02C9E6EBB47417A3 /* PrivacyInfo.xcprivacy */,
                        );
                        name = Resources;
                        sourceTree = "<group>";
                };
-               6CA56227A91262AE4DE5411D672E159D /* Toast-Swift */ = {
+               50CDA1F6060CF0BC3D55DA36A001EA9D /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               D70722A63D8C3F991856EF872356AFB1 /* Toast.swift */,
-                               B52DDC198392F29A6909C2D34B4E5103 /* Resources */,
-                               EF258E2223A4CC8EA287B5DC67C106E4 /* Support Files */,
+                               6C4219D35CB16DFEC9A662797E27F4D8 /* PrivacyInfo.xcprivacy */,
                        );
-                       name = "Toast-Swift";
-                       path = "Toast-Swift";
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               74F7E92A0FDEF4AABE6BDDDDE9DB47A8 /* Appearance */ = {
+               5173CCD3EAD3FD7627B918D1D542D872 /* Placeholderable */ = {
                        isa = PBXGroup;
                        children = (
-                               B5563167CBEFFA8F84B6DCD2C1CF029A /* IQKeyboardAppearanceConfiguration.swift */,
-                               6824C490150831540A8B6007E6B0B0EF /* IQKeyboardAppearanceManager.swift */,
-                               C1081457464A541862ABFB75CFF611B1 /* IQKeyboardAppearanceManager+Internal.swift */,
-                               18C7EDD0BE0032658D0A03A3BB7CF623 /* IQKeyboardManager+Appearance.swift */,
-                               33C48FDE215E1319970EE8067F27C546 /* IQKeyboardManager+Appearance_Deprecated.swift */,
+                               EE1B2703C190723870111C925A464468 /* IQPlaceholderable.swift */,
                        );
-                       name = Appearance;
+                       name = Placeholderable;
                        sourceTree = "<group>";
                };
-               7932D428ADB39059F87083BB579013EA /* Support Files */ = {
+               52A8D4FE846B6E04B566DBAF11B33A13 /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               95251F6BFD6A006568D4215EC8605879 /* IQTextInputViewNotification.modulemap */,
-                               1445F9B020E299209EDE5CD49F2EF94D /* IQTextInputViewNotification-dummy.m */,
-                               7AD2B04F0FA541294181478CCE734D25 /* IQTextInputViewNotification-Info.plist */,
-                               E86FC2B39794AC78EFE33B8105C529A8 /* IQTextInputViewNotification-prefix.pch */,
-                               4CBC06BCB9A7BAD3F1CB9489020EFAA4 /* IQTextInputViewNotification-umbrella.h */,
-                               F9E2D89710990C7046505C7864F45ED7 /* IQTextInputViewNotification.debug.xcconfig */,
-                               81C8D08EE2B731D17BFDF51DB75C7FD4 /* IQTextInputViewNotification.release.xcconfig */,
-                               64FDAD67044464E102D4F1F14A995D44 /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */,
+                               761B4D8A688672EC9D13AB178F184A16 /* IQKeyboardToolbar.modulemap */,
+                               48CA3ADFB16E0C4E235D89C552572332 /* IQKeyboardToolbar-dummy.m */,
+                               D5BD8A09B0B0972162CDD072ACB69843 /* IQKeyboardToolbar-Info.plist */,
+                               E8366BB09BA070DB9FB5CB54F726B2C0 /* IQKeyboardToolbar-prefix.pch */,
+                               994130CE96E0F8ED28DCF165B03CB200 /* IQKeyboardToolbar-umbrella.h */,
+                               159C74980AC55D136945F073F6CEDC14 /* IQKeyboardToolbar.debug.xcconfig */,
+                               78882EBBF9DB9EAA48F3FFBF14D1E0B5 /* IQKeyboardToolbar.release.xcconfig */,
+                               888ACD87ACA8BCCE5527AAC76E41A5A3 /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */,
                        );
                        name = "Support Files";
-                       path = "../Target Support Files/IQTextInputViewNotification";
+                       path = "../Target Support Files/IQKeyboardToolbar";
                        sourceTree = "<group>";
                };
-               87DF8D94FE3D73F6F597BD92DAA19FBB /* Resources */ = {
+               5A6A32F0330DE1F0FF6179C5C3799FF3 /* IQTextInputViewNotification */ = {
                        isa = PBXGroup;
                        children = (
-                               A8051AF85E41AF3CE961220AB4E33AFE /* PrivacyInfo.xcprivacy */,
+                               9ECC82996747BDD9C0FF35EC1ECF0751 /* IQTextInputViewInfo.swift */,
+                               0578E47B5AE5713CF21EA86848CA87DD /* IQTextInputViewNotification.swift */,
+                               7043FF2BB90FA65D64CD5D4BB3449DE9 /* Resources */,
+                               6E70A82102C02142D2369D9D1C31773C /* Support Files */,
                        );
-                       name = Resources;
+                       name = IQTextInputViewNotification;
+                       path = IQTextInputViewNotification;
                        sourceTree = "<group>";
                };
-               8C3770C6EC98B3687CD2C954912D433A /* IQKeyboardToolbar */ = {
+               609A1498D37F4C29C58C45EFCB47A49F /* Core */ = {
                        isa = PBXGroup;
                        children = (
-                               C78B5298B69CAA4DE311D05AE9F28FBA /* Core */,
-                               3EC7025AD79BF8DE0FB84CF190D85555 /* Placeholderable */,
-                               D880C63099F225153C7B5498B9FD4A9B /* Resources */,
-                               C303665FCA6E99B362B3A75F2709DBAD /* Support Files */,
+                               D63292C39BAA9B9EB776AAA03EABD932 /* IQActiveConfiguration.swift */,
+                               895778DCA58AE753D96DD48F3E036F4F /* IQKeyboardManager.swift */,
+                               792548D571F70D8E7FA3B52FA58D9591 /* IQKeyboardManager+ActiveConfiguration.swift */,
+                               C4B0C5FFB36CB099605387F3B9F34032 /* IQKeyboardManager+Debug.swift */,
+                               D0689F5C192D1672448116583D233922 /* IQKeyboardManager+Deprecated.swift */,
+                               F92A13F8C77041A7711D1764A76C37A3 /* IQKeyboardManager+Internal.swift */,
+                               936A804D23E5F53A2A38402D624D6EA2 /* IQKeyboardManager+Position.swift */,
+                               10C547231342B150BEC39F40295D087E /* IQRootControllerConfiguration.swift */,
+                               47F6CB0808BEA63D36E484B5D53B6436 /* IQScrollViewConfiguration.swift */,
+                               115E19C96EB6123FE27F3A530B3BE30D /* UICollectionView+IndexPaths.swift */,
+                               3F70480B31A6883BEDFC6C623FC76A32 /* UIScrollView+IQKeyboardManagerExtension.swift */,
+                               4EF1258267E4FF8FA1F298C5303B0E86 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */,
+                               A15B541658FAC5E8233C91001D7888EC /* UITableView+IndexPaths.swift */,
+                               BDFB64A96CC2B18E25FF662E37821253 /* UIView+IQKeyboardManagerExtension.swift */,
+                               3D8DC22EC08F3E72E7E53ADA12E80CC0 /* UIView+IQKeyboardManagerExtensionObjc.swift */,
+                               3F8F3D9A02DBFA1FF9899DD8933A95DA /* UIView+Parent.swift */,
+                               8BD0BDF557D8D8D7CFB04CB9C9482634 /* UIView+ParentObjc.swift */,
+                               995B281C84F1083BE4DB31B75BCC029C /* UIViewController+ParentContainer.swift */,
                        );
-                       name = IQKeyboardToolbar;
-                       path = IQKeyboardToolbar;
+                       name = Core;
                        sourceTree = "<group>";
                };
-               9581F590260A7A39DABFBC09635C5350 /* Resources */ = {
+               659362BF40FCF9635ED3C52F96CC6133 /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               FB9E0FF56143337737133FDD5DFF1373 /* PrivacyInfo.xcprivacy */,
+                               8B5BF34764325604D366CC5C6F31A43A /* IQKeyboardToolbarManager.modulemap */,
+                               8C2460EF332DB152D7A7B9869C8F4032 /* IQKeyboardToolbarManager-dummy.m */,
+                               39B4B067040847EC4A5CE870C4E0C5A1 /* IQKeyboardToolbarManager-Info.plist */,
+                               7E6C82BDAFC8E25852BD0F53480C2FE2 /* IQKeyboardToolbarManager-prefix.pch */,
+                               1D8DCDE8A3DFBFEA690BD5A6081C5762 /* IQKeyboardToolbarManager-umbrella.h */,
+                               DCDF74B5DEAC5E25CFC4D9F9B16EFBEB /* IQKeyboardToolbarManager.debug.xcconfig */,
+                               8981CA762CD2FDB68D15FEEA091439B5 /* IQKeyboardToolbarManager.release.xcconfig */,
+                               32B4B8845C7824A1AB6C42EB0B32845E /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */,
                        );
-                       name = Resources;
+                       name = "Support Files";
+                       path = "../Target Support Files/IQKeyboardToolbarManager";
                        sourceTree = "<group>";
                };
-               979414F400F55CB13E55EA97AA133F49 /* IQKeyboardToolbarManager */ = {
+               6A6ACDADD484E61C0C86AAAC23AA5774 /* Products */ = {
                        isa = PBXGroup;
                        children = (
-                               C5BFD04CC97A0992D34437E786ACA4D3 /* IQKeyboardManager+ToolbarManager.swift */,
-                               117ED6DB1BD04E643776E77477BB0EF1 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */,
+                               FC7F0CF2EA5DF59C59D9995890DA5C47 /* IQKeyboardCore */,
+                               6E897F35E5E27028AC58B14B552FBC8D /* IQKeyboardCore-IQKeyboardCore */,
+                               A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */,
+                               8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */,
+                               FEF9AC89E9C4BD37AC0AB78B535D1CFC /* IQKeyboardNotification */,
+                               120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */,
+                               15848DEC7727A809830E7F6FC1B6CE0F /* IQKeyboardReturnManager */,
+                               110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */,
+                               B4B1A58096F15199A14069C5D6AA1C99 /* IQKeyboardToolbar */,
+                               A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */,
+                               FA727BF5D9541C98C22C9ECC911576E2 /* IQKeyboardToolbarManager */,
+                               80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */,
+                               06E5B413FEA5A600D76636DA132F8FB9 /* IQTextInputViewNotification */,
+                               F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */,
+                               0DFD4541FF9DAA31A2FC2A7F6D03ED22 /* IQTextView */,
+                               847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */,
+                               06FEEB0FA2AA89DF42A1C6525F644FBF /* Pods-DeepChordsSdk */,
+                               1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */,
+                               979486118B3E90C08386079D57962701 /* SnapKit */,
+                               B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */,
+                               85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */,
+                               D6043471C96F93DC41F7DD1E0D7D8B35 /* Toast-Swift */,
+                               13FD39576595D8A884BF5166065C5236 /* Toast-Swift-Toast-Swift */,
                        );
-                       name = IQKeyboardToolbarManager;
+                       name = Products;
                        sourceTree = "<group>";
                };
-               9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */ = {
+               6E70A82102C02142D2369D9D1C31773C /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */,
-                               441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */,
-                               EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */,
-                               D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */,
-                               AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */,
-                               31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */,
-                               7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */,
-                               B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */,
-                               243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */,
+                               07FD04B2D25C4767E2AACE039E3E77A8 /* IQTextInputViewNotification.modulemap */,
+                               C2878B4F3D509987EC767604F46AD0E1 /* IQTextInputViewNotification-dummy.m */,
+                               3ECA1919991B8674C3FD3253CD02BE4B /* IQTextInputViewNotification-Info.plist */,
+                               AB0D6BE05753DE859156BD2E8FCD55AD /* IQTextInputViewNotification-prefix.pch */,
+                               EA467055B207002F9B70E96F08A0FF86 /* IQTextInputViewNotification-umbrella.h */,
+                               78F95F4E86380B049117A093BFC1CD7B /* IQTextInputViewNotification.debug.xcconfig */,
+                               1515EB933E55F8DF1275984150311F6F /* IQTextInputViewNotification.release.xcconfig */,
+                               4F8CA916A31362AD762A33A32B0D936C /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */,
                        );
-                       name = "Pods-Example";
-                       path = "Target Support Files/Pods-Example";
+                       name = "Support Files";
+                       path = "../Target Support Files/IQTextInputViewNotification";
                        sourceTree = "<group>";
                };
-               A6EB665039B401942EFAF35C2EBFBB32 /* Support Files */ = {
+               7043FF2BB90FA65D64CD5D4BB3449DE9 /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               B2E5A5B9F96103B68EFF7B3BFF9D0D2E /* IQKeyboardToolbarManager.modulemap */,
-                               B017A824A4E1A13FDACEB926F92C62FA /* IQKeyboardToolbarManager-dummy.m */,
-                               DB6E29CDC3D716E3A34D01A60A665503 /* IQKeyboardToolbarManager-Info.plist */,
-                               2CD6955DD3969A106AF4982FF7008B0F /* IQKeyboardToolbarManager-prefix.pch */,
-                               BE1DF4BC58C1E1E0F060079D0689EC20 /* IQKeyboardToolbarManager-umbrella.h */,
-                               5AD8C08E06D5E01990AA80544C0901BA /* IQKeyboardToolbarManager.debug.xcconfig */,
-                               5BEBDD0CF7D42D6159D8E2EF081BD93B /* IQKeyboardToolbarManager.release.xcconfig */,
-                               76334455F598BE0C113D08A675132729 /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */,
+                               C97A233DEE5D1279877CD8292A10AD84 /* PrivacyInfo.xcprivacy */,
                        );
-                       name = "Support Files";
-                       path = "../Target Support Files/IQKeyboardToolbarManager";
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               ACF6B2672779734AACABB1F520C0CEF3 /* Resources */ = {
+               75159EE7B37E3F28B11793B290D99D4D /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               168C7D47B997C62E8CB232D83F0310AB /* PrivacyInfo.xcprivacy */,
+                               0A8C10276B315358D1F985B8F641683A /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */,
+                               CCC7F61220FD5938841683501167A10F /* SnapKit.modulemap */,
+                               02EDA2792EBD3343A7DBC6B427F1F041 /* SnapKit-dummy.m */,
+                               E9BAAEAF59FEC4ED102911D4A47849CB /* SnapKit-Info.plist */,
+                               6937B145AC462041831CC9D76D3CF28A /* SnapKit-prefix.pch */,
+                               AFBCEC8A83AB63E7D141D4EA274517BA /* SnapKit-umbrella.h */,
+                               319AC1D7C71149C2DD5EF02DECE3F511 /* SnapKit.debug.xcconfig */,
+                               4B6ABE8E0C199299C26E4B5977886B71 /* SnapKit.release.xcconfig */,
                        );
-                       name = Resources;
+                       name = "Support Files";
+                       path = "../Target Support Files/SnapKit";
                        sourceTree = "<group>";
                };
-               AD5458C307EA5425BF669DA1B559B993 /* Resources */ = {
+               8EA7A9F63431873BFF102A07E64CF035 /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               053B43B12209A016C25BFB227BD91974 /* PrivacyInfo.xcprivacy */,
+                               E3B1CECC33970571F4F9AF61CB1D3DCD /* PrivacyInfo.xcprivacy */,
                        );
                        name = Resources;
                        sourceTree = "<group>";
                };
-               B088B7BB018A62F62DDBFB0B241C20A4 /* Resources */ = {
+               955D2D4B70444278CFDCF5CF250E2A20 /* Pods */ = {
                        isa = PBXGroup;
                        children = (
-                               9A926C38DDD5B0CB77DBF7BE94EF672E /* PrivacyInfo.xcprivacy */,
+                               1BF8BA79F8DEAC3F899EE1DFFF731A01 /* IQKeyboardCore */,
+                               346904CC6058F4E1176842D4FBB1C297 /* IQKeyboardManagerSwift */,
+                               D47F0896C3D08DD5FCAAE3AD09D78D07 /* IQKeyboardNotification */,
+                               FE2569B518EBA4ED83E9AD75F910D0D7 /* IQKeyboardReturnManager */,
+                               B05518A8E4E4C4D4DFF1474C45D525EE /* IQKeyboardToolbar */,
+                               C93D11812BB5D25D8ACDA16CA17BF6A4 /* IQKeyboardToolbarManager */,
+                               5A6A32F0330DE1F0FF6179C5C3799FF3 /* IQTextInputViewNotification */,
+                               DFD394DDF6732B23692437B4AD9ECF1E /* IQTextView */,
+                               FEBA5030F43677046B3656649FBE15ED /* SnapKit */,
+                               BA1DFB9047177FD01B3C29EBE37C8457 /* SocketRocket */,
+                               2C2FAE5EF6DD9554D932D5EFD9116CAF /* Toast-Swift */,
                        );
-                       name = Resources;
+                       name = Pods;
                        sourceTree = "<group>";
                };
-               B52DDC198392F29A6909C2D34B4E5103 /* Resources */ = {
+               988D9336740C0F448BAA393FDDF28A0C /* Resign */ = {
                        isa = PBXGroup;
                        children = (
-                               5FA5B7CA13253C1FC9B86FA274000F3F /* PrivacyInfo.xcprivacy */,
+                               236C98A9FAEF3200D70937E889092818 /* IQKeyboardManager+Resign.swift */,
+                               6EC73E02165E26ABFCACC677AF94DD8B /* IQKeyboardManager+Resign_Deprecated.swift */,
+                               261E9C437FF6FFF72C01BBB73341409D /* IQKeyboardResignHandler.swift */,
+                               E39AF10B1F50FF70721677FFF69BED27 /* IQKeyboardResignHandler+Internal.swift */,
+                               B704D82F61A7F3E0FF10EBDE953E7E49 /* UIView+Resign.swift */,
+                               12415404E6E70407610188D7ADDC1D02 /* UIView+ResignObjc.swift */,
                        );
-                       name = Resources;
+                       name = Resign;
                        sourceTree = "<group>";
                };
-               B702F9EF24696D734D26D854719EC05F /* Resources */ = {
+               9A941C126B5B7C383F87BEF24EFD16F1 /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               BD749634E8E36AB77EC9F46FE998985D /* PrivacyInfo.xcprivacy */,
+                               C688B508E11EFC4D24CB920CAF96B948 /* PrivacyInfo.xcprivacy */,
                        );
                        name = Resources;
                        sourceTree = "<group>";
                };
-               BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */ = {
+               A4931A6EF436A36B49F767979C6DFC2C /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               23DFE6390F48A399EA522FE320A6EA48 /* iOS */,
+                               CC93FCE609BBB131B2F1C23EEA6B9997 /* IQKeyboardCore.modulemap */,
+                               BFB6F598FCE7D6294584E7334E04ECF2 /* IQKeyboardCore-dummy.m */,
+                               42E3FC1A9F2FBB9AE28FDE3285B70F2C /* IQKeyboardCore-Info.plist */,
+                               7E07F795F5513269A6EA62DE5EE8C187 /* IQKeyboardCore-prefix.pch */,
+                               9F657D2C1582A8BFEADD06E527D796B2 /* IQKeyboardCore-umbrella.h */,
+                               9374F8A0206251FC7979A888F803B656 /* IQKeyboardCore.debug.xcconfig */,
+                               AA485EB92636FB68E91AF3FCC1CE9C5E /* IQKeyboardCore.release.xcconfig */,
+                               8F74E325EE2B99C0C5504B461E558136 /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */,
                        );
-                       name = Frameworks;
+                       name = "Support Files";
+                       path = "../Target Support Files/IQKeyboardCore";
                        sourceTree = "<group>";
                };
-               C303665FCA6E99B362B3A75F2709DBAD /* Support Files */ = {
+               A76710793188CE18938A1F3AE19BCA99 /* Resources */ = {
                        isa = PBXGroup;
                        children = (
-                               CEDA17E76A289361BA57D894985793E8 /* IQKeyboardToolbar.modulemap */,
-                               903F0FF8B72AF2E84101EE1AD8E525B8 /* IQKeyboardToolbar-dummy.m */,
-                               C54CD51A4611587F72A12DCFF57547B3 /* IQKeyboardToolbar-Info.plist */,
-                               42F154595907A9B7C232A08628BBC592 /* IQKeyboardToolbar-prefix.pch */,
-                               0D0E7899589D00C50376C1B07158AC50 /* IQKeyboardToolbar-umbrella.h */,
-                               EF780280B45D05B3F28826EF5C144118 /* IQKeyboardToolbar.debug.xcconfig */,
-                               0BBF04F3ACCC6329B881C1679E0733BB /* IQKeyboardToolbar.release.xcconfig */,
-                               267AC3B58CA7E99D46B70842A2CD1255 /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */,
+                               643F1AECE038E1886712C3619E367201 /* PrivacyInfo.xcprivacy */,
                        );
-                       name = "Support Files";
-                       path = "../Target Support Files/IQKeyboardToolbar";
+                       name = Resources;
                        sourceTree = "<group>";
                };
-               C31AA5BFD51EAF9A8A165FF294FA5A9D /* Support Files */ = {
+               A8F67839F6044F4381759B3BB49258DA /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               FDCB3A60E0E69B85F6A6D09A3386D833 /* IQKeyboardCore.modulemap */,
-                               488126919669AEE0AB6BD8855DBA7E1D /* IQKeyboardCore-dummy.m */,
-                               44B578B4BB9C2CE2BF3D0618DD618E6E /* IQKeyboardCore-Info.plist */,
-                               E8519902BF501028CEE5387E0C358BE6 /* IQKeyboardCore-prefix.pch */,
-                               2570B16F7E9DBA42AAF1C41E54783C89 /* IQKeyboardCore-umbrella.h */,
-                               8E4ED9BFDF71764CBE3D2C853E329AC8 /* IQKeyboardCore.debug.xcconfig */,
-                               3579ECE9098CFE0A18918D8F0F6BBC16 /* IQKeyboardCore.release.xcconfig */,
-                               AF8B43F557099CFFDFCE29B27283089F /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */,
+                               CDD93D5045280AD0FFBB587ADD1D3B83 /* IQKeyboardManagerSwift.modulemap */,
+                               01E23D7305E51271DEFF79A9CADBF926 /* IQKeyboardManagerSwift-dummy.m */,
+                               4AB6723E60A4A0D494C4DCA4686CD3F0 /* IQKeyboardManagerSwift-Info.plist */,
+                               FD07CC20E3828AFE18630B7C25BCCA92 /* IQKeyboardManagerSwift-prefix.pch */,
+                               5C8BDF6ED7A0F1533FC84E97705B2878 /* IQKeyboardManagerSwift-umbrella.h */,
+                               5084335EF29A15EB6C31DFB1ACA15349 /* IQKeyboardManagerSwift.debug.xcconfig */,
+                               5AF0EBE9A79115D36EF40E456919D63B /* IQKeyboardManagerSwift.release.xcconfig */,
+                               DD7D32B2F1F5F83790A39F4CDEBBFF96 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */,
                        );
                        name = "Support Files";
-                       path = "../Target Support Files/IQKeyboardCore";
+                       path = "../Target Support Files/IQKeyboardManagerSwift";
+                       sourceTree = "<group>";
+               };
+               B05518A8E4E4C4D4DFF1474C45D525EE /* IQKeyboardToolbar */ = {
+                       isa = PBXGroup;
+                       children = (
+                               C73796DD46B1AEC273D7C44D7E60CDF4 /* Core */,
+                               5173CCD3EAD3FD7627B918D1D542D872 /* Placeholderable */,
+                               13E2B5C1BC359C44AB73F5D24BAFDDD5 /* Resources */,
+                               52A8D4FE846B6E04B566DBAF11B33A13 /* Support Files */,
+                       );
+                       name = IQKeyboardToolbar;
+                       path = IQKeyboardToolbar;
                        sourceTree = "<group>";
                };
-               C438DA52C16A13EE4499777BED885A2C /* Support Files */ = {
+               B22E10DCB2F25088E198204D0681E4C7 /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               46363399D08CEC56582B10CBA23FE101 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */,
-                               98AA99C68FB3D6ED22719CAE6606E9EA /* SnapKit.modulemap */,
-                               0FC7A70F2E2D28124280A06C1FD9760B /* SnapKit-dummy.m */,
-                               B148DDA9F2C353D7D89E11352B57A789 /* SnapKit-Info.plist */,
-                               8C80464FA646E2505448549CED65DFF1 /* SnapKit-prefix.pch */,
-                               090EF934D945BE1D4018F0D2D19007E0 /* SnapKit-umbrella.h */,
-                               67BCA4DE5DC478383D44A61FADBBB1A1 /* SnapKit.debug.xcconfig */,
-                               969958CCDF4F680B2CEA8E4DD27B72C7 /* SnapKit.release.xcconfig */,
+                               15FF3E312676449AB12DADDDB8D5C352 /* IQKeyboardNotification.modulemap */,
+                               DA85287A9C3D760A6324EF926C0C44CE /* IQKeyboardNotification-dummy.m */,
+                               C2E377B4F7062BE5BC6007798C6619AD /* IQKeyboardNotification-Info.plist */,
+                               27296D8B66561FF21E0EB354428156C7 /* IQKeyboardNotification-prefix.pch */,
+                               822DD0DAF7E4428BCCDFE28EAD683ADD /* IQKeyboardNotification-umbrella.h */,
+                               87F05B4E0307C30EB4FC212724C8F157 /* IQKeyboardNotification.debug.xcconfig */,
+                               1AB8D5FD6175CD8FCC7153B71E6DD77A /* IQKeyboardNotification.release.xcconfig */,
+                               B7EC4834CE090AEAE5858B4D8B4513C7 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */,
                        );
                        name = "Support Files";
-                       path = "../Target Support Files/SnapKit";
+                       path = "../Target Support Files/IQKeyboardNotification";
+                       sourceTree = "<group>";
+               };
+               B3257EA856A4DD50C7E8688B28071AAA /* Pods-Example */ = {
+                       isa = PBXGroup;
+                       children = (
+                               FF3B6C922ADF7DB53066B95C9359B445 /* Pods-Example.modulemap */,
+                               2C45BE81EF6A9A12E115F2EDB69FC7D7 /* Pods-Example-acknowledgements.markdown */,
+                               D5EC7B9244C6E5B0C7776ADA35992A5D /* Pods-Example-acknowledgements.plist */,
+                               A6BD2261427B29C50F84843B6BAB7DEA /* Pods-Example-dummy.m */,
+                               73D26C4F196C661EA1DB04BCC2471A24 /* Pods-Example-frameworks.sh */,
+                               90A0A417BB33C9C0B15A1946762E0142 /* Pods-Example-Info.plist */,
+                               93B05AAE9D91B32B46928A2293611FF4 /* Pods-Example-umbrella.h */,
+                               455A2446E1A8F92123FBE90A1D4B8D0B /* Pods-Example.debug.xcconfig */,
+                               B3AA4CA7BB409A5191DBD08356FE703A /* Pods-Example.release.xcconfig */,
+                       );
+                       name = "Pods-Example";
+                       path = "Target Support Files/Pods-Example";
+                       sourceTree = "<group>";
+               };
+               BA1DFB9047177FD01B3C29EBE37C8457 /* SocketRocket */ = {
+                       isa = PBXGroup;
+                       children = (
+                               306B6BBB2D0B4D417ADD4B82D7D51E82 /* NSRunLoop+SRWebSocket.h */,
+                               5FB6A208FD72153F040D4E1354F225B4 /* NSRunLoop+SRWebSocket.m */,
+                               0AE37E30F693ED15CA31B520ED420454 /* NSRunLoop+SRWebSocketPrivate.h */,
+                               3187DDFEE4C490953B2AEF7B0D19EB1B /* NSURLRequest+SRWebSocket.h */,
+                               ED7286BA89901CA1D622A1FCF81E718C /* NSURLRequest+SRWebSocket.m */,
+                               FA41F5D42C8280BA202FDE26BDBDFFA3 /* NSURLRequest+SRWebSocketPrivate.h */,
+                               5EF0C08E9D339F2CB75ED0C9E7FA2C0B /* SocketRocket.h */,
+                               6A3DB74B2C40BCD9F3AFA585DA322FF5 /* SRConstants.h */,
+                               A284951838ACA1015F31DBE6C5A8D45F /* SRConstants.m */,
+                               2582EC469D9940C7AAE3F903A495E86A /* SRDelegateController.h */,
+                               B4BBB6B50C15DFF1221CD8E66DC2D354 /* SRDelegateController.m */,
+                               E7EE2526E40B99B0F243808A2396A01C /* SRError.h */,
+                               77195404B1F7ADCD8B3008B1B89F5C03 /* SRError.m */,
+                               F2183FF2315FBF68B5F334EC6EB19A9B /* SRHash.h */,
+                               109E37988FF06586D32321CEA99162B0 /* SRHash.m */,
+                               FB26ACEBA0181227271430FB01A76848 /* SRHTTPConnectMessage.h */,
+                               ED22317A1312CBBA0134A8E449ABD201 /* SRHTTPConnectMessage.m */,
+                               26FE696F5243F520CB872AC051139FE5 /* SRIOConsumer.h */,
+                               B5D1545C4C0C2474FD103EFECB90E9C5 /* SRIOConsumer.m */,
+                               8C4CE911087AC8260002E6859821FAF0 /* SRIOConsumerPool.h */,
+                               A6C0BF00B3D547B50DBE54D99A1307F4 /* SRIOConsumerPool.m */,
+                               AF5E93556B3B98CA5218F3B9E49304F6 /* SRLog.h */,
+                               F930ACB6AC5D06295D698ED0249EB0AB /* SRLog.m */,
+                               CEA0C9AAC08B9E0D20DE8BC894AE3FDE /* SRMutex.h */,
+                               D7EF3525F706753F05EA05BD1819EC4E /* SRMutex.m */,
+                               B278701FAF564A3D25B8F87CCDB798D6 /* SRPinningSecurityPolicy.h */,
+                               0AF7DA075D6BD7E141707379E62BFA63 /* SRPinningSecurityPolicy.m */,
+                               32080BC56EEB26340C6292BA94F068B6 /* SRProxyConnect.h */,
+                               C3F49C31FFD05F4734B464D5C31979FB /* SRProxyConnect.m */,
+                               D1B2801FD44E489C5B7F202C13D651F2 /* SRRandom.h */,
+                               68443C8F28AD901E531D6BFA7559C683 /* SRRandom.m */,
+                               43CBF3C99F0BF342AEE8D7C7BE945B62 /* SRRunLoopThread.h */,
+                               8609C41722C0D97335DBF43B1CE7AB03 /* SRRunLoopThread.m */,
+                               C33C375328643D5A9A1D1EA02C88D419 /* SRSecurityPolicy.h */,
+                               6839FC9EB46E8CB05E17C35E5A5B579F /* SRSecurityPolicy.m */,
+                               21E9444EE5839429C60E9A16651BAD78 /* SRSIMDHelpers.h */,
+                               50A2B3566A43C15186D3A1D9F91DB662 /* SRSIMDHelpers.m */,
+                               27DA2684B87B3639C3D3D439F177E219 /* SRURLUtilities.h */,
+                               390BB9902E7A26E5A753B9CF32673BE9 /* SRURLUtilities.m */,
+                               D389D10DEC7EB9B503CD45CE58851CA6 /* SRWebSocket.h */,
+                               95BCD7B08FF0A2A4F9B0A36B92688E27 /* SRWebSocket.m */,
+                               386ACAC75067BB6189F2C50B03C8280B /* Support Files */,
+                       );
+                       name = SocketRocket;
+                       path = SocketRocket;
                        sourceTree = "<group>";
                };
-               C78B5298B69CAA4DE311D05AE9F28FBA /* Core */ = {
+               C73796DD46B1AEC273D7C44D7E60CDF4 /* Core */ = {
                        isa = PBXGroup;
                        children = (
-                               7BEC044A89EDCA943365E4156BE49F6A /* IQBarButtonItem.swift */,
-                               F708C6E5D928E67F9C3E7613BCB59A0D /* IQBarButtonItemConfiguration.swift */,
-                               92335BB8898DE45ED349EF272C417E5F /* IQInvocation.swift */,
-                               FC9C89E0D0A3A0CBF2646E4FFB03FD79 /* IQKeyboardToolbar.swift */,
-                               85F474F9E7D6BD1F6B7663352D31EC40 /* IQKeyboardToolbarPlaceholderConfiguration.swift */,
-                               C2DDB1A49CDC72CEC4AC3A0667142BB2 /* IQTitleBarButtonItem.swift */,
-                               D6F24EDA81C0D3AF65C1C30A74BC8466 /* UIView+IQKeyboardExtension.swift */,
-                               FB2B9CC26612D71D9645DAE895E0A6E3 /* UIView+IQKeyboardExtensionDeprecated.swift */,
-                               AE0F784B4D89883BEA9DBDA5D3427CF0 /* UIView+IQKeyboardExtensionObjc.swift */,
+                               4D6EF89B651DCBED1F5A7FA5D36D1FA6 /* IQBarButtonItem.swift */,
+                               14A61C146CFCDB5CEC8508DC60360819 /* IQBarButtonItemConfiguration.swift */,
+                               9939F486FEF106F98BDD0806CA8E0624 /* IQInvocation.swift */,
+                               63CAFAB9111F6F5AAEFD9E00CD0AF892 /* IQKeyboardToolbar.swift */,
+                               BF60B19D2E8B68520E5121EFFF5A7D4B /* IQKeyboardToolbarPlaceholderConfiguration.swift */,
+                               2E8E02D90547D6DBD75A856D8A4E1275 /* IQTitleBarButtonItem.swift */,
+                               9976447B92E50DDDCA64DBDE5A47FD7F /* UIView+IQKeyboardExtension.swift */,
+                               7F565A673CEEF3B818D7A75F2A2EE8B0 /* UIView+IQKeyboardExtensionDeprecated.swift */,
+                               6A599D5DDFD46F7296A5F93623AB6C3A /* UIView+IQKeyboardExtensionObjc.swift */,
                        );
                        name = Core;
                        sourceTree = "<group>";
                };
-               CA25C2A9CA995C76BE0A8BE4813913E8 /* Support Files */ = {
+               C93D11812BB5D25D8ACDA16CA17BF6A4 /* IQKeyboardToolbarManager */ = {
                        isa = PBXGroup;
                        children = (
-                               04D424EE2CE0897D1A9D495245578DB7 /* IQKeyboardManagerSwift.modulemap */,
-                               6FB32CD2529DBAA6A58EE1C218F3F26B /* IQKeyboardManagerSwift-dummy.m */,
-                               8D338917B2BCFE987917671C13FABE6E /* IQKeyboardManagerSwift-Info.plist */,
-                               0162BAFB778BF2E7D66A112029D508AB /* IQKeyboardManagerSwift-prefix.pch */,
-                               5C9682F1DA72621A7697B6CC652E5564 /* IQKeyboardManagerSwift-umbrella.h */,
-                               B9E5B7ACA1C4831DB0FC6F6DC415806B /* IQKeyboardManagerSwift.debug.xcconfig */,
-                               EA1EDABA1BE078F9646EF88F4C71CBFA /* IQKeyboardManagerSwift.release.xcconfig */,
-                               8BAEA3E897A92AD6ABF227954A59DB29 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */,
+                               7594A52F0B7E0AD0D9F26BE8026E1E4C /* Array+Sort.swift */,
+                               484ECEC55CB9E98BAF0AE020F8FFF767 /* IQDeepResponderContainerView.swift */,
+                               44AFC022F6D6DD0DF30E10F9B7C4615A /* IQKeyboardToolbarConfiguration.swift */,
+                               BC713814A822ABA18A07C72E6B97AE04 /* IQKeyboardToolbarConstants.swift */,
+                               BB176716E9339D1CA456C696313236FE /* IQKeyboardToolbarManager.swift */,
+                               782D18DB9D0B7B74F8613026BAD77E86 /* IQKeyboardToolbarManager+Action.swift */,
+                               3F992A0DC4578F2D62CB095A497114CC /* IQKeyboardToolbarManager+Debug.swift */,
+                               BF4BC9A0614A1C63539C14C08655781F /* IQKeyboardToolbarManager+Deprecated.swift */,
+                               158193B636D7824993DB68D81AE2C233 /* IQKeyboardToolbarManager+Internal.swift */,
+                               BA718E8C5B46720F8012D7471BC6BF37 /* IQKeyboardToolbarManager+Toolbar.swift */,
+                               97D19ACC9A79A3CF24DA377E12303E12 /* UIView+Responders.swift */,
+                               CEAD5B92B7CF2B0746297208D610D3CD /* UIView+RespondersObjc.swift */,
+                               472C5FB976462E83207651E16BEEAA5D /* Resources */,
+                               659362BF40FCF9635ED3C52F96CC6133 /* Support Files */,
                        );
-                       name = "Support Files";
-                       path = "../Target Support Files/IQKeyboardManagerSwift";
+                       name = IQKeyboardToolbarManager;
+                       path = IQKeyboardToolbarManager;
                        sourceTree = "<group>";
                };
-               CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */ = {
+               CDD0B85A0330B1E5B6A1922E992D6D74 /* Appearance */ = {
                        isa = PBXGroup;
                        children = (
-                               9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */,
+                               EF4B79F3BC3201907DE2B7A2671776C1 /* IQKeyboardAppearanceConfiguration.swift */,
+                               E25ABD3C4935A40132346F656CA1AA7C /* IQKeyboardAppearanceManager.swift */,
+                               6381011924A059A30C85325FB30E74A7 /* IQKeyboardAppearanceManager+Internal.swift */,
+                               A44F945B3203BCA4B178E49ED53E5391 /* IQKeyboardManager+Appearance.swift */,
+                               FDD0C3C29384D3EEBCB4BE346B1CA890 /* IQKeyboardManager+Appearance_Deprecated.swift */,
                        );
-                       name = "Targets Support Files";
+                       name = Appearance;
                        sourceTree = "<group>";
                };
                CF1408CF629C7361332E53B88F7BD30C = {
                        isa = PBXGroup;
                        children = (
                                9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
-                               BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */,
-                               33974C8DB3931E63B3303D14A3996D95 /* Pods */,
-                               0EACCA925CF9C4599FAAC20986D820F6 /* Products */,
-                               CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */,
+                               D68CA58901FBF589D75F5E40F1EAF5BA /* Frameworks */,
+                               955D2D4B70444278CFDCF5CF250E2A20 /* Pods */,
+                               6A6ACDADD484E61C0C86AAAC23AA5774 /* Products */,
+                               1D7583ECA74F66EE34F3E9D627C627BA /* Targets Support Files */,
                        );
                        sourceTree = "<group>";
                };
-               D44F612577BFE91AC60B52592E01C6C9 /* Resign */ = {
+               D1DA56D0B201AACDCF6837C820268F5C /* IQKeyboardToolbarManager */ = {
                        isa = PBXGroup;
                        children = (
-                               CA0BFED3F4B8F736E248BED9F016F046 /* IQKeyboardManager+Resign.swift */,
-                               51E4C8BDDCD249D53F68B657894D3C33 /* IQKeyboardManager+Resign_Deprecated.swift */,
-                               078038EA55CCEFB2FCFDAC364A3A475F /* IQKeyboardResignHandler.swift */,
-                               45E9A660E884B1EFF55785DC5472CA56 /* IQKeyboardResignHandler+Internal.swift */,
-                               C8E9C7F86EF79309A7D62796C50BD2C4 /* UIView+Resign.swift */,
-                               E78AC8B5EF810FFB832428E336AF5659 /* UIView+ResignObjc.swift */,
+                               6A737607DB763EBB681D8D0F6E6AB5FB /* IQKeyboardManager+ToolbarManager.swift */,
+                               C61F58870F6E8F6EEF25FA9A6A0E7F60 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */,
                        );
-                       name = Resign;
+                       name = IQKeyboardToolbarManager;
                        sourceTree = "<group>";
                };
-               D880C63099F225153C7B5498B9FD4A9B /* Resources */ = {
+               D47F0896C3D08DD5FCAAE3AD09D78D07 /* IQKeyboardNotification */ = {
                        isa = PBXGroup;
                        children = (
-                               B10297739CDE35118B5C7226834CD882 /* PrivacyInfo.xcprivacy */,
+                               C0B11EBC98CF5A275C2F8077CDEA1F18 /* IQKeyboardInfo.swift */,
+                               E6A14C9A838BD693FFDCAF82F4D5604A /* IQKeyboardNotification.swift */,
+                               4E55C56B4EBD419565958D777C1D742F /* Resources */,
+                               B22E10DCB2F25088E198204D0681E4C7 /* Support Files */,
                        );
-                       name = Resources;
+                       name = IQKeyboardNotification;
+                       path = IQKeyboardNotification;
                        sourceTree = "<group>";
                };
-               D980CF2A43EFA3B850A00946B02695D3 /* IQKeyboardNotification */ = {
+               D68CA58901FBF589D75F5E40F1EAF5BA /* Frameworks */ = {
                        isa = PBXGroup;
                        children = (
-                               7D66880441D4B9000B03722BC09971E9 /* IQKeyboardInfo.swift */,
-                               07D76E404E67961840A2FA9E8B592C51 /* IQKeyboardNotification.swift */,
-                               AD5458C307EA5425BF669DA1B559B993 /* Resources */,
-                               2F9ADA8091FB3E05181AFBD044C59B5E /* Support Files */,
+                               1FCA4E5DDAB2C58C6C3DA814626EF4AF /* iOS */,
                        );
-                       name = IQKeyboardNotification;
-                       path = IQKeyboardNotification;
+                       name = Frameworks;
                        sourceTree = "<group>";
                };
-               DB9D9FCCD6416F8346CF5DB5A25218C9 /* Core */ = {
+               D9C1D5F2F67176B3E300A9D87ACBD68C /* Support Files */ = {
                        isa = PBXGroup;
                        children = (
-                               B8159912988182904A096C5A3036AA65 /* IQActiveConfiguration.swift */,
-                               93B6A56AC9E28078E6884FB890E1B4F3 /* IQKeyboardManager.swift */,
-                               A05DE88657E839818EACAAED4CD60B34 /* IQKeyboardManager+ActiveConfiguration.swift */,
-                               28400A2CE3EE2B07169489BF74B7FE98 /* IQKeyboardManager+Debug.swift */,
-                               1D541D12A563E883F4018584090E33DB /* IQKeyboardManager+Deprecated.swift */,
-                               6B1A7FE44491E9065CDE0EC638D84820 /* IQKeyboardManager+Internal.swift */,
-                               27FF931A64B73FEE5D4A85928D51804A /* IQKeyboardManager+Position.swift */,
-                               BD6E85B5A6A0DAC92CE30328684DD7C8 /* IQRootControllerConfiguration.swift */,
-                               5C581F1999F4CCA213DECDF99D28E47A /* IQScrollViewConfiguration.swift */,
-                               B627ECEFAF29D21C3B5D4634873DC799 /* UICollectionView+IndexPaths.swift */,
-                               6C2845BF731838039657B93E29F7BD5F /* UIScrollView+IQKeyboardManagerExtension.swift */,
-                               5BF7B9A8FF0D82C370F68F2653F54B11 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */,
-                               8F70375CE5D16313A9CC78E1FFAC5536 /* UITableView+IndexPaths.swift */,
-                               A8E4BB35A9C12143A016443E5B5AF064 /* UIView+IQKeyboardManagerExtension.swift */,
-                               54E68DA1C9D605BCA82C37688A0D6C22 /* UIView+IQKeyboardManagerExtensionObjc.swift */,
-                               A37E4894C5CC2317619C7ECD09116882 /* UIView+Parent.swift */,
-                               024EBC1EBC8B76295C273069400071F2 /* UIView+ParentObjc.swift */,
-                               9DAD88CD28AA6C418EA42F22ED77F6BE /* UIViewController+ParentContainer.swift */,
+                               E1CAF7BAA0421C27EFE212A343F56870 /* ResourceBundle-Toast-Swift-Toast-Swift-Info.plist */,
+                               BC06E9DFB77603B36FDA218B323243F1 /* Toast-Swift.modulemap */,
+                               B98BCBD470DE1E0FC19C5E1F3AF37195 /* Toast-Swift-dummy.m */,
+                               EAED633C414062FCB78BD8A5896433FC /* Toast-Swift-Info.plist */,
+                               61AD3899C2D649897E11DA65A33ABCEE /* Toast-Swift-prefix.pch */,
+                               3D0CA09E0900EA77648A05D608CBA29F /* Toast-Swift-umbrella.h */,
+                               02E139B151EDFA1F4F63EA119D2269C7 /* Toast-Swift.debug.xcconfig */,
+                               79E6154EEE25D08664ACFE66C69DDFA0 /* Toast-Swift.release.xcconfig */,
                        );
-                       name = Core;
+                       name = "Support Files";
+                       path = "../Target Support Files/Toast-Swift";
                        sourceTree = "<group>";
                };
-               DC08D428E307F6527EE62D0B30B8396E /* IQTextInputViewNotification */ = {
+               DFD394DDF6732B23692437B4AD9ECF1E /* IQTextView */ = {
                        isa = PBXGroup;
                        children = (
-                               7A8AA0C87B06CB08F33F1C9C7749E0DF /* IQTextInputViewInfo.swift */,
-                               DD9285BD914CCA73118032F2F1792F68 /* IQTextInputViewNotification.swift */,
-                               2976C5AB711BFD82E3B2C8EFEC88A625 /* Resources */,
-                               7932D428ADB39059F87083BB579013EA /* Support Files */,
+                               1E2BADF249E4A558D7EE5BB1077C1DE1 /* IQTextView.swift */,
+                               B1F86119EB8AFCE72C0BA2356BBA4C46 /* IQTextView+Placeholderable.swift */,
+                               28309F6F20D52ED4CD8FF99A9C1660E7 /* Resources */,
+                               4C6F9E06DF0DA1DF8AC4B116BBF4C9C0 /* Support Files */,
                        );
-                       name = IQTextInputViewNotification;
-                       path = IQTextInputViewNotification;
+                       name = IQTextView;
+                       path = IQTextView;
                        sourceTree = "<group>";
                };
-               E32734C02906DE7EB010E7C79FDBCEB4 /* IQKeyboardManagerSwift */ = {
+               FE2569B518EBA4ED83E9AD75F910D0D7 /* IQKeyboardReturnManager */ = {
                        isa = PBXGroup;
                        children = (
-                               74F7E92A0FDEF4AABE6BDDDDE9DB47A8 /* Appearance */,
-                               DB9D9FCCD6416F8346CF5DB5A25218C9 /* Core */,
-                               979414F400F55CB13E55EA97AA133F49 /* IQKeyboardToolbarManager */,
-                               D44F612577BFE91AC60B52592E01C6C9 /* Resign */,
-                               5E1F5A0EB6F602CA36CF53DC3958CB68 /* Resources */,
-                               CA25C2A9CA995C76BE0A8BE4813913E8 /* Support Files */,
+                               224FAFA7B0169BBAAFD0FA422D7D11A6 /* IQKeyboardReturnManager.swift */,
+                               FB23C93E47AFBF1FA651D132F7AC06E2 /* IQKeyboardReturnManager+UITextFieldDelegate.swift */,
+                               66E229F790E827392A80B7F4C7A6110F /* IQKeyboardReturnManager+UITextViewDelegate.swift */,
+                               10288C630688257B185941E1EA55E346 /* IQTextInputViewInfoModel.swift */,
+                               8EA7A9F63431873BFF102A07E64CF035 /* Resources */,
+                               1D63BF5EA7169C494BFD74466E0A946E /* Support Files */,
                        );
-                       name = IQKeyboardManagerSwift;
-                       path = IQKeyboardManagerSwift;
+                       name = IQKeyboardReturnManager;
+                       path = IQKeyboardReturnManager;
                        sourceTree = "<group>";
                };
-               EF258E2223A4CC8EA287B5DC67C106E4 /* Support Files */ = {
+               FEBA5030F43677046B3656649FBE15ED /* SnapKit */ = {
                        isa = PBXGroup;
                        children = (
-                               D36423993D0DC2D82438F5A0E2D49149 /* ResourceBundle-Toast-Swift-Toast-Swift-Info.plist */,
-                               2EDDE4B8CE41298570515C4EBF67CA45 /* Toast-Swift.modulemap */,
-                               A7ACF9EC00F202138E2D10D8C2DE771D /* Toast-Swift-dummy.m */,
-                               7DC62F5E57E6012851C6645C3C59034B /* Toast-Swift-Info.plist */,
-                               B96E6AE7F8B203883A206CD26BD909D0 /* Toast-Swift-prefix.pch */,
-                               D6041C81E4991A91F5A45F589A80282E /* Toast-Swift-umbrella.h */,
-                               8BC190548C4E12A7F2A38DB809F88934 /* Toast-Swift.debug.xcconfig */,
-                               7181351BD01340D69B83002F942C6238 /* Toast-Swift.release.xcconfig */,
+                               47BC329529726FFACA942239310E3841 /* Constraint.swift */,
+                               E293311AF50DC30E5B7F7D2D91BEB28A /* ConstraintAttributes.swift */,
+                               972CC8A48122693582F02385A70853A0 /* ConstraintConfig.swift */,
+                               C23ABFD4CEF6F11C0094E61729745DE3 /* ConstraintConstantTarget.swift */,
+                               FF4B96374C0DB9D56AB95C3D5A31B152 /* ConstraintDescription.swift */,
+                               0EE50CC6D98E37DA330EADC9F9C949F0 /* ConstraintDirectionalInsets.swift */,
+                               58E0237741E33CAFB3DB96DAA7559910 /* ConstraintDirectionalInsetTarget.swift */,
+                               CFCB22B3ED6C05251CBD3059AAE51013 /* ConstraintDSL.swift */,
+                               6DFE571CD6A634198545BB1149A5399C /* ConstraintInsets.swift */,
+                               92C5C459A1F7BF6872A58A16B7092803 /* ConstraintInsetTarget.swift */,
+                               080D923BC81BB12EE5B738187A72A0D4 /* ConstraintItem.swift */,
+                               D2793937CF93115D3117A82FB873124B /* ConstraintLayoutGuide.swift */,
+                               45E554E7AE314B29D9C07A10667261BE /* ConstraintLayoutGuide+Extensions.swift */,
+                               84BBB0405889161CCDDCD4F166723CBF /* ConstraintLayoutGuideDSL.swift */,
+                               D8D8726D60E6EF3E455768E64432DA57 /* ConstraintLayoutSupport.swift */,
+                               A55BC45618B737DBC6885D98DC8C9C0C /* ConstraintLayoutSupportDSL.swift */,
+                               D4C8C6089794ACE3010224A9FB1D90EA /* ConstraintMaker.swift */,
+                               FB474AD377D72ECDF638D46A73B7D687 /* ConstraintMakerEditable.swift */,
+                               37445197B6E56B3F3CA861A7F21F1C41 /* ConstraintMakerExtendable.swift */,
+                               24926E8158D8FAD9BE42C760B3154B55 /* ConstraintMakerFinalizable.swift */,
+                               9101BAF3027E387E34B0301BE000FA50 /* ConstraintMakerPrioritizable.swift */,
+                               C8BFDD7C500F5D6D58D212CB15B52E08 /* ConstraintMakerRelatable.swift */,
+                               529559A67714BC64192FD9BF92B33312 /* ConstraintMakerRelatable+Extensions.swift */,
+                               750817E69AAE97D1AF5F958FC5904BF2 /* ConstraintMultiplierTarget.swift */,
+                               B77F72F31D132841951EF8E4FA67360A /* ConstraintOffsetTarget.swift */,
+                               6058A4E7C2EAB9B01A8DBB5AAD7E72A2 /* ConstraintPriority.swift */,
+                               B932A928D72C73FB59FC964A82AC2723 /* ConstraintPriorityTarget.swift */,
+                               CFB853532F59E8A63D1C93202280CEE9 /* ConstraintRelatableTarget.swift */,
+                               363F0A017C453E3DC084A7B5BDB87911 /* ConstraintRelation.swift */,
+                               A8BBDD1BF37BF58D4C467C1D1F21D462 /* ConstraintView.swift */,
+                               C1C674397D453B6D18F9DE46BC55B6FF /* ConstraintView+Extensions.swift */,
+                               C53921D76AE7ECC63293C2263C9325A0 /* ConstraintViewDSL.swift */,
+                               B8A90925F3434F73BD6A036480A5A473 /* Debugging.swift */,
+                               5C0366C8DAD8762352B37EDB4DD62E2E /* LayoutConstraint.swift */,
+                               DD6C692550BC0661BA84378E58F6BA8A /* LayoutConstraintItem.swift */,
+                               AEF5BBB7C4ACF7C06BBD262B6C1145CE /* Typealiases.swift */,
+                               E54219744D41CC6C6674908699602DD9 /* UILayoutSupport+Extensions.swift */,
+                               9A941C126B5B7C383F87BEF24EFD16F1 /* Resources */,
+                               75159EE7B37E3F28B11793B290D99D4D /* Support Files */,
                        );
-                       name = "Support Files";
-                       path = "../Target Support Files/Toast-Swift";
+                       name = SnapKit;
+                       path = SnapKit;
                        sourceTree = "<group>";
                };
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
+               060405D4024056E8E8E0AAAA43BAE414 /* Headers */ = {
+                       isa = PBXHeadersBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               860017D588B23C12B08A3C4390BAEA56 /* IQKeyboardNotification-umbrella.h in Headers */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               122D78F42E79267651C92A08FF3CBF82 /* Headers */ = {
+                       isa = PBXHeadersBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               64365C2671D733D3AAE1E25684E73255 /* Pods-Example-umbrella.h in Headers */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                3B1AF30CF9C8E42E24DA5BEA63D1D465 /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               5437BEDC0113A3C8DFE7EA59C14A7501 /* Headers */ = {
+               5800FFAC29D42F17B23D62063D737B73 /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               908714BB1129E58E79E45ABBAFC67F5F /* Pods-Example-umbrella.h in Headers */,
+                               2A1DE175A760E9F7CF7AF711BF549BC9 /* IQKeyboardReturnManager-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               6A2F55995EFF58A04B2C3910187787FB /* Headers */ = {
+               82711643BCFA0EA6AA2167CCA71932C5 /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               8475FCAD5EF1A75BC9BAF027EAB87AAF /* IQKeyboardToolbarManager-umbrella.h in Headers */,
+                               F1E1B1AC67AA1B21E1AF8D3AB5C9849C /* IQTextInputViewNotification-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               7CA74D01A767822CD6FC101B25E83B4F /* Headers */ = {
+               A440384545772625048C36C84242D128 /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               43B865B4E034A97737024C4ACBC60866 /* IQKeyboardToolbar-umbrella.h in Headers */,
+                               B543A1E1882CAEA19589891FCE2D17EA /* NSRunLoop+SRWebSocket.h in Headers */,
+                               3BB0B5D924BE769E95E64A5E6FC1675D /* NSRunLoop+SRWebSocketPrivate.h in Headers */,
+                               56851E11140A140A15088A41DC4C33BD /* NSURLRequest+SRWebSocket.h in Headers */,
+                               7174D48AADABCBE6FC53185C5442B952 /* NSURLRequest+SRWebSocketPrivate.h in Headers */,
+                               07632D281C5DED61CC7866B079BC9D2C /* SocketRocket.h in Headers */,
+                               5B67445AE2F3934BDA08D407BBA3028B /* SocketRocket-umbrella.h in Headers */,
+                               C92D93F48E74B79C08A2C5B81B68FD7D /* SRConstants.h in Headers */,
+                               EC8DB2CC9791B7DC686DCC78EFBB56C5 /* SRDelegateController.h in Headers */,
+                               65E5693A457A8AEE3E5758075D1E2792 /* SRError.h in Headers */,
+                               F6E948E2688CC08D3843DAA74F6328E8 /* SRHash.h in Headers */,
+                               DF011D18EBB28ECE459B6D96D3E460D8 /* SRHTTPConnectMessage.h in Headers */,
+                               9A3B9C740BC8FE0500132251551E5BE7 /* SRIOConsumer.h in Headers */,
+                               44EFA9A76932F81582D03076A8346A4B /* SRIOConsumerPool.h in Headers */,
+                               89CAC1E5DC5833EE630A652957D253A7 /* SRLog.h in Headers */,
+                               782981022BF319DFD85AE89A392639A2 /* SRMutex.h in Headers */,
+                               04986EEC139DC7C45DAB58056315FDC8 /* SRPinningSecurityPolicy.h in Headers */,
+                               6464C345447C71904DA3706AACA3F55D /* SRProxyConnect.h in Headers */,
+                               C36214D8311B615CDA115276934926DC /* SRRandom.h in Headers */,
+                               939EE0216FC02064B2F5894E87628182 /* SRRunLoopThread.h in Headers */,
+                               2B7184BD487141C385B3CC3F3984AA55 /* SRSecurityPolicy.h in Headers */,
+                               5DFD87881941225F0A5EAE64EB247708 /* SRSIMDHelpers.h in Headers */,
+                               57A34E19799F03EB53206496FD362449 /* SRURLUtilities.h in Headers */,
+                               444E95921E2BDCE7512867EAA1A6B381 /* SRWebSocket.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               7E6197EB3727119928B6B284301F93BB /* Headers */ = {
+               C08BBEDF18AE8DF38ABA50C42B1D2E2C /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               CB64410E0CF8BF6ADD6054B90C06E0DB /* IQTextInputViewNotification-umbrella.h in Headers */,
+                               9298CB7C2E4AC4E751E535DA15BEEFA8 /* IQKeyboardManagerSwift-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               898BECC5F4305C9121ADF70E8E8D2714 /* Headers */ = {
+               C88A56468418AB0D810EF16B5B8E485D /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               10B43C98D0F772130D75F66A1984E68C /* IQKeyboardReturnManager-umbrella.h in Headers */,
+                               7BA968278DAB1050E34D0B65E56E5846 /* IQKeyboardToolbar-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               B5BA93A89BC6540B7A7D509EFFAA8E2C /* Headers */ = {
+               E0881C44D4CBAF3C805B0C76FC20E95E /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               702C60CEA26061730A208FD9AD3148A3 /* IQTextView-umbrella.h in Headers */,
+                               C4CC8FC7015DCE5912B7607AFB238EFE /* Pods-DeepChordsSdk-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               C08BBEDF18AE8DF38ABA50C42B1D2E2C /* Headers */ = {
+               ECC96828C08E355DF2C5A52C3625D7B2 /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               9298CB7C2E4AC4E751E535DA15BEEFA8 /* IQKeyboardManagerSwift-umbrella.h in Headers */,
+                               A92367989121B0877023A09BF2F96F15 /* IQKeyboardToolbarManager-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               CB76203217C9D732831F564F54A6DF9B /* Headers */ = {
+               F3A1579A28F2237B19E04D5A1428811C /* Headers */ = {
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               93FA76E7D394EF1BE061B8AEB4E8F603 /* IQKeyboardNotification-umbrella.h in Headers */,
+                               8667EBBAD4365F7E2DECFE792D488128 /* IQTextView-umbrella.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* Begin PBXNativeTarget section */
                020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = A599D6F83E2ADA135F5F95E07F3A9F46 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */;
+                       buildConfigurationList = D7FB8C3DDF4703D4590435540A2233A9 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */;
                        buildPhases = (
-                               6A2F55995EFF58A04B2C3910187787FB /* Headers */,
-                               D5F29D43747DC4C2D50FCDFC84D74555 /* Sources */,
-                               14F7D5F67076860B84A84E202E620308 /* Frameworks */,
-                               DBDB308304AFF5F52C77D8C795824E2E /* Resources */,
+                               ECC96828C08E355DF2C5A52C3625D7B2 /* Headers */,
+                               1A398E6B367B205FAAAE4088C36F8875 /* Sources */,
+                               B0A1DA8C8E42CD15049F6F2D79726D7D /* Frameworks */,
+                               D10E28E3B3D225E4049054F6C994854A /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               E14B48494A76DA8D39B61F7DCFF351AE /* PBXTargetDependency */,
-                               5BC6280A3651E7CA1B1B64F1EACC399A /* PBXTargetDependency */,
-                               2EF44922A154A83DC77DEF27F8A592CA /* PBXTargetDependency */,
+                               806811E474B5E127D48FE9CA32DCFB26 /* PBXTargetDependency */,
+                               FDF0C9122AFE5F4537D84EB5B5EA2535 /* PBXTargetDependency */,
+                               F7852222FD7DD0B21BC78B245F2045A0 /* PBXTargetDependency */,
                        );
                        name = IQKeyboardToolbarManager;
                        productName = IQKeyboardToolbarManager;
                };
                0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 3C4DB880A7885119CB06D685D0A723E7 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */;
+                       buildConfigurationList = AC758F51A954F3478B41C0B2B845766B /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */;
                        buildPhases = (
-                               898BECC5F4305C9121ADF70E8E8D2714 /* Headers */,
-                               C03DAC5FE223C40E754D025088A86583 /* Sources */,
-                               B71FB9CF090F3995F09D74676CB6A38F /* Frameworks */,
-                               AA21BBF4F6F451457382A55A563E10CD /* Resources */,
+                               5800FFAC29D42F17B23D62063D737B73 /* Headers */,
+                               7D875C37EC81C736C5CCCE65FA1343A6 /* Sources */,
+                               9688A049F13521CC698EF57654CF2443 /* Frameworks */,
+                               E733192D0FA619FCCD70BD62F5A6A0F4 /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               09F40E0499F54B795248F87197AB6C87 /* PBXTargetDependency */,
-                               8B0E935F1FCD5AC1ECE059D205656EFA /* PBXTargetDependency */,
+                               1F9AF4725D5847BEA5D8B724D1A3B414 /* PBXTargetDependency */,
+                               9BE1A2A7D5E6D44833CB0C78085D940D /* PBXTargetDependency */,
                        );
                        name = IQKeyboardReturnManager;
                        productName = IQKeyboardReturnManager;
                };
                0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = C99BBC4654DBCB79FC10078A8D8F164A /* Build configuration list for PBXNativeTarget "Pods-Example" */;
+                       buildConfigurationList = 95C096ADDB6F7FCAFFA3FBB358C75EF3 /* Build configuration list for PBXNativeTarget "Pods-Example" */;
                        buildPhases = (
-                               5437BEDC0113A3C8DFE7EA59C14A7501 /* Headers */,
-                               1BC9CC609158C1A3E300AB808DD471CE /* Sources */,
-                               8687CBCEBF972D480F700C4A0D1CBEBA /* Frameworks */,
-                               7A76EF2AC0AA73D4492255BD0A0369CB /* Resources */,
+                               122D78F42E79267651C92A08FF3CBF82 /* Headers */,
+                               85B610DD95380C789F1D31249548827B /* Sources */,
+                               3683C5D0C8F465D221926E5B41E0B565 /* Frameworks */,
+                               2E3D44000BD1509E439B9C80D2F2E273 /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               5332DA368A2DC53BDEAD617F548A4218 /* PBXTargetDependency */,
-                               AD528895684234E9D494E1C650E3E98D /* PBXTargetDependency */,
-                               338A7F4AE97BA376056068B3DEF9B9C5 /* PBXTargetDependency */,
-                               CE9A17D3B75B6414A3AB270568EB58C1 /* PBXTargetDependency */,
-                               33022728CDB7938CE554AB26CE94CDF6 /* PBXTargetDependency */,
-                               02947DA73292D990EFA756FB0A80C749 /* PBXTargetDependency */,
-                               73C88ECD747110C67B6A0CC0052D1B9F /* PBXTargetDependency */,
-                               9200AD276048BFDABA6E145FE1119A6B /* PBXTargetDependency */,
-                               3814D6DB9239F6304E655EB4172BC721 /* PBXTargetDependency */,
-                               53142CF590266299583D7560D02A52BC /* PBXTargetDependency */,
+                               AEFFF3B21972CDA23989650CB0D06DC1 /* PBXTargetDependency */,
+                               F2792ADD73FF2795D46955194D6DB5FA /* PBXTargetDependency */,
+                               0A6F859D7948477715DBD4333CD962F5 /* PBXTargetDependency */,
+                               1EE6EF0BEC589B1038459A693177F2FE /* PBXTargetDependency */,
+                               6A012670364ED3DE97C5B8D570417F17 /* PBXTargetDependency */,
+                               54C3CEF0CE5F2ADC19CF09FA97EA2FCD /* PBXTargetDependency */,
+                               77F02D151BFA0BF2A8184E8F7040E02E /* PBXTargetDependency */,
+                               7C197C0E14E357C0482C5CECC1F7DAE7 /* PBXTargetDependency */,
+                               FC49926069485756B05C5F53750496AD /* PBXTargetDependency */,
+                               9143EFF5B329D660A0398F7391E5D055 /* PBXTargetDependency */,
+                               3E3639BC049B1894293B33F5B52D836A /* PBXTargetDependency */,
                        );
                        name = "Pods-Example";
                        productName = Pods_Example;
                };
                12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = D209595F46E26B2152EE325AAA902C34 /* Build configuration list for PBXNativeTarget "IQTextView" */;
+                       buildConfigurationList = D8BBE9E3900D941FF67F5A73A1AECA11 /* Build configuration list for PBXNativeTarget "IQTextView" */;
                        buildPhases = (
-                               B5BA93A89BC6540B7A7D509EFFAA8E2C /* Headers */,
-                               642CC99F4C997855611D756BCD96ADCA /* Sources */,
-                               206DAEEAC5B1D52E8D12E9BF1571C67B /* Frameworks */,
-                               4BDD093D993E63D088F36F45E4664B3F /* Resources */,
+                               F3A1579A28F2237B19E04D5A1428811C /* Headers */,
+                               EDF3D1BC9513EF41FD61EEC958BC7E9C /* Sources */,
+                               B4BF16B463F2EC49D7CBC102A2936235 /* Frameworks */,
+                               9E7C5C7D75FB952C9859F404E09D0DBE /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               5FBD91502BE2FA8A62798C4838D849FC /* PBXTargetDependency */,
-                               F803C1642D0E7F6A76B1CE2EAA8F61F5 /* PBXTargetDependency */,
+                               9AB32C8C254D84A755461731E5E31837 /* PBXTargetDependency */,
+                               486058C9A622B4968F720109A1CB425D /* PBXTargetDependency */,
                        );
                        name = IQTextView;
                        productName = IQTextView;
                        productReference = 0DFD4541FF9DAA31A2FC2A7F6D03ED22 /* IQTextView */;
                        productType = "com.apple.product-type.framework";
                };
+               1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 698D46877F77FCD24D7D79E95A4A06D5 /* Build configuration list for PBXNativeTarget "SocketRocket" */;
+                       buildPhases = (
+                               A440384545772625048C36C84242D128 /* Headers */,
+                               5B14979992C9DB89400DDFB2EB8B8ECB /* Sources */,
+                               796567F81D938DA74DF71A2AFF3F8F3D /* Frameworks */,
+                               A540247F97F33E3F24D6C4B41FFA27DB /* Resources */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = SocketRocket;
+                       productName = SocketRocket;
+                       productReference = 85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */;
+                       productType = "com.apple.product-type.framework";
+               };
                19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 80CE967CAA1D35721519F892BAF7A19B /* Build configuration list for PBXNativeTarget "SnapKit" */;
                        buildRules = (
                        );
                        dependencies = (
-                               373E4E2DF66A8F819F9594800BA0395D /* PBXTargetDependency */,
+                               032EC8AE715F3D13AD519BE9CA03294E /* PBXTargetDependency */,
                        );
                        name = SnapKit;
                        productName = SnapKit;
                };
                283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = E959AB3A73E0C01735D6A0CBB7A46763 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */;
+                       buildConfigurationList = 0DA28833D7A042B27FBAEDF85A1C1D74 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */;
                        buildPhases = (
-                               7E6197EB3727119928B6B284301F93BB /* Headers */,
-                               4B4500F672993B0509740F79C41F6244 /* Sources */,
-                               AC775A265EBB1A2969CF830711FDFC36 /* Frameworks */,
-                               34A84F34084BCB439F6EF87B05FC89F6 /* Resources */,
+                               82711643BCFA0EA6AA2167CCA71932C5 /* Headers */,
+                               64CD60E8B295A57BEBDD5D87A91B92C2 /* Sources */,
+                               51FB4B943D35F3E908360703B96C7E25 /* Frameworks */,
+                               B13E49C52D1F4CA576AECF646E227048 /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               72F6A0C66EDDCB6E6AE5234030A2C917 /* PBXTargetDependency */,
-                               B209B2433F1107B4974A261EEA588622 /* PBXTargetDependency */,
+                               0BA497932D68F052CFDA60CB4325E823 /* PBXTargetDependency */,
+                               C2F5904EDA280BF704E19BEC7E450D7C /* PBXTargetDependency */,
                        );
                        name = IQTextInputViewNotification;
                        productName = IQTextInputViewNotification;
                };
                2B8FF445A5162845FAB9EC00FC92B694 /* IQKeyboardNotification-IQKeyboardNotification */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 1C2730F463E4268BFDE6BAF62C9A487F /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */;
+                       buildConfigurationList = 2FC9855C948A66726D61C1BF2072066A /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */;
                        buildPhases = (
-                               69B5CAD49C195CC703F7B4E55C30A171 /* Sources */,
-                               303B17403FC51446D947C78825258D78 /* Frameworks */,
-                               8BA315B12D94A7CD6399F8963CF03ACA /* Resources */,
+                               3C441F0A74335E026B3A49DF02ECF4CE /* Sources */,
+                               524D81F2C5CE61FB9EB4A47C9DEE4C1E /* Frameworks */,
+                               6FB0C9C708A89616971C79B2B1BB4FD5 /* Resources */,
                        );
                        buildRules = (
                        );
                };
                4502C7427440BEB17A50C0BF6E638A85 /* IQTextInputViewNotification-IQTextInputViewNotification */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = BEBD8E760EA9789023B9A265429B0CE3 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */;
+                       buildConfigurationList = BA50FBEF420279D7BDB90421B1103569 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */;
                        buildPhases = (
-                               068ABE2F7FB7B58B7C8850D3D0DFB234 /* Sources */,
-                               593A1D66DE0099584227B2B9C0CF7DB9 /* Frameworks */,
-                               8477C527987BA6E1027C6EB091155175 /* Resources */,
+                               3C68A4C08DF19233949A87717EEB487B /* Sources */,
+                               D9611FA61C59D2592877A687EEBEEFE4 /* Frameworks */,
+                               53F78ACD922DFE5F07BB53AF35B10C1B /* Resources */,
                        );
                        buildRules = (
                        );
                        productReference = F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */;
                        productType = "com.apple.product-type.bundle";
                };
+               57C07B65DFE17EDE1FBA00A59C380215 /* Pods-DeepChordsSdk */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 49D80946082E3E53F4077E15D8887408 /* Build configuration list for PBXNativeTarget "Pods-DeepChordsSdk" */;
+                       buildPhases = (
+                               E0881C44D4CBAF3C805B0C76FC20E95E /* Headers */,
+                               B559610B7522BD1394961D290D7F9F24 /* Sources */,
+                               D603B521417D6EFBEB7EAECC9C431345 /* Frameworks */,
+                               51DCE991AF37B3EEABE23F0A727B58A0 /* Resources */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               DDA643E4BF2CFF13D6B0D25A5C59AB5F /* PBXTargetDependency */,
+                       );
+                       name = "Pods-DeepChordsSdk";
+                       productName = Pods_DeepChordsSdk;
+                       productReference = 06FEEB0FA2AA89DF42A1C6525F644FBF /* Pods-DeepChordsSdk */;
+                       productType = "com.apple.product-type.framework";
+               };
                7C5613175BBC4BF67E36DB4FBEBC01D0 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 6481ABAE66B2D04512CD62187CEABE6D /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */;
+                       buildConfigurationList = 9E4E9D837E21217746DEB582B898D487 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */;
                        buildPhases = (
-                               5DC98B664B122FBF55B33F1E9864097A /* Sources */,
-                               CC0D2D1B4E9DF573CAB4864E913EEF08 /* Frameworks */,
-                               E212BB5D10DC6F6BEFD50F34F9F2E098 /* Resources */,
+                               93B28B68B9253146A5A3760F7F07BAB5 /* Sources */,
+                               2BE4574EA7A2208A3273A02C5D2F1D1B /* Frameworks */,
+                               C8DC5880AFA70136503A77EF1FA12E8B /* Resources */,
                        );
                        buildRules = (
                        );
                };
                88810798DA63A2F6611B0970EA276DEC /* IQKeyboardReturnManager-IQKeyboardReturnManager */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = F874B41A83B918592D0E9627046D0688 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */;
+                       buildConfigurationList = 08CCC0BB4F7D4BA07752DF404F6EDD9A /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */;
                        buildPhases = (
-                               E876810B24A176F2DA92BB88194B940A /* Sources */,
-                               B0639BBF382C714C07A4780B0937F3DD /* Frameworks */,
-                               3F6FD522AF4AAA2893F958338FD95830 /* Resources */,
+                               4E2755E9D46C6DFDCFEB8FB5461370B2 /* Sources */,
+                               5C50EB2041FA8E3A1BB9E243091C260E /* Frameworks */,
+                               648156F3F654BAD048DC31929DADADD3 /* Resources */,
                        );
                        buildRules = (
                        );
                };
                8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 7ECB31051167A225EFE7C1A45E684E88 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */;
+                       buildConfigurationList = 2D29A227B6A83F5A542054A8A8043BAA /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */;
                        buildPhases = (
-                               C68CA3D6E979C9C4060A446F5259ED37 /* Sources */,
-                               CC8D09BBF8B8F6D33E40ED1BAA1F8113 /* Frameworks */,
-                               9189062812A7E0F7228B7F937C93E4FE /* Resources */,
+                               8BEB91B4B898532A40DB8A8E4B9A7792 /* Sources */,
+                               4F320E16D10A7BE9185BA7C5A5CCDA43 /* Frameworks */,
+                               174BF058335E0D9E0D5AE8280994DE37 /* Resources */,
                        );
                        buildRules = (
                        );
                };
                982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 67BEB8C8A7A6715308ADC7CCB951A134 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */;
+                       buildConfigurationList = FD573F16CD31603388EC2DE46509F450 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */;
                        buildPhases = (
-                               778167DCA82E6720C48973FE7E9057ED /* Sources */,
-                               D69032A0184C58B6180580EC9740DF5D /* Frameworks */,
-                               DAA841338E12329C3213B17983D65AB7 /* Resources */,
+                               5760F041F8E34852DB231732150718DE /* Sources */,
+                               D7208CA103D7DAE87F900A6B91736DCC /* Frameworks */,
+                               47EBE3AE692A6D5A8D76F3E9294A02F6 /* Resources */,
                        );
                        buildRules = (
                        );
                };
                A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = F8A3F2A1D94EBD3FC696D573D0AB1B0F /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */;
+                       buildConfigurationList = 7B6A2B3DDE303A370FD2A5C8DB9C6E2D /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */;
                        buildPhases = (
-                               CB76203217C9D732831F564F54A6DF9B /* Headers */,
-                               DCEE5F908D05D08CB49810DF257309EB /* Sources */,
-                               ED936A52EC136457464BFD2C700FB0A3 /* Frameworks */,
-                               890965BE534ED7A2EA3C31AD18FB0268 /* Resources */,
+                               060405D4024056E8E8E0AAAA43BAE414 /* Headers */,
+                               536076B1DBBF070DAA25A21BCE546B3C /* Sources */,
+                               FBA90047961BDAD70FDA139EC0C30DD0 /* Frameworks */,
+                               3F90A77AEBBD3ABB426A427B522E1CA7 /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               15B6A297ECD7769C6179318011DA90D6 /* PBXTargetDependency */,
+                               BAE9291352BA3C02DCD824BD9455EEFB /* PBXTargetDependency */,
                        );
                        name = IQKeyboardNotification;
                        productName = IQKeyboardNotification;
                };
                A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = F0BDF860071DEA034151A2E0A1E847DD /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */;
+                       buildConfigurationList = D2E3CA4A5A5255636741A362E4F6BCF7 /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */;
                        buildPhases = (
-                               1CBD03D5FAE137959B4BCC3F5F1E587A /* Sources */,
-                               4A9B7C7D9A2CD8049C8E4EDD7F25DC71 /* Frameworks */,
-                               827415E22876785B7EEA81F1F2EF17E0 /* Resources */,
+                               6BA8B3ED1069309303992AA48F45596A /* Sources */,
+                               F94D8D7F47FD316BA431BF216418ADF4 /* Frameworks */,
+                               2F55A6F40CBE52B1DAF28461F9E6E647 /* Resources */,
                        );
                        buildRules = (
                        );
                };
                B247F77A0CD5E19C8187A9BA1EB58C09 /* IQKeyboardToolbar-IQKeyboardToolbar */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = C3974B1DD3C778FE5733E8306919D1BC /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */;
+                       buildConfigurationList = 7468FF21977574A694627CBF4D7DEC53 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */;
                        buildPhases = (
-                               3467572FBBD115066D9DAF516B069FB2 /* Sources */,
-                               04BE6D07E21323B9CEF8A64DB1F090CC /* Frameworks */,
-                               528EF1DC8744228541DB7475A0D65ECB /* Resources */,
+                               AD7CA0B1355EA84E4891403413E3DFF0 /* Sources */,
+                               743D51EAD768EDE4D4AB7D3C665C7D2E /* Frameworks */,
+                               058186BCF638406CD478B0C025C67642 /* Resources */,
                        );
                        buildRules = (
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               2BEC92FE1E84E8E714624E30C39B0881 /* PBXTargetDependency */,
-                               8DFAED47E5AE24BD1D2815781962AC04 /* PBXTargetDependency */,
-                               7E1FE66F1BED650B6A5DE3DF65EDC42E /* PBXTargetDependency */,
-                               54C243D325925763DDE70362FEF9AB35 /* PBXTargetDependency */,
-                               7018FAC1C4C71DA57E769F3F34B0CB30 /* PBXTargetDependency */,
-                               200D486E5AFC167189F7B905CE3DF002 /* PBXTargetDependency */,
+                               0ED2A9B38A71F6850A959089852BDB0A /* PBXTargetDependency */,
+                               CACDD982D78D0FBB2772B70DB888F8B4 /* PBXTargetDependency */,
+                               E4562E3C97AF6073F7BD53F0DA943866 /* PBXTargetDependency */,
+                               443ECCCC8495E109D669FC24E39EE5E7 /* PBXTargetDependency */,
+                               3920F2A30AF54503207FB9C2E5ECC456 /* PBXTargetDependency */,
+                               3BDAAC90F533878935276DA626D3CE8F /* PBXTargetDependency */,
                        );
                        name = IQKeyboardManagerSwift;
                        productName = IQKeyboardManagerSwift;
                        buildRules = (
                        );
                        dependencies = (
-                               81530010EBBCEC9F063C726BEE96FA2E /* PBXTargetDependency */,
+                               24C84A614B93271254E3B59008326861 /* PBXTargetDependency */,
                        );
                        name = "Toast-Swift";
                        productName = Toast_Swift;
                };
                C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 2C11E195FECCAE83CCDC9E8F3DDC7F1C /* Build configuration list for PBXNativeTarget "Toast-Swift-Toast-Swift" */;
+                       buildConfigurationList = 2DEB3984BC37C7B27AE0091EC7509142 /* Build configuration list for PBXNativeTarget "Toast-Swift-Toast-Swift" */;
                        buildPhases = (
-                               23B0266BDD5D742A6985A1A3284FAE3B /* Sources */,
-                               C2B597C3382CFBEDD298B0A9ED88D7EA /* Frameworks */,
-                               B44360D2D920E25764093F836445F02F /* Resources */,
+                               401AB3CA229BFB5D1BD2B86A0F771029 /* Sources */,
+                               7802B8C3260B2A1D85C8EFC0C6929B18 /* Frameworks */,
+                               9ACC5CFB969DD7CBAFA4FD3471F250AB /* Resources */,
                        );
                        buildRules = (
                        );
                };
                EEE261386011CDF271BE289F73FF5959 /* IQKeyboardCore-IQKeyboardCore */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 1BAF802141BB7A8BEA3D0389842F0DCD /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */;
+                       buildConfigurationList = D452E33AB7D1DEFA04A6E2B89E1B70BD /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */;
                        buildPhases = (
-                               193FC9D5FF435D6EC04EDCD055A905F7 /* Sources */,
-                               13370F62359EA40214FB32CCB782E91A /* Frameworks */,
-                               29E71C1D593DC1AA83C9889794267EF1 /* Resources */,
+                               0E2B16FF344B7465603C1647248CC9B3 /* Sources */,
+                               5FCE427163262BB0862B486F5E093C1C /* Frameworks */,
+                               2BA5C599D1605C3C6BB5CD4D9997593F /* Resources */,
                        );
                        buildRules = (
                        );
                };
                F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = E74FC012668CDA2F6C4BF839FEB96069 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */;
+                       buildConfigurationList = 6545B5D9E1142254EECDDEFC1408EA74 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */;
                        buildPhases = (
-                               7CA74D01A767822CD6FC101B25E83B4F /* Headers */,
-                               258B966FF9BF58520053F85BB4C5CB86 /* Sources */,
-                               FCF44B7D1CF6026F5C4E8FAD6F93496A /* Frameworks */,
-                               69EA636035BF2EDFD91FBFF12F9D98D7 /* Resources */,
+                               C88A56468418AB0D810EF16B5B8E485D /* Headers */,
+                               3363E27ECA850B6F97ED682F53C6A346 /* Sources */,
+                               D5899CD7924A4C13CEA79F5428436874 /* Frameworks */,
+                               D2C990C2F192D6D365F0DA3D5288AE39 /* Resources */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               4DA2D12F5FFEF9889288A454BDD7962A /* PBXTargetDependency */,
-                               DE1669B73B7601256AAF289C2AD11837 /* PBXTargetDependency */,
+                               5A538984C0CD4E2FF0B2AAA2EF368D0F /* PBXTargetDependency */,
+                               36DB0F3DA574BD5B7448F2F28DFAA125 /* PBXTargetDependency */,
                        );
                        name = IQKeyboardToolbar;
                        productName = IQKeyboardToolbar;
                        buildRules = (
                        );
                        dependencies = (
-                               F98C8014CD89FC2B8D539B51D3905AA2 /* PBXTargetDependency */,
+                               9CF7EA505D7A9CAA62AFDC4457D80AEF /* PBXTargetDependency */,
                        );
                        name = IQKeyboardCore;
                        productName = IQKeyboardCore;
                        mainGroup = CF1408CF629C7361332E53B88F7BD30C;
                        minimizedProjectReferenceProxies = 0;
                        preferredProjectObjectVersion = 77;
-                       productRefGroup = 0EACCA925CF9C4599FAAC20986D820F6 /* Products */;
+                       productRefGroup = 6A6ACDADD484E61C0C86AAAC23AA5774 /* Products */;
                        projectDirPath = "";
                        projectRoot = "";
                        targets = (
                                4502C7427440BEB17A50C0BF6E638A85 /* IQTextInputViewNotification-IQTextInputViewNotification */,
                                12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */,
                                A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */,
+                               57C07B65DFE17EDE1FBA00A59C380215 /* Pods-DeepChordsSdk */,
                                0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */,
                                19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */,
                                8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */,
+                               1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */,
                                B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */,
                                C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */,
                        );
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
-               1DEDF411E550D85A1218E1655456A9CD /* Resources */ = {
+               058186BCF638406CD478B0C025C67642 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               9E0045B41BFE697DB4ADE151228024D2 /* SnapKit-SnapKit_Privacy in Resources */,
+                               2B518589AC1F3F54CE14633027E81734 /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               29E71C1D593DC1AA83C9889794267EF1 /* Resources */ = {
+               174BF058335E0D9E0D5AE8280994DE37 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               BCA36C0165E90BE953EDB5DF596E961C /* PrivacyInfo.xcprivacy in Resources */,
+                               49F88DA1CED23ACF70ED0D51D2BCCE4F /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               30325A914D6527C8259F46363D6D7531 /* Resources */ = {
+               1DEDF411E550D85A1218E1655456A9CD /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               6DE9FD143CBC24075601F8FE2ADC4115 /* IQKeyboardCore-IQKeyboardCore in Resources */,
+                               9E0045B41BFE697DB4ADE151228024D2 /* SnapKit-SnapKit_Privacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               34A84F34084BCB439F6EF87B05FC89F6 /* Resources */ = {
+               2BA5C599D1605C3C6BB5CD4D9997593F /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               4D055AD31ECB4F14AA2CD02DB2155BE0 /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */,
+                               164062B86FCAFF355EE04D7A23A6EA1C /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               3F6FD522AF4AAA2893F958338FD95830 /* Resources */ = {
+               2E3D44000BD1509E439B9C80D2F2E273 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               36C3C4911A9F44D14023276D2FEB61FC /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               4BDD093D993E63D088F36F45E4664B3F /* Resources */ = {
+               2F55A6F40CBE52B1DAF28461F9E6E647 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               25BE643B401DBC4C6DC006ED6871486D /* IQTextView-IQTextView in Resources */,
+                               C433EA40A4C18AC4714CF6C9BC1172CA /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               528EF1DC8744228541DB7475A0D65ECB /* Resources */ = {
+               30325A914D6527C8259F46363D6D7531 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               8B0CD445CE2368FD1D2E5A97917004DA /* PrivacyInfo.xcprivacy in Resources */,
+                               6DE9FD143CBC24075601F8FE2ADC4115 /* IQKeyboardCore-IQKeyboardCore in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               636F2BA8305CAE418272BBDC04936516 /* Resources */ = {
+               3F90A77AEBBD3ABB426A427B522E1CA7 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               E6FE2596512201193E95FC356C6E3351 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift in Resources */,
+                               0B380F6921261E661C9EF26B02E5D634 /* IQKeyboardNotification-IQKeyboardNotification in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               69EA636035BF2EDFD91FBFF12F9D98D7 /* Resources */ = {
+               47EBE3AE692A6D5A8D76F3E9294A02F6 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               7B6FECCE2D5B00F838A8938B4A87D5E4 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */,
+                               50ECD138DA8BC1FBBEBFBF3CE5CEB5FF /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               7A76EF2AC0AA73D4492255BD0A0369CB /* Resources */ = {
+               51DCE991AF37B3EEABE23F0A727B58A0 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               827415E22876785B7EEA81F1F2EF17E0 /* Resources */ = {
+               53F78ACD922DFE5F07BB53AF35B10C1B /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               72B966A1388CD724413648ADE6819481 /* PrivacyInfo.xcprivacy in Resources */,
+                               1CCB9F1FA415F93E8F4AD0E4692E4BC6 /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               8477C527987BA6E1027C6EB091155175 /* Resources */ = {
+               636F2BA8305CAE418272BBDC04936516 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               F4D65B0771272C500F2E872705893146 /* PrivacyInfo.xcprivacy in Resources */,
+                               E6FE2596512201193E95FC356C6E3351 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               890965BE534ED7A2EA3C31AD18FB0268 /* Resources */ = {
+               648156F3F654BAD048DC31929DADADD3 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               D2E2744A0122A5447E6FD80BBA6FB36A /* IQKeyboardNotification-IQKeyboardNotification in Resources */,
+                               DD4291CF0D9971BFED1BD55FB65ACA32 /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               8BA315B12D94A7CD6399F8963CF03ACA /* Resources */ = {
+               6FB0C9C708A89616971C79B2B1BB4FD5 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               45D50B26F412D12C2DF12F804CB08FEF /* PrivacyInfo.xcprivacy in Resources */,
+                               56E30C414ED43846B453D6FDE75DF3B5 /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               9189062812A7E0F7228B7F937C93E4FE /* Resources */ = {
+               9ACC5CFB969DD7CBAFA4FD3471F250AB /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               A9F6F279F9AE6B3EB30CC9ADE242E7C5 /* PrivacyInfo.xcprivacy in Resources */,
+                               8BA78192EBB4433C386A932BE198C2AD /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               A694D13AD95802E0936531BC8DAEBB89 /* Resources */ = {
+               9E7C5C7D75FB952C9859F404E09D0DBE /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               87E921A1D8B0C683DA2133709C867859 /* Toast-Swift-Toast-Swift in Resources */,
+                               2409EDE57DC13E13E7C7A81E9E2DDD9E /* IQTextView-IQTextView in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AA21BBF4F6F451457382A55A563E10CD /* Resources */ = {
+               A540247F97F33E3F24D6C4B41FFA27DB /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               18D58CD25F5E8B4A86170A1D907516C3 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               B44360D2D920E25764093F836445F02F /* Resources */ = {
+               A694D13AD95802E0936531BC8DAEBB89 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               BDA87F0C05C9C4A2AA0A0D2B98C33E8C /* PrivacyInfo.xcprivacy in Resources */,
+                               87E921A1D8B0C683DA2133709C867859 /* Toast-Swift-Toast-Swift in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               DAA841338E12329C3213B17983D65AB7 /* Resources */ = {
+               B13E49C52D1F4CA576AECF646E227048 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               E007B42A515F1B4D6C1477ACA9AD43C0 /* PrivacyInfo.xcprivacy in Resources */,
+                               4B2FB381B6E14F9E0F442557ADDAA2F8 /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               DBDB308304AFF5F52C77D8C795824E2E /* Resources */ = {
+               C8DC5880AFA70136503A77EF1FA12E8B /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               644BBAB0F823E2D81A4EF7114F2F264E /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */,
+                               0EB83A2AC8AAECEE26C8739477B3A431 /* PrivacyInfo.xcprivacy in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               E212BB5D10DC6F6BEFD50F34F9F2E098 /* Resources */ = {
+               D10E28E3B3D225E4049054F6C994854A /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               1D06D98BA3B7C6A1D7BFEF8DB9CB1948 /* PrivacyInfo.xcprivacy in Resources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-               068ABE2F7FB7B58B7C8850D3D0DFB234 /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-               193FC9D5FF435D6EC04EDCD055A905F7 /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
+                               4C1E30BD1A58C10DE84E572ECD5DB54D /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               1BC9CC609158C1A3E300AB808DD471CE /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
+               D2C990C2F192D6D365F0DA3D5288AE39 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               868AD263A86B61C7722575FBCAD4056A /* Pods-Example-dummy.m in Sources */,
+                               F5F31138D70F9AEBD476D8AE418F37F9 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               1CBD03D5FAE137959B4BCC3F5F1E587A /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
+               E733192D0FA619FCCD70BD62F5A6A0F4 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               020799C53BF7A383514499A2B455C635 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               23B0266BDD5D742A6985A1A3284FAE3B /* Sources */ = {
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               0E2B16FF344B7465603C1647248CC9B3 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               258B966FF9BF58520053F85BB4C5CB86 /* Sources */ = {
+               1A398E6B367B205FAAAE4088C36F8875 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               09FABB7674B8063235602CC7AEBFAF3D /* IQBarButtonItem.swift in Sources */,
-                               92884C4C1C02E75A52CC712EC8A34421 /* IQBarButtonItemConfiguration.swift in Sources */,
-                               CFB66030405436F94DE6E8C2D9175A0E /* IQInvocation.swift in Sources */,
-                               61C3C9CD69B4AD5D26416201A45A80E2 /* IQKeyboardToolbar.swift in Sources */,
-                               F5EA9B9630BC0ABCA401EBB41ACF0CAA /* IQKeyboardToolbar-dummy.m in Sources */,
-                               FA1E4DF059F9D021A2B913A8DA9D1CBE /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */,
-                               8AD605858D16DC3D7B735572F0C7ED8E /* IQPlaceholderable.swift in Sources */,
-                               A74F5C96D4E6C5927CD31690CBBD40F9 /* IQTitleBarButtonItem.swift in Sources */,
-                               103706F1CB831BCC4745A590866274ED /* UIView+IQKeyboardExtension.swift in Sources */,
-                               829CA2939955B57238D8CF3C53F3F404 /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */,
-                               AE5E125694A1F601CBC7ED5362DA54E8 /* UIView+IQKeyboardExtensionObjc.swift in Sources */,
+                               06B16BF7C2EA99B47539C34FF4150ABF /* Array+Sort.swift in Sources */,
+                               64684CAF22CAC1002958805187019FD7 /* IQDeepResponderContainerView.swift in Sources */,
+                               F312D740135121FC4C7D0EB4A5F76F90 /* IQKeyboardToolbarConfiguration.swift in Sources */,
+                               992815E207201EE57916809E07ADBD74 /* IQKeyboardToolbarConstants.swift in Sources */,
+                               B1990109AA9AF8F57180C17D4A04EF6B /* IQKeyboardToolbarManager.swift in Sources */,
+                               07543B1010D44AA155CAFADBF03E66DB /* IQKeyboardToolbarManager+Action.swift in Sources */,
+                               310A311043229B0F1C21B72E9FD37271 /* IQKeyboardToolbarManager+Debug.swift in Sources */,
+                               71311BC21C92A7DE376CAD928E325979 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */,
+                               A802B52FE5903601486CB77E2FDCF18B /* IQKeyboardToolbarManager+Internal.swift in Sources */,
+                               809199B64088AA02A6B900316396A83D /* IQKeyboardToolbarManager+Toolbar.swift in Sources */,
+                               9CFA943AABBDB657A85AAAF2FB4DED67 /* IQKeyboardToolbarManager-dummy.m in Sources */,
+                               37E0B956B90DE65985C993A4DF4D6CA3 /* UIView+Responders.swift in Sources */,
+                               6735CEF5CEDBE284902139B3ED3F2E73 /* UIView+RespondersObjc.swift in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               3467572FBBD115066D9DAF516B069FB2 /* Sources */ = {
+               3363E27ECA850B6F97ED682F53C6A346 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               F4B260EE81F1B5801FC6DA3097F2E433 /* IQBarButtonItem.swift in Sources */,
+                               CA547E1928ADED547C368A3AB7CE9267 /* IQBarButtonItemConfiguration.swift in Sources */,
+                               3D1D0BFA512309AE63825C811A1BFC81 /* IQInvocation.swift in Sources */,
+                               49D83EC94BF242A406B6553F44E52024 /* IQKeyboardToolbar.swift in Sources */,
+                               E51720E5CBEEB2151A69D4FDF36B7E2D /* IQKeyboardToolbar-dummy.m in Sources */,
+                               3F89C7F7F091BA0DFD648E0286E5665D /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */,
+                               7BEAD7E859FB5BFCACD23CE492484CC4 /* IQPlaceholderable.swift in Sources */,
+                               7BBD64ADF2DD2B427F258E87F3EDA284 /* IQTitleBarButtonItem.swift in Sources */,
+                               548F940AC071FBFD9D8DF209775771E5 /* UIView+IQKeyboardExtension.swift in Sources */,
+                               1A67B4D6FA3F8FB9A1083EF74C966F64 /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */,
+                               24A7645685912B02F96A1291D607DBAA /* UIView+IQKeyboardExtensionObjc.swift in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               4B4500F672993B0509740F79C41F6244 /* Sources */ = {
+               3C441F0A74335E026B3A49DF02ECF4CE /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               A61774BEF07AB7C1107C3FDA1297E5BB /* IQTextInputViewInfo.swift in Sources */,
-                               7012CE5AAAF1AEAA878B00AA9B7A3A23 /* IQTextInputViewNotification.swift in Sources */,
-                               7EDEEAAEA314F2D8221F9ED0179A7843 /* IQTextInputViewNotification-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               5DC98B664B122FBF55B33F1E9864097A /* Sources */ = {
+               3C68A4C08DF19233949A87717EEB487B /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               642CC99F4C997855611D756BCD96ADCA /* Sources */ = {
+               401AB3CA229BFB5D1BD2B86A0F771029 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               CF42B90B9D36F1A8370820AE19E549D4 /* IQTextView.swift in Sources */,
-                               42AE30E987B1F2183EEE1414C5108662 /* IQTextView+Placeholderable.swift in Sources */,
-                               894A8EA7637D4C761EC74FB4F16BEFD3 /* IQTextView-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               69B5CAD49C195CC703F7B4E55C30A171 /* Sources */ = {
+               4E2755E9D46C6DFDCFEB8FB5461370B2 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               778167DCA82E6720C48973FE7E9057ED /* Sources */ = {
+               536076B1DBBF070DAA25A21BCE546B3C /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               4C26DF4F8D6AC77894F18EC89896258B /* IQKeyboardInfo.swift in Sources */,
+                               975E6903FBA7CF724108613000500E7E /* IQKeyboardNotification.swift in Sources */,
+                               65ABC841033E6707C3419B304C1DDD50 /* IQKeyboardNotification-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               B4A020AF82EF829322C86201C5C31A20 /* Sources */ = {
+               5760F041F8E34852DB231732150718DE /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               172B6B4E5550420B8131FBD62C975821 /* Toast.swift in Sources */,
-                               A9B5C45C3C4D517B581E536DE846A078 /* Toast-Swift-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               BF6F1816B0325207E7310ABC9FD05174 /* Sources */ = {
+               5B14979992C9DB89400DDFB2EB8B8ECB /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               5E7E257AE5D618E46EF57A5818010F85 /* NSRunLoop+SRWebSocket.m in Sources */,
+                               6645E9FB4265C5712E38055C931E1630 /* NSURLRequest+SRWebSocket.m in Sources */,
+                               A3585531EE4D8466B74A5A6F7958EC79 /* SocketRocket-dummy.m in Sources */,
+                               B893C0DD5BE32FAE1D6895E1ED392B7A /* SRConstants.m in Sources */,
+                               1A117EC847E321871E40EB39F3576D11 /* SRDelegateController.m in Sources */,
+                               AB12501C57FFF722131F674ACB425944 /* SRError.m in Sources */,
+                               EB3BCE9B36BF814DA3069FA077168301 /* SRHash.m in Sources */,
+                               0362BB03F32EC9FB6013DEE29E8E33EF /* SRHTTPConnectMessage.m in Sources */,
+                               FCFC8D5B48F3DC4BC8942320631D8C1B /* SRIOConsumer.m in Sources */,
+                               20B8C7C05E3AF3032935F30500EF5550 /* SRIOConsumerPool.m in Sources */,
+                               CF6554D8A9380CAC0F51D5043769D930 /* SRLog.m in Sources */,
+                               A564D0B0EE8AED950D943A75C2B3092E /* SRMutex.m in Sources */,
+                               D25185C12789EA624C8BAC6A6432E77B /* SRPinningSecurityPolicy.m in Sources */,
+                               D623A6CB33709C4D87766C66A756A0F7 /* SRProxyConnect.m in Sources */,
+                               9A3761D8CEFB0E2131D2EFA2DEBB3A99 /* SRRandom.m in Sources */,
+                               92571FFBEF3A7B2F4F633624013010EE /* SRRunLoopThread.m in Sources */,
+                               8D0D15CE4E92BA4433AE7EA578FE3E15 /* SRSecurityPolicy.m in Sources */,
+                               6135798CCD656C1B3A6EA5738A23190A /* SRSIMDHelpers.m in Sources */,
+                               7F30D73D46CAD9D21A25738B11A6DDDA /* SRURLUtilities.m in Sources */,
+                               4DC15DC2DF3C4BBA344C86B112C9C68B /* SRWebSocket.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               64CD60E8B295A57BEBDD5D87A91B92C2 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               380EA4E3E2A772560E3A0670B6406450 /* IQTextInputViewInfo.swift in Sources */,
+                               EBDF215E376C3DF934F05D201833DDDC /* IQTextInputViewNotification.swift in Sources */,
+                               8BA91314914C4486DACA16122819AF1C /* IQTextInputViewNotification-dummy.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6BA8B3ED1069309303992AA48F45596A /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               7D875C37EC81C736C5CCCE65FA1343A6 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               A98E7BF0F63124A6CB7FC2BB19B1DCBE /* IQKeyboardReturnManager.swift in Sources */,
+                               AA3E0F99979D1B54EE9DCD8FE01816CF /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */,
+                               5BB666D0986483D015712429F9FF2674 /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */,
+                               B7D5043A8EC4C7C38F6C1688ACA93185 /* IQKeyboardReturnManager-dummy.m in Sources */,
+                               1B5995FCE11B496E4102AC5AD357249A /* IQTextInputViewInfoModel.swift in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               85B610DD95380C789F1D31249548827B /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               7FCA9A032C39444BD74F08A5F3927839 /* Pods-Example-dummy.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               8BEB91B4B898532A40DB8A8E4B9A7792 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               93B28B68B9253146A5A3760F7F07BAB5 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               C945CB4EC42271D435BF23E7749BE6BF /* IQKeyboardConstants.swift in Sources */,
-                               01216C042B056FFF0FC7EE32A002C38A /* IQKeyboardCore-dummy.m in Sources */,
-                               378BD5280F6C07B11CF30B253D824972 /* IQKeyboardExtended.swift in Sources */,
-                               A39FE5F72261B202CC63722A7B357206 /* IQTextInputView.swift in Sources */,
-                               E1734E56DB48E6F238408C9A232C7051 /* UIView+Hierarchy.swift in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               C03DAC5FE223C40E754D025088A86583 /* Sources */ = {
+               AD7CA0B1355EA84E4891403413E3DFF0 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               CB6B20426E6FD0E9970A1514451DE634 /* IQKeyboardReturnManager.swift in Sources */,
-                               CD5C1FEDB9C4C34CB6E33A8A29D6ADA3 /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */,
-                               6B95FAC4BA6CBF1B1A33BFA00B521A1B /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */,
-                               D2AB53462493B2F2B42D070A1D7E54F2 /* IQKeyboardReturnManager-dummy.m in Sources */,
-                               AEAE611FB5BD66AD2DBE734140C75C12 /* IQTextInputViewInfoModel.swift in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               C68CA3D6E979C9C4060A446F5259ED37 /* Sources */ = {
+               B4A020AF82EF829322C86201C5C31A20 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               172B6B4E5550420B8131FBD62C975821 /* Toast.swift in Sources */,
+                               A9B5C45C3C4D517B581E536DE846A078 /* Toast-Swift-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               D5F29D43747DC4C2D50FCDFC84D74555 /* Sources */ = {
+               B559610B7522BD1394961D290D7F9F24 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               636E78B80031F9F7AB749AA161B6E2E2 /* Array+Sort.swift in Sources */,
-                               C2A846F101C12CC0E946ED40A0C2C33B /* IQDeepResponderContainerView.swift in Sources */,
-                               52B0DA7ED06413C2CC26D5CBF31F8352 /* IQKeyboardToolbarConfiguration.swift in Sources */,
-                               07F73EA22A5F4AA24C081D7739D6652C /* IQKeyboardToolbarConstants.swift in Sources */,
-                               0185547536624B4BC74DA12FF9D14085 /* IQKeyboardToolbarManager.swift in Sources */,
-                               DF23DA299917B90E658EC4A4844A6464 /* IQKeyboardToolbarManager+Action.swift in Sources */,
-                               431168277840D15391CA0C4A59E81418 /* IQKeyboardToolbarManager+Debug.swift in Sources */,
-                               A6C834360B4DDD0238C232ED530E46F9 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */,
-                               F4B6A7F0EDE77E5C46C63C4C2125D1D9 /* IQKeyboardToolbarManager+Internal.swift in Sources */,
-                               181E35D74C67FFDE9F8A5A870F5F60B1 /* IQKeyboardToolbarManager+Toolbar.swift in Sources */,
-                               C00D516DBF4BD4AD8DC4CEF51C5DD8D0 /* IQKeyboardToolbarManager-dummy.m in Sources */,
-                               700B342543C8220BF44DC2F2448F70C6 /* UIView+Responders.swift in Sources */,
-                               98403A634D6A5D0ED83E9F41A1A84AB2 /* UIView+RespondersObjc.swift in Sources */,
+                               F3D41915714BC875B1DC32F49293A8B6 /* Pods-DeepChordsSdk-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               DCEE5F908D05D08CB49810DF257309EB /* Sources */ = {
+               BF6F1816B0325207E7310ABC9FD05174 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               A1C2AAD2AF8E9E50DA1A078AC74400A9 /* IQKeyboardInfo.swift in Sources */,
-                               527FF29C02A555B242FEACAB7AE97287 /* IQKeyboardNotification.swift in Sources */,
-                               46ECF78EB1506D9CB79AA7D6D2383800 /* IQKeyboardNotification-dummy.m in Sources */,
+                               C945CB4EC42271D435BF23E7749BE6BF /* IQKeyboardConstants.swift in Sources */,
+                               01216C042B056FFF0FC7EE32A002C38A /* IQKeyboardCore-dummy.m in Sources */,
+                               378BD5280F6C07B11CF30B253D824972 /* IQKeyboardExtended.swift in Sources */,
+                               A39FE5F72261B202CC63722A7B357206 /* IQTextInputView.swift in Sources */,
+                               E1734E56DB48E6F238408C9A232C7051 /* UIView+Hierarchy.swift in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               E876810B24A176F2DA92BB88194B940A /* Sources */ = {
+               EDF3D1BC9513EF41FD61EEC958BC7E9C /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               C749F0EFAF3D6CAE7C3C0B198665DFA5 /* IQTextView.swift in Sources */,
+                               737CE5F34A1D2B09DEF3038425A40877 /* IQTextView+Placeholderable.swift in Sources */,
+                               870DC4F98094456228D282F5F6200609 /* IQTextView-dummy.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
-               02947DA73292D990EFA756FB0A80C749 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       name = IQKeyboardToolbarManager;
-                       target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */;
-                       targetProxy = 45341E287C20B448A537FD1F897A05AE /* PBXContainerItemProxy */;
-               };
-               09F40E0499F54B795248F87197AB6C87 /* PBXTargetDependency */ = {
+               032EC8AE715F3D13AD519BE9CA03294E /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardCore;
-                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
-                       targetProxy = 1708F2EF228CBF9B2A6AB17CAF389904 /* PBXContainerItemProxy */;
+                       name = "SnapKit-SnapKit_Privacy";
+                       target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */;
+                       targetProxy = 4294839685D9EA7EF6090113DB9528A3 /* PBXContainerItemProxy */;
                };
-               15B6A297ECD7769C6179318011DA90D6 /* PBXTargetDependency */ = {
+               0A6F859D7948477715DBD4333CD962F5 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "IQKeyboardNotification-IQKeyboardNotification";
-                       target = 2B8FF445A5162845FAB9EC00FC92B694 /* IQKeyboardNotification-IQKeyboardNotification */;
-                       targetProxy = 82B27615B5CA1FD97F7A8DBCAF5AA360 /* PBXContainerItemProxy */;
+                       name = IQKeyboardNotification;
+                       target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */;
+                       targetProxy = A24EA8C0FD67224523A2A8049A529730 /* PBXContainerItemProxy */;
                };
-               200D486E5AFC167189F7B905CE3DF002 /* PBXTargetDependency */ = {
+               0BA497932D68F052CFDA60CB4325E823 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQTextView;
-                       target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */;
-                       targetProxy = 639BD9FF9BA7192485B4F917947EB7B7 /* PBXContainerItemProxy */;
+                       name = IQKeyboardCore;
+                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
+                       targetProxy = C96EFF1386F982C542C2B03977A6FFD6 /* PBXContainerItemProxy */;
                };
-               2BEC92FE1E84E8E714624E30C39B0881 /* PBXTargetDependency */ = {
+               0ED2A9B38A71F6850A959089852BDB0A /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift";
                        target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */;
-                       targetProxy = 6887DA1C8583123202CFE8CCD0114D70 /* PBXContainerItemProxy */;
+                       targetProxy = 9A200DA2E207287B114783961A389F97 /* PBXContainerItemProxy */;
                };
-               2EF44922A154A83DC77DEF27F8A592CA /* PBXTargetDependency */ = {
+               1EE6EF0BEC589B1038459A693177F2FE /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQTextInputViewNotification;
-                       target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */;
-                       targetProxy = D0E1C04F54B8D007689B29ABE9DD60E6 /* PBXContainerItemProxy */;
+                       name = IQKeyboardReturnManager;
+                       target = 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */;
+                       targetProxy = 8031384E87ED727FE68F4242803FF742 /* PBXContainerItemProxy */;
                };
-               33022728CDB7938CE554AB26CE94CDF6 /* PBXTargetDependency */ = {
+               1F9AF4725D5847BEA5D8B724D1A3B414 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardToolbar;
-                       target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */;
-                       targetProxy = D72F2F53A0379A93208CF4F91FD0C100 /* PBXContainerItemProxy */;
+                       name = IQKeyboardCore;
+                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
+                       targetProxy = 94872272C37CF76A4C27D08B5EC60D6D /* PBXContainerItemProxy */;
                };
-               338A7F4AE97BA376056068B3DEF9B9C5 /* PBXTargetDependency */ = {
+               24C84A614B93271254E3B59008326861 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardNotification;
-                       target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */;
-                       targetProxy = CA95E7DE958C9E11A32E3AD3AB58DFCD /* PBXContainerItemProxy */;
+                       name = "Toast-Swift-Toast-Swift";
+                       target = C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */;
+                       targetProxy = 57A1C5DB51B6CD350C79C7B055A7F66B /* PBXContainerItemProxy */;
                };
-               373E4E2DF66A8F819F9594800BA0395D /* PBXTargetDependency */ = {
+               36DB0F3DA574BD5B7448F2F28DFAA125 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "SnapKit-SnapKit_Privacy";
-                       target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */;
-                       targetProxy = 800F28AAF8E18E00B53F6C32799DAF22 /* PBXContainerItemProxy */;
+                       name = "IQKeyboardToolbar-IQKeyboardToolbar";
+                       target = B247F77A0CD5E19C8187A9BA1EB58C09 /* IQKeyboardToolbar-IQKeyboardToolbar */;
+                       targetProxy = 8581EB306F93FE5BF5504824295F3722 /* PBXContainerItemProxy */;
                };
-               3814D6DB9239F6304E655EB4172BC721 /* PBXTargetDependency */ = {
+               3920F2A30AF54503207FB9C2E5ECC456 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = SnapKit;
-                       target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */;
-                       targetProxy = 92B42FC203D9B7A77B162665E26974A4 /* PBXContainerItemProxy */;
+                       name = IQTextInputViewNotification;
+                       target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */;
+                       targetProxy = 4BEE988A3465649375AC57D797ABF617 /* PBXContainerItemProxy */;
                };
-               4DA2D12F5FFEF9889288A454BDD7962A /* PBXTargetDependency */ = {
+               3BDAAC90F533878935276DA626D3CE8F /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardCore;
-                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
-                       targetProxy = C1038B841E8ED4F36EFA5B37AB9B3CC7 /* PBXContainerItemProxy */;
+                       name = IQTextView;
+                       target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */;
+                       targetProxy = 43A509886BF66DE03AA2357743AC5769 /* PBXContainerItemProxy */;
                };
-               53142CF590266299583D7560D02A52BC /* PBXTargetDependency */ = {
+               3E3639BC049B1894293B33F5B52D836A /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = "Toast-Swift";
                        target = B990BD87169C76A3ED3FE8A9258D91A3 /* Toast-Swift */;
-                       targetProxy = 18898E41CB6825094A12ED9DADD5CF80 /* PBXContainerItemProxy */;
+                       targetProxy = 548AF3FE70CC81B2ABBAEF65818BA3A6 /* PBXContainerItemProxy */;
                };
-               5332DA368A2DC53BDEAD617F548A4218 /* PBXTargetDependency */ = {
+               443ECCCC8495E109D669FC24E39EE5E7 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardCore;
-                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
-                       targetProxy = 68FACE05FDF37AD58CB1E8DBD213317C /* PBXContainerItemProxy */;
+                       name = IQKeyboardToolbarManager;
+                       target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */;
+                       targetProxy = 186EFCD32F2BEEE1514385E97F48B014 /* PBXContainerItemProxy */;
                };
-               54C243D325925763DDE70362FEF9AB35 /* PBXTargetDependency */ = {
+               486058C9A622B4968F720109A1CB425D /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       name = "IQTextView-IQTextView";
+                       target = A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */;
+                       targetProxy = F68560EF2AF1432CDC4EDEE224F0B10F /* PBXContainerItemProxy */;
+               };
+               54C3CEF0CE5F2ADC19CF09FA97EA2FCD /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = IQKeyboardToolbarManager;
                        target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */;
-                       targetProxy = 0C35F82AFEAA8CEBC12C81F2D5248473 /* PBXContainerItemProxy */;
+                       targetProxy = D3993F1F1D303ACFD97829D6D9115BA0 /* PBXContainerItemProxy */;
                };
-               5BC6280A3651E7CA1B1B64F1EACC399A /* PBXTargetDependency */ = {
+               5A538984C0CD4E2FF0B2AAA2EF368D0F /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "IQKeyboardToolbarManager-IQKeyboardToolbarManager";
-                       target = 7C5613175BBC4BF67E36DB4FBEBC01D0 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */;
-                       targetProxy = 588F3D8DD7248AC48468DA05E1605928 /* PBXContainerItemProxy */;
+                       name = IQKeyboardCore;
+                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
+                       targetProxy = 925132ADAAA2012B51EAE2C13D1BD31F /* PBXContainerItemProxy */;
                };
-               5FBD91502BE2FA8A62798C4838D849FC /* PBXTargetDependency */ = {
+               6A012670364ED3DE97C5B8D570417F17 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = IQKeyboardToolbar;
                        target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */;
-                       targetProxy = C3F103E89D84D1B12D2D9F7EEACD1156 /* PBXContainerItemProxy */;
+                       targetProxy = 6130D9140D152F57AA543D42CA625298 /* PBXContainerItemProxy */;
                };
-               7018FAC1C4C71DA57E769F3F34B0CB30 /* PBXTargetDependency */ = {
+               77F02D151BFA0BF2A8184E8F7040E02E /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = IQTextInputViewNotification;
                        target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */;
-                       targetProxy = 702967F91B360154587EAF7A3E6E5FE0 /* PBXContainerItemProxy */;
+                       targetProxy = D7076AE16282F5B2F87DAD903E05C6C4 /* PBXContainerItemProxy */;
                };
-               72F6A0C66EDDCB6E6AE5234030A2C917 /* PBXTargetDependency */ = {
+               7C197C0E14E357C0482C5CECC1F7DAE7 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardCore;
-                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
-                       targetProxy = 00F0DC7B61401655CA2B4F07931B44B9 /* PBXContainerItemProxy */;
+                       name = IQTextView;
+                       target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */;
+                       targetProxy = 1E3FD4E83C3BACBC0EE2DD7F457AA6E9 /* PBXContainerItemProxy */;
                };
-               73C88ECD747110C67B6A0CC0052D1B9F /* PBXTargetDependency */ = {
+               806811E474B5E127D48FE9CA32DCFB26 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQTextInputViewNotification;
-                       target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */;
-                       targetProxy = EE7C8A2F9421920413779D8E1F207DF7 /* PBXContainerItemProxy */;
+                       name = IQKeyboardToolbar;
+                       target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */;
+                       targetProxy = 9D53E47458385470A91D7295E48E0FD6 /* PBXContainerItemProxy */;
                };
-               7E1FE66F1BED650B6A5DE3DF65EDC42E /* PBXTargetDependency */ = {
+               9143EFF5B329D660A0398F7391E5D055 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardReturnManager;
-                       target = 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */;
-                       targetProxy = A69D14A28BD4F695373B894B83DC79B0 /* PBXContainerItemProxy */;
+                       name = SocketRocket;
+                       target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;
+                       targetProxy = BACED4BB4D08C0B382C214709ABE6A91 /* PBXContainerItemProxy */;
                };
-               81530010EBBCEC9F063C726BEE96FA2E /* PBXTargetDependency */ = {
+               9AB32C8C254D84A755461731E5E31837 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "Toast-Swift-Toast-Swift";
-                       target = C344E85893FCDEE5B70436E0A4A3472B /* Toast-Swift-Toast-Swift */;
-                       targetProxy = E59379C6B9F90539CF5EDC2160A4A44E /* PBXContainerItemProxy */;
+                       name = IQKeyboardToolbar;
+                       target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */;
+                       targetProxy = 7D69ABF84486EAFB55FB87BC9B44D3F6 /* PBXContainerItemProxy */;
                };
-               8B0E935F1FCD5AC1ECE059D205656EFA /* PBXTargetDependency */ = {
+               9BE1A2A7D5E6D44833CB0C78085D940D /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = "IQKeyboardReturnManager-IQKeyboardReturnManager";
                        target = 88810798DA63A2F6611B0970EA276DEC /* IQKeyboardReturnManager-IQKeyboardReturnManager */;
-                       targetProxy = 32D05F1AB78AE48011D6E9E0203F4737 /* PBXContainerItemProxy */;
+                       targetProxy = C7AFFBB48EEA1AF602657886DA4FE905 /* PBXContainerItemProxy */;
                };
-               8DFAED47E5AE24BD1D2815781962AC04 /* PBXTargetDependency */ = {
+               9CF7EA505D7A9CAA62AFDC4457D80AEF /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardNotification;
-                       target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */;
-                       targetProxy = 706CD7E6D12A879E778A910FA680C4E3 /* PBXContainerItemProxy */;
+                       name = "IQKeyboardCore-IQKeyboardCore";
+                       target = EEE261386011CDF271BE289F73FF5959 /* IQKeyboardCore-IQKeyboardCore */;
+                       targetProxy = 1CC338AE066CE11E9D4C832A727D9C61 /* PBXContainerItemProxy */;
                };
-               9200AD276048BFDABA6E145FE1119A6B /* PBXTargetDependency */ = {
+               AEFFF3B21972CDA23989650CB0D06DC1 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQTextView;
-                       target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */;
-                       targetProxy = 372862B6668E1DB2CCD2D7423C0B38B8 /* PBXContainerItemProxy */;
+                       name = IQKeyboardCore;
+                       target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */;
+                       targetProxy = D3C8D19228BDBCB03280ABF945D775BA /* PBXContainerItemProxy */;
                };
-               AD528895684234E9D494E1C650E3E98D /* PBXTargetDependency */ = {
+               BAE9291352BA3C02DCD824BD9455EEFB /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardManagerSwift;
-                       target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */;
-                       targetProxy = 48FBB4A28EC9FA70CCC88ED390275D62 /* PBXContainerItemProxy */;
+                       name = "IQKeyboardNotification-IQKeyboardNotification";
+                       target = 2B8FF445A5162845FAB9EC00FC92B694 /* IQKeyboardNotification-IQKeyboardNotification */;
+                       targetProxy = 64F6091A60F53F5A90BEE2C59126E133 /* PBXContainerItemProxy */;
                };
-               B209B2433F1107B4974A261EEA588622 /* PBXTargetDependency */ = {
+               C2F5904EDA280BF704E19BEC7E450D7C /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = "IQTextInputViewNotification-IQTextInputViewNotification";
                        target = 4502C7427440BEB17A50C0BF6E638A85 /* IQTextInputViewNotification-IQTextInputViewNotification */;
-                       targetProxy = 38C3E138887D23F98FA6B811D30BFFD6 /* PBXContainerItemProxy */;
+                       targetProxy = D0E89F4255608F3B229AA3E8DFD93CF9 /* PBXContainerItemProxy */;
                };
-               CE9A17D3B75B6414A3AB270568EB58C1 /* PBXTargetDependency */ = {
+               CACDD982D78D0FBB2772B70DB888F8B4 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       name = IQKeyboardNotification;
+                       target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */;
+                       targetProxy = 6795B29B74A0DFB983C8C121DAC73B8F /* PBXContainerItemProxy */;
+               };
+               DDA643E4BF2CFF13D6B0D25A5C59AB5F /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       name = SocketRocket;
+                       target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;
+                       targetProxy = 7C1DC3C44CB9ED8404023CBE11C3A841 /* PBXContainerItemProxy */;
+               };
+               E4562E3C97AF6073F7BD53F0DA943866 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        name = IQKeyboardReturnManager;
                        target = 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */;
-                       targetProxy = FE3107107D5B289341BD608148335E3B /* PBXContainerItemProxy */;
+                       targetProxy = 32B49C1963D38D5E1E60E037311DCDEF /* PBXContainerItemProxy */;
                };
-               DE1669B73B7601256AAF289C2AD11837 /* PBXTargetDependency */ = {
+               F2792ADD73FF2795D46955194D6DB5FA /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "IQKeyboardToolbar-IQKeyboardToolbar";
-                       target = B247F77A0CD5E19C8187A9BA1EB58C09 /* IQKeyboardToolbar-IQKeyboardToolbar */;
-                       targetProxy = 7A006DA632FA3C0EBCCE76968F857A1A /* PBXContainerItemProxy */;
+                       name = IQKeyboardManagerSwift;
+                       target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */;
+                       targetProxy = 2DE1780C07830F70EB974DDA0E002280 /* PBXContainerItemProxy */;
                };
-               E14B48494A76DA8D39B61F7DCFF351AE /* PBXTargetDependency */ = {
+               F7852222FD7DD0B21BC78B245F2045A0 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = IQKeyboardToolbar;
-                       target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */;
-                       targetProxy = 89E300EC786E5D7673A67AC97D2EE1EE /* PBXContainerItemProxy */;
+                       name = IQTextInputViewNotification;
+                       target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */;
+                       targetProxy = 6C9C732B28DF0513A21CE6E248F89072 /* PBXContainerItemProxy */;
                };
-               F803C1642D0E7F6A76B1CE2EAA8F61F5 /* PBXTargetDependency */ = {
+               FC49926069485756B05C5F53750496AD /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "IQTextView-IQTextView";
-                       target = A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */;
-                       targetProxy = E7856FD48E3CAE02F84A77F821511AAB /* PBXContainerItemProxy */;
+                       name = SnapKit;
+                       target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */;
+                       targetProxy = 92C92FF2930D007DABF544DC7AC08060 /* PBXContainerItemProxy */;
                };
-               F98C8014CD89FC2B8D539B51D3905AA2 /* PBXTargetDependency */ = {
+               FDF0C9122AFE5F4537D84EB5B5EA2535 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       name = "IQKeyboardCore-IQKeyboardCore";
-                       target = EEE261386011CDF271BE289F73FF5959 /* IQKeyboardCore-IQKeyboardCore */;
-                       targetProxy = 1BBEB339A4BA742D13B5D2CCEEB77C70 /* PBXContainerItemProxy */;
+                       name = "IQKeyboardToolbarManager-IQKeyboardToolbarManager";
+                       target = 7C5613175BBC4BF67E36DB4FBEBC01D0 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */;
+                       targetProxy = D72B40330912494BEDC722CCB167FF77 /* PBXContainerItemProxy */;
                };
 /* End PBXTargetDependency section */
 
 /* Begin XCBuildConfiguration section */
-               0436E45C9EB8DF6391E9F25BAF1F9CD6 /* Debug */ = {
+               1B2F38B82BEBA44EF2EE45BF7A44037A /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = F9E2D89710990C7046505C7864F45ED7 /* IQTextInputViewNotification.debug.xcconfig */;
+                       baseConfigurationReference = 5AF0EBE9A79115D36EF40E456919D63B /* IQKeyboardManagerSwift.release.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift";
+                               IBSC_MODULE = IQKeyboardManagerSwift;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardManagerSwift;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Release;
+               };
+               1D0FBA28D44BDD4502A8E31DAEABF97D /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 78882EBBF9DB9EAA48F3FFBF14D1E0B5 /* IQKeyboardToolbar.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch";
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap";
-                               PRODUCT_MODULE_NAME = IQTextInputViewNotification;
-                               PRODUCT_NAME = IQTextInputViewNotification;
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardToolbar;
+                               PRODUCT_NAME = IQKeyboardToolbar;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
                                SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Debug;
+                       name = Release;
                };
-               09CE94D09C78B819D706D0A31E0FDEBF /* Release */ = {
+               1F029A7E58A02CC7BF83B726ECB24B27 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */;
+                       baseConfigurationReference = 455A2446E1A8F92123FBE90A1D4B8D0B /* Pods-Example.debug.xcconfig */;
                        buildSettings = {
                                ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Release;
+                       name = Debug;
                };
-               1758ED8F6B52B20715F3E56C0D65C039 /* Debug */ = {
+               298BF47A1ADB1CEC5A9281F125EF0788 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 5AD8C08E06D5E01990AA80544C0901BA /* IQKeyboardToolbarManager.debug.xcconfig */;
+                       baseConfigurationReference = 1515EB933E55F8DF1275984150311F6F /* IQTextInputViewNotification.release.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager";
-                               IBSC_MODULE = IQKeyboardToolbarManager;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification";
+                               IBSC_MODULE = IQTextInputViewNotification;
+                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardToolbarManager;
+                               PRODUCT_NAME = IQTextInputViewNotification;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                WRAPPER_EXTENSION = bundle;
                        };
-                       name = Debug;
+                       name = Release;
                };
                2C4EBC8097D4D07427A18EC0F79738BE /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = EA1EDABA1BE078F9646EF88F4C71CBFA /* IQKeyboardManagerSwift.release.xcconfig */;
+                       baseConfigurationReference = 5AF0EBE9A79115D36EF40E456919D63B /* IQKeyboardManagerSwift.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                        };
                        name = Release;
                };
-               2CB0B04E637225A7D7C266292DDC0AFC /* Release */ = {
+               3016B50127E54871902147B82FABA968 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = B057F1FE2FF50734827A356AFE1C3763 /* IQTextView.release.xcconfig */;
+                       baseConfigurationReference = 8981CA762CD2FDB68D15FEEA091439B5 /* IQKeyboardToolbarManager.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap";
-                               PRODUCT_MODULE_NAME = IQTextView;
-                               PRODUCT_NAME = IQTextView;
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardToolbarManager;
+                               PRODUCT_NAME = IQKeyboardToolbarManager;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                        };
                        name = Release;
                };
-               2EEB6B3864995CE01531195A8FEFFA95 /* Release */ = {
+               34DA1E3BEA25E012EF708AE69C0C9193 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = EA1EDABA1BE078F9646EF88F4C71CBFA /* IQKeyboardManagerSwift.release.xcconfig */;
+                       baseConfigurationReference = 02E139B151EDFA1F4F63EA119D2269C7 /* Toast-Swift.debug.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift";
-                               IBSC_MODULE = IQKeyboardManagerSwift;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Toast-Swift";
+                               IBSC_MODULE = Toast_Swift;
+                               INFOPLIST_FILE = "Target Support Files/Toast-Swift/ResourceBundle-Toast-Swift-Toast-Swift-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+                               PRODUCT_NAME = "Toast-Swift";
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Debug;
+               };
+               37AF8DF61716FB1975DE10B4998E2A87 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 79E6154EEE25D08664ACFE66C69DDFA0 /* Toast-Swift.release.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Toast-Swift";
+                               IBSC_MODULE = Toast_Swift;
+                               INFOPLIST_FILE = "Target Support Files/Toast-Swift/ResourceBundle-Toast-Swift-Toast-Swift-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+                               PRODUCT_NAME = "Toast-Swift";
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Release;
+               };
+               397EF464FF32EAD44C05D7CE58A2C382 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = D5434748DD18D8B60013ABF3FFC5B95F /* IQTextView.release.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView";
+                               IBSC_MODULE = IQTextView;
+                               INFOPLIST_FILE = "Target Support Files/IQTextView/ResourceBundle-IQTextView-IQTextView-Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardManagerSwift;
+                               PRODUCT_NAME = IQTextView;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Release;
                };
-               303BB1842F2941ED3B727E7A2F3A81AE /* Debug */ = {
+               47C2D0929EA82A67E33FEB42776A6CAC /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 99A357D21311D4CAEF91E8D645B9EF1B /* IQKeyboardNotification.debug.xcconfig */;
+                       baseConfigurationReference = 99B82533878EEF9F0E2FB3560695FF8A /* IQTextView.debug.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView";
+                               IBSC_MODULE = IQTextView;
+                               INFOPLIST_FILE = "Target Support Files/IQTextView/ResourceBundle-IQTextView-IQTextView-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQTextView;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Debug;
+               };
+               4E28A2258944850B8D0D598586B5E92B /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 1AB8D5FD6175CD8FCC7153B71E6DD77A /* IQKeyboardNotification.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
                                SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Debug;
+                       name = Release;
                };
-               33F9EB014D388A982E18E89A18728E6E /* Debug */ = {
+               5392BBBB9A595846BCE334B1D7D1D3B7 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = C8482B39147BBBDB16D770864BDE1CD5 /* IQTextView.debug.xcconfig */;
+                       baseConfigurationReference = F528CE7CB37911E316CD1F5622E5B931 /* IQKeyboardReturnManager.debug.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView";
-                               IBSC_MODULE = IQTextView;
-                               INFOPLIST_FILE = "Target Support Files/IQTextView/ResourceBundle-IQTextView-IQTextView-Info.plist";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager";
+                               IBSC_MODULE = IQKeyboardReturnManager;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQTextView;
+                               PRODUCT_NAME = IQKeyboardReturnManager;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Debug;
                };
-               439F5FEBC31ACC3A2D307865C8FEA945 /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = 0BBF04F3ACCC6329B881C1679E0733BB /* IQKeyboardToolbar.release.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar";
-                               IBSC_MODULE = IQKeyboardToolbar;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardToolbar;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Release;
-               };
-               45EE463F8D495300A81BC1D7C7029EF8 /* Release */ = {
+               544532B6E87F836C1A3288A60D36F726 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = DFCB9340841640E5C5B330DA1777A78E /* IQKeyboardNotification.release.xcconfig */;
+                       baseConfigurationReference = D5434748DD18D8B60013ABF3FFC5B95F /* IQTextView.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardNotification;
-                               PRODUCT_NAME = IQKeyboardNotification;
+                               MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap";
+                               PRODUCT_MODULE_NAME = IQTextView;
+                               PRODUCT_NAME = IQTextView;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                        };
                        name = Release;
                };
-               4878B258B51AEB40FC40CDEA8B2FB579 /* Debug */ = {
+               5F0B975EFB983C4E1131BDA3D8ED0683 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = F9E2D89710990C7046505C7864F45ED7 /* IQTextInputViewNotification.debug.xcconfig */;
+                       baseConfigurationReference = 78F95F4E86380B049117A093BFC1CD7B /* IQTextInputViewNotification.debug.xcconfig */;
                        buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification";
-                               IBSC_MODULE = IQTextInputViewNotification;
-                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist";
+                               CLANG_ENABLE_OBJC_WEAK = NO;
+                               "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEFINES_MODULE = YES;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch";
+                               GENERATE_INFOPLIST_FILE = NO;
+                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap";
+                               PRODUCT_MODULE_NAME = IQTextInputViewNotification;
                                PRODUCT_NAME = IQTextInputViewNotification;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
+                               SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+                               SWIFT_INSTALL_OBJC_HEADER = YES;
+                               SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
                        };
                        name = Debug;
                };
-               4EA7C9F9C6A6C1BC846F6B88E1D270E7 /* Debug */ = {
+               60B198379BE0F80DDD5483A405A8AC5F /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 8E4ED9BFDF71764CBE3D2C853E329AC8 /* IQKeyboardCore.debug.xcconfig */;
+                       baseConfigurationReference = 159C74980AC55D136945F073F6CEDC14 /* IQKeyboardToolbar.debug.xcconfig */;
                        buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore";
-                               IBSC_MODULE = IQKeyboardCore;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist";
+                               CLANG_ENABLE_OBJC_WEAK = NO;
+                               "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEFINES_MODULE = YES;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = NO;
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch";
+                               GENERATE_INFOPLIST_FILE = NO;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardCore;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardToolbar;
+                               PRODUCT_NAME = IQKeyboardToolbar;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
+                               SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+                               SWIFT_INSTALL_OBJC_HEADER = YES;
+                               SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
                        };
                        name = Debug;
                };
-               5BF8D5770321101E8BCE20E68D48D452 /* Release */ = {
+               60BF7D5EEEA720FA876075D448A3EEFF /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = B057F1FE2FF50734827A356AFE1C3763 /* IQTextView.release.xcconfig */;
+                       baseConfigurationReference = 9F272A689E05B2AA0C0ED18AD4383DDE /* SocketRocket.debug.xcconfig */;
                        buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView";
-                               IBSC_MODULE = IQTextView;
-                               INFOPLIST_FILE = "Target Support Files/IQTextView/ResourceBundle-IQTextView-IQTextView-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQTextView;
+                               CLANG_ENABLE_OBJC_WEAK = NO;
+                               "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEFINES_MODULE = YES;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = NO;
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch";
+                               GENERATE_INFOPLIST_FILE = NO;
+                               INFOPLIST_FILE = "Target Support Files/SocketRocket/SocketRocket-Info.plist";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap";
+                               PRODUCT_MODULE_NAME = SocketRocket;
+                               PRODUCT_NAME = SocketRocket;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
+                               SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+                               SWIFT_INSTALL_OBJC_HEADER = YES;
+                               SWIFT_VERSION = 5.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
                        };
-                       name = Release;
+                       name = Debug;
                };
-               6223877B37A9B25479A11E9E87353487 /* Release */ = {
+               63E9BC6B186B49FDCAB4170225DF66FE /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = DFCB9340841640E5C5B330DA1777A78E /* IQKeyboardNotification.release.xcconfig */;
+                       baseConfigurationReference = 914B3416C83998074DDAB130CB468706 /* IQKeyboardReturnManager.release.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification";
-                               IBSC_MODULE = IQKeyboardNotification;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager";
+                               IBSC_MODULE = IQKeyboardReturnManager;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardNotification;
+                               PRODUCT_NAME = IQKeyboardReturnManager;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Release;
                };
-               657C7A7169C5A2EF0F21623CA69BD274 /* Release */ = {
+               6458EACFEBDCB49A35654564C62A5CDB /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 7181351BD01340D69B83002F942C6238 /* Toast-Swift.release.xcconfig */;
+                       baseConfigurationReference = 87F05B4E0307C30EB4FC212724C8F157 /* IQKeyboardNotification.debug.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Toast-Swift";
-                               IBSC_MODULE = Toast_Swift;
-                               INFOPLIST_FILE = "Target Support Files/Toast-Swift/ResourceBundle-Toast-Swift-Toast-Swift-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
-                               PRODUCT_NAME = "Toast-Swift";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification";
+                               IBSC_MODULE = IQKeyboardNotification;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardNotification;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                WRAPPER_EXTENSION = bundle;
                        };
-                       name = Release;
+                       name = Debug;
                };
-               67A316390B0B6C034F9941202A414C7F /* Release */ = {
+               64801BD417925AB9BA656A8FA9DC5CB6 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 81A4530B3DFED1CF5D377C4320215A4A /* IQKeyboardReturnManager.release.xcconfig */;
+                       baseConfigurationReference = DCDF74B5DEAC5E25CFC4D9F9B16EFBEB /* IQKeyboardToolbarManager.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardReturnManager;
-                               PRODUCT_NAME = IQKeyboardReturnManager;
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardToolbarManager;
+                               PRODUCT_NAME = IQKeyboardToolbarManager;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
                                SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Release;
+                       name = Debug;
                };
-               718BA108A72B1FB5B7A74346285E653B /* Debug */ = {
+               74ED47C1AB733A447D6619EAD98BAD82 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 99A357D21311D4CAEF91E8D645B9EF1B /* IQKeyboardNotification.debug.xcconfig */;
+                       baseConfigurationReference = AA485EB92636FB68E91AF3FCC1CE9C5E /* IQKeyboardCore.release.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification";
-                               IBSC_MODULE = IQKeyboardNotification;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore";
+                               IBSC_MODULE = IQKeyboardCore;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardNotification;
+                               PRODUCT_NAME = IQKeyboardCore;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                WRAPPER_EXTENSION = bundle;
                        };
-                       name = Debug;
+                       name = Release;
                };
-               75A58E29852A96ED7B9ABD0D60180272 /* Release */ = {
+               7AA36B6CE3B0C3B48B651A2702CCFC98 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 3579ECE9098CFE0A18918D8F0F6BBC16 /* IQKeyboardCore.release.xcconfig */;
+                       baseConfigurationReference = 4B6ABE8E0C199299C26E4B5977886B71 /* SnapKit.release.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore";
-                               IBSC_MODULE = IQKeyboardCore;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardCore;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit";
+                               IBSC_MODULE = SnapKit;
+                               INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+                               PRODUCT_NAME = SnapKit_Privacy;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Release;
                };
+               7D3C700E017BEA5E61F542AD4EBE06C7 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = B3AA4CA7BB409A5191DBD08356FE703A /* Pods-Example.release.xcconfig */;
+                       buildSettings = {
+                               ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+                               CLANG_ENABLE_OBJC_WEAK = NO;
+                               "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEFINES_MODULE = YES;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = NO;
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MACH_O_TYPE = staticlib;
+                               MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap";
+                               OTHER_LDFLAGS = "";
+                               OTHER_LIBTOOLFLAGS = "";
+                               PODS_ROOT = "$(SRCROOT)";
+                               PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+                               PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
+                       };
+                       name = Release;
+               };
                7E48D17D0469F73801BBDAF1F20755F2 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 7181351BD01340D69B83002F942C6238 /* Toast-Swift.release.xcconfig */;
+                       baseConfigurationReference = 79E6154EEE25D08664ACFE66C69DDFA0 /* Toast-Swift.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                        };
                        name = Release;
                };
-               832343784050169DE494CBA51327CBFC /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = 81C8D08EE2B731D17BFDF51DB75C7FD4 /* IQTextInputViewNotification.release.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification";
-                               IBSC_MODULE = IQTextInputViewNotification;
-                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQTextInputViewNotification;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Release;
-               };
                8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
-               8F70FC038D658E7A6D2BAEADCC022929 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = C8C1B3AFD0A52650DF90D553FC72040D /* IQKeyboardReturnManager.debug.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager";
-                               IBSC_MODULE = IQKeyboardReturnManager;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardReturnManager;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Debug;
-               };
-               961ED2BDA5D875288E2797D7EE1B40B5 /* Debug */ = {
+               8E2D63C2146204D6E9066CFE984F976A /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = EF780280B45D05B3F28826EF5C144118 /* IQKeyboardToolbar.debug.xcconfig */;
+                       baseConfigurationReference = 91511868D1335C41FD84563EF906555C /* Pods-DeepChordsSdk.release.xcconfig */;
                        buildSettings = {
+                               ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
                                ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch";
-                               GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardToolbar;
-                               PRODUCT_NAME = IQKeyboardToolbar;
+                               MACH_O_TYPE = staticlib;
+                               MODULEMAP_FILE = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.modulemap";
+                               OTHER_LDFLAGS = "";
+                               OTHER_LIBTOOLFLAGS = "";
+                               PODS_ROOT = "$(SRCROOT)";
+                               PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+                               PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
-                               SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-                               SWIFT_INSTALL_OBJC_HEADER = YES;
-                               SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Debug;
+                       name = Release;
                };
-               99E8CDE0070568463EEBA85DF258F59D /* Debug */ = {
+               8F408C586919D67ACCB4002B798BF1CE /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = C8482B39147BBBDB16D770864BDE1CD5 /* IQTextView.debug.xcconfig */;
+                       baseConfigurationReference = 319AC1D7C71149C2DD5EF02DECE3F511 /* SnapKit.debug.xcconfig */;
                        buildSettings = {
-                               CLANG_ENABLE_OBJC_WEAK = NO;
-                               "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-                               "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-                               CURRENT_PROJECT_VERSION = 1;
-                               DEFINES_MODULE = YES;
-                               DYLIB_COMPATIBILITY_VERSION = 1;
-                               DYLIB_CURRENT_VERSION = 1;
-                               DYLIB_INSTALL_NAME_BASE = "@rpath";
-                               ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch";
-                               GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist";
-                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               LD_RUNPATH_SEARCH_PATHS = (
-                                       "$(inherited)",
-                                       "@executable_path/Frameworks",
-                                       "@loader_path/Frameworks",
-                               );
-                               MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap";
-                               PRODUCT_MODULE_NAME = IQTextView;
-                               PRODUCT_NAME = IQTextView;
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit";
+                               IBSC_MODULE = SnapKit;
+                               INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+                               PRODUCT_NAME = SnapKit_Privacy;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
-                               SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-                               SWIFT_INSTALL_OBJC_HEADER = YES;
-                               SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               VERSIONING_SYSTEM = "apple-generic";
-                               VERSION_INFO_PREFIX = "";
+                               WRAPPER_EXTENSION = bundle;
                        };
                        name = Debug;
                };
                9D0D7572FEDA4CC9E75E7387846AFE57 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 67BCA4DE5DC478383D44A61FADBBB1A1 /* SnapKit.debug.xcconfig */;
+                       baseConfigurationReference = 319AC1D7C71149C2DD5EF02DECE3F511 /* SnapKit.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                        };
                        name = Release;
                };
+               9E6F8A334BBF6110E0F8360AA5245522 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 87F05B4E0307C30EB4FC212724C8F157 /* IQKeyboardNotification.debug.xcconfig */;
+                       buildSettings = {
+                               CLANG_ENABLE_OBJC_WEAK = NO;
+                               "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+                               "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+                               CURRENT_PROJECT_VERSION = 1;
+                               DEFINES_MODULE = YES;
+                               DYLIB_COMPATIBILITY_VERSION = 1;
+                               DYLIB_CURRENT_VERSION = 1;
+                               DYLIB_INSTALL_NAME_BASE = "@rpath";
+                               ENABLE_MODULE_VERIFIER = NO;
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-prefix.pch";
+                               GENERATE_INFOPLIST_FILE = NO;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-Info.plist";
+                               INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                                       "@loader_path/Frameworks",
+                               );
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardNotification;
+                               PRODUCT_NAME = IQKeyboardNotification;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+                               SWIFT_INSTALL_OBJC_HEADER = YES;
+                               SWIFT_VERSION = 5.9;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "";
+                       };
+                       name = Debug;
+               };
                A0F0EEB28C54A3D861769B31AB6A09BC /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 8E4ED9BFDF71764CBE3D2C853E329AC8 /* IQKeyboardCore.debug.xcconfig */;
+                       baseConfigurationReference = 9374F8A0206251FC7979A888F803B656 /* IQKeyboardCore.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                        };
                        name = Debug;
                };
-               A386F313035F8AEDA425825F12F0C578 /* Debug */ = {
+               B5986331465FE771133F16D76C24C707 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 67BCA4DE5DC478383D44A61FADBBB1A1 /* SnapKit.debug.xcconfig */;
+                       baseConfigurationReference = 9374F8A0206251FC7979A888F803B656 /* IQKeyboardCore.debug.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit";
-                               IBSC_MODULE = SnapKit;
-                               INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
-                               PRODUCT_NAME = SnapKit_Privacy;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore";
+                               IBSC_MODULE = IQKeyboardCore;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardCore;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Debug;
+               };
+               BA84D2E7DDC5F76ACF1327798B6F924C /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 78F95F4E86380B049117A093BFC1CD7B /* IQTextInputViewNotification.debug.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification";
+                               IBSC_MODULE = IQTextInputViewNotification;
+                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQTextInputViewNotification;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Debug;
                };
-               A4CA0F05DBCCA70498F8972AE1638AF0 /* Debug */ = {
+               BAD20131EC29650C6737E66854A3A9FD /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 5AD8C08E06D5E01990AA80544C0901BA /* IQKeyboardToolbarManager.debug.xcconfig */;
+                       baseConfigurationReference = 4B6ABE8E0C199299C26E4B5977886B71 /* SnapKit.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch";
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardToolbarManager;
-                               PRODUCT_NAME = IQKeyboardToolbarManager;
+                               MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap";
+                               PRODUCT_MODULE_NAME = SnapKit;
+                               PRODUCT_NAME = SnapKit;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
-                               SWIFT_VERSION = 5.9;
+                               SWIFT_VERSION = 5.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Debug;
+                       name = Release;
                };
-               B7895874B07E7E5BCAEFAA1837F27EF3 /* Debug */ = {
+               BFE9B004B8D63FFCD9138A8CD9D03F13 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = B9E5B7ACA1C4831DB0FC6F6DC415806B /* IQKeyboardManagerSwift.debug.xcconfig */;
+                       baseConfigurationReference = 1AB8D5FD6175CD8FCC7153B71E6DD77A /* IQKeyboardNotification.release.xcconfig */;
                        buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift";
-                               IBSC_MODULE = IQKeyboardManagerSwift;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist";
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification";
+                               IBSC_MODULE = IQKeyboardNotification;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardManagerSwift;
+                               PRODUCT_NAME = IQKeyboardNotification;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                WRAPPER_EXTENSION = bundle;
                        };
-                       name = Debug;
+                       name = Release;
                };
-               BAD20131EC29650C6737E66854A3A9FD /* Release */ = {
+               CC57776530A62F3C6BCEE299CDB87503 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 969958CCDF4F680B2CEA8E4DD27B72C7 /* SnapKit.release.xcconfig */;
+                       baseConfigurationReference = 99B82533878EEF9F0E2FB3560695FF8A /* IQTextView.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap";
-                               PRODUCT_MODULE_NAME = SnapKit;
-                               PRODUCT_NAME = SnapKit;
+                               MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap";
+                               PRODUCT_MODULE_NAME = IQTextView;
+                               PRODUCT_NAME = IQTextView;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
-                               SWIFT_VERSION = 5.0;
+                               SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Release;
+                       name = Debug;
                };
-               C00AEF1ACF87E7DDD73096FFE0DF3DFC /* Release */ = {
+               D0C03895DE80B8549E8C1D167D22E44D /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 81C8D08EE2B731D17BFDF51DB75C7FD4 /* IQTextInputViewNotification.release.xcconfig */;
+                       baseConfigurationReference = 5084335EF29A15EB6C31DFB1ACA15349 /* IQKeyboardManagerSwift.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap";
-                               PRODUCT_MODULE_NAME = IQTextInputViewNotification;
-                               PRODUCT_NAME = IQTextInputViewNotification;
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardManagerSwift;
+                               PRODUCT_NAME = IQKeyboardManagerSwift;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
                                SWIFT_VERSION = 5.9;
                                TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Release;
+                       name = Debug;
                };
-               CA21D4707F9652B1F7D5AC7E3553C72A /* Debug */ = {
+               D0D91380BCB9BC9A0529D56C8ED5FFE9 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 8BC190548C4E12A7F2A38DB809F88934 /* Toast-Swift.debug.xcconfig */;
+                       baseConfigurationReference = 159C74980AC55D136945F073F6CEDC14 /* IQKeyboardToolbar.debug.xcconfig */;
                        buildSettings = {
                                CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Toast-Swift";
-                               IBSC_MODULE = Toast_Swift;
-                               INFOPLIST_FILE = "Target Support Files/Toast-Swift/ResourceBundle-Toast-Swift-Toast-Swift-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
-                               PRODUCT_NAME = "Toast-Swift";
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar";
+                               IBSC_MODULE = IQKeyboardToolbar;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardToolbar;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Debug;
+               };
+               D138F4694413B3332A4486830C10613A /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = DCDF74B5DEAC5E25CFC4D9F9B16EFBEB /* IQKeyboardToolbarManager.debug.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager";
+                               IBSC_MODULE = IQKeyboardToolbarManager;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardToolbarManager;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Debug;
                };
-               CB50F8D87C35047B5204B6391E831FC0 /* Release */ = {
+               D29AEDD40B3E8B1E6FC8C1D23E9FE854 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 5BEBDD0CF7D42D6159D8E2EF081BD93B /* IQKeyboardToolbarManager.release.xcconfig */;
+                       baseConfigurationReference = 1515EB933E55F8DF1275984150311F6F /* IQTextInputViewNotification.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardToolbarManager;
-                               PRODUCT_NAME = IQKeyboardToolbarManager;
+                               MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap";
+                               PRODUCT_MODULE_NAME = IQTextInputViewNotification;
+                               PRODUCT_NAME = IQTextInputViewNotification;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                        };
                        name = Release;
                };
-               CDB2E7CCB93A0C84B3ED2EE4E44526EE /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = 5BEBDD0CF7D42D6159D8E2EF081BD93B /* IQKeyboardToolbarManager.release.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager";
-                               IBSC_MODULE = IQKeyboardToolbarManager;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardToolbarManager;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Release;
-               };
-               CF2F14AD97C90819B114482F4C9A2A35 /* Debug */ = {
+               DDBEDC2B6C48735DEA3B7E0F66D166CA /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */;
+                       baseConfigurationReference = 4BF6C697C2EB03CCBCE9CA841EA31F47 /* Pods-DeepChordsSdk.debug.xcconfig */;
                        buildSettings = {
                                ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
                                ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@loader_path/Frameworks",
                                );
                                MACH_O_TYPE = staticlib;
-                               MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap";
+                               MODULEMAP_FILE = "Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.modulemap";
                                OTHER_LDFLAGS = "";
                                OTHER_LIBTOOLFLAGS = "";
                                PODS_ROOT = "$(SRCROOT)";
                        };
                        name = Debug;
                };
-               D0C03895DE80B8549E8C1D167D22E44D /* Debug */ = {
+               E06F70F13B606F0979741BCAFE1F1003 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = B9E5B7ACA1C4831DB0FC6F6DC415806B /* IQKeyboardManagerSwift.debug.xcconfig */;
+                       baseConfigurationReference = 02E139B151EDFA1F4F63EA119D2269C7 /* Toast-Swift.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_CURRENT_VERSION = 1;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch";
+                               ENABLE_USER_SCRIPT_SANDBOXING = NO;
+                               GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardManagerSwift;
-                               PRODUCT_NAME = IQKeyboardManagerSwift;
+                               MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap";
+                               PRODUCT_MODULE_NAME = Toast_Swift;
+                               PRODUCT_NAME = Toast_Swift;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
-                               SWIFT_VERSION = 5.9;
+                               SWIFT_VERSION = 5.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
                        name = Debug;
                };
-               D633326018EF82C1AD5D8F9823F5227A /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = 81A4530B3DFED1CF5D377C4320215A4A /* IQKeyboardReturnManager.release.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager";
-                               IBSC_MODULE = IQKeyboardReturnManager;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardReturnManager;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Release;
-               };
-               DAE1B07B00732B27AE659B77B614B293 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = EF780280B45D05B3F28826EF5C144118 /* IQKeyboardToolbar.debug.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar";
-                               IBSC_MODULE = IQKeyboardToolbar;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
-                               PRODUCT_NAME = IQKeyboardToolbar;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Debug;
-               };
-               E06F70F13B606F0979741BCAFE1F1003 /* Debug */ = {
+               E0AD5D7D6A14E0A5CE237F7AA2103EDA /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 8BC190548C4E12A7F2A38DB809F88934 /* Toast-Swift.debug.xcconfig */;
+                       baseConfigurationReference = 10CAAD795A45AB49A0EE4D6805AB7A1F /* SocketRocket.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
                                ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/Toast-Swift/Toast-Swift-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/Toast-Swift/Toast-Swift-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/SocketRocket/SocketRocket-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+                               IPHONEOS_DEPLOYMENT_TARGET = 11.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/Toast-Swift/Toast-Swift.modulemap";
-                               PRODUCT_MODULE_NAME = Toast_Swift;
-                               PRODUCT_NAME = Toast_Swift;
+                               MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap";
+                               PRODUCT_MODULE_NAME = SocketRocket;
+                               PRODUCT_NAME = SocketRocket;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                                SWIFT_INSTALL_OBJC_HEADER = YES;
                                SWIFT_VERSION = 5.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
+                               VALIDATE_PRODUCT = YES;
                                VERSIONING_SYSTEM = "apple-generic";
                                VERSION_INFO_PREFIX = "";
                        };
-                       name = Debug;
+                       name = Release;
                };
-               E96018F78EE6B223E0978C8AA11A36EE /* Debug */ = {
+               E5E79CB0A013D41033C3D1F195F2D511 /* Debug */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = C8C1B3AFD0A52650DF90D553FC72040D /* IQKeyboardReturnManager.debug.xcconfig */;
+                       baseConfigurationReference = F528CE7CB37911E316CD1F5622E5B931 /* IQKeyboardReturnManager.debug.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                        };
                        name = Debug;
                };
-               E9AC192FD9FADF1E1EEB0E4B2C599E57 /* Release */ = {
+               EA45E75E18A3088D3BECAB8A13C8E1FA /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 5084335EF29A15EB6C31DFB1ACA15349 /* IQKeyboardManagerSwift.debug.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift";
+                               IBSC_MODULE = IQKeyboardManagerSwift;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardManagerSwift;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Debug;
+               };
+               ED5F5D7028C0D13C5D338346ADB64D2D /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 78882EBBF9DB9EAA48F3FFBF14D1E0B5 /* IQKeyboardToolbar.release.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar";
+                               IBSC_MODULE = IQKeyboardToolbar;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardToolbar;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Release;
+               };
+               EFB4FCFDA1169E42C1B49870156BCDDD /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 0BBF04F3ACCC6329B881C1679E0733BB /* IQKeyboardToolbar.release.xcconfig */;
+                       baseConfigurationReference = 914B3416C83998074DDAB130CB468706 /* IQKeyboardReturnManager.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = NO;
                                ENABLE_USER_SCRIPT_SANDBOXING = NO;
-                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch";
+                               GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-prefix.pch";
                                GENERATE_INFOPLIST_FILE = NO;
-                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist";
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-Info.plist";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                                LD_RUNPATH_SEARCH_PATHS = (
                                        "@executable_path/Frameworks",
                                        "@loader_path/Frameworks",
                                );
-                               MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap";
-                               PRODUCT_MODULE_NAME = IQKeyboardToolbar;
-                               PRODUCT_NAME = IQKeyboardToolbar;
+                               MODULEMAP_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager.modulemap";
+                               PRODUCT_MODULE_NAME = IQKeyboardReturnManager;
+                               PRODUCT_NAME = IQKeyboardReturnManager;
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
                        };
                        name = Release;
                };
+               F08D20936BD3635F1144C8ABE3CED471 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 8981CA762CD2FDB68D15FEEA091439B5 /* IQKeyboardToolbarManager.release.xcconfig */;
+                       buildSettings = {
+                               CODE_SIGNING_ALLOWED = NO;
+                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager";
+                               IBSC_MODULE = IQKeyboardToolbarManager;
+                               INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist";
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               PRODUCT_NAME = IQKeyboardToolbarManager;
+                               SDKROOT = iphoneos;
+                               SKIP_INSTALL = YES;
+                               TARGETED_DEVICE_FAMILY = "1,2";
+                               WRAPPER_EXTENSION = bundle;
+                       };
+                       name = Release;
+               };
                FC91939289B6972DE0D1E8C4EDF5A399 /* Release */ = {
                        isa = XCBuildConfiguration;
-                       baseConfigurationReference = 3579ECE9098CFE0A18918D8F0F6BBC16 /* IQKeyboardCore.release.xcconfig */;
+                       baseConfigurationReference = AA485EB92636FB68E91AF3FCC1CE9C5E /* IQKeyboardCore.release.xcconfig */;
                        buildSettings = {
                                CLANG_ENABLE_OBJC_WEAK = NO;
                                "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
                        };
                        name = Release;
                };
-               FF13205D485A6284D16D6C04D8AEBA9D /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       baseConfigurationReference = 969958CCDF4F680B2CEA8E4DD27B72C7 /* SnapKit.release.xcconfig */;
-                       buildSettings = {
-                               CODE_SIGNING_ALLOWED = NO;
-                               CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit";
-                               IBSC_MODULE = SnapKit;
-                               INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist";
-                               IPHONEOS_DEPLOYMENT_TARGET = 12.0;
-                               PRODUCT_NAME = SnapKit_Privacy;
-                               SDKROOT = iphoneos;
-                               SKIP_INSTALL = YES;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               WRAPPER_EXTENSION = bundle;
-                       };
-                       name = Release;
-               };
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-               1BAF802141BB7A8BEA3D0389842F0DCD /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */ = {
+               08CCC0BB4F7D4BA07752DF404F6EDD9A /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               4EA7C9F9C6A6C1BC846F6B88E1D270E7 /* Debug */,
-                               75A58E29852A96ED7B9ABD0D60180272 /* Release */,
+                               5392BBBB9A595846BCE334B1D7D1D3B7 /* Debug */,
+                               63E9BC6B186B49FDCAB4170225DF66FE /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               1C2730F463E4268BFDE6BAF62C9A487F /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */ = {
+               0DA28833D7A042B27FBAEDF85A1C1D74 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               718BA108A72B1FB5B7A74346285E653B /* Debug */,
-                               6223877B37A9B25479A11E9E87353487 /* Release */,
+                               5F0B975EFB983C4E1131BDA3D8ED0683 /* Debug */,
+                               D29AEDD40B3E8B1E6FC8C1D23E9FE854 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               2C11E195FECCAE83CCDC9E8F3DDC7F1C /* Build configuration list for PBXNativeTarget "Toast-Swift-Toast-Swift" */ = {
+               2D29A227B6A83F5A542054A8A8043BAA /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               CA21D4707F9652B1F7D5AC7E3553C72A /* Debug */,
-                               657C7A7169C5A2EF0F21623CA69BD274 /* Release */,
+                               8F408C586919D67ACCB4002B798BF1CE /* Debug */,
+                               7AA36B6CE3B0C3B48B651A2702CCFC98 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               3208C0F97FCB948C4F12E81E25FFEAF9 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = {
+               2DEB3984BC37C7B27AE0091EC7509142 /* Build configuration list for PBXNativeTarget "Toast-Swift-Toast-Swift" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               D0C03895DE80B8549E8C1D167D22E44D /* Debug */,
-                               2C4EBC8097D4D07427A18EC0F79738BE /* Release */,
+                               34DA1E3BEA25E012EF708AE69C0C9193 /* Debug */,
+                               37AF8DF61716FB1975DE10B4998E2A87 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               2FC9855C948A66726D61C1BF2072066A /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               6458EACFEBDCB49A35654564C62A5CDB /* Debug */,
+                               BFE9B004B8D63FFCD9138A8CD9D03F13 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               3C4DB880A7885119CB06D685D0A723E7 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */ = {
+               3208C0F97FCB948C4F12E81E25FFEAF9 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               E96018F78EE6B223E0978C8AA11A36EE /* Debug */,
-                               67A316390B0B6C034F9941202A414C7F /* Release */,
+                               D0C03895DE80B8549E8C1D167D22E44D /* Debug */,
+                               2C4EBC8097D4D07427A18EC0F79738BE /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               6481ABAE66B2D04512CD62187CEABE6D /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */ = {
+               49D80946082E3E53F4077E15D8887408 /* Build configuration list for PBXNativeTarget "Pods-DeepChordsSdk" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               1758ED8F6B52B20715F3E56C0D65C039 /* Debug */,
-                               CDB2E7CCB93A0C84B3ED2EE4E44526EE /* Release */,
+                               DDBEDC2B6C48735DEA3B7E0F66D166CA /* Debug */,
+                               8E2D63C2146204D6E9066CFE984F976A /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               67BEB8C8A7A6715308ADC7CCB951A134 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = {
+               6545B5D9E1142254EECDDEFC1408EA74 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               B7895874B07E7E5BCAEFAA1837F27EF3 /* Debug */,
-                               2EEB6B3864995CE01531195A8FEFFA95 /* Release */,
+                               60B198379BE0F80DDD5483A405A8AC5F /* Debug */,
+                               1D0FBA28D44BDD4502A8E31DAEABF97D /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               7ECB31051167A225EFE7C1A45E684E88 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = {
+               698D46877F77FCD24D7D79E95A4A06D5 /* Build configuration list for PBXNativeTarget "SocketRocket" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               A386F313035F8AEDA425825F12F0C578 /* Debug */,
-                               FF13205D485A6284D16D6C04D8AEBA9D /* Release */,
+                               60BF7D5EEEA720FA876075D448A3EEFF /* Debug */,
+                               E0AD5D7D6A14E0A5CE237F7AA2103EDA /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               80CE967CAA1D35721519F892BAF7A19B /* Build configuration list for PBXNativeTarget "SnapKit" */ = {
+               7468FF21977574A694627CBF4D7DEC53 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               9D0D7572FEDA4CC9E75E7387846AFE57 /* Debug */,
-                               BAD20131EC29650C6737E66854A3A9FD /* Release */,
+                               D0D91380BCB9BC9A0529D56C8ED5FFE9 /* Debug */,
+                               ED5F5D7028C0D13C5D338346ADB64D2D /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               9C146D0EDFB76FE1156D655A897B6E94 /* Build configuration list for PBXNativeTarget "Toast-Swift" */ = {
+               7B6A2B3DDE303A370FD2A5C8DB9C6E2D /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               E06F70F13B606F0979741BCAFE1F1003 /* Debug */,
-                               7E48D17D0469F73801BBDAF1F20755F2 /* Release */,
+                               9E6F8A334BBF6110E0F8360AA5245522 /* Debug */,
+                               4E28A2258944850B8D0D598586B5E92B /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               80CE967CAA1D35721519F892BAF7A19B /* Build configuration list for PBXNativeTarget "SnapKit" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               9D0D7572FEDA4CC9E75E7387846AFE57 /* Debug */,
+                               BAD20131EC29650C6737E66854A3A9FD /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               A599D6F83E2ADA135F5F95E07F3A9F46 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */ = {
+               95C096ADDB6F7FCAFFA3FBB358C75EF3 /* Build configuration list for PBXNativeTarget "Pods-Example" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               A4CA0F05DBCCA70498F8972AE1638AF0 /* Debug */,
-                               CB50F8D87C35047B5204B6391E831FC0 /* Release */,
+                               1F029A7E58A02CC7BF83B726ECB24B27 /* Debug */,
+                               7D3C700E017BEA5E61F542AD4EBE06C7 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               B2130418C2FAD0A1E2FD872758AD609B /* Build configuration list for PBXNativeTarget "IQKeyboardCore" */ = {
+               9C146D0EDFB76FE1156D655A897B6E94 /* Build configuration list for PBXNativeTarget "Toast-Swift" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               A0F0EEB28C54A3D861769B31AB6A09BC /* Debug */,
-                               FC91939289B6972DE0D1E8C4EDF5A399 /* Release */,
+                               E06F70F13B606F0979741BCAFE1F1003 /* Debug */,
+                               7E48D17D0469F73801BBDAF1F20755F2 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               BEBD8E760EA9789023B9A265429B0CE3 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */ = {
+               9E4E9D837E21217746DEB582B898D487 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               4878B258B51AEB40FC40CDEA8B2FB579 /* Debug */,
-                               832343784050169DE494CBA51327CBFC /* Release */,
+                               D138F4694413B3332A4486830C10613A /* Debug */,
+                               F08D20936BD3635F1144C8ABE3CED471 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               C3974B1DD3C778FE5733E8306919D1BC /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */ = {
+               AC758F51A954F3478B41C0B2B845766B /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               DAE1B07B00732B27AE659B77B614B293 /* Debug */,
-                               439F5FEBC31ACC3A2D307865C8FEA945 /* Release */,
+                               E5E79CB0A013D41033C3D1F195F2D511 /* Debug */,
+                               EFB4FCFDA1169E42C1B49870156BCDDD /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               C99BBC4654DBCB79FC10078A8D8F164A /* Build configuration list for PBXNativeTarget "Pods-Example" */ = {
+               B2130418C2FAD0A1E2FD872758AD609B /* Build configuration list for PBXNativeTarget "IQKeyboardCore" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               CF2F14AD97C90819B114482F4C9A2A35 /* Debug */,
-                               09CE94D09C78B819D706D0A31E0FDEBF /* Release */,
+                               A0F0EEB28C54A3D861769B31AB6A09BC /* Debug */,
+                               FC91939289B6972DE0D1E8C4EDF5A399 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               D209595F46E26B2152EE325AAA902C34 /* Build configuration list for PBXNativeTarget "IQTextView" */ = {
+               BA50FBEF420279D7BDB90421B1103569 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               99E8CDE0070568463EEBA85DF258F59D /* Debug */,
-                               2CB0B04E637225A7D7C266292DDC0AFC /* Release */,
+                               BA84D2E7DDC5F76ACF1327798B6F924C /* Debug */,
+                               298BF47A1ADB1CEC5A9281F125EF0788 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               E74FC012668CDA2F6C4BF839FEB96069 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */ = {
+               D2E3CA4A5A5255636741A362E4F6BCF7 /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               961ED2BDA5D875288E2797D7EE1B40B5 /* Debug */,
-                               E9AC192FD9FADF1E1EEB0E4B2C599E57 /* Release */,
+                               47C2D0929EA82A67E33FEB42776A6CAC /* Debug */,
+                               397EF464FF32EAD44C05D7CE58A2C382 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               E959AB3A73E0C01735D6A0CBB7A46763 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */ = {
+               D452E33AB7D1DEFA04A6E2B89E1B70BD /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               0436E45C9EB8DF6391E9F25BAF1F9CD6 /* Debug */,
-                               C00AEF1ACF87E7DDD73096FFE0DF3DFC /* Release */,
+                               B5986331465FE771133F16D76C24C707 /* Debug */,
+                               74ED47C1AB733A447D6619EAD98BAD82 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               F0BDF860071DEA034151A2E0A1E847DD /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */ = {
+               D7FB8C3DDF4703D4590435540A2233A9 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               33F9EB014D388A982E18E89A18728E6E /* Debug */,
-                               5BF8D5770321101E8BCE20E68D48D452 /* Release */,
+                               64801BD417925AB9BA656A8FA9DC5CB6 /* Debug */,
+                               3016B50127E54871902147B82FABA968 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               F874B41A83B918592D0E9627046D0688 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */ = {
+               D8BBE9E3900D941FF67F5A73A1AECA11 /* Build configuration list for PBXNativeTarget "IQTextView" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               8F70FC038D658E7A6D2BAEADCC022929 /* Debug */,
-                               D633326018EF82C1AD5D8F9823F5227A /* Release */,
+                               CC57776530A62F3C6BCEE299CDB87503 /* Debug */,
+                               544532B6E87F836C1A3288A60D36F726 /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               F8A3F2A1D94EBD3FC696D573D0AB1B0F /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */ = {
+               FD573F16CD31603388EC2DE46509F450 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
-                               303BB1842F2941ED3B727E7A2F3A81AE /* Debug */,
-                               45EE463F8D495300A81BC1D7C7029EF8 /* Release */,
+                               EA45E75E18A3088D3BECAB8A13C8E1FA /* Debug */,
+                               1B2F38B82BEBA44EF2EE45BF7A44037A /* Release */,
                        );
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/LICENSE b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/LICENSE
new file mode 100644 (file)
index 0000000..032b206
--- /dev/null
@@ -0,0 +1,30 @@
+BSD License
+
+For SocketRocket software
+
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+   endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/LICENSE-examples b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/LICENSE-examples
new file mode 100644 (file)
index 0000000..1de7813
--- /dev/null
@@ -0,0 +1,11 @@
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+
+The examples provided by Facebook are for non-commercial testing and evaluation
+purposes only. Facebook reserves all rights not expressly granted.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/README.md b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/README.md
new file mode 100644 (file)
index 0000000..7806a7e
--- /dev/null
@@ -0,0 +1,214 @@
+# SocketRocket
+
+![Platforms][platforms-svg]
+[![License][license-svg]][license-link]
+
+[![Podspec][podspec-svg]][podspec-link]
+[![Carthage Compatible][carthage-svg]](carthage-link)
+
+[![Build Status][build-status-svg]][build-status-link]
+
+A conforming WebSocket ([RFC 6455](https://tools.ietf.org/html/rfc6455>)) client library for iOS, macOS and tvOS.
+
+Test results for SocketRocket [here](http://facebook.github.io/SocketRocket/results/).
+You can compare to what modern browsers look like [here](http://autobahn.ws/testsuite/reports/clients/index.html).
+
+SocketRocket currently conforms to all core ~300 of [Autobahn](http://autobahn.ws/testsuite/>)'s fuzzing tests 
+(aside from two UTF-8 ones where it is merely *non-strict* tests 6.4.2 and 6.4.4).
+
+## Features/Design
+
+- TLS (wss) support, including self-signed certificates.
+- Seems to perform quite well.
+- Supports HTTP Proxies.
+- Supports IPv4/IPv6.
+- Supports SSL certificate pinning.
+- Sends `ping` and can process `pong` events.
+- Asynchronous and non-blocking. Most of the work is done on a background thread.
+- Supports iOS, macOS, tvOS.
+
+## Installing
+
+There are a few options. Choose one, or just figure it out:
+
+- **[CocoaPods](https://cocoapods.org)**
+
+ Add the following line to your Podfile:
+ ```ruby
+ pod 'SocketRocket'
+ ```
+ Run `pod install`, and you are all set.
+  
+- **[Carthage](https://github.com/carthage/carthage)**
+
+ Add the following line to your Cartfile:
+ ```
+ github "facebook/SocketRocket"
+ ```
+ Run `carthage update`, and you should now have the latest version of `SocketRocket` in your `Carthage` folder.
+
+- **Using SocketRocket as a sub-project**
+
+  You can also include `SocketRocket` as a subproject inside of your application if you'd prefer, although we do not recommend this, as it will increase your indexing time significantly. To do so, just drag and drop the `SocketRocket.xcodeproj` file into your workspace.
+
+## API
+
+### `SRWebSocket`
+
+The Web Socket.
+
+#### Note:
+
+`SRWebSocket` will retain itself between `-(void)open` and when it closes, errors, or fails.
+This is similar to how `NSURLConnection` behaves (unlike `NSURLConnection`, `SRWebSocket` won't retain the delegate).
+
+#### Interface
+
+```objective-c
+@interface SRWebSocket : NSObject
+
+// Make it with this
+- (instancetype)initWithURLRequest:(NSURLRequest *)request;
+
+// Set this before opening
+@property (nonatomic, weak) id <SRWebSocketDelegate> delegate;
+
+// Open with this
+- (void)open;
+
+// Close it with this
+- (void)close;
+
+// Send a Data
+- (void)sendData:(nullable NSData *)data error:(NSError **)error;
+
+// Send a UTF8 String
+- (void)sendString:(NSString *)string error:(NSError **)error;
+
+@end
+```
+
+### `SRWebSocketDelegate`
+
+You implement this
+
+```objective-c
+@protocol SRWebSocketDelegate <NSObject>
+
+@optional
+
+- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
+
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(NSString *)string;
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithData:(NSData *)data;
+
+- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
+- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(nullable NSString *)reason wasClean:(BOOL)wasClean;
+
+@end
+```
+
+## Testing
+
+Included are setup scripts for the python testing environment.
+It comes packaged with vitualenv so all the dependencies are installed in userland.
+
+To run the short test from the command line, run:
+```bash
+  make test
+```
+
+To run all the tests, run:
+```bash
+  make test_all
+```
+
+The short tests don't include the performance tests
+(the test harness is actually the bottleneck, not SocketRocket).
+
+The first time this is run, it may take a while to install the dependencies. It will be smooth sailing after that. 
+
+You can also run tests inside Xcode, which runs the same thing, but makes it easier to debug.
+
+- Choose the `SocketRocketTests` target
+- Make sure your running destination is either your Mac or any Simulator
+- Run the test action (`⌘+U`)
+
+### TestChat Demo Application
+
+SocketRocket includes a demo app, TestChat.
+It will "chat" with a listening websocket on port 9900.
+
+#### TestChat Server
+
+The sever takes a message and broadcasts it to all other connected clients.
+
+It requires some dependencies though to run. 
+We also want to reuse the virtualenv we made when we ran the tests. 
+If you haven't run the tests yet, go into the SocketRocket root directory and type:
+
+```bash
+make test
+```
+
+This will set up your [virtualenv](https://pypi.python.org/pypi/virtualenv).
+
+Now, in your terminal:
+
+```bash
+source .env/bin/activate
+pip install git+https://github.com/tornadoweb/tornado.git
+```
+
+In the same terminal session, start the chatroom server:
+
+```bash
+python TestChatServer/py/chatroom.py
+```
+
+There's also a Go implementation (with the latest weekly) where you can:
+
+```bash
+cd TestChatServer/go
+go run chatroom.go
+```
+
+#### Chatting
+
+Now, start TestChat.app (just run the target in the Xcode project).
+If you had it started already you can hit the refresh button to reconnect.
+It should say "Connected!" on top.
+
+To talk with the app, open up your browser to [http://localhost:9000](http://localhost:9000) and start chatting.
+
+
+## WebSocket Server Implementation Recommendations
+
+SocketRocket has been used with the following libraries:
+
+- [Tornado](https://github.com/tornadoweb/tornado)
+- Go's [WebSocket package](https://godoc.org/golang.org/x/net/websocket) or Gorilla's [version](http://www.gorillatoolkit.org/pkg/websocket).
+- [Autobahn](http://autobahn.ws/testsuite/) (using its fuzzing client).
+
+The Tornado one is dirt simple and works like a charm. 
+([IPython notebook](http://ipython.org/ipython-doc/dev/interactive/htmlnotebook.html) uses it too).
+It's much easier to configure handlers and routes than in Autobahn/twisted.
+
+## Contributing
+
+We’re glad you’re interested in SocketRocket, and we’d love to see where you take it. 
+Please read our [contributing guidelines](https://github.com/facebook/SocketRocket/blob/master/CONTRIBUTING.md) prior to submitting a Pull Request.
+
+ [build-status-svg]: https://img.shields.io/travis/facebook/SocketRocket/master.svg
+ [build-status-link]: https://travis-ci.org/facebook/SocketRocket/branches
+
+ [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg
+ [license-link]: https://github.com/facebook/SocketRocket/blob/master/LICENSE
+
+ [podspec-svg]: https://img.shields.io/cocoapods/v/SocketRocket.svg
+ [podspec-link]: https://cocoapods.org/pods/SocketRocket
+ 
+ [carthage-svg]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat
+ [carthage-link]: https://github.com/carthage/carthage
+
+ [platforms-svg]: http://img.shields.io/cocoapods/p/SocketRocket.svg?style=flat
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.h
new file mode 100644 (file)
index 0000000..43634a1
--- /dev/null
@@ -0,0 +1,67 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <SocketRocket/SRWebSocket.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#if OBJC_BOOL_IS_BOOL
+
+struct SRDelegateAvailableMethods {
+    BOOL didReceiveMessage : 1;
+    BOOL didReceiveMessageWithString : 1;
+    BOOL didReceiveMessageWithData : 1;
+    BOOL didOpen : 1;
+    BOOL didFailWithError : 1;
+    BOOL didCloseWithCode : 1;
+    BOOL didReceivePing : 1;
+    BOOL didReceivePong : 1;
+    BOOL shouldConvertTextFrameToString : 1;
+};
+
+#else
+
+struct SRDelegateAvailableMethods {
+    BOOL didReceiveMessage;
+    BOOL didReceiveMessageWithString;
+    BOOL didReceiveMessageWithData;
+    BOOL didOpen;
+    BOOL didFailWithError;
+    BOOL didCloseWithCode;
+    BOOL didReceivePing;
+    BOOL didReceivePong;
+    BOOL shouldConvertTextFrameToString;
+};
+
+#endif
+
+typedef struct SRDelegateAvailableMethods SRDelegateAvailableMethods;
+
+typedef void(^SRDelegateBlock)(id<SRWebSocketDelegate> _Nullable delegate, SRDelegateAvailableMethods availableMethods);
+
+@interface SRDelegateController : NSObject
+
+@property (nonatomic, weak) id<SRWebSocketDelegate> delegate;
+@property (atomic, readonly) SRDelegateAvailableMethods availableDelegateMethods;
+
+@property (nullable, nonatomic, strong) dispatch_queue_t dispatchQueue;
+@property (nullable, nonatomic, strong) NSOperationQueue *operationQueue;
+
+///--------------------------------------
+#pragma mark - Perform
+///--------------------------------------
+
+- (void)performDelegateBlock:(SRDelegateBlock)block;
+- (void)performDelegateQueueBlock:(dispatch_block_t)block;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.m
new file mode 100644 (file)
index 0000000..f20c9d5
--- /dev/null
@@ -0,0 +1,138 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRDelegateController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRDelegateController ()
+
+@property (nonatomic, strong, readonly) dispatch_queue_t accessQueue;
+
+@property (atomic, assign, readwrite) SRDelegateAvailableMethods availableDelegateMethods;
+
+@end
+
+@implementation SRDelegateController
+
+@synthesize delegate = _delegate;
+@synthesize dispatchQueue = _dispatchQueue;
+@synthesize operationQueue = _operationQueue;
+
+///--------------------------------------
+#pragma mark - Init
+///--------------------------------------
+
+- (instancetype)init
+{
+    self = [super init];
+    if (!self) return self;
+
+    _accessQueue = dispatch_queue_create("com.facebook.socketrocket.delegate.access", DISPATCH_QUEUE_CONCURRENT);
+    _dispatchQueue = dispatch_get_main_queue();
+
+    return self;
+}
+
+///--------------------------------------
+#pragma mark - Accessors
+///--------------------------------------
+
+- (void)setDelegate:(id<SRWebSocketDelegate> _Nullable)delegate
+{
+    dispatch_barrier_async(self.accessQueue, ^{
+        self->_delegate = delegate;
+
+        self.availableDelegateMethods = (SRDelegateAvailableMethods){
+            .didReceiveMessage = [delegate respondsToSelector:@selector(webSocket:didReceiveMessage:)],
+            .didReceiveMessageWithString = [delegate respondsToSelector:@selector(webSocket:didReceiveMessageWithString:)],
+            .didReceiveMessageWithData = [delegate respondsToSelector:@selector(webSocket:didReceiveMessageWithData:)],
+            .didOpen = [delegate respondsToSelector:@selector(webSocketDidOpen:)],
+            .didFailWithError = [delegate respondsToSelector:@selector(webSocket:didFailWithError:)],
+            .didCloseWithCode = [delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)],
+            .didReceivePing = [delegate respondsToSelector:@selector(webSocket:didReceivePingWithData:)],
+            .didReceivePong = [delegate respondsToSelector:@selector(webSocket:didReceivePong:)],
+            .shouldConvertTextFrameToString = [delegate respondsToSelector:@selector(webSocketShouldConvertTextFrameToString:)]
+        };
+    });
+}
+
+- (id<SRWebSocketDelegate> _Nullable)delegate
+{
+    __block id<SRWebSocketDelegate> delegate = nil;
+    dispatch_sync(self.accessQueue, ^{
+        delegate = self->_delegate;
+    });
+    return delegate;
+}
+
+- (void)setDispatchQueue:(dispatch_queue_t _Nullable)queue
+{
+    dispatch_barrier_async(self.accessQueue, ^{
+        self->_dispatchQueue = queue ?: dispatch_get_main_queue();
+        self->_operationQueue = nil;
+    });
+}
+
+- (dispatch_queue_t _Nullable)dispatchQueue
+{
+    __block dispatch_queue_t queue = nil;
+    dispatch_sync(self.accessQueue, ^{
+        queue = self->_dispatchQueue;
+    });
+    return queue;
+}
+
+- (void)setOperationQueue:(NSOperationQueue *_Nullable)queue
+{
+    dispatch_barrier_async(self.accessQueue, ^{
+        self->_dispatchQueue = queue ? nil : dispatch_get_main_queue();
+        self->_operationQueue = queue;
+    });
+}
+
+- (NSOperationQueue *_Nullable)operationQueue
+{
+    __block NSOperationQueue *queue = nil;
+    dispatch_sync(self.accessQueue, ^{
+        queue = self->_operationQueue;
+    });
+    return queue;
+}
+
+///--------------------------------------
+#pragma mark - Perform
+///--------------------------------------
+
+- (void)performDelegateBlock:(SRDelegateBlock)block
+{
+    __block __strong id<SRWebSocketDelegate> delegate = nil;
+    __block SRDelegateAvailableMethods availableMethods;
+    dispatch_sync(self.accessQueue, ^{
+        delegate = self->_delegate; // Not `OK` to go through `self`, since queue sync.
+        availableMethods = self.availableDelegateMethods; // `OK` to call through `self`, since no queue sync.
+    });
+    [self performDelegateQueueBlock:^{
+        block(delegate, availableMethods);
+    }];
+}
+
+- (void)performDelegateQueueBlock:(dispatch_block_t)block
+{
+    dispatch_queue_t dispatchQueue = self.dispatchQueue;
+    if (dispatchQueue) {
+        dispatch_async(dispatchQueue, block);
+    } else {
+        [self.operationQueue addOperationWithBlock:block];
+    }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.h
new file mode 100644 (file)
index 0000000..6b02a3b
--- /dev/null
@@ -0,0 +1,40 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+@class SRWebSocket; // TODO: (nlutsenko) Remove dependency on SRWebSocket here.
+
+// Returns number of bytes consumed. Returning 0 means you didn't match.
+// Sends bytes to callback handler;
+typedef size_t (^stream_scanner)(NSData *collected_data);
+typedef void (^data_callback)(SRWebSocket *webSocket,  NSData *data);
+
+@interface SRIOConsumer : NSObject {
+    stream_scanner _scanner;
+    data_callback _handler;
+    size_t _bytesNeeded;
+    BOOL _readToCurrentFrame;
+    BOOL _unmaskBytes;
+}
+@property (nonatomic, copy, readonly) stream_scanner consumer;
+@property (nonatomic, copy, readonly) data_callback handler;
+@property (nonatomic, assign) size_t bytesNeeded;
+@property (nonatomic, assign, readonly) BOOL readToCurrentFrame;
+@property (nonatomic, assign, readonly) BOOL unmaskBytes;
+
+- (void)resetWithScanner:(stream_scanner)scanner
+                 handler:(data_callback)handler
+             bytesNeeded:(size_t)bytesNeeded
+      readToCurrentFrame:(BOOL)readToCurrentFrame
+             unmaskBytes:(BOOL)unmaskBytes;
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.m
new file mode 100644 (file)
index 0000000..8b17e3e
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRIOConsumer.h"
+
+@implementation SRIOConsumer
+
+@synthesize bytesNeeded = _bytesNeeded;
+@synthesize consumer = _scanner;
+@synthesize handler = _handler;
+@synthesize readToCurrentFrame = _readToCurrentFrame;
+@synthesize unmaskBytes = _unmaskBytes;
+
+- (void)resetWithScanner:(stream_scanner)scanner
+                 handler:(data_callback)handler
+             bytesNeeded:(size_t)bytesNeeded
+      readToCurrentFrame:(BOOL)readToCurrentFrame
+             unmaskBytes:(BOOL)unmaskBytes
+{
+    _scanner = [scanner copy];
+    _handler = [handler copy];
+    _bytesNeeded = bytesNeeded;
+    _readToCurrentFrame = readToCurrentFrame;
+    _unmaskBytes = unmaskBytes;
+    assert(_scanner || _bytesNeeded);
+}
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h
new file mode 100644 (file)
index 0000000..1e7ad32
--- /dev/null
@@ -0,0 +1,28 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SRIOConsumer.h" // TODO: (nlutsenko) Convert to @class and constants file for block types
+
+// This class is not thread-safe, and is expected to always be run on the same queue.
+@interface SRIOConsumerPool : NSObject
+
+- (instancetype)initWithBufferCapacity:(NSUInteger)poolSize;
+
+- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner
+                              handler:(data_callback)handler
+                          bytesNeeded:(size_t)bytesNeeded
+                   readToCurrentFrame:(BOOL)readToCurrentFrame
+                          unmaskBytes:(BOOL)unmaskBytes;
+- (void)returnConsumer:(SRIOConsumer *)consumer;
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m
new file mode 100644 (file)
index 0000000..33a4af9
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRIOConsumerPool.h"
+
+@implementation SRIOConsumerPool {
+    NSUInteger _poolSize;
+    NSMutableArray<SRIOConsumer *> *_bufferedConsumers;
+}
+
+- (instancetype)initWithBufferCapacity:(NSUInteger)poolSize
+{
+    self = [super init];
+    if (self) {
+        _poolSize = poolSize;
+        _bufferedConsumers = [NSMutableArray arrayWithCapacity:poolSize];
+    }
+    return self;
+}
+
+- (instancetype)init
+{
+    return [self initWithBufferCapacity:8];
+}
+
+- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner
+                              handler:(data_callback)handler
+                          bytesNeeded:(size_t)bytesNeeded
+                   readToCurrentFrame:(BOOL)readToCurrentFrame
+                          unmaskBytes:(BOOL)unmaskBytes
+{
+    SRIOConsumer *consumer = nil;
+    if (_bufferedConsumers.count) {
+        consumer = [_bufferedConsumers lastObject];
+        [_bufferedConsumers removeLastObject];
+    } else {
+        consumer = [[SRIOConsumer alloc] init];
+    }
+
+    [consumer resetWithScanner:scanner
+                       handler:handler
+                   bytesNeeded:bytesNeeded
+            readToCurrentFrame:readToCurrentFrame
+                   unmaskBytes:unmaskBytes];
+
+    return consumer;
+}
+
+- (void)returnConsumer:(SRIOConsumer *)consumer
+{
+    if (_bufferedConsumers.count < _poolSize) {
+        [_bufferedConsumers addObject:consumer];
+    }
+}
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h
new file mode 100644 (file)
index 0000000..098f7a8
--- /dev/null
@@ -0,0 +1,13 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <SocketRocket/NSRunLoop+SRWebSocket.h>
+
+// Empty function that force links the object file for the category.
+extern void import_NSRunLoop_SRWebSocket(void);
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h
new file mode 100644 (file)
index 0000000..b09dde4
--- /dev/null
@@ -0,0 +1,13 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <SocketRocket/NSURLRequest+SRWebSocket.h>
+
+// Empty function that force links the object file for the category.
+extern void import_NSURLRequest_SRWebSocket(void);
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.h
new file mode 100644 (file)
index 0000000..e947c48
--- /dev/null
@@ -0,0 +1,26 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^SRProxyConnectCompletion)(NSError *_Nullable error,
+                                        NSInputStream *_Nullable readStream,
+                                        NSOutputStream *_Nullable writeStream);
+
+@interface SRProxyConnect : NSObject
+
+- (instancetype)initWithURL:(NSURL *)url;
+
+- (void)openNetworkStreamWithCompletion:(SRProxyConnectCompletion)completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.m
new file mode 100644 (file)
index 0000000..cce5844
--- /dev/null
@@ -0,0 +1,481 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRProxyConnect.h"
+
+#import "NSRunLoop+SRWebSocket.h"
+#import "SRConstants.h"
+#import "SRError.h"
+#import "SRLog.h"
+#import "SRURLUtilities.h"
+
+@interface SRProxyConnect() <NSStreamDelegate>
+
+@property (nonatomic, strong) NSURL *url;
+@property (nonatomic, strong) NSInputStream *inputStream;
+@property (nonatomic, strong) NSOutputStream *outputStream;
+
+@end
+
+@implementation SRProxyConnect
+{
+    SRProxyConnectCompletion _completion;
+
+    NSString *_httpProxyHost;
+    uint32_t _httpProxyPort;
+
+    CFHTTPMessageRef _receivedHTTPHeaders;
+
+    NSString *_socksProxyHost;
+    uint32_t _socksProxyPort;
+    NSString *_socksProxyUsername;
+    NSString *_socksProxyPassword;
+
+    BOOL _connectionRequiresSSL;
+
+    NSMutableArray<NSData *> *_inputQueue;
+    dispatch_queue_t _writeQueue;
+}
+
+///--------------------------------------
+#pragma mark - Init
+///--------------------------------------
+
+-(instancetype)initWithURL:(NSURL *)url
+{
+    self = [super init];
+    if (!self) return self;
+
+    _url = url;
+    _connectionRequiresSSL = SRURLRequiresSSL(url);
+
+    _writeQueue = dispatch_queue_create("com.facebook.socketrocket.proxyconnect.write", DISPATCH_QUEUE_SERIAL);
+    _inputQueue = [NSMutableArray arrayWithCapacity:2];
+
+    return self;
+}
+
+- (void)dealloc
+{
+    // If we get deallocated before the socket open finishes - we need to cleanup everything.
+
+    [self.inputStream removeFromRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];
+    self.inputStream.delegate = nil;
+    [self.inputStream close];
+    self.inputStream = nil;
+
+    self.outputStream.delegate = nil;
+    [self.outputStream close];
+    self.outputStream = nil;
+}
+
+///--------------------------------------
+#pragma mark - Open
+///--------------------------------------
+
+- (void)openNetworkStreamWithCompletion:(SRProxyConnectCompletion)completion
+{
+    _completion = completion;
+    [self _configureProxy];
+}
+
+///--------------------------------------
+#pragma mark - Flow
+///--------------------------------------
+
+- (void)_didConnect
+{
+    SRDebugLog(@"_didConnect, return streams");
+    if (_connectionRequiresSSL) {
+        if (_httpProxyHost) {
+            // Must set the real peer name before turning on SSL
+            SRDebugLog(@"proxy set peer name to real host %@", self.url.host);
+            [self.outputStream setProperty:self.url.host forKey:@"_kCFStreamPropertySocketPeerName"];
+        }
+    }
+    if (_receivedHTTPHeaders) {
+        CFRelease(_receivedHTTPHeaders);
+        _receivedHTTPHeaders = NULL;
+    }
+
+    NSInputStream *inputStream = self.inputStream;
+    NSOutputStream *outputStream = self.outputStream;
+
+    self.inputStream = nil;
+    self.outputStream = nil;
+
+    [inputStream removeFromRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];
+    inputStream.delegate = nil;
+    outputStream.delegate = nil;
+
+    _completion(nil, inputStream, outputStream);
+}
+
+- (void)_failWithError:(NSError *)error
+{
+    SRDebugLog(@"_failWithError, return error");
+    if (!error) {
+        error = SRHTTPErrorWithCodeDescription(500, 2132,@"Proxy Error");
+    }
+
+    if (_receivedHTTPHeaders) {
+        CFRelease(_receivedHTTPHeaders);
+        _receivedHTTPHeaders = NULL;
+    }
+
+    self.inputStream.delegate = nil;
+    self.outputStream.delegate = nil;
+
+    [self.inputStream removeFromRunLoop:[NSRunLoop SR_networkRunLoop]
+                                forMode:NSDefaultRunLoopMode];
+    [self.inputStream close];
+    [self.outputStream close];
+    self.inputStream = nil;
+    self.outputStream = nil;
+    _completion(error, nil, nil);
+}
+
+// get proxy setting from device setting
+- (void)_configureProxy
+{
+    SRDebugLog(@"configureProxy");
+    NSDictionary *proxySettings = CFBridgingRelease(CFNetworkCopySystemProxySettings());
+
+    // CFNetworkCopyProxiesForURL doesn't understand ws:// or wss://
+    NSURL *httpURL;
+    if (_connectionRequiresSSL) {
+        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@", _url.host]];
+    } else {
+        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", _url.host]];
+    }
+
+    NSArray *proxies = CFBridgingRelease(CFNetworkCopyProxiesForURL((__bridge CFURLRef)httpURL, (__bridge CFDictionaryRef)proxySettings));
+    if (proxies.count == 0) {
+        SRDebugLog(@"configureProxy no proxies");
+        [self _openConnection];
+        return;                 // no proxy
+    }
+    NSDictionary *settings = [proxies objectAtIndex:0];
+    NSString *proxyType = settings[(NSString *)kCFProxyTypeKey];
+    if ([proxyType isEqualToString:(NSString *)kCFProxyTypeAutoConfigurationURL]) {
+        NSURL *pacURL = settings[(NSString *)kCFProxyAutoConfigurationURLKey];
+        if (pacURL) {
+            [self _fetchPAC:pacURL withProxySettings:proxySettings];
+            return;
+        }
+    }
+    if ([proxyType isEqualToString:(__bridge NSString *)kCFProxyTypeAutoConfigurationJavaScript]) {
+        NSString *script = settings[(__bridge NSString *)kCFProxyAutoConfigurationJavaScriptKey];
+        if (script) {
+            [self _runPACScript:script withProxySettings:proxySettings];
+            return;
+        }
+    }
+    [self _readProxySettingWithType:proxyType settings:settings];
+
+    [self _openConnection];
+}
+
+- (void)_readProxySettingWithType:(NSString *)proxyType settings:(NSDictionary *)settings
+{
+    if ([proxyType isEqualToString:(NSString *)kCFProxyTypeHTTP] ||
+        [proxyType isEqualToString:(NSString *)kCFProxyTypeHTTPS]) {
+        _httpProxyHost = settings[(NSString *)kCFProxyHostNameKey];
+        NSNumber *portValue = settings[(NSString *)kCFProxyPortNumberKey];
+        if (portValue) {
+            _httpProxyPort = [portValue intValue];
+        }
+    }
+    if ([proxyType isEqualToString:(NSString *)kCFProxyTypeSOCKS]) {
+        _socksProxyHost = settings[(NSString *)kCFProxyHostNameKey];
+        NSNumber *portValue = settings[(NSString *)kCFProxyPortNumberKey];
+        if (portValue)
+            _socksProxyPort = [portValue intValue];
+        _socksProxyUsername = settings[(NSString *)kCFProxyUsernameKey];
+        _socksProxyPassword = settings[(NSString *)kCFProxyPasswordKey];
+    }
+    if (_httpProxyHost) {
+        SRDebugLog(@"Using http proxy %@:%u", _httpProxyHost, _httpProxyPort);
+    } else if (_socksProxyHost) {
+        SRDebugLog(@"Using socks proxy %@:%u", _socksProxyHost, _socksProxyPort);
+    } else {
+        SRDebugLog(@"configureProxy no proxies");
+    }
+}
+
+- (void)_fetchPAC:(NSURL *)PACurl withProxySettings:(NSDictionary *)proxySettings
+{
+    SRDebugLog(@"SRWebSocket fetchPAC:%@", PACurl);
+
+    if ([PACurl isFileURL]) {
+        NSError *error = nil;
+        NSString *script = [NSString stringWithContentsOfURL:PACurl
+                                                usedEncoding:NULL
+                                                       error:&error];
+
+        if (error) {
+            [self _openConnection];
+        } else {
+            [self _runPACScript:script withProxySettings:proxySettings];
+        }
+        return;
+    }
+
+    NSString *scheme = [PACurl.scheme lowercaseString];
+    if (![scheme isEqualToString:@"http"] && ![scheme isEqualToString:@"https"]) {
+        // Don't know how to read data from this URL, we'll have to give up
+        // We'll simply assume no proxies, and start the request as normal
+        [self _openConnection];
+        return;
+    }
+    __weak typeof(self) wself = self;
+    NSURLRequest *request = [NSURLRequest requestWithURL:PACurl];
+    NSURLSession *session = [NSURLSession sharedSession];
+    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+        __strong typeof(wself) sself = wself;
+        if (!error) {
+            NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+            [sself _runPACScript:script withProxySettings:proxySettings];
+        } else {
+            [sself _openConnection];
+        }
+    }] resume];
+}
+
+- (void)_runPACScript:(NSString *)script withProxySettings:(NSDictionary *)proxySettings
+{
+    if (!script) {
+        [self _openConnection];
+        return;
+    }
+    SRDebugLog(@"runPACScript");
+    // From: http://developer.apple.com/samplecode/CFProxySupportTool/listing1.html
+    // Work around <rdar://problem/5530166>.  This dummy call to
+    // CFNetworkCopyProxiesForURL initialise some state within CFNetwork
+    // that is required by CFNetworkCopyProxiesForAutoConfigurationScript.
+    CFBridgingRelease(CFNetworkCopyProxiesForURL((__bridge CFURLRef)_url, (__bridge CFDictionaryRef)proxySettings));
+
+    // Obtain the list of proxies by running the autoconfiguration script
+    CFErrorRef err = NULL;
+
+    // CFNetworkCopyProxiesForAutoConfigurationScript doesn't understand ws:// or wss://
+    NSURL *httpURL;
+    if (_connectionRequiresSSL)
+        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@", _url.host]];
+    else
+        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", _url.host]];
+
+    NSArray *proxies = CFBridgingRelease(CFNetworkCopyProxiesForAutoConfigurationScript((__bridge CFStringRef)script,(__bridge CFURLRef)httpURL, &err));
+    if (!err && [proxies count] > 0) {
+        NSDictionary *settings = [proxies objectAtIndex:0];
+        NSString *proxyType = settings[(NSString *)kCFProxyTypeKey];
+        [self _readProxySettingWithType:proxyType settings:settings];
+    }
+    [self _openConnection];
+}
+
+- (void)_openConnection
+{
+    [self _initializeStreams];
+
+    [self.inputStream scheduleInRunLoop:[NSRunLoop SR_networkRunLoop]
+                                forMode:NSDefaultRunLoopMode];
+    //[self.outputStream scheduleInRunLoop:[NSRunLoop SR_networkRunLoop]
+    //                           forMode:NSDefaultRunLoopMode];
+    [self.outputStream open];
+    [self.inputStream open];
+}
+
+- (void)_initializeStreams
+{
+    assert(_url.port.unsignedIntValue <= UINT32_MAX);
+    uint32_t port = _url.port.unsignedIntValue;
+    if (port == 0) {
+        port = (_connectionRequiresSSL ? 443 : 80);
+    }
+    NSString *host = _url.host;
+
+    if (_httpProxyHost) {
+        host = _httpProxyHost;
+        port = (_httpProxyPort ?: 80);
+    }
+
+    CFReadStreamRef readStream = NULL;
+    CFWriteStreamRef writeStream = NULL;
+
+    SRDebugLog(@"ProxyConnect connect stream to %@:%u", host, port);
+    CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);
+
+    self.outputStream = CFBridgingRelease(writeStream);
+    self.inputStream = CFBridgingRelease(readStream);
+
+    if (_socksProxyHost) {
+        SRDebugLog(@"ProxyConnect set sock property stream to %@:%u user %@ password %@", _socksProxyHost, _socksProxyPort, _socksProxyUsername, _socksProxyPassword);
+        NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:4];
+        settings[NSStreamSOCKSProxyHostKey] = _socksProxyHost;
+        if (_socksProxyPort) {
+            settings[NSStreamSOCKSProxyPortKey] = @(_socksProxyPort);
+        }
+        if (_socksProxyUsername) {
+            settings[NSStreamSOCKSProxyUserKey] = _socksProxyUsername;
+        }
+        if (_socksProxyPassword) {
+            settings[NSStreamSOCKSProxyPasswordKey] = _socksProxyPassword;
+        }
+        [self.inputStream setProperty:settings forKey:NSStreamSOCKSProxyConfigurationKey];
+        [self.outputStream setProperty:settings forKey:NSStreamSOCKSProxyConfigurationKey];
+    }
+    self.inputStream.delegate = self;
+    self.outputStream.delegate = self;
+}
+
+- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
+{
+    SRDebugLog(@"stream handleEvent %u", eventCode);
+    switch (eventCode) {
+        case NSStreamEventOpenCompleted: {
+            if (aStream == self.inputStream) {
+                if (_httpProxyHost) {
+                    [self _proxyDidConnect];
+                } else {
+                    [self _didConnect];
+                }
+            }
+        }  break;
+        case NSStreamEventErrorOccurred: {
+            [self _failWithError:aStream.streamError];
+        } break;
+        case NSStreamEventEndEncountered: {
+            [self _failWithError:aStream.streamError];
+        } break;
+        case NSStreamEventHasBytesAvailable: {
+            if (aStream == _inputStream) {
+                [self _processInputStream];
+            }
+        } break;
+        case NSStreamEventHasSpaceAvailable:
+        case NSStreamEventNone:
+            SRDebugLog(@"(default)  %@", aStream);
+            break;
+    }
+}
+
+- (void)_proxyDidConnect
+{
+    SRDebugLog(@"Proxy Connected");
+    uint32_t port = _url.port.unsignedIntValue;
+    if (port == 0) {
+        port = (_connectionRequiresSSL ? 443 : 80);
+    }
+    // Send HTTP CONNECT Request
+    NSString *connectRequestStr = [NSString stringWithFormat:@"CONNECT %@:%u HTTP/1.1\r\nHost: %@\r\nConnection: keep-alive\r\nProxy-Connection: keep-alive\r\n\r\n", _url.host, port, _url.host];
+
+    NSData *message = [connectRequestStr dataUsingEncoding:NSUTF8StringEncoding];
+    SRDebugLog(@"Proxy sending %@", connectRequestStr);
+
+    [self _writeData:message];
+}
+
+///handles the incoming bytes and sending them to the proper processing method
+- (void)_processInputStream
+{
+    NSMutableData *buf = [NSMutableData dataWithCapacity:SRDefaultBufferSize()];
+    uint8_t *buffer = buf.mutableBytes;
+    NSInteger length = [_inputStream read:buffer maxLength:SRDefaultBufferSize()];
+
+    if (length <= 0) {
+        return;
+    }
+
+    BOOL process = (_inputQueue.count == 0);
+    [_inputQueue addObject:[NSData dataWithBytes:buffer length:length]];
+
+    if (process) {
+        [self _dequeueInput];
+    }
+}
+
+// dequeue the incoming input so it is processed in order
+
+- (void)_dequeueInput
+{
+    while (_inputQueue.count > 0) {
+        NSData *data = _inputQueue.firstObject;
+        [_inputQueue removeObjectAtIndex:0];
+
+        // No need to process any data further, we got the full header data.
+        if ([self _proxyProcessHTTPResponseWithData:data]) {
+            break;
+        }
+    }
+}
+//handle checking the proxy  connection status
+- (BOOL)_proxyProcessHTTPResponseWithData:(NSData *)data
+{
+    if (_receivedHTTPHeaders == NULL) {
+        _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);
+    }
+
+    CFHTTPMessageAppendBytes(_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);
+    if (CFHTTPMessageIsHeaderComplete(_receivedHTTPHeaders)) {
+        SRDebugLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(_receivedHTTPHeaders)));
+        [self _proxyHTTPHeadersDidFinish];
+        return YES;
+    }
+
+    return NO;
+}
+
+- (void)_proxyHTTPHeadersDidFinish
+{
+    NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders);
+
+    if (responseCode >= 299) {
+        SRDebugLog(@"Connect to Proxy Request failed with response code %d", responseCode);
+        NSError *error = SRHTTPErrorWithCodeDescription(responseCode, 2132,
+                                                        [NSString stringWithFormat:@"Received bad response code from proxy server: %d.",
+                                                         (int)responseCode]);
+        [self _failWithError:error];
+        return;
+    }
+    SRDebugLog(@"proxy connect return %d, call socket connect", responseCode);
+    [self _didConnect];
+}
+
+static NSTimeInterval const SRProxyConnectWriteTimeout = 5.0;
+
+- (void)_writeData:(NSData *)data
+{
+    const uint8_t * bytes = data.bytes;
+    __block NSInteger timeout = (NSInteger)(SRProxyConnectWriteTimeout * 1000000); // wait timeout before giving up
+    __weak typeof(self) wself = self;
+    dispatch_async(_writeQueue, ^{
+        __strong typeof(wself) sself = self;
+        if (!sself) {
+            return;
+        }
+        NSOutputStream *outStream = sself.outputStream;
+        if (!outStream) {
+            return;
+        }
+        while (![outStream hasSpaceAvailable]) {
+            usleep(100); //wait until the socket is ready
+            timeout -= 100;
+            if (timeout < 0) {
+                NSError *error = SRHTTPErrorWithCodeDescription(408, 2132, @"Proxy timeout");
+                [sself _failWithError:error];
+            } else if (outStream.streamError != nil) {
+                [sself _failWithError:outStream.streamError];
+            }
+        }
+        [outStream write:bytes maxLength:data.length];
+    });
+}
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.h
new file mode 100644 (file)
index 0000000..380cfa0
--- /dev/null
@@ -0,0 +1,24 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRRunLoopThread : NSThread
+
+@property (nonatomic, strong, readonly) NSRunLoop *runLoop;
+
++ (instancetype)sharedThread;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.m
new file mode 100644 (file)
index 0000000..c692ae6
--- /dev/null
@@ -0,0 +1,84 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRRunLoopThread.h"
+
+@interface SRRunLoopThread ()
+{
+    dispatch_group_t _waitGroup;
+}
+
+@property (nonatomic, strong, readwrite) NSRunLoop *runLoop;
+
+@end
+
+@implementation SRRunLoopThread
+
++ (instancetype)sharedThread
+{
+    static SRRunLoopThread *thread;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        thread = [[SRRunLoopThread alloc] init];
+        thread.name = @"com.facebook.SocketRocket.NetworkThread";
+        thread.qualityOfService = NSQualityOfServiceUserInitiated;
+        [thread start];
+    });
+    return thread;
+}
+
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        _waitGroup = dispatch_group_create();
+        dispatch_group_enter(_waitGroup);
+    }
+    return self;
+}
+
+- (void)main
+{
+    @autoreleasepool {
+        _runLoop = [NSRunLoop currentRunLoop];
+        dispatch_group_leave(_waitGroup);
+
+        // Add an empty run loop source to prevent runloop from spinning.
+        CFRunLoopSourceContext sourceCtx = {
+            .version = 0,
+            .info = NULL,
+            .retain = NULL,
+            .release = NULL,
+            .copyDescription = NULL,
+            .equal = NULL,
+            .hash = NULL,
+            .schedule = NULL,
+            .cancel = NULL,
+            .perform = NULL
+        };
+        CFRunLoopSourceRef source = CFRunLoopSourceCreate(NULL, 0, &sourceCtx);
+        CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
+        CFRelease(source);
+
+        while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
+
+        }
+        assert(NO);
+    }
+}
+
+- (NSRunLoop *)runLoop
+{
+    dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
+    return _runLoop;
+}
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/SRConstants.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/SRConstants.h
new file mode 100644 (file)
index 0000000..38dd009
--- /dev/null
@@ -0,0 +1,26 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef NS_ENUM(uint8_t, SROpCode)
+{
+    SROpCodeTextFrame = 0x1,
+    SROpCodeBinaryFrame = 0x2,
+    // 3-7 reserved.
+    SROpCodeConnectionClose = 0x8,
+    SROpCodePing = 0x9,
+    SROpCodePong = 0xA,
+    // B-F reserved.
+};
+
+/**
+ Default buffer size that is used for reading/writing to streams.
+ */
+extern size_t SRDefaultBufferSize(void);
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/SRConstants.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/SRConstants.m
new file mode 100644 (file)
index 0000000..1dbd774
--- /dev/null
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRConstants.h"
+
+size_t SRDefaultBufferSize(void) {
+    static size_t size;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        size = getpagesize();
+    });
+    return size;
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.h
new file mode 100644 (file)
index 0000000..0d498b2
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <SocketRocket/SRSecurityPolicy.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * NOTE: While publicly, SocketRocket does not support configuring the security policy with pinned certificates,
+ * it is still possible to manually construct a security policy of this class. If you do this, note that you may
+ * be open to MitM attacks, and we will not support any issues you may have. Dive at your own risk.
+ */
+@interface SRPinningSecurityPolicy : SRSecurityPolicy
+
+- (instancetype)initWithCertificates:(NSArray *)pinnedCertificates;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.m
new file mode 100644 (file)
index 0000000..c12dffa
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRPinningSecurityPolicy.h"
+
+#import <Foundation/Foundation.h>
+
+#import "SRLog.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRPinningSecurityPolicy ()
+
+@property (nonatomic, copy, readonly) NSArray *pinnedCertificates;
+
+@end
+
+@implementation SRPinningSecurityPolicy
+
+- (instancetype)initWithCertificates:(NSArray *)pinnedCertificates
+{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+    // Do not validate certificate chain since we're pinning to specific certificates.
+    self = [super initWithCertificateChainValidationEnabled:NO];
+#pragma clang diagnostic pop
+
+    if (!self) { return self; }
+
+    if (pinnedCertificates.count == 0) {
+        @throw [NSException exceptionWithName:@"Creating security policy failed."
+                                       reason:@"Must specify at least one certificate when creating a pinning policy."
+                                     userInfo:nil];
+    }
+    _pinnedCertificates = [pinnedCertificates copy];
+
+    return self;
+}
+
+- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain
+{
+    SRDebugLog(@"Pinned cert count: %d", self.pinnedCertificates.count);
+    NSUInteger requiredCertCount = self.pinnedCertificates.count;
+
+    NSUInteger validatedCertCount = 0;
+    CFIndex serverCertCount = SecTrustGetCertificateCount(serverTrust);
+    for (CFIndex i = 0; i < serverCertCount; i++) {
+        SecCertificateRef cert = SecTrustGetCertificateAtIndex(serverTrust, i);
+        NSData *data = CFBridgingRelease(SecCertificateCopyData(cert));
+        for (id ref in self.pinnedCertificates) {
+            SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref;
+            // TODO: (nlutsenko) Add caching, so we don't copy the data for every pinned cert all the time.
+            NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert));
+            if ([trustedCertData isEqualToData:data]) {
+                validatedCertCount++;
+                break;
+            }
+        }
+    }
+    return (requiredCertCount == validatedCertCount);
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.h
new file mode 100644 (file)
index 0000000..7e13a82
--- /dev/null
@@ -0,0 +1,20 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern NSError *SRErrorWithDomainCodeDescription(NSString *domain, NSInteger code, NSString *description);
+extern NSError *SRErrorWithCodeDescription(NSInteger code, NSString *description);
+extern NSError *SRErrorWithCodeDescriptionUnderlyingError(NSInteger code, NSString *description, NSError *underlyingError);
+
+extern NSError *SRHTTPErrorWithCodeDescription(NSInteger httpCode, NSInteger errorCode, NSString *description);
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.m
new file mode 100644 (file)
index 0000000..eeabe03
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRError.h"
+
+#import "SRWebSocket.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+NSError *SRErrorWithDomainCodeDescription(NSString *domain, NSInteger code, NSString *description)
+{
+    return [NSError errorWithDomain:domain code:code userInfo:@{ NSLocalizedDescriptionKey: description }];
+}
+
+NSError *SRErrorWithCodeDescription(NSInteger code, NSString *description)
+{
+    return SRErrorWithDomainCodeDescription(SRWebSocketErrorDomain, code, description);
+}
+
+NSError *SRErrorWithCodeDescriptionUnderlyingError(NSInteger code, NSString *description, NSError *underlyingError)
+{
+    return [NSError errorWithDomain:SRWebSocketErrorDomain
+                               code:code
+                           userInfo:@{ NSLocalizedDescriptionKey: description,
+                                       NSUnderlyingErrorKey: underlyingError }];
+}
+
+NSError *SRHTTPErrorWithCodeDescription(NSInteger httpCode, NSInteger errorCode, NSString *description)
+{
+    return [NSError errorWithDomain:SRWebSocketErrorDomain
+                               code:errorCode
+                           userInfo:@{ NSLocalizedDescriptionKey: description,
+                                       SRHTTPResponseErrorKey: @(httpCode) }];
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h
new file mode 100644 (file)
index 0000000..b67f3d5
--- /dev/null
@@ -0,0 +1,21 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+#import <CFNetwork/CFNetwork.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern CFHTTPMessageRef SRHTTPConnectMessageCreate(NSURLRequest *request,
+                                                   NSString *securityKey,
+                                                   uint8_t webSocketProtocolVersion,
+                                                   NSArray<NSHTTPCookie *> *_Nullable cookies,
+                                                   NSArray<NSString *> *_Nullable requestedProtocols);
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m
new file mode 100644 (file)
index 0000000..b2f9760
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRHTTPConnectMessage.h"
+
+#import "SRURLUtilities.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSString *_SRHTTPConnectMessageHost(NSURL *url)
+{
+    NSString *host = url.host;
+    if (url.port) {
+        host = [host stringByAppendingFormat:@":%@", url.port];
+    }
+    return host;
+}
+
+CFHTTPMessageRef SRHTTPConnectMessageCreate(NSURLRequest *request,
+                                            NSString *securityKey,
+                                            uint8_t webSocketProtocolVersion,
+                                            NSArray<NSHTTPCookie *> *_Nullable cookies,
+                                            NSArray<NSString *> *_Nullable requestedProtocols)
+{
+    NSURL *url = request.URL;
+
+    CFHTTPMessageRef message = CFHTTPMessageCreateRequest(NULL, (__bridge CFStringRef)request.HTTPMethod, (__bridge CFURLRef)url, kCFHTTPVersion1_1);
+
+    // Set host first so it defaults
+    CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Host"), (__bridge CFStringRef)_SRHTTPConnectMessageHost(url));
+
+    // Apply cookies if any have been provided
+    if (cookies) {
+        NSDictionary<NSString *, NSString *> *messageCookies = [NSHTTPCookie requestHeaderFieldsWithCookies:(NSArray<NSHTTPCookie*> *_Nonnull)cookies];
+        [messageCookies enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
+            if (key.length && obj.length) {
+                CFHTTPMessageSetHeaderFieldValue(message, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);
+            }
+        }];
+    }
+
+    // set header for http basic auth
+    NSString *basicAuthorizationString = SRBasicAuthorizationHeaderFromURL(url);
+    if (basicAuthorizationString) {
+        CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Authorization"), (__bridge CFStringRef)basicAuthorizationString);
+    }
+
+    CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Upgrade"), CFSTR("websocket"));
+    CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Connection"), CFSTR("Upgrade"));
+    CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Sec-WebSocket-Key"), (__bridge CFStringRef)securityKey);
+    CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Sec-WebSocket-Version"), (__bridge CFStringRef)@(webSocketProtocolVersion).stringValue);
+
+    CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Origin"), (__bridge CFStringRef)SRURLOrigin(url));
+
+    if (requestedProtocols.count) {
+        CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Sec-WebSocket-Protocol"),
+                                         (__bridge CFStringRef)[requestedProtocols componentsJoinedByString:@", "]);
+    }
+
+    [request.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
+        CFHTTPMessageSetHeaderFieldValue(message, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);
+    }];
+
+    return message;
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.h
new file mode 100644 (file)
index 0000000..3db14de
--- /dev/null
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern NSData *SRSHA1HashFromString(NSString *string);
+extern NSData *SRSHA1HashFromBytes(const char *bytes, size_t length);
+
+extern NSString *SRBase64EncodedStringFromData(NSData *data);
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.m
new file mode 100644 (file)
index 0000000..a150ecc
--- /dev/null
@@ -0,0 +1,47 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRHash.h"
+
+#import <CommonCrypto/CommonDigest.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+NSData *SRSHA1HashFromString(NSString *string)
+{
+    const char *utf8String = string.UTF8String;
+    if (!utf8String) {
+        return [NSData data];
+    }
+    size_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+    return SRSHA1HashFromBytes(utf8String, length);
+}
+
+NSData *SRSHA1HashFromBytes(const char *bytes, size_t length)
+{
+    uint8_t outputLength = CC_SHA1_DIGEST_LENGTH;
+    unsigned char output[outputLength];
+    CC_SHA1(bytes, (CC_LONG)length, output);
+
+    return [NSData dataWithBytes:output length:outputLength];
+}
+
+NSString *SRBase64EncodedStringFromData(NSData *data)
+{
+    if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
+        return [data base64EncodedStringWithOptions:0];
+    }
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    return [data base64Encoding];
+#pragma clang diagnostic pop
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.h
new file mode 100644 (file)
index 0000000..99689ef
--- /dev/null
@@ -0,0 +1,20 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+// Uncomment this line to enable debug logging
+//#define SR_DEBUG_LOG_ENABLED
+
+extern void SRErrorLog(NSString *format, ...);
+extern void SRDebugLog(NSString *format, ...);
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.m
new file mode 100644 (file)
index 0000000..4596017
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRLog.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern void SRErrorLog(NSString *format, ...)
+{
+    __block va_list arg_list;
+    va_start (arg_list, format);
+
+    NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arg_list];
+
+    va_end(arg_list);
+
+    NSLog(@"[SocketRocket] %@", formattedString);
+}
+
+extern void SRDebugLog(NSString *format, ...)
+{
+#ifdef SR_DEBUG_LOG_ENABLED
+    SRErrorLog(tag, format);
+#endif
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.h
new file mode 100644 (file)
index 0000000..8226ce6
--- /dev/null
@@ -0,0 +1,22 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef __attribute__((capability("mutex"))) pthread_mutex_t *SRMutex;
+
+extern SRMutex SRMutexInitRecursive(void);
+extern void SRMutexDestroy(SRMutex mutex);
+
+extern void SRMutexLock(SRMutex mutex) __attribute__((acquire_capability(mutex)));
+extern void SRMutexUnlock(SRMutex mutex) __attribute__((release_capability(mutex)));
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.m
new file mode 100644 (file)
index 0000000..03b5939
--- /dev/null
@@ -0,0 +1,47 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRMutex.h"
+
+#import <pthread/pthread.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+SRMutex SRMutexInitRecursive(void)
+{
+    pthread_mutex_t *mutex = malloc(sizeof(pthread_mutex_t));
+    pthread_mutexattr_t attributes;
+
+    pthread_mutexattr_init(&attributes);
+    pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(mutex, &attributes);
+    pthread_mutexattr_destroy(&attributes);
+
+    return mutex;
+}
+
+void SRMutexDestroy(SRMutex mutex)
+{
+    pthread_mutex_destroy(mutex);
+    free(mutex);
+}
+
+__attribute__((no_thread_safety_analysis))
+void SRMutexLock(SRMutex mutex)
+{
+    pthread_mutex_lock(mutex);
+}
+
+__attribute__((no_thread_safety_analysis))
+void SRMutexUnlock(SRMutex mutex)
+{
+    pthread_mutex_unlock(mutex);
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.h
new file mode 100644 (file)
index 0000000..9b116cf
--- /dev/null
@@ -0,0 +1,16 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern NSData *SRRandomData(NSUInteger length);
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.m
new file mode 100644 (file)
index 0000000..acfbfe9
--- /dev/null
@@ -0,0 +1,29 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRRandom.h"
+
+#import <Security/SecRandom.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+NSData *SRRandomData(NSUInteger length)
+{
+    NSMutableData *_Nullable data = [NSMutableData dataWithLength:length];
+    if (data == nil) {
+        [NSException raise:NSInternalInconsistencyException format:@"Failed to allocate random data"];
+    }
+    int result = SecRandomCopyBytes(kSecRandomDefault, data.length, ((NSMutableData *_Nonnull)data).mutableBytes);
+    if (result != errSecSuccess) {
+        [NSException raise:NSInternalInconsistencyException format:@"Failed to generate random bytes with OSStatus: %d", result];
+    }
+    return (NSMutableData *_Nonnull)data;
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.h
new file mode 100644 (file)
index 0000000..8291cc7
--- /dev/null
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+/**
+ Unmask bytes using XOR via SIMD.
+
+ @param bytes    The bytes to unmask.
+ @param length   The number of bytes to unmask.
+ @param maskKey The mask to XOR with MUST be of length sizeof(uint32_t).
+ */
+void SRMaskBytesSIMD(uint8_t *bytes, size_t length, uint8_t *maskKey);
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.m
new file mode 100644 (file)
index 0000000..97e6fc1
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRSIMDHelpers.h"
+
+typedef uint8_t uint8x32_t __attribute__((vector_size(32)));
+
+static void SRMaskBytesManual(uint8_t *bytes, size_t length, uint8_t *maskKey) {
+    for (size_t i = 0; i < length; i++) {
+        bytes[i] = bytes[i] ^ maskKey[i % sizeof(uint32_t)];
+    }
+}
+
+/**
+ Right-shift the elements of a vector, circularly.
+
+ @param vector The vector to circular shift.
+ @param by     The number of elements to shift by.
+
+ @return A shifted vector.
+ */
+static uint8x32_t SRShiftVector(uint8x32_t vector, size_t by) {
+    uint8x32_t vectorCopy = vector;
+    by = by % _Alignof(uint8x32_t);
+
+    uint8_t *vectorPointer = (uint8_t *)&vector;
+    uint8_t *vectorCopyPointer = (uint8_t *)&vectorCopy;
+
+    memmove(vectorPointer + by, vectorPointer, sizeof(vector) - by);
+    memcpy(vectorPointer, vectorCopyPointer + (sizeof(vector) - by), by);
+
+    return vector;
+}
+
+void SRMaskBytesSIMD(uint8_t *bytes, size_t length, uint8_t *maskKey) {
+    size_t alignmentBytes = _Alignof(uint8x32_t) - ((uintptr_t)bytes % _Alignof(uint8x32_t));
+    if (alignmentBytes == _Alignof(uint8x32_t)) {
+        alignmentBytes = 0;
+    }
+
+    // If the number of bytes that can be processed after aligning is
+    // less than the number of bytes we can put into a vector,
+    // then there's no work to do with SIMD, just call the manual version.
+    if (alignmentBytes > length || (length - alignmentBytes) < sizeof(uint8x32_t)) {
+        SRMaskBytesManual(bytes, length, maskKey);
+        return;
+    }
+
+    size_t vectorLength = (length - alignmentBytes) / sizeof(uint8x32_t);
+    size_t manualStartOffset = alignmentBytes + (vectorLength * sizeof(uint8x32_t));
+    size_t manualLength = length - manualStartOffset;
+
+    uint8x32_t *vector = (uint8x32_t *)(bytes + alignmentBytes);
+    uint8x32_t maskVector;
+
+    memset_pattern4(&maskVector, maskKey, sizeof(uint8x32_t));
+    maskVector = SRShiftVector(maskVector, alignmentBytes);
+
+    SRMaskBytesManual(bytes, alignmentBytes, maskKey);
+
+    for (size_t vectorIndex = 0; vectorIndex < vectorLength; vectorIndex++) {
+        vector[vectorIndex] = vector[vectorIndex] ^ maskVector;
+    }
+
+    // Use the shifted mask for the final manual part.
+    SRMaskBytesManual(bytes + manualStartOffset, manualLength, (uint8_t *) &maskVector);
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.h
new file mode 100644 (file)
index 0000000..a9ec782
--- /dev/null
@@ -0,0 +1,26 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+// The origin isn't really applicable for a native application.
+// So instead, just map ws -> http and wss -> https.
+extern NSString *SRURLOrigin(NSURL *url);
+
+extern BOOL SRURLRequiresSSL(NSURL *_Nullable url);
+
+// Extracts `user` and `password` from url (if available) into `Basic base64(user:password)`.
+extern NSString *_Nullable SRBasicAuthorizationHeaderFromURL(NSURL *url);
+
+// Returns a valid value for `NSStreamNetworkServiceType` or `nil`.
+extern NSString *_Nullable SRStreamNetworkServiceTypeFromURLRequest(NSURLRequest *request);
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m
new file mode 100644 (file)
index 0000000..cb1eef6
--- /dev/null
@@ -0,0 +1,86 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRURLUtilities.h"
+
+#import "SRHash.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+NSString *SRURLOrigin(NSURL *url)
+{
+    NSMutableString *origin = [NSMutableString string];
+
+    NSString *scheme = url.scheme.lowercaseString;
+    if ([scheme isEqualToString:@"wss"]) {
+        scheme = @"https";
+    } else if ([scheme isEqualToString:@"ws"]) {
+        scheme = @"http";
+    }
+    [origin appendFormat:@"%@://%@", scheme, url.host];
+
+    NSNumber *port = url.port;
+    BOOL portIsDefault = (!port ||
+                          ([scheme isEqualToString:@"http"] && port.integerValue == 80) ||
+                          ([scheme isEqualToString:@"https"] && port.integerValue == 443));
+    if (!portIsDefault) {
+        [origin appendFormat:@":%@", port.stringValue];
+    }
+    return origin;
+}
+
+extern BOOL SRURLRequiresSSL(NSURL *_Nullable url)
+{
+    NSString *scheme = url.scheme.lowercaseString;
+    return ([scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]);
+}
+
+extern NSString *_Nullable SRBasicAuthorizationHeaderFromURL(NSURL *url)
+{
+    if (!url.user || !url.password) {
+        return nil;
+    }
+
+    NSData *data = [[NSString stringWithFormat:@"%@:%@", url.user, url.password] dataUsingEncoding:NSUTF8StringEncoding];
+    return [NSString stringWithFormat:@"Basic %@", SRBase64EncodedStringFromData(data)];
+}
+
+extern NSString *_Nullable SRStreamNetworkServiceTypeFromURLRequest(NSURLRequest *request)
+{
+    NSString *networkServiceType = nil;
+    switch (request.networkServiceType) {
+        case NSURLNetworkServiceTypeDefault:
+        case NSURLNetworkServiceTypeResponsiveData:
+        case NSURLNetworkServiceTypeAVStreaming:
+        case NSURLNetworkServiceTypeResponsiveAV:
+            break;
+        case NSURLNetworkServiceTypeVoIP:
+            networkServiceType = NSStreamNetworkServiceTypeVoIP;
+            break;
+        case NSURLNetworkServiceTypeVideo:
+            networkServiceType = NSStreamNetworkServiceTypeVideo;
+            break;
+        case NSURLNetworkServiceTypeBackground:
+            networkServiceType = NSStreamNetworkServiceTypeBackground;
+            break;
+        case NSURLNetworkServiceTypeVoice:
+            networkServiceType = NSStreamNetworkServiceTypeVoice;
+            break;
+#if (__MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 || __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 || __TV_OS_VERSION_MAX_ALLOWED >= 100000 || __WATCH_OS_VERSION_MAX_ALLOWED >= 30000)
+        case NSURLNetworkServiceTypeCallSignaling: {
+            if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, *)) {
+                networkServiceType = NSStreamNetworkServiceTypeCallSignaling;
+            }
+        } break;
+#endif
+    }
+    return networkServiceType;
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.h
new file mode 100644 (file)
index 0000000..8f419e3
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSRunLoop (SRWebSocket)
+
+/**
+ Default run loop that will be used to schedule all instances of `SRWebSocket`.
+
+ @return An instance of `NSRunLoop`.
+ */
++ (NSRunLoop *)SR_networkRunLoop;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.m
new file mode 100644 (file)
index 0000000..30eb608
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "NSRunLoop+SRWebSocket.h"
+#import "NSRunLoop+SRWebSocketPrivate.h"
+
+#import "SRRunLoopThread.h"
+
+// Required for object file to always be linked.
+void import_NSRunLoop_SRWebSocket(void) { }
+
+@implementation NSRunLoop (SRWebSocket)
+
++ (NSRunLoop *)SR_networkRunLoop
+{
+    return [SRRunLoopThread sharedThread].runLoop;
+}
+
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.h
new file mode 100644 (file)
index 0000000..4ccffd5
--- /dev/null
@@ -0,0 +1,38 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSURLRequest (SRWebSocket)
+
+/**
+ An array of pinned `SecCertificateRef` SSL certificates that `SRWebSocket` will use for validation.
+ */
+@property (nullable, nonatomic, copy, readonly) NSArray *SR_SSLPinnedCertificates
+    DEPRECATED_MSG_ATTRIBUTE("Using pinned certificates is neither secure nor supported in SocketRocket, "
+                             "and leads to security issues. Please use a proper, trust chain validated certificate.");
+
+@end
+
+@interface NSMutableURLRequest (SRWebSocket)
+
+/**
+ An array of pinned `SecCertificateRef` SSL certificates that `SRWebSocket` will use for validation.
+ */
+@property (nullable, nonatomic, copy) NSArray *SR_SSLPinnedCertificates
+    DEPRECATED_MSG_ATTRIBUTE("Using pinned certificates is neither secure nor supported in SocketRocket, "
+                             "and leads to security issues. Please use a proper, trust chain validated certificate.");
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.m
new file mode 100644 (file)
index 0000000..8efb090
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "NSURLRequest+SRWebSocket.h"
+#import "NSURLRequest+SRWebSocketPrivate.h"
+
+// Required for object file to always be linked.
+void import_NSURLRequest_SRWebSocket(void) { }
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSString *const SRSSLPinnnedCertificatesKey = @"SocketRocket_SSLPinnedCertificates";
+
+@implementation NSURLRequest (SRWebSocket)
+
+- (nullable NSArray *)SR_SSLPinnedCertificates
+{
+    return nil;
+}
+
+@end
+
+@implementation NSMutableURLRequest (SRWebSocket)
+
+- (void)setSR_SSLPinnedCertificates:(nullable NSArray *)SR_SSLPinnedCertificates
+{
+    [NSException raise:NSInvalidArgumentException
+                format:@"Using pinned certificates is neither secure nor supported in SocketRocket, "
+                        "and leads to security issues. Please use a proper, trust chain validated certificate."];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.h
new file mode 100644 (file)
index 0000000..3fbd809
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+#import <Security/Security.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRSecurityPolicy : NSObject
+
+/**
+ A default `SRSecurityPolicy` implementation specifies socket security and
+ validates the certificate chain.
+
+ Use a subclass of `SRSecurityPolicy` for more fine grained customization.
+ */
++ (instancetype)defaultPolicy;
+
+/**
+ Specifies socket security and provider certificate pinning, disregarding certificate
+ chain validation.
+
+ @param pinnedCertificates Array of `SecCertificateRef` SSL certificates to use for validation.
+ */
++ (instancetype)pinnningPolicyWithCertificates:(NSArray *)pinnedCertificates
+    DEPRECATED_MSG_ATTRIBUTE("Using pinned certificates is neither secure nor supported in SocketRocket, "
+                             "and leads to security issues. Please use a proper, trust chain validated certificate.");
+
+/**
+ Specifies socket security and optional certificate chain validation.
+
+ @param enabled Whether or not to validate the SSL certificate chain. If you
+ are considering using this method because your certificate was not issued by a
+ recognized certificate authority, consider using `pinningPolicyWithCertificates` instead.
+ */
+- (instancetype)initWithCertificateChainValidationEnabled:(BOOL)enabled
+    DEPRECATED_MSG_ATTRIBUTE("Disabling certificate chain validation is unsafe. "
+                             "Please use a proper Certificate Authority to issue your TLS certificates.")
+    NS_DESIGNATED_INITIALIZER;
+
+/**
+ Updates all the security options for input and output streams, for example you
+ can set your socket security level here.
+
+ @param stream Stream to update the options in.
+ */
+- (void)updateSecurityOptionsInStream:(NSStream *)stream;
+
+/**
+ Whether or not the specified server trust should be accepted, based on the security policy.
+
+ This method should be used when responding to an authentication challenge from
+ a server. In the default implemenation, no further validation is done here, but
+ you're free to override it in a subclass. See `SRPinningSecurityPolicy.h` for
+ an example.
+
+ @param serverTrust The X.509 certificate trust of the server.
+ @param domain The domain of serverTrust.
+
+ @return Whether or not to trust the server.
+ */
+- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.m
new file mode 100644 (file)
index 0000000..3759d26
--- /dev/null
@@ -0,0 +1,75 @@
+//
+// Copyright (c) 2016-present, Facebook, Inc.
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRSecurityPolicy.h"
+#import "SRPinningSecurityPolicy.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRSecurityPolicy ()
+
+@property (nonatomic, assign, readonly) BOOL certificateChainValidationEnabled;
+
+@end
+
+@implementation SRSecurityPolicy
+
++ (instancetype)defaultPolicy
+{
+    return [self new];
+}
+
++ (instancetype)pinnningPolicyWithCertificates:(NSArray *)pinnedCertificates
+{
+    [NSException raise:NSInvalidArgumentException
+                format:@"Using pinned certificates is neither secure nor supported in SocketRocket, "
+                        "and leads to security issues. Please use a proper, trust chain validated certificate."];
+
+    return nil;
+}
+
+- (instancetype)initWithCertificateChainValidationEnabled:(BOOL)enabled
+{
+    self = [super init];
+    if (!self) { return self; }
+
+    _certificateChainValidationEnabled = enabled;
+
+    return self;
+}
+
+- (instancetype)init
+{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+
+    return [self initWithCertificateChainValidationEnabled:YES];
+
+#pragma clang diagnostic pop
+}
+
+- (void)updateSecurityOptionsInStream:(NSStream *)stream
+{
+    // Enforce TLS 1.2
+    [stream setProperty:(__bridge id)CFSTR("kCFStreamSocketSecurityLevelTLSv1_2") forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel];
+
+    // Validate certificate chain for this stream if enabled.
+    NSDictionary<NSString *, id> *sslOptions = @{ (__bridge NSString *)kCFStreamSSLValidatesCertificateChain : @(self.certificateChainValidationEnabled) };
+    [stream setProperty:sslOptions forKey:(__bridge NSString *)kCFStreamPropertySSLSettings];
+}
+
+- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain
+{
+    // No further evaluation happens in the default policy.
+    return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRWebSocket.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRWebSocket.h
new file mode 100644 (file)
index 0000000..a3806f1
--- /dev/null
@@ -0,0 +1,417 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, SRReadyState) {
+    SR_CONNECTING   = 0,
+    SR_OPEN         = 1,
+    SR_CLOSING      = 2,
+    SR_CLOSED       = 3,
+};
+
+typedef NS_ENUM(NSInteger, SRStatusCode) {
+    // 0-999: Reserved and not used.
+    SRStatusCodeNormal = 1000,
+    SRStatusCodeGoingAway = 1001,
+    SRStatusCodeProtocolError = 1002,
+    SRStatusCodeUnhandledType = 1003,
+    // 1004 reserved.
+    SRStatusNoStatusReceived = 1005,
+    SRStatusCodeAbnormal = 1006,
+    SRStatusCodeInvalidUTF8 = 1007,
+    SRStatusCodePolicyViolated = 1008,
+    SRStatusCodeMessageTooBig = 1009,
+    SRStatusCodeMissingExtension = 1010,
+    SRStatusCodeInternalError = 1011,
+    SRStatusCodeServiceRestart = 1012,
+    SRStatusCodeTryAgainLater = 1013,
+    // 1014: Reserved for future use by the WebSocket standard.
+    SRStatusCodeTLSHandshake = 1015,
+    // 1016-1999: Reserved for future use by the WebSocket standard.
+    // 2000-2999: Reserved for use by WebSocket extensions.
+    // 3000-3999: Available for use by libraries and frameworks. May not be used by applications. Available for registration at the IANA via first-come, first-serve.
+    // 4000-4999: Available for use by applications.
+};
+
+@class SRWebSocket;
+@class SRSecurityPolicy;
+
+/**
+ Error domain used for errors reported by SRWebSocket.
+ */
+extern NSString *const SRWebSocketErrorDomain;
+
+/**
+ Key used for HTTP status code if bad response was received from the server.
+ */
+extern NSString *const SRHTTPResponseErrorKey;
+
+@protocol SRWebSocketDelegate;
+
+///--------------------------------------
+#pragma mark - SRWebSocket
+///--------------------------------------
+
+/**
+ A `SRWebSocket` object lets you connect, send and receive data to a remote Web Socket.
+ */
+@interface SRWebSocket : NSObject <NSStreamDelegate>
+
+/**
+ The delegate of the web socket.
+
+ The web socket delegate is notified on all state changes that happen to the web socket.
+ */
+@property (nonatomic, weak) id <SRWebSocketDelegate> delegate;
+
+/**
+ A dispatch queue for scheduling the delegate calls. The queue doesn't need be a serial queue.
+
+ If `nil` and `delegateOperationQueue` is `nil`, the socket uses main queue for performing all delegate method calls.
+ */
+@property (nullable, nonatomic, strong) dispatch_queue_t delegateDispatchQueue;
+
+/**
+ An operation queue for scheduling the delegate calls.
+
+ If `nil` and `delegateOperationQueue` is `nil`, the socket uses main queue for performing all delegate method calls.
+ */
+@property (nullable, nonatomic, strong) NSOperationQueue *delegateOperationQueue;
+
+/**
+ Current ready state of the socket. Default: `SR_CONNECTING`.
+
+ This property is Key-Value Observable and fully thread-safe.
+ */
+@property (atomic, assign, readonly) SRReadyState readyState;
+
+/**
+ An instance of `NSURL` that this socket connects to.
+ */
+@property (nullable, nonatomic, strong, readonly) NSURL *url;
+
+/**
+ All HTTP headers that were received by socket or `nil` if none were received so far.
+ */
+@property (nullable, nonatomic, assign, readonly) CFHTTPMessageRef receivedHTTPHeaders;
+
+/**
+ Array of `NSHTTPCookie` cookies to apply to the connection.
+ */
+@property (nullable, nonatomic, copy) NSArray<NSHTTPCookie *> *requestCookies;
+
+/**
+ The negotiated web socket protocol or `nil` if handshake did not yet complete.
+ */
+@property (nullable, nonatomic, copy, readonly) NSString *protocol;
+
+/**
+ A boolean value indicating whether this socket will allow connection without SSL trust chain evaluation.
+ For DEBUG builds this flag is ignored, and SSL connections are allowed regardless of the certificate trust configuration
+ */
+@property (nonatomic, assign, readonly) BOOL allowsUntrustedSSLCertificates;
+
+///--------------------------------------
+#pragma mark - Constructors
+///--------------------------------------
+
+/**
+ Initializes a web socket with a given `NSURLRequest`.
+
+ @param request Request to initialize with.
+ */
+- (instancetype)initWithURLRequest:(NSURLRequest *)request;
+
+/**
+ Initializes a web socket with a given `NSURLRequest`, specifying a transport security policy (e.g. SSL configuration).
+
+ @param request        Request to initialize with.
+ @param securityPolicy Policy object describing transport security behavior.
+ */
+- (instancetype)initWithURLRequest:(NSURLRequest *)request securityPolicy:(SRSecurityPolicy *)securityPolicy;
+
+/**
+ Initializes a web socket with a given `NSURLRequest` and list of sub-protocols.
+
+ @param request   Request to initialize with.
+ @param protocols An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.
+ */
+- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols;
+
+/**
+ Initializes a web socket with a given `NSURLRequest`, list of sub-protocols and whether untrusted SSL certificates are allowed.
+
+ @param request                        Request to initialize with.
+ @param protocols                      An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.
+ @param allowsUntrustedSSLCertificates Boolean value indicating whether untrusted SSL certificates are allowed. Default: `false`.
+ */
+- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates
+    DEPRECATED_MSG_ATTRIBUTE("Disabling certificate chain validation is unsafe. "
+                             "Please use a proper Certificate Authority to issue your TLS certificates.");
+
+/**
+ Initializes a web socket with a given `NSURLRequest`, list of sub-protocols and whether untrusted SSL certificates are allowed.
+
+ @param request        Request to initialize with.
+ @param protocols      An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.
+ @param securityPolicy Policy object describing transport security behavior.
+ */
+- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols securityPolicy:(SRSecurityPolicy *)securityPolicy NS_DESIGNATED_INITIALIZER;
+
+/**
+ Initializes a web socket with a given `NSURL`.
+
+ @param url URL to initialize with.
+ */
+- (instancetype)initWithURL:(NSURL *)url;
+
+/**
+ Initializes a web socket with a given `NSURL` and list of sub-protocols.
+
+ @param url       URL to initialize with.
+ @param protocols An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.
+ */
+- (instancetype)initWithURL:(NSURL *)url protocols:(nullable NSArray<NSString *> *)protocols;
+
+/**
+ Initializes a web socket with a given `NSURL`, specifying a transport security policy (e.g. SSL configuration).
+
+ @param url            URL to initialize with.
+ @param securityPolicy Policy object describing transport security behavior.
+ */
+- (instancetype)initWithURL:(NSURL *)url securityPolicy:(SRSecurityPolicy *)securityPolicy;
+
+/**
+ Initializes a web socket with a given `NSURL`, list of sub-protocols and whether untrusted SSL certificates are allowed.
+
+ @param url                            URL to initialize with.
+ @param protocols                      An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.
+ @param allowsUntrustedSSLCertificates Boolean value indicating whether untrusted SSL certificates are allowed. Default: `false`.
+ */
+- (instancetype)initWithURL:(NSURL *)url protocols:(nullable NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates
+    DEPRECATED_MSG_ATTRIBUTE("Disabling certificate chain validation is unsafe. "
+                             "Please use a proper Certificate Authority to issue your TLS certificates.");
+
+/**
+ Unavailable initializer. Please use any other initializer.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Unavailable constructor. Please use any other initializer.
+ */
++ (instancetype)new NS_UNAVAILABLE;
+
+///--------------------------------------
+#pragma mark - Schedule
+///--------------------------------------
+
+/**
+ Schedules a received on a given run loop in a given mode.
+ By default, a web socket will schedule itself on `+[NSRunLoop SR_networkRunLoop]` using `NSDefaultRunLoopMode`.
+
+ @param runLoop The run loop on which to schedule the receiver.
+ @param mode     The mode for the run loop.
+ */
+- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode NS_SWIFT_NAME(schedule(in:forMode:));
+
+/**
+ Removes the receiver from a given run loop running in a given mode.
+
+ @param runLoop The run loop on which the receiver was scheduled.
+ @param mode    The mode for the run loop.
+ */
+- (void)unscheduleFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode NS_SWIFT_NAME(unschedule(from:forMode:));
+
+///--------------------------------------
+#pragma mark - Open / Close
+///--------------------------------------
+
+/**
+ Opens web socket, which will trigger connection, authentication and start receiving/sending events.
+ An instance of `SRWebSocket` is intended for one-time-use only. This method should be called once and only once.
+ */
+- (void)open;
+
+/**
+ Closes a web socket using `SRStatusCodeNormal` code and no reason.
+ */
+- (void)close;
+
+/**
+ Closes a web socket using a given code and reason.
+
+ @param code   Code to close the socket with.
+ @param reason Reason to send to the server or `nil`.
+ */
+- (void)closeWithCode:(NSInteger)code reason:(nullable NSString *)reason;
+
+///--------------------------------------
+#pragma mark Send
+///--------------------------------------
+
+/**
+ Send a UTF-8 string or binary data to the server.
+
+ @param message UTF-8 String or Data to send.
+
+ @deprecated Please use `sendString:` or `sendData` instead.
+ */
+- (void)send:(nullable id)message __attribute__((deprecated("Please use `sendString:error:` or `sendData:error:` instead.")));
+
+/**
+ Send a UTF-8 String to the server.
+
+ @param string String to send.
+ @param error  On input, a pointer to variable for an `NSError` object.
+ If an error occurs, this pointer is set to an `NSError` object containing information about the error.
+ You may specify `nil` to ignore the error information.
+
+ @return `YES` if the string was scheduled to send, otherwise - `NO`.
+ */
+- (BOOL)sendString:(NSString *)string error:(NSError **)error NS_SWIFT_NAME(send(string:));
+
+/**
+ Send binary data to the server.
+
+ @param data  Data to send.
+ @param error On input, a pointer to variable for an `NSError` object.
+ If an error occurs, this pointer is set to an `NSError` object containing information about the error.
+ You may specify `nil` to ignore the error information.
+
+ @return `YES` if the string was scheduled to send, otherwise - `NO`.
+ */
+- (BOOL)sendData:(nullable NSData *)data error:(NSError **)error NS_SWIFT_NAME(send(data:));
+
+/**
+ Send binary data to the server, without making a defensive copy of it first.
+
+ @param data  Data to send.
+ @param error On input, a pointer to variable for an `NSError` object.
+ If an error occurs, this pointer is set to an `NSError` object containing information about the error.
+ You may specify `nil` to ignore the error information.
+
+ @return `YES` if the string was scheduled to send, otherwise - `NO`.
+ */
+- (BOOL)sendDataNoCopy:(nullable NSData *)data error:(NSError **)error NS_SWIFT_NAME(send(dataNoCopy:));
+
+/**
+ Send Ping message to the server with optional data.
+
+ @param data  Instance of `NSData` or `nil`.
+ @param error On input, a pointer to variable for an `NSError` object.
+ If an error occurs, this pointer is set to an `NSError` object containing information about the error.
+ You may specify `nil` to ignore the error information.
+
+ @return `YES` if the string was scheduled to send, otherwise - `NO`.
+ */
+- (BOOL)sendPing:(nullable NSData *)data error:(NSError **)error NS_SWIFT_NAME(sendPing(_:));
+
+@end
+
+///--------------------------------------
+#pragma mark - SRWebSocketDelegate
+///--------------------------------------
+
+/**
+ The `SRWebSocketDelegate` protocol describes the methods that `SRWebSocket` objects
+ call on their delegates to handle status and messsage events.
+ */
+@protocol SRWebSocketDelegate <NSObject>
+
+@optional
+
+#pragma mark Receive Messages
+
+/**
+ Called when any message was received from a web socket.
+ This method is suboptimal and might be deprecated in a future release.
+
+ @param webSocket An instance of `SRWebSocket` that received a message.
+ @param message   Received message. Either a `String` or `NSData`.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
+
+/**
+ Called when a frame was received from a web socket.
+
+ @param webSocket An instance of `SRWebSocket` that received a message.
+ @param string    Received text in a form of UTF-8 `String`.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(NSString *)string;
+
+/**
+ Called when a frame was received from a web socket.
+
+ @param webSocket An instance of `SRWebSocket` that received a message.
+ @param data      Received data in a form of `NSData`.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithData:(NSData *)data;
+
+#pragma mark Status & Connection
+
+/**
+ Called when a given web socket was open and authenticated.
+
+ @param webSocket An instance of `SRWebSocket` that was open.
+ */
+- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
+
+/**
+ Called when a given web socket encountered an error.
+
+ @param webSocket An instance of `SRWebSocket` that failed with an error.
+ @param error     An instance of `NSError`.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
+
+/**
+ Called when a given web socket was closed.
+
+ @param webSocket An instance of `SRWebSocket` that was closed.
+ @param code      Code reported by the server.
+ @param reason    Reason in a form of a String that was reported by the server or `nil`.
+ @param wasClean  Boolean value indicating whether a socket was closed in a clean state.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(nullable NSString *)reason wasClean:(BOOL)wasClean;
+
+/**
+ Called on receive of a ping message from the server.
+
+ @param webSocket An instance of `SRWebSocket` that received a ping frame.
+ @param data      Payload that was received or `nil` if there was no payload.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didReceivePingWithData:(nullable NSData *)data;
+
+/**
+ Called when a pong data was received in response to ping.
+
+ @param webSocket An instance of `SRWebSocket` that received a pong frame.
+ @param pongData  Payload that was received or `nil` if there was no payload.
+ */
+- (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(nullable NSData *)pongData;
+
+/**
+ Sent before reporting a text frame to be able to configure if it shuold be convert to a UTF-8 String or passed as `NSData`.
+ If the method is not implemented - it will always convert text frames to String.
+
+ @param webSocket An instance of `SRWebSocket` that received a text frame.
+
+ @return `YES` if text frame should be converted to UTF-8 String, otherwise - `NO`. Default: `YES`.
+ */
+- (BOOL)webSocketShouldConvertTextFrameToString:(SRWebSocket *)webSocket NS_SWIFT_NAME(webSocketShouldConvertTextFrameToString(_:));
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRWebSocket.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SRWebSocket.m
new file mode 100644 (file)
index 0000000..83bf212
--- /dev/null
@@ -0,0 +1,1655 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import "SRWebSocket.h"
+
+#if __has_include(<unicode/utf8.h>)
+#define HAS_ICU
+#endif
+
+#ifdef HAS_ICU
+#import <unicode/utf8.h>
+#endif
+
+#import <os/lock.h>
+
+#import "SRDelegateController.h"
+#import "SRIOConsumer.h"
+#import "SRIOConsumerPool.h"
+#import "SRHash.h"
+#import "SRURLUtilities.h"
+#import "SRError.h"
+#import "NSURLRequest+SRWebSocket.h"
+#import "NSRunLoop+SRWebSocket.h"
+#import "SRProxyConnect.h"
+#import "SRSecurityPolicy.h"
+#import "SRHTTPConnectMessage.h"
+#import "SRRandom.h"
+#import "SRLog.h"
+#import "SRMutex.h"
+#import "SRSIMDHelpers.h"
+#import "NSURLRequest+SRWebSocketPrivate.h"
+#import "NSRunLoop+SRWebSocketPrivate.h"
+#import "SRConstants.h"
+
+#if !__has_feature(objc_arc)
+#error SocketRocket must be compiled with ARC enabled
+#endif
+
+__attribute__((used)) static void importCategories(void)
+{
+    import_NSURLRequest_SRWebSocket();
+    import_NSRunLoop_SRWebSocket();
+}
+
+typedef struct {
+    BOOL fin;
+    //  BOOL rsv1;
+    //  BOOL rsv2;
+    //  BOOL rsv3;
+    uint8_t opcode;
+    BOOL masked;
+    uint64_t payload_length;
+} frame_header;
+
+static NSString *const SRWebSocketAppendToSecKeyString = @"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
+
+static inline int32_t validate_dispatch_data_partial_string(NSData *data);
+
+static uint8_t const SRWebSocketProtocolVersion = 13;
+
+NSString *const SRWebSocketErrorDomain = @"SRWebSocketErrorDomain";
+NSString *const SRHTTPResponseErrorKey = @"HTTPResponseStatusCode";
+
+@interface SRWebSocket ()  <NSStreamDelegate>
+
+@property (atomic, assign, readwrite) SRReadyState readyState;
+
+// Specifies whether SSL trust chain should NOT be evaluated.
+// By default this flag is set to NO, meaning only secure SSL connections are allowed.
+// For DEBUG builds this flag is ignored, and SSL connections are allowed regardless
+// of the certificate trust configuration
+@property (nonatomic, assign, readwrite) BOOL allowsUntrustedSSLCertificates;
+
+@property (nonatomic, strong, readonly) SRDelegateController *delegateController;
+
+@end
+
+@implementation SRWebSocket {
+    SRMutex _kvoLock;
+    os_unfair_lock _propertyLock;
+
+    dispatch_queue_t _workQueue;
+    NSMutableArray<SRIOConsumer *> *_consumers;
+
+    NSInputStream *_inputStream;
+    NSOutputStream *_outputStream;
+
+    dispatch_data_t _readBuffer;
+    NSUInteger _readBufferOffset;
+
+    dispatch_data_t _outputBuffer;
+    NSUInteger _outputBufferOffset;
+
+    uint8_t _currentFrameOpcode;
+    size_t _currentFrameCount;
+    size_t _readOpCount;
+    uint32_t _currentStringScanPosition;
+    NSMutableData *_currentFrameData;
+
+    NSString *_closeReason;
+
+    NSString *_secKey;
+
+    SRSecurityPolicy *_securityPolicy;
+    BOOL _requestRequiresSSL;
+    BOOL _streamSecurityValidated;
+
+    uint8_t _currentReadMaskKey[4];
+    size_t _currentReadMaskOffset;
+
+    BOOL _closeWhenFinishedWriting;
+    BOOL _failed;
+
+    NSURLRequest *_urlRequest;
+
+    BOOL _sentClose;
+    BOOL _didFail;
+    BOOL _cleanupScheduled;
+    int _closeCode;
+
+    BOOL _isPumping;
+
+    NSMutableSet<NSArray *> *_scheduledRunloops; // Set<[RunLoop, Mode]>. TODO: (nlutsenko) Fix clowntown
+
+    // We use this to retain ourselves.
+    __strong SRWebSocket *_selfRetain;
+
+    NSArray<NSString *> *_requestedProtocols;
+    SRIOConsumerPool *_consumerPool;
+
+    // proxy support
+    SRProxyConnect *_proxyConnect;
+}
+
+@synthesize readyState = _readyState;
+
+///--------------------------------------
+#pragma mark - Init
+///--------------------------------------
+
+- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols securityPolicy:(SRSecurityPolicy *)securityPolicy
+{
+    self = [super init];
+    if (!self) return self;
+
+    assert(request.URL);
+    _url = request.URL;
+    _urlRequest = request;
+    _requestedProtocols = [protocols copy];
+    _securityPolicy = securityPolicy;
+    _requestRequiresSSL = SRURLRequiresSSL(_url);
+
+    _readyState = SR_CONNECTING;
+
+    _propertyLock = OS_UNFAIR_LOCK_INIT;
+    _kvoLock = SRMutexInitRecursive();
+    _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
+
+    // Going to set a specific on the queue so we can validate we're on the work queue
+    dispatch_queue_set_specific(_workQueue, (__bridge void *)self, (__bridge void *)(_workQueue), NULL);
+
+    _delegateController = [[SRDelegateController alloc] init];
+
+    _readBuffer = dispatch_data_empty;
+    _outputBuffer = dispatch_data_empty;
+
+    _currentFrameData = [[NSMutableData alloc] init];
+
+    _consumers = [[NSMutableArray alloc] init];
+
+    _consumerPool = [[SRIOConsumerPool alloc] init];
+
+    _scheduledRunloops = [[NSMutableSet alloc] init];
+
+    return self;
+}
+
+- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates
+{
+    SRSecurityPolicy *securityPolicy;
+    NSArray *pinnedCertificates = request.SR_SSLPinnedCertificates;
+    if (pinnedCertificates) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+        securityPolicy = [SRSecurityPolicy pinnningPolicyWithCertificates:pinnedCertificates];
+#pragma clang diagnostic pop
+    } else {
+        BOOL certificateChainValidationEnabled = !allowsUntrustedSSLCertificates;
+    securityPolicy = [[SRSecurityPolicy alloc] initWithCertificateChainValidationEnabled:certificateChainValidationEnabled];
+    }
+
+    return [self initWithURLRequest:request protocols:protocols securityPolicy:securityPolicy];
+}
+
+- (instancetype)initWithURLRequest:(NSURLRequest *)request securityPolicy:(SRSecurityPolicy *)securityPolicy
+{
+    return [self initWithURLRequest:request protocols:nil securityPolicy:securityPolicy];
+}
+
+- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols
+{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+    return [self initWithURLRequest:request protocols:protocols allowsUntrustedSSLCertificates:NO];
+#pragma clang diagnostic pop
+}
+
+- (instancetype)initWithURLRequest:(NSURLRequest *)request
+{
+    return [self initWithURLRequest:request protocols:nil];
+}
+
+- (instancetype)initWithURL:(NSURL *)url
+{
+    return [self initWithURL:url protocols:nil];
+}
+
+- (instancetype)initWithURL:(NSURL *)url protocols:(NSArray<NSString *> *)protocols
+{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+    return [self initWithURL:url protocols:protocols allowsUntrustedSSLCertificates:NO];
+#pragma clang diagnostic pop
+}
+
+- (instancetype)initWithURL:(NSURL *)url securityPolicy:(SRSecurityPolicy *)securityPolicy
+{
+    NSURLRequest *request = [NSURLRequest requestWithURL:url];
+    return [self initWithURLRequest:request protocols:nil securityPolicy:securityPolicy];
+}
+
+- (instancetype)initWithURL:(NSURL *)url protocols:(NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates
+{
+    NSURLRequest *request = [NSURLRequest requestWithURL:url];
+    return [self initWithURLRequest:request protocols:protocols allowsUntrustedSSLCertificates:allowsUntrustedSSLCertificates];
+}
+
+- (void)assertOnWorkQueue
+{
+    assert(dispatch_get_specific((__bridge void *)self) == (__bridge void *)_workQueue);
+}
+
+///--------------------------------------
+#pragma mark - Dealloc
+///--------------------------------------
+
+- (void)dealloc
+{
+    _inputStream.delegate = nil;
+    _outputStream.delegate = nil;
+
+    [_inputStream close];
+    [_outputStream close];
+
+    if (_receivedHTTPHeaders) {
+        CFRelease(_receivedHTTPHeaders);
+        _receivedHTTPHeaders = NULL;
+    }
+
+    SRMutexDestroy(_kvoLock);
+}
+
+///--------------------------------------
+#pragma mark - Accessors
+///--------------------------------------
+
+#pragma mark readyState
+
+- (void)setReadyState:(SRReadyState)readyState
+{
+    @try {
+        SRMutexLock(_kvoLock);
+        if (_readyState != readyState) {
+            [self willChangeValueForKey:@"readyState"];
+            os_unfair_lock_lock(&_propertyLock);
+            _readyState = readyState;
+            os_unfair_lock_unlock(&_propertyLock);
+            [self didChangeValueForKey:@"readyState"];
+        }
+    }
+    @finally {
+        SRMutexUnlock(_kvoLock);
+    }
+}
+
+- (SRReadyState)readyState
+{
+    SRReadyState state = 0;
+    os_unfair_lock_lock(&_propertyLock);
+    state = _readyState;
+    os_unfair_lock_unlock(&_propertyLock);
+    return state;
+}
+
++ (BOOL)automaticallyNotifiesObserversOfReadyState {
+    return NO;
+}
+
+///--------------------------------------
+#pragma mark - Open / Close
+///--------------------------------------
+
+- (void)open
+{
+    NSURL* const url = _url;
+    if (!url) {
+        NSError *error = SRErrorWithDomainCodeDescription(NSURLErrorDomain, NSURLErrorBadURL, @"Unable to open socket with emtpy URL.");
+        [self _failWithError:error];
+        return;
+    }
+    NSAssert(self.readyState == SR_CONNECTING, @"Cannot call -(void)open on SRWebSocket more than once.");
+
+    _selfRetain = self;
+
+    if (_urlRequest.timeoutInterval > 0) {
+        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_urlRequest.timeoutInterval * NSEC_PER_SEC));
+        __weak typeof(self) wself = self;
+        dispatch_after(popTime, dispatch_get_main_queue(), ^{
+            __strong SRWebSocket *sself = wself;
+            if (!sself) {
+                return;
+            }
+            if (sself.readyState == SR_CONNECTING) {
+                NSError *error = SRErrorWithDomainCodeDescription(NSURLErrorDomain, NSURLErrorTimedOut, @"Timed out connecting to server.");
+                [sself _failWithError:error];
+            }
+        });
+    }
+
+    _proxyConnect = [[SRProxyConnect alloc] initWithURL:url];
+
+    __weak typeof(self) wself = self;
+    [_proxyConnect openNetworkStreamWithCompletion:^(NSError *error, NSInputStream *readStream, NSOutputStream *writeStream) {
+        [wself _connectionDoneWithError:error readStream:readStream writeStream:writeStream];
+    }];
+}
+
+- (void)_connectionDoneWithError:(NSError *)error readStream:(NSInputStream *)readStream writeStream:(NSOutputStream *)writeStream
+{
+    if (error != nil) {
+        [self _failWithError:error];
+    } else {
+        _outputStream = writeStream;
+        _inputStream = readStream;
+
+        _inputStream.delegate = self;
+        _outputStream.delegate = self;
+        [self _updateSecureStreamOptions];
+
+        if (!_scheduledRunloops.count) {
+            [self scheduleInRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];
+        }
+
+        // If we don't require SSL validation - consider that we connected.
+        // Otherwise `didConnect` is called when SSL validation finishes.
+        if (!_requestRequiresSSL) {
+            dispatch_async(_workQueue, ^{
+                [self didConnect];
+            });
+        }
+    }
+    // Schedule to run on a work queue, to make sure we don't run this inline and deallocate `self` inside `SRProxyConnect`.
+    // TODO: (nlutsenko) Find a better structure for this, maybe Bolts Tasks?
+    dispatch_async(_workQueue, ^{
+        self->_proxyConnect = nil;
+    });
+}
+
+- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage
+{
+    NSString *acceptHeader = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR("Sec-WebSocket-Accept")));
+
+    if (acceptHeader == nil) {
+        return NO;
+    }
+
+    NSString *concattedString = [_secKey stringByAppendingString:SRWebSocketAppendToSecKeyString];
+    NSData *hashedString = SRSHA1HashFromString(concattedString);
+    NSString *expectedAccept = SRBase64EncodedStringFromData(hashedString);
+    return [acceptHeader isEqualToString:expectedAccept];
+}
+
+- (void)_HTTPHeadersDidFinish:(CFHTTPMessageRef)httpMessage
+{
+    NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(httpMessage);
+    if (responseCode >= 400) {
+        SRDebugLog(@"Request failed with response code %d", responseCode);
+        NSError *error = SRHTTPErrorWithCodeDescription(responseCode, 2132,
+                                                        [NSString stringWithFormat:@"Received bad response code from server: %d.",
+                                                         (int)responseCode]);
+        [self _failWithError:error];
+        return;
+    }
+
+    if(![self _checkHandshake:httpMessage]) {
+        NSError *error = SRErrorWithCodeDescription(2133, @"Invalid Sec-WebSocket-Accept response.");
+        [self _failWithError:error];
+        return;
+    }
+
+    NSString *negotiatedProtocol = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR("Sec-WebSocket-Protocol")));
+    if (negotiatedProtocol) {
+        // Make sure we requested the protocol
+        if ([_requestedProtocols indexOfObject:negotiatedProtocol] == NSNotFound) {
+            NSError *error = SRErrorWithCodeDescription(2133, @"Server specified Sec-WebSocket-Protocol that wasn't requested.");
+            [self _failWithError:error];
+            return;
+        }
+
+        _protocol = negotiatedProtocol;
+    }
+
+    self.readyState = SR_OPEN;
+
+    if (!_didFail) {
+        [self _readFrameNew];
+    }
+
+    [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+        if (availableMethods.didOpen) {
+            [delegate webSocketDidOpen:self];
+        }
+    }];
+}
+
+
+- (void)_readHTTPHeader
+{
+    if (_receivedHTTPHeaders == NULL) {
+        _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);
+    }
+
+    [self _readUntilHeaderCompleteWithCallback:^(SRWebSocket *socket,  NSData *data) {
+        if (!socket) {
+            return;
+        }
+        CFHTTPMessageRef receivedHTTPHeaders = socket->_receivedHTTPHeaders;
+
+        CFHTTPMessageAppendBytes(receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);
+
+        if (CFHTTPMessageIsHeaderComplete(receivedHTTPHeaders)) {
+            SRDebugLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(receivedHTTPHeaders)));
+            [socket _HTTPHeadersDidFinish:receivedHTTPHeaders];
+        } else {
+            [socket _readHTTPHeader];
+        }
+    }];
+}
+
+- (void)didConnect
+{
+    SRDebugLog(@"Connected");
+
+    _secKey = SRBase64EncodedStringFromData(SRRandomData(16));
+    assert([_secKey length] == 24);
+
+    CFHTTPMessageRef message = SRHTTPConnectMessageCreate(_urlRequest,
+                                                          _secKey,
+                                                          SRWebSocketProtocolVersion,
+                                                          self.requestCookies,
+                                                          _requestedProtocols);
+
+    NSData *messageData = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(message));
+
+    CFRelease(message);
+
+    [self _writeData:messageData];
+    [self _readHTTPHeader];
+}
+
+- (void)_updateSecureStreamOptions
+{
+    if (_requestRequiresSSL) {
+        SRDebugLog(@"Setting up security for streams.");
+        [_securityPolicy updateSecurityOptionsInStream:_inputStream];
+        [_securityPolicy updateSecurityOptionsInStream:_outputStream];
+    }
+
+    NSString *networkServiceType = SRStreamNetworkServiceTypeFromURLRequest(_urlRequest);
+    if (networkServiceType != nil) {
+        [_inputStream setProperty:networkServiceType forKey:NSStreamNetworkServiceType];
+        [_outputStream setProperty:networkServiceType forKey:NSStreamNetworkServiceType];
+    }
+}
+
+- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode
+{
+    [_outputStream scheduleInRunLoop:aRunLoop forMode:mode];
+    [_inputStream scheduleInRunLoop:aRunLoop forMode:mode];
+
+    [_scheduledRunloops addObject:@[aRunLoop, mode]];
+}
+
+- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode
+{
+    [_outputStream removeFromRunLoop:aRunLoop forMode:mode];
+    [_inputStream removeFromRunLoop:aRunLoop forMode:mode];
+
+    [_scheduledRunloops removeObject:@[aRunLoop, mode]];
+}
+
+- (void)close
+{
+    [self closeWithCode:SRStatusCodeNormal reason:nil];
+}
+
+- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason
+{
+    assert(code);
+    __weak typeof(self) wself = self;
+    dispatch_async(_workQueue, ^{
+        __strong SRWebSocket *sself = wself;
+        if (!sself) {
+          return;
+        }
+        if (sself.readyState == SR_CLOSING || sself.readyState == SR_CLOSED) {
+            return;
+        }
+
+        BOOL wasConnecting = sself.readyState == SR_CONNECTING;
+
+        sself.readyState = SR_CLOSING;
+
+        SRDebugLog(@"Closing with code %d reason %@", code, reason);
+
+        if (wasConnecting) {
+            [sself closeConnection];
+            return;
+        }
+
+        size_t maxMsgSize = [reason maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+        NSMutableData *mutablePayload = [[NSMutableData alloc] initWithLength:sizeof(uint16_t) + maxMsgSize];
+        NSData *payload = mutablePayload;
+
+        ((uint16_t *)mutablePayload.mutableBytes)[0] = CFSwapInt16BigToHost((uint16_t)code);
+
+        if (reason) {
+            NSRange remainingRange = {0};
+
+            NSUInteger usedLength = 0;
+
+            BOOL success = [reason getBytes:(char *)mutablePayload.mutableBytes + sizeof(uint16_t) maxLength:payload.length - sizeof(uint16_t) usedLength:&usedLength encoding:NSUTF8StringEncoding options:NSStringEncodingConversionExternalRepresentation range:NSMakeRange(0, reason.length) remainingRange:&remainingRange];
+#pragma unused (success)
+
+            assert(success);
+            assert(remainingRange.length == 0);
+
+            if (usedLength != maxMsgSize) {
+                payload = [payload subdataWithRange:NSMakeRange(0, usedLength + sizeof(uint16_t))];
+            }
+        }
+
+
+        [sself _sendFrameWithOpcode:SROpCodeConnectionClose data:payload];
+    });
+}
+
+- (void)_closeWithProtocolError:(NSString *)message
+{
+    // Need to shunt this on the _callbackQueue first to see if they received any messages
+    [self.delegateController performDelegateQueueBlock:^{
+        [self closeWithCode:SRStatusCodeProtocolError reason:message];
+        dispatch_async(self->_workQueue, ^{
+            [self closeConnection];
+        });
+    }];
+}
+
+- (void)_failWithError:(NSError *)error
+{
+    dispatch_async(_workQueue, ^{
+        if (self.readyState != SR_CLOSED) {
+            self->_failed = YES;
+            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+                if (availableMethods.didFailWithError) {
+                    [delegate webSocket:self didFailWithError:error];
+                }
+            }];
+
+            self.readyState = SR_CLOSED;
+
+            SRDebugLog(@"Failing with error %@", error.localizedDescription);
+
+            [self closeConnection];
+            [self _scheduleCleanup];
+        }
+    });
+}
+
+- (void)_writeData:(NSData *)data
+{
+    [self assertOnWorkQueue];
+
+    if (_closeWhenFinishedWriting) {
+        return;
+    }
+
+    __block NSData *strongData = data;
+    dispatch_data_t newData = dispatch_data_create(data.bytes, data.length, nil, ^{
+        strongData = nil;
+    });
+    (void)strongData;
+    _outputBuffer = dispatch_data_create_concat(_outputBuffer, newData);
+    [self _pumpWriting];
+}
+
+- (void)send:(nullable id)message
+{
+    if (!message) {
+        [self sendData:nil error:nil]; // Send Data, but it doesn't matter since we are going to send the same text frame with 0 length.
+    } else if ([message isKindOfClass:[NSString class]]) {
+        [self sendString:(NSString *_Nonnull)message error:nil];
+    } else if ([message isKindOfClass:[NSData class]]) {
+        [self sendData:message error:nil];
+    } else {
+        NSAssert(NO, @"Unrecognized message. Not able to send anything other than a String or NSData.");
+    }
+}
+
+- (BOOL)sendString:(NSString *)string error:(NSError **)error
+{
+    if (self.readyState != SR_OPEN) {
+        NSString *message = @"Invalid State: Cannot call `sendString:error:` until connection is open.";
+        if (error) {
+            *error = SRErrorWithCodeDescription(2134, message);
+        }
+        SRDebugLog(message);
+        return NO;
+    }
+
+    string = [string copy];
+    dispatch_async(_workQueue, ^{
+        [self _sendFrameWithOpcode:SROpCodeTextFrame data:[string dataUsingEncoding:NSUTF8StringEncoding]];
+    });
+    return YES;
+}
+
+- (BOOL)sendData:(nullable NSData *)data error:(NSError **)error
+{
+    data = [data copy];
+    return [self sendDataNoCopy:data error:error];
+}
+
+- (BOOL)sendDataNoCopy:(nullable NSData *)data error:(NSError **)error
+{
+    if (self.readyState != SR_OPEN) {
+        NSString *message = @"Invalid State: Cannot call `sendDataNoCopy:error:` until connection is open.";
+        if (error) {
+            *error = SRErrorWithCodeDescription(2134, message);
+        }
+        SRDebugLog(message);
+        return NO;
+    }
+
+    dispatch_async(_workQueue, ^{
+        if (data) {
+            [self _sendFrameWithOpcode:SROpCodeBinaryFrame data:data];
+        } else {
+            [self _sendFrameWithOpcode:SROpCodeTextFrame data:nil];
+        }
+    });
+    return YES;
+}
+
+- (BOOL)sendPing:(nullable NSData *)data error:(NSError **)error
+{
+    if (self.readyState != SR_OPEN) {
+        NSString *message = @"Invalid State: Cannot call `sendPing:error:` until connection is open.";
+        if (error) {
+            *error = SRErrorWithCodeDescription(2134, message);
+        }
+        SRDebugLog(message);
+        return NO;
+    }
+
+    data = [data copy] ?: [NSData data]; // It's okay for a ping to be empty
+    dispatch_async(_workQueue, ^{
+        [self _sendFrameWithOpcode:SROpCodePing data:data];
+    });
+    return YES;
+}
+
+- (void)_handlePingWithData:(nullable NSData *)data
+{
+    // Need to pingpong this off _callbackQueue first to make sure messages happen in order
+    [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate> _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+        if (availableMethods.didReceivePing) {
+            [delegate webSocket:self didReceivePingWithData:data];
+        }
+        dispatch_async(self->_workQueue, ^{
+            [self _sendFrameWithOpcode:SROpCodePong data:data];
+        });
+    }];
+}
+
+- (void)handlePong:(NSData *)pongData
+{
+    SRDebugLog(@"Received pong");
+    [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+        if (availableMethods.didReceivePong) {
+            [delegate webSocket:self didReceivePong:pongData];
+        }
+    }];
+}
+
+
+static inline BOOL closeCodeIsValid(int closeCode) {
+    if (closeCode < 1000) {
+        return NO;
+    }
+
+    if (closeCode >= 1000 && closeCode <= 1011) {
+        if (closeCode == 1004 ||
+            closeCode == 1005 ||
+            closeCode == 1006) {
+            return NO;
+        }
+        return YES;
+    }
+
+    if (closeCode >= 3000 && closeCode <= 3999) {
+        return YES;
+    }
+
+    if (closeCode >= 4000 && closeCode <= 4999) {
+        return YES;
+    }
+
+    return NO;
+}
+
+//  Note from RFC:
+//
+//  If there is a body, the first two
+//  bytes of the body MUST be a 2-byte unsigned integer (in network byte
+//  order) representing a status code with value /code/ defined in
+//  Section 7.4.  Following the 2-byte integer the body MAY contain UTF-8
+//  encoded data with value /reason/, the interpretation of which is not
+//  defined by this specification.
+
+- (void)handleCloseWithData:(NSData *)data
+{
+    size_t dataSize = data.length;
+    __block uint16_t closeCode = 0;
+
+    SRDebugLog(@"Received close frame");
+
+    if (dataSize == 1) {
+        // TODO handle error
+        [self _closeWithProtocolError:@"Payload for close must be larger than 2 bytes"];
+        return;
+    } else if (dataSize >= 2) {
+        [data getBytes:&closeCode length:sizeof(closeCode)];
+        _closeCode = CFSwapInt16BigToHost(closeCode);
+        if (!closeCodeIsValid(_closeCode)) {
+            [self _closeWithProtocolError:[NSString stringWithFormat:@"Cannot have close code of %d", _closeCode]];
+            return;
+        }
+        if (dataSize > 2) {
+            _closeReason = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(2, dataSize - 2)] encoding:NSUTF8StringEncoding];
+            if (!_closeReason) {
+                [self _closeWithProtocolError:@"Close reason MUST be valid UTF-8"];
+                return;
+            }
+        }
+    } else {
+        _closeCode = SRStatusNoStatusReceived;
+    }
+
+    [self assertOnWorkQueue];
+
+    if (self.readyState == SR_OPEN) {
+        [self closeWithCode:1000 reason:nil];
+    }
+    dispatch_async(_workQueue, ^{
+        [self closeConnection];
+    });
+}
+
+- (void)closeConnection
+{
+    [self assertOnWorkQueue];
+    SRDebugLog(@"Trying to disconnect");
+    _closeWhenFinishedWriting = YES;
+    [self _pumpWriting];
+}
+
+- (void)_handleFrameWithData:(NSData *)frameData opCode:(SROpCode)opcode
+{
+    // Check that the current data is valid UTF8
+
+    BOOL isControlFrame = (opcode == SROpCodePing || opcode == SROpCodePong || opcode == SROpCodeConnectionClose);
+    if (isControlFrame) {
+        //frameData will be copied before passing to handlers
+        //otherwise there can be misbehaviours when value at the pointer is changed
+        frameData = [frameData copy];
+
+        dispatch_async(_workQueue, ^{
+            [self _readFrameContinue];
+        });
+    } else {
+        [self _readFrameNew];
+    }
+
+    switch (opcode) {
+        case SROpCodeTextFrame: {
+            NSString *string = [[NSString alloc] initWithData:frameData encoding:NSUTF8StringEncoding];
+            if (!string && frameData) {
+                [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8."];
+                dispatch_async(_workQueue, ^{
+                    [self closeConnection];
+                });
+                return;
+            }
+            SRDebugLog(@"Received text message.");
+            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+                // Don't convert into string - iff `delegate` tells us not to. Otherwise - create UTF8 string and handle that.
+                if (availableMethods.shouldConvertTextFrameToString && ![delegate webSocketShouldConvertTextFrameToString:self]) {
+                    if (availableMethods.didReceiveMessage) {
+                        [delegate webSocket:self didReceiveMessage:frameData];
+                    }
+                    if (availableMethods.didReceiveMessageWithData) {
+                        [delegate webSocket:self didReceiveMessageWithData:frameData];
+                    }
+                } else {
+                    if (availableMethods.didReceiveMessage) {
+                        [delegate webSocket:self didReceiveMessage:string];
+                    }
+                    if (availableMethods.didReceiveMessageWithString) {
+                        [delegate webSocket:self didReceiveMessageWithString:string];
+                    }
+                }
+            }];
+            break;
+        }
+        case SROpCodeBinaryFrame: {
+            SRDebugLog(@"Received data message.");
+            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+                if (availableMethods.didReceiveMessage) {
+                    [delegate webSocket:self didReceiveMessage:frameData];
+                }
+                if (availableMethods.didReceiveMessageWithData) {
+                    [delegate webSocket:self didReceiveMessageWithData:frameData];
+                }
+            }];
+        }
+            break;
+        case SROpCodeConnectionClose:
+            [self handleCloseWithData:frameData];
+            break;
+        case SROpCodePing:
+            [self _handlePingWithData:frameData];
+            break;
+        case SROpCodePong:
+            [self handlePong:frameData];
+            break;
+        default:
+            [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %ld", (long)opcode]];
+            // TODO: Handle invalid opcode
+            break;
+    }
+}
+
+- (void)_handleFrameHeader:(frame_header)frame_header curData:(NSData *)curData
+{
+    assert(frame_header.opcode != 0);
+
+    if (self.readyState == SR_CLOSED) {
+        return;
+    }
+
+
+    BOOL isControlFrame = (frame_header.opcode == SROpCodePing || frame_header.opcode == SROpCodePong || frame_header.opcode == SROpCodeConnectionClose);
+
+    if (isControlFrame && !frame_header.fin) {
+        [self _closeWithProtocolError:@"Fragmented control frames not allowed"];
+        return;
+    }
+
+    if (isControlFrame && frame_header.payload_length >= 126) {
+        [self _closeWithProtocolError:@"Control frames cannot have payloads larger than 126 bytes"];
+        return;
+    }
+
+    if (!isControlFrame) {
+        _currentFrameOpcode = frame_header.opcode;
+        _currentFrameCount += 1;
+    }
+
+    if (frame_header.payload_length == 0) {
+        if (isControlFrame) {
+            [self _handleFrameWithData:curData opCode:frame_header.opcode];
+        } else {
+            if (frame_header.fin) {
+                [self _handleFrameWithData:_currentFrameData opCode:frame_header.opcode];
+            } else {
+                // TODO add assert that opcode is not a control;
+                [self _readFrameContinue];
+            }
+        }
+    } else {
+        assert(frame_header.payload_length <= SIZE_T_MAX);
+        [self _addConsumerWithDataLength:(size_t)frame_header.payload_length callback:^(SRWebSocket *sself, NSData *newData) {
+            if (isControlFrame) {
+                [sself _handleFrameWithData:newData opCode:frame_header.opcode];
+            } else {
+                if (frame_header.fin) {
+                    [sself _handleFrameWithData:sself->_currentFrameData opCode:frame_header.opcode];
+                } else {
+                    // TODO add assert that opcode is not a control;
+                    [sself _readFrameContinue];
+                }
+            }
+        } readToCurrentFrame:!isControlFrame unmaskBytes:frame_header.masked];
+    }
+}
+
+/* From RFC:
+
+ 0                   1                   2                   3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-------+-+-------------+-------------------------------+
+ |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
+ |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
+ |N|V|V|V|       |S|             |   (if payload len==126/127)   |
+ | |1|2|3|       |K|             |                               |
+ +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
+ |     Extended payload length continued, if payload len == 127  |
+ + - - - - - - - - - - - - - - - +-------------------------------+
+ |                               |Masking-key, if MASK set to 1  |
+ +-------------------------------+-------------------------------+
+ | Masking-key (continued)       |          Payload Data         |
+ +-------------------------------- - - - - - - - - - - - - - - - +
+ :                     Payload Data continued ...                :
+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+ |                     Payload Data continued ...                |
+ +---------------------------------------------------------------+
+ */
+
+static const uint8_t SRFinMask          = 0x80;
+static const uint8_t SROpCodeMask       = 0x0F;
+static const uint8_t SRRsvMask          = 0x70;
+static const uint8_t SRMaskMask         = 0x80;
+static const uint8_t SRPayloadLenMask   = 0x7F;
+
+
+- (void)_readFrameContinue
+{
+    assert((_currentFrameCount == 0 && _currentFrameOpcode == 0) || (_currentFrameCount > 0 && _currentFrameOpcode > 0));
+
+    [self _addConsumerWithDataLength:2 callback:^(SRWebSocket *sself, NSData *data) {
+        __block frame_header header = {0};
+
+        const uint8_t *headerBuffer = data.bytes;
+        assert(data.length >= 2);
+
+        if (headerBuffer[0] & SRRsvMask) {
+            [sself _closeWithProtocolError:@"Server used RSV bits"];
+            return;
+        }
+
+        uint8_t receivedOpcode = (SROpCodeMask & headerBuffer[0]);
+
+        BOOL isControlFrame = (receivedOpcode == SROpCodePing || receivedOpcode == SROpCodePong || receivedOpcode == SROpCodeConnectionClose);
+
+        if (!isControlFrame && receivedOpcode != 0 && sself->_currentFrameCount > 0) {
+            [sself _closeWithProtocolError:@"all data frames after the initial data frame must have opcode 0"];
+            return;
+        }
+
+        if (receivedOpcode == 0 && sself->_currentFrameCount == 0) {
+            [sself _closeWithProtocolError:@"cannot continue a message"];
+            return;
+        }
+
+        header.opcode = receivedOpcode == 0 ? sself->_currentFrameOpcode : receivedOpcode;
+
+        header.fin = !!(SRFinMask & headerBuffer[0]);
+
+
+        header.masked = !!(SRMaskMask & headerBuffer[1]);
+        header.payload_length = SRPayloadLenMask & headerBuffer[1];
+
+        headerBuffer = NULL;
+
+        if (header.masked) {
+            [sself _closeWithProtocolError:@"Client must receive unmasked data"];
+            return;
+        }
+
+        size_t extra_bytes_needed = header.masked ? sizeof(sself->_currentReadMaskKey) : 0;
+
+        if (header.payload_length == 126) {
+            extra_bytes_needed += sizeof(uint16_t);
+        } else if (header.payload_length == 127) {
+            extra_bytes_needed += sizeof(uint64_t);
+        }
+
+        if (extra_bytes_needed == 0) {
+            [sself _handleFrameHeader:header curData:sself->_currentFrameData];
+        } else {
+            [sself _addConsumerWithDataLength:extra_bytes_needed callback:^(SRWebSocket *eself, NSData *edata) {
+                size_t mapped_size = edata.length;
+#pragma unused (mapped_size)
+                const void *mapped_buffer = edata.bytes;
+                size_t offset = 0;
+
+                if (header.payload_length == 126) {
+                    assert(mapped_size >= sizeof(uint16_t));
+                    uint16_t payloadLength = 0;
+                    memcpy(&payloadLength, mapped_buffer, sizeof(uint16_t));
+                    payloadLength = CFSwapInt16BigToHost(payloadLength);
+
+                    header.payload_length = payloadLength;
+                    offset += sizeof(uint16_t);
+                } else if (header.payload_length == 127) {
+                    assert(mapped_size >= sizeof(uint64_t));
+                    uint64_t payloadLength = 0;
+                    memcpy(&payloadLength, mapped_buffer, sizeof(uint64_t));
+                    payloadLength = CFSwapInt64BigToHost(payloadLength);
+
+                    header.payload_length = payloadLength;
+                    offset += sizeof(uint64_t);
+                } else {
+                    assert(header.payload_length < 126 && header.payload_length >= 0);
+                }
+
+                if (header.masked) {
+                    assert(mapped_size >= sizeof(eself->_currentReadMaskOffset) + offset);
+                    memcpy(eself->_currentReadMaskKey, ((uint8_t *)mapped_buffer) + offset, sizeof(eself->_currentReadMaskKey));
+                }
+
+                [eself _handleFrameHeader:header curData:eself->_currentFrameData];
+            } readToCurrentFrame:NO unmaskBytes:NO];
+        }
+    } readToCurrentFrame:NO unmaskBytes:NO];
+}
+
+- (void)_readFrameNew
+{
+    dispatch_async(_workQueue, ^{
+        // Don't reset the length, since Apple doesn't guarantee that this will free the memory (and in tests on
+        // some platforms, it doesn't seem to, effectively causing a leak the size of the biggest frame so far).
+        self->_currentFrameData = [[NSMutableData alloc] init];
+
+        self->_currentFrameOpcode = 0;
+        self->_currentFrameCount = 0;
+        self->_readOpCount = 0;
+        self->_currentStringScanPosition = 0;
+
+        [self _readFrameContinue];
+    });
+}
+
+- (void)_pumpWriting
+{
+    [self assertOnWorkQueue];
+
+    NSUInteger dataLength = dispatch_data_get_size(_outputBuffer);
+    if (dataLength - _outputBufferOffset > 0 && _outputStream.hasSpaceAvailable) {
+        __block NSInteger bytesWritten = 0;
+        __block BOOL streamFailed = NO;
+
+        dispatch_data_t dataToSend = dispatch_data_create_subrange(_outputBuffer, _outputBufferOffset, dataLength - _outputBufferOffset);
+        dispatch_data_apply(dataToSend, ^bool(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {
+            NSInteger sentLength = [_outputStream write:buffer maxLength:size];
+            if (sentLength == -1) {
+                streamFailed = YES;
+                return false;
+            }
+            bytesWritten += sentLength;
+            return (sentLength >= (NSInteger)size); // If we can't write all the data into the stream - bail-out early.
+        });
+        if (streamFailed) {
+            NSInteger code = 2145;
+            NSString *description = @"Error writing to stream.";
+            NSError *streamError = _outputStream.streamError;
+            NSError *error = streamError ? SRErrorWithCodeDescriptionUnderlyingError(code, description, streamError) : SRErrorWithCodeDescription(code, description);
+            [self _failWithError:error];
+            return;
+        }
+
+        _outputBufferOffset += bytesWritten;
+
+        if (_outputBufferOffset > SRDefaultBufferSize() && _outputBufferOffset > dataLength / 2) {
+            _outputBuffer = dispatch_data_create_subrange(_outputBuffer, _outputBufferOffset, dataLength - _outputBufferOffset);
+            _outputBufferOffset = 0;
+        }
+    }
+
+    if (_closeWhenFinishedWriting &&
+        (dispatch_data_get_size(_outputBuffer) - _outputBufferOffset) == 0 &&
+        (_inputStream.streamStatus != NSStreamStatusNotOpen &&
+         _inputStream.streamStatus != NSStreamStatusClosed) &&
+        !_sentClose) {
+        _sentClose = YES;
+
+        @synchronized(self) {
+            [_outputStream close];
+            [_inputStream close];
+
+
+            for (NSArray *runLoop in [_scheduledRunloops copy]) {
+                [self unscheduleFromRunLoop:[runLoop objectAtIndex:0] forMode:[runLoop objectAtIndex:1]];
+            }
+        }
+
+        if (!_failed) {
+            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+                if (availableMethods.didCloseWithCode) {
+                    [delegate webSocket:self didCloseWithCode:self->_closeCode reason:self->_closeReason wasClean:YES];
+                }
+            }];
+        }
+
+        [self _scheduleCleanup];
+    }
+}
+
+- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback
+{
+    [self assertOnWorkQueue];
+    [self _addConsumerWithScanner:consumer callback:callback dataLength:0];
+}
+
+- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes
+{
+    [self assertOnWorkQueue];
+    assert(dataLength);
+
+    [_consumers addObject:[_consumerPool consumerWithScanner:nil handler:callback bytesNeeded:dataLength readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes]];
+    [self _pumpScanner];
+}
+
+- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength
+{
+    [self assertOnWorkQueue];
+    [_consumers addObject:[_consumerPool consumerWithScanner:consumer handler:callback bytesNeeded:dataLength readToCurrentFrame:NO unmaskBytes:NO]];
+    [self _pumpScanner];
+}
+
+
+- (void)_scheduleCleanup
+{
+    @synchronized(self) {
+        if (_cleanupScheduled) {
+            return;
+        }
+
+        _cleanupScheduled = YES;
+
+        // Cleanup NSStream delegate's in the same RunLoop used by the streams themselves:
+        // This way we'll prevent race conditions between handleEvent and SRWebsocket's dealloc
+        NSTimer *timer = [NSTimer timerWithTimeInterval:(0.0f) target:self selector:@selector(_cleanupSelfReference:) userInfo:nil repeats:NO];
+        [[NSRunLoop SR_networkRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
+    }
+}
+
+- (void)_cleanupSelfReference:(NSTimer *)timer
+{
+    @synchronized(self) {
+        // Nuke NSStream delegate's
+        _inputStream.delegate = nil;
+        _outputStream.delegate = nil;
+
+        // Remove the streams, right now, from the networkRunLoop
+        [_inputStream close];
+        [_outputStream close];
+    }
+
+    // Cleanup selfRetain in the same GCD queue as usual
+    dispatch_async(_workQueue, ^{
+        self->_selfRetain = nil;
+    });
+}
+
+
+static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'};
+
+- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler
+{
+    [self _readUntilBytes:CRLFCRLFBytes length:sizeof(CRLFCRLFBytes) callback:dataHandler];
+}
+
+- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler
+{
+    // TODO optimize so this can continue from where we last searched
+    stream_scanner consumer = ^size_t(NSData *data) {
+        __block size_t found_size = 0;
+        __block size_t match_count = 0;
+
+        size_t size = data.length;
+        const unsigned char *buffer = data.bytes;
+        for (size_t i = 0; i < size; i++ ) {
+            if (((const unsigned char *)buffer)[i] == ((const unsigned char *)bytes)[match_count]) {
+                match_count += 1;
+                if (match_count == length) {
+                    found_size = i + 1;
+                    break;
+                }
+            } else {
+                match_count = 0;
+            }
+        }
+        return found_size;
+    };
+    [self _addConsumerWithScanner:consumer callback:dataHandler];
+}
+
+
+// Returns true if did work
+- (BOOL)_innerPumpScanner {
+
+    BOOL didWork = NO;
+
+    if (self.readyState >= SR_CLOSED) {
+        return didWork;
+    }
+
+    size_t readBufferSize = dispatch_data_get_size(_readBuffer);
+
+    if (!_consumers.count) {
+        return didWork;
+    }
+
+    size_t curSize = readBufferSize - _readBufferOffset;
+    if (!curSize) {
+        return didWork;
+    }
+
+    SRIOConsumer *consumer = [_consumers objectAtIndex:0];
+
+    size_t bytesNeeded = consumer.bytesNeeded;
+
+    size_t foundSize = 0;
+    if (consumer.consumer) {
+        NSData *subdata = (NSData *)dispatch_data_create_subrange(_readBuffer, _readBufferOffset, readBufferSize - _readBufferOffset);
+        foundSize = consumer.consumer(subdata);
+    } else {
+        assert(consumer.bytesNeeded);
+        if (curSize >= bytesNeeded) {
+            foundSize = bytesNeeded;
+        } else if (consumer.readToCurrentFrame) {
+            foundSize = curSize;
+        }
+    }
+
+    if (consumer.readToCurrentFrame || foundSize) {
+        dispatch_data_t slice = dispatch_data_create_subrange(_readBuffer, _readBufferOffset, foundSize);
+
+        _readBufferOffset += foundSize;
+
+        if (_readBufferOffset > SRDefaultBufferSize() && _readBufferOffset > readBufferSize / 2) {
+            _readBuffer = dispatch_data_create_subrange(_readBuffer, _readBufferOffset, readBufferSize - _readBufferOffset);
+            _readBufferOffset = 0;
+        }
+
+        if (consumer.unmaskBytes) {
+            __block NSMutableData *mutableSlice = [slice mutableCopy];
+
+            NSUInteger len = mutableSlice.length;
+            uint8_t *bytes = mutableSlice.mutableBytes;
+
+            for (NSUInteger i = 0; i < len; i++) {
+                bytes[i] = bytes[i] ^ _currentReadMaskKey[_currentReadMaskOffset % sizeof(_currentReadMaskKey)];
+                _currentReadMaskOffset += 1;
+            }
+
+            slice = dispatch_data_create(bytes, len, nil, ^{
+                mutableSlice = nil;
+            });
+        }
+
+        if (consumer.readToCurrentFrame) {
+            dispatch_data_apply(slice, ^bool(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {
+                [_currentFrameData appendBytes:buffer length:size];
+                return true;
+            });
+
+            _readOpCount += 1;
+
+            if (_currentFrameOpcode == SROpCodeTextFrame) {
+                // Validate UTF8 stuff.
+                size_t currentDataSize = _currentFrameData.length;
+                if (_currentFrameOpcode == SROpCodeTextFrame && currentDataSize > 0) {
+                    // TODO: Optimize the crap out of this.  Don't really have to copy all the data each time
+
+                    size_t scanSize = currentDataSize - _currentStringScanPosition;
+
+                    NSData *scan_data = [_currentFrameData subdataWithRange:NSMakeRange(_currentStringScanPosition, scanSize)];
+                    int32_t valid_utf8_size = validate_dispatch_data_partial_string(scan_data);
+
+                    if (valid_utf8_size == -1) {
+                        [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
+                        dispatch_async(_workQueue, ^{
+                            [self closeConnection];
+                        });
+                        return didWork;
+                    } else {
+                        _currentStringScanPosition += valid_utf8_size;
+                    }
+                }
+
+            }
+
+            consumer.bytesNeeded -= foundSize;
+
+            if (consumer.bytesNeeded == 0) {
+                [_consumers removeObjectAtIndex:0];
+                consumer.handler(self, nil);
+                [_consumerPool returnConsumer:consumer];
+                didWork = YES;
+            }
+        } else if (foundSize) {
+            [_consumers removeObjectAtIndex:0];
+            consumer.handler(self, (NSData *)slice);
+            [_consumerPool returnConsumer:consumer];
+            didWork = YES;
+        }
+    }
+    return didWork;
+}
+
+-(void)_pumpScanner
+{
+    [self assertOnWorkQueue];
+
+    if (!_isPumping) {
+        _isPumping = YES;
+    } else {
+        return;
+    }
+
+    while ([self _innerPumpScanner]) {
+
+    }
+
+    _isPumping = NO;
+}
+
+//#define NOMASK
+
+static const size_t SRFrameHeaderOverhead = 32;
+
+- (void)_sendFrameWithOpcode:(SROpCode)opCode data:(NSData *)data
+{
+    [self assertOnWorkQueue];
+
+    if (!data) {
+        return;
+    }
+
+    size_t payloadLength = data.length;
+
+    NSMutableData *frameData = [[NSMutableData alloc] initWithLength:payloadLength + SRFrameHeaderOverhead];
+    if (!frameData) {
+        [self closeWithCode:SRStatusCodeMessageTooBig reason:@"Message too big"];
+        return;
+    }
+    uint8_t *frameBuffer = (uint8_t *)frameData.mutableBytes;
+
+    // set fin
+    frameBuffer[0] = SRFinMask | opCode;
+
+    // set the mask and header
+    frameBuffer[1] |= SRMaskMask;
+
+    size_t frameBufferSize = 2;
+
+    if (payloadLength < 126) {
+        frameBuffer[1] |= payloadLength;
+    } else {
+        uint64_t declaredPayloadLength = 0;
+        size_t declaredPayloadLengthSize = 0;
+
+        if (payloadLength <= UINT16_MAX) {
+            frameBuffer[1] |= 126;
+
+            declaredPayloadLength = CFSwapInt16BigToHost((uint16_t)payloadLength);
+            declaredPayloadLengthSize = sizeof(uint16_t);
+        } else {
+            frameBuffer[1] |= 127;
+
+            declaredPayloadLength = CFSwapInt64BigToHost((uint64_t)payloadLength);
+            declaredPayloadLengthSize = sizeof(uint64_t);
+        }
+
+        memcpy((frameBuffer + frameBufferSize), &declaredPayloadLength, declaredPayloadLengthSize);
+        frameBufferSize += declaredPayloadLengthSize;
+    }
+
+    const uint8_t *unmaskedPayloadBuffer = (uint8_t *)data.bytes;
+    uint8_t *maskKey = frameBuffer + frameBufferSize;
+
+    size_t randomBytesSize = sizeof(uint32_t);
+    NSData *randomData = SRRandomData(randomBytesSize);
+    [randomData getBytes:maskKey range:NSMakeRange(0, randomBytesSize)];
+    frameBufferSize += randomBytesSize;
+
+    // Copy and unmask the buffer
+    uint8_t *frameBufferPayloadPointer = frameBuffer + frameBufferSize;
+
+    memcpy(frameBufferPayloadPointer, unmaskedPayloadBuffer, payloadLength);
+    SRMaskBytesSIMD(frameBufferPayloadPointer, payloadLength, maskKey);
+    frameBufferSize += payloadLength;
+
+    assert(frameBufferSize <= frameData.length);
+    frameData.length = frameBufferSize;
+
+    [self _writeData:frameData];
+}
+
+- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
+{
+    __weak typeof(self) wself = self;
+
+    if (_requestRequiresSSL && !_streamSecurityValidated &&
+        (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) {
+        SecTrustRef trust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust];
+        if (trust) {
+            NSString *const host = _urlRequest.URL.host;
+            if (!host || host.length == 0) {
+                dispatch_async(_workQueue, ^{
+                    NSError *error = SRErrorWithDomainCodeDescription(NSURLErrorDomain,
+                                                                      NSURLErrorBadURL,
+                                                                      @"Unable to validate certificate for empty host.");
+                    [wself _failWithError:error];
+                });
+                return;
+            }
+            _streamSecurityValidated = [_securityPolicy evaluateServerTrust:trust forDomain:host];
+        }
+        if (!_streamSecurityValidated) {
+            dispatch_async(_workQueue, ^{
+                NSError *error = SRErrorWithDomainCodeDescription(NSURLErrorDomain,
+                                                                  NSURLErrorClientCertificateRejected,
+                                                                  @"Invalid server certificate.");
+                [wself _failWithError:error];
+            });
+            return;
+        }
+        dispatch_async(_workQueue, ^{
+            [self didConnect];
+        });
+    }
+    dispatch_async(_workQueue, ^{
+        [wself safeHandleEvent:eventCode stream:aStream];
+    });
+}
+
+- (void)safeHandleEvent:(NSStreamEvent)eventCode stream:(NSStream *)aStream
+{
+    switch (eventCode) {
+        case NSStreamEventOpenCompleted: {
+            SRDebugLog(@"NSStreamEventOpenCompleted %@", aStream);
+            if (self.readyState >= SR_CLOSING) {
+                return;
+            }
+            assert(_readBuffer);
+
+            if (!_requestRequiresSSL && self.readyState == SR_CONNECTING && aStream == _inputStream) {
+                [self didConnect];
+            }
+
+            [self _pumpWriting];
+            [self _pumpScanner];
+
+            break;
+        }
+
+        case NSStreamEventErrorOccurred: {
+            SRDebugLog(@"NSStreamEventErrorOccurred %@ %@", aStream, [[aStream streamError] copy]);
+            /// TODO specify error better!
+            [self _failWithError:aStream.streamError];
+            _readBufferOffset = 0;
+            _readBuffer = dispatch_data_empty;
+            break;
+
+        }
+
+        case NSStreamEventEndEncountered: {
+            [self _pumpScanner];
+            SRDebugLog(@"NSStreamEventEndEncountered %@", aStream);
+            if (aStream.streamError) {
+                [self _failWithError:aStream.streamError];
+            } else {
+                dispatch_async(_workQueue, ^{
+                    if (self.readyState != SR_CLOSED) {
+                        self.readyState = SR_CLOSED;
+                        [self _scheduleCleanup];
+                    }
+
+                    if (!self->_sentClose && !self->_failed) {
+                        self->_sentClose = YES;
+                        // If we get closed in this state it's probably not clean because we should be sending this when we send messages
+                        [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {
+                            if (availableMethods.didCloseWithCode) {
+                                [delegate webSocket:self
+                                   didCloseWithCode:SRStatusCodeGoingAway
+                                             reason:@"Stream end encountered"
+                                           wasClean:NO];
+                            }
+                        }];
+                    }
+                });
+            }
+
+            break;
+        }
+
+        case NSStreamEventHasBytesAvailable: {
+            SRDebugLog(@"NSStreamEventHasBytesAvailable %@", aStream);
+            uint8_t buffer[SRDefaultBufferSize()];
+
+            while (_inputStream.hasBytesAvailable) {
+                NSInteger bytesRead = [_inputStream read:buffer maxLength:SRDefaultBufferSize()];
+                if (bytesRead > 0) {
+                    dispatch_data_t data = dispatch_data_create(buffer, bytesRead, nil, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
+                    if (!data) {
+                        NSError *error = SRErrorWithCodeDescription(SRStatusCodeMessageTooBig,
+                                                                    @"Unable to allocate memory to read from socket.");
+                        [self _failWithError:error];
+                        return;
+                    }
+                    _readBuffer = dispatch_data_create_concat(_readBuffer, data);
+                } else if (bytesRead == -1) {
+                    [self _failWithError:_inputStream.streamError];
+                }
+            }
+            [self _pumpScanner];
+            break;
+        }
+
+        case NSStreamEventHasSpaceAvailable: {
+            SRDebugLog(@"NSStreamEventHasSpaceAvailable %@", aStream);
+            [self _pumpWriting];
+            break;
+        }
+
+        case NSStreamEventNone:
+            SRDebugLog(@"(default)  %@", aStream);
+            break;
+    }
+}
+
+///--------------------------------------
+#pragma mark - Delegate
+///--------------------------------------
+
+- (id<SRWebSocketDelegate> _Nullable)delegate
+{
+    return self.delegateController.delegate;
+}
+
+- (void)setDelegate:(id<SRWebSocketDelegate> _Nullable)delegate
+{
+    self.delegateController.delegate = delegate;
+}
+
+- (void)setDelegateDispatchQueue:(dispatch_queue_t _Nullable)queue
+{
+    self.delegateController.dispatchQueue = queue;
+}
+
+- (dispatch_queue_t _Nullable)delegateDispatchQueue
+{
+    return self.delegateController.dispatchQueue;
+}
+
+- (void)setDelegateOperationQueue:(NSOperationQueue *_Nullable)queue
+{
+    self.delegateController.operationQueue = queue;
+}
+
+- (NSOperationQueue *_Nullable)delegateOperationQueue
+{
+    return self.delegateController.operationQueue;
+}
+
+@end
+
+#ifdef HAS_ICU
+
+static inline int32_t validate_dispatch_data_partial_string(NSData *data) {
+    if ([data length] > INT32_MAX) {
+        // INT32_MAX is the limit so long as this Framework is using 32 bit ints everywhere.
+        return -1;
+    }
+
+    int32_t size = (int32_t)[data length];
+
+    const void * contents = [data bytes];
+    const uint8_t *str = (const uint8_t *)contents;
+
+    UChar32 codepoint = 1;
+    int32_t offset = 0;
+    int32_t lastOffset = 0;
+    while(offset < size && codepoint > 0)  {
+        lastOffset = offset;
+        U8_NEXT(str, offset, size, codepoint);
+    }
+
+    if (codepoint == -1) {
+        // Check to see if the last byte is valid or whether it was just continuing
+        if (!U8_IS_LEAD(str[lastOffset]) || U8_COUNT_TRAIL_BYTES(str[lastOffset]) + lastOffset < (int32_t)size) {
+
+            size = -1;
+        } else {
+            uint8_t leadByte = str[lastOffset];
+            U8_MASK_LEAD_BYTE(leadByte, U8_COUNT_TRAIL_BYTES(leadByte));
+
+            for (int i = lastOffset + 1; i < offset; i++) {
+                if (U8_IS_SINGLE(str[i]) || U8_IS_LEAD(str[i]) || !U8_IS_TRAIL(str[i])) {
+                    size = -1;
+                }
+            }
+
+            if (size != -1) {
+                size = lastOffset;
+            }
+        }
+    }
+
+    if (size != -1 && ![[NSString alloc] initWithBytesNoCopy:(char *)[data bytes] length:size encoding:NSUTF8StringEncoding freeWhenDone:NO]) {
+        size = -1;
+    }
+
+    return size;
+}
+
+#else
+
+// This is a hack, and probably not optimal
+static inline int32_t validate_dispatch_data_partial_string(NSData *data) {
+    static const int maxCodepointSize = 3;
+
+    for (int i = 0; i < maxCodepointSize; i++) {
+        NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO];
+        if (str) {
+            return (int32_t)data.length - i;
+        }
+    }
+
+    return -1;
+}
+
+#endif
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SocketRocket.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/SocketRocket/SocketRocket/SocketRocket.h
new file mode 100644 (file)
index 0000000..c7ab062
--- /dev/null
@@ -0,0 +1,15 @@
+//
+// Copyright 2012 Square Inc.
+// Portions Copyright (c) 2016-present, Facebook, Inc.
+//
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree. An additional grant
+// of patent rights can be found in the PATENTS file in the same directory.
+//
+
+#import <SocketRocket/NSRunLoop+SRWebSocket.h>
+#import <SocketRocket/NSURLRequest+SRWebSocket.h>
+#import <SocketRocket/SRSecurityPolicy.h>
+#import <SocketRocket/SRWebSocket.h>
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-Info.plist b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-Info.plist
new file mode 100644 (file)
index 0000000..19cf209
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.0.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-acknowledgements.markdown b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-acknowledgements.markdown
new file mode 100644 (file)
index 0000000..3f648a5
--- /dev/null
@@ -0,0 +1,36 @@
+# Acknowledgements
+This application makes use of the following third party libraries:
+
+## SocketRocket
+
+BSD License
+
+For SocketRocket software
+
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+   endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Generated by CocoaPods - https://cocoapods.org
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-acknowledgements.plist b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-acknowledgements.plist
new file mode 100644 (file)
index 0000000..7a35f4a
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>PreferenceSpecifiers</key>
+       <array>
+               <dict>
+                       <key>FooterText</key>
+                       <string>This application makes use of the following third party libraries:</string>
+                       <key>Title</key>
+                       <string>Acknowledgements</string>
+                       <key>Type</key>
+                       <string>PSGroupSpecifier</string>
+               </dict>
+               <dict>
+                       <key>FooterText</key>
+                       <string>BSD License
+
+For SocketRocket software
+
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+   endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</string>
+                       <key>License</key>
+                       <string>BSD</string>
+                       <key>Title</key>
+                       <string>SocketRocket</string>
+                       <key>Type</key>
+                       <string>PSGroupSpecifier</string>
+               </dict>
+               <dict>
+                       <key>FooterText</key>
+                       <string>Generated by CocoaPods - https://cocoapods.org</string>
+                       <key>Title</key>
+                       <string></string>
+                       <key>Type</key>
+                       <string>PSGroupSpecifier</string>
+               </dict>
+       </array>
+       <key>StringsTable</key>
+       <string>Acknowledgements</string>
+       <key>Title</key>
+       <string>Acknowledgements</string>
+</dict>
+</plist>
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-dummy.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-dummy.m
new file mode 100644 (file)
index 0000000..49baa2a
--- /dev/null
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_DeepChordsSdk : NSObject
+@end
+@implementation PodsDummy_Pods_DeepChordsSdk
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-umbrella.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk-umbrella.h
new file mode 100644 (file)
index 0000000..32e1e90
--- /dev/null
@@ -0,0 +1,16 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+
+FOUNDATION_EXPORT double Pods_DeepChordsSdkVersionNumber;
+FOUNDATION_EXPORT const unsigned char Pods_DeepChordsSdkVersionString[];
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.debug.xcconfig b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.debug.xcconfig
new file mode 100644 (file)
index 0000000..14872ce
--- /dev/null
@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers"
+LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
+OTHER_LDFLAGS = $(inherited) -l"icucore" -framework "CFNetwork" -framework "Security" -framework "SocketRocket"
+OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/..
+PODS_ROOT = ${SRCROOT}/../Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.modulemap b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.modulemap
new file mode 100644 (file)
index 0000000..b8f06b0
--- /dev/null
@@ -0,0 +1,6 @@
+framework module Pods_DeepChordsSdk {
+  umbrella header "Pods-DeepChordsSdk-umbrella.h"
+
+  export *
+  module * { export * }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.release.xcconfig b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/Pods-DeepChordsSdk/Pods-DeepChordsSdk.release.xcconfig
new file mode 100644 (file)
index 0000000..14872ce
--- /dev/null
@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers"
+LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks'
+OTHER_LDFLAGS = $(inherited) -l"icucore" -framework "CFNetwork" -framework "Security" -framework "SocketRocket"
+OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/..
+PODS_ROOT = ${SRCROOT}/../Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
index 7e83a9c..7c475f8 100644 (file)
@@ -1,6 +1,39 @@
 # Acknowledgements
 This application makes use of the following third party libraries:
 
+## SocketRocket
+
+BSD License
+
+For SocketRocket software
+
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+   endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 ## IQKeyboardCore
 
 MIT License
index 871d3f2..f164213 100644 (file)
                        <key>Type</key>
                        <string>PSGroupSpecifier</string>
                </dict>
+               <dict>
+                       <key>FooterText</key>
+                       <string>BSD License
+
+For SocketRocket software
+
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+   endorse or promote products derived from this software without specific
+   prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</string>
+                       <key>License</key>
+                       <string>BSD</string>
+                       <key>Title</key>
+                       <string>SocketRocket</string>
+                       <key>Type</key>
+                       <string>PSGroupSpecifier</string>
+               </dict>
                <dict>
                        <key>FooterText</key>
                        <string>MIT License
index 8d0983c..c7c1447 100644 (file)
@@ -1,4 +1,5 @@
 ${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh
+${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework
 ${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework
 ${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework
 ${BUILT_PRODUCTS_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework
index 8d0983c..c7c1447 100644 (file)
@@ -1,4 +1,5 @@
 ${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh
+${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework
 ${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework
 ${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework
 ${BUILT_PRODUCTS_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework
index db83c79..d9fc13b 100755 (executable)
@@ -176,6 +176,7 @@ code_sign_if_enabled() {
 }
 
 if [[ "$CONFIGURATION" == "Debug" ]]; then
+  install_framework "${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework"
@@ -188,6 +189,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework"
 fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
+  install_framework "${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework"
index 91784a7..d623907 100644 (file)
@@ -1,13 +1,13 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 ENABLE_USER_SCRIPT_SANDBOXING = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "Combine" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "QuartzCore" -framework "SnapKit" -framework "Toast_Swift" -framework "UIKit"
-OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+OTHER_LDFLAGS = $(inherited) -l"icucore" -l"swiftCoreGraphics" -framework "CFNetwork" -framework "Combine" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "QuartzCore" -framework "Security" -framework "SnapKit" -framework "SocketRocket" -framework "Toast_Swift" -framework "UIKit"
+OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
index 91784a7..d623907 100644 (file)
@@ -1,13 +1,13 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 ENABLE_USER_SCRIPT_SANDBOXING = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift/Toast_Swift.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
 LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "Combine" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "QuartzCore" -framework "SnapKit" -framework "Toast_Swift" -framework "UIKit"
-OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
+OTHER_LDFLAGS = $(inherited) -l"icucore" -l"swiftCoreGraphics" -framework "CFNetwork" -framework "Combine" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "QuartzCore" -framework "Security" -framework "SnapKit" -framework "SocketRocket" -framework "Toast_Swift" -framework "UIKit"
+OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/Toast-Swift"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-Info.plist b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-Info.plist
new file mode 100644 (file)
index 0000000..b23720f
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>0.7.1</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m
new file mode 100644 (file)
index 0000000..1e9d2c9
--- /dev/null
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_SocketRocket : NSObject
+@end
+@implementation PodsDummy_SocketRocket
+@end
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch
new file mode 100644 (file)
index 0000000..beb2a24
--- /dev/null
@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-umbrella.h b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket-umbrella.h
new file mode 100644 (file)
index 0000000..dd9d9ef
--- /dev/null
@@ -0,0 +1,21 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "NSRunLoop+SRWebSocket.h"
+#import "NSURLRequest+SRWebSocket.h"
+#import "SocketRocket.h"
+#import "SRSecurityPolicy.h"
+#import "SRWebSocket.h"
+
+FOUNDATION_EXPORT double SocketRocketVersionNumber;
+FOUNDATION_EXPORT const unsigned char SocketRocketVersionString[];
+
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig
new file mode 100644 (file)
index 0000000..62cdd4a
--- /dev/null
@@ -0,0 +1,14 @@
+BUILD_LIBRARY_FOR_DISTRIBUTION = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -l"icucore" -framework "CFNetwork" -framework "Security"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.modulemap b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.modulemap
new file mode 100644 (file)
index 0000000..52acc5d
--- /dev/null
@@ -0,0 +1,6 @@
+framework module SocketRocket {
+  umbrella header "SocketRocket-umbrella.h"
+
+  export *
+  module * { export * }
+}
diff --git a/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig b/document/DeepChordsSdk_iOS/DeepChordsSdk/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig
new file mode 100644 (file)
index 0000000..62cdd4a
--- /dev/null
@@ -0,0 +1,14 @@
+BUILD_LIBRARY_FOR_DISTRIBUTION = YES
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -l"icucore" -framework "CFNetwork" -framework "Security"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
index e031ec1..2b7a0d4 100644 (file)
@@ -3,6 +3,10 @@ source "https://gitee.com/mirrors/CocoaPods-Specs.git"
 platform :ios, '13.0'
 use_frameworks!
 
+target 'DeepChordsSdk' do
+  use_frameworks!
+  pod 'SocketRocket'
+end
 
 workspace 'DeepChordsSdk'
 project 'Example/Example.xcodeproj'
@@ -10,4 +14,5 @@ target 'Example' do
     pod 'SnapKit', '~> 5.7.0'
     pod 'IQKeyboardManagerSwift'
     pod 'Toast-Swift'
+    pod 'SocketRocket'
 end