git » swiftpm » commit 55fb01e

Latest changes from sdk

author Stephen Paul Weber
2025-05-21 17:32:28 UTC
committer Stephen Paul Weber
2025-05-21 17:32:28 UTC
parent 3a4f6d39b0be4e7d7296210983fd2a95342271af

Latest changes from sdk

Package.swift +1 -1
Sources/Snikket/Snikket.swift +288 -82
Sources/c_snikket/iinclude/cpp/_NativeString/NativeString_Impl_.h +62 -0
Sources/c_snikket/iinclude/snikket/ChatMessage.h +11 -0
Sources/c_snikket/iinclude/snikket/ChatMessageBuilder.h +3 -0
Sources/c_snikket/iinclude/snikket/Client.h +16 -0
Sources/c_snikket/iinclude/snikket/JsonPrinter.h +73 -0
Sources/c_snikket/iinclude/snikket/Notification.h +48 -13
Sources/c_snikket/iinclude/snikket/Push.h +62 -0
Sources/c_snikket/iinclude/snikket/jingle/Attribute.h +4 -4
Sources/c_snikket/iinclude/snikket/queries/Push2Enable.h +66 -0
Sources/c_snikket/iinclude/snikket/streams/XmppStropheStream.h +8 -3
Sources/c_snikket/include/snikket.h +73 -16
Sources/c_snikket/src/HaxeCBridge.cpp +177 -177
Sources/c_snikket/src/_HaxeCBridge/Int64Map_Impl_.cpp +3 -3
Sources/c_snikket/src/_HaxeCBridge/Internal.cpp +9 -9
Sources/c_snikket/src/__HaxeCBridgeBindings__.cpp +839 -231
Sources/c_snikket/src/__boot__.cpp +20 -7
Sources/c_snikket/src/__files__.cpp +10 -1
Sources/c_snikket/src/cpp/_NativeString/NativeString_Impl_.cpp +87 -0
Sources/c_snikket/src/hx/Date.cpp +2 -6
Sources/c_snikket/src/snikket/AttachmentSource.cpp +12 -12
Sources/c_snikket/src/snikket/Autolink.cpp +91 -91
Sources/c_snikket/src/snikket/AvailableChat.cpp +21 -21
Sources/c_snikket/src/snikket/Channel.cpp +726 -726
Sources/c_snikket/src/snikket/Chat.cpp +519 -518
Sources/c_snikket/src/snikket/ChatAttachment.cpp +89 -89
Sources/c_snikket/src/snikket/ChatMessage.cpp +870 -720
Sources/c_snikket/src/snikket/ChatMessageBuilder.cpp +177 -160
Sources/c_snikket/src/snikket/Client.cpp +2477 -2271
Sources/c_snikket/src/snikket/Color.cpp +1 -1
Sources/c_snikket/src/snikket/CustomEmojiReaction.cpp +3 -3
Sources/c_snikket/src/snikket/DirectChat.cpp +380 -380
Sources/c_snikket/src/snikket/Hash.cpp +3 -3
Sources/c_snikket/src/snikket/JsonPrinter.cpp +838 -0
Sources/c_snikket/src/snikket/Notification.cpp +203 -36
Sources/c_snikket/src/snikket/Participant.cpp +12 -12
Sources/c_snikket/src/snikket/Push.cpp +143 -0
Sources/c_snikket/src/snikket/Reaction.cpp +15 -15
Sources/c_snikket/src/snikket/SerializedChat.cpp +79 -90
Sources/c_snikket/src/snikket/XEP0393.cpp +311 -335
Sources/c_snikket/src/snikket/_Push/Push_Fields_.cpp +24 -24
Sources/c_snikket/src/snikket/jingle/Attribute.cpp +23 -23
Sources/c_snikket/src/snikket/jingle/AudioFormat.cpp +6 -6
Sources/c_snikket/src/snikket/jingle/IceCandidate.cpp +145 -145
Sources/c_snikket/src/snikket/jingle/InitiatedSession.cpp +67 -53
Sources/c_snikket/src/snikket/jingle/Media.cpp +149 -135
Sources/c_snikket/src/snikket/jingle/MediaStream.cpp +59 -59
Sources/c_snikket/src/snikket/jingle/MediaStreamTrack.cpp +173 -150
Sources/c_snikket/src/snikket/jingle/PeerConnection.cpp +257 -257
Sources/c_snikket/src/snikket/persistence/MediaStoreFS.cpp +3 -3
Sources/c_snikket/src/snikket/persistence/Sqlite.cpp +918 -976
Sources/c_snikket/src/snikket/persistence/SqliteDriver.cpp +70 -67
Sources/c_snikket/src/snikket/queries/Push2Enable.cpp +244 -0
Sources/c_snikket/src/snikket/streams/XmppStropheStream.cpp +406 -276

diff --git a/Package.swift b/Package.swift
index c05ec94..b78f6bb 100644
--- a/Package.swift
+++ b/Package.swift
@@ -6,7 +6,7 @@ import PackageDescription
 let package = Package(
 	name: "Snikket",
 	platforms: [
-		.iOS(.v12),
+		.iOS(.v13),
 		.macOS(.v10_15),
 		.tvOS(.v12),
 	],
diff --git a/Sources/Snikket/Snikket.swift b/Sources/Snikket/Snikket.swift
index b6d5076..18b518b 100644
--- a/Sources/Snikket/Snikket.swift
+++ b/Sources/Snikket/Snikket.swift
@@ -26,6 +26,54 @@ internal func useString(_ mptr: UnsafeMutableRawPointer?) -> String? {
 	return useString(UnsafePointer(mptr?.assumingMemoryBound(to: CChar.self)))
 }
 
+// From https://github.com/swiftlang/swift/blob/dfc3933a05264c0c19f7cd43ea0dca351f53ed48/stdlib/private/SwiftPrivate/SwiftPrivate.swift
+public func scan<
+	S : Sequence, U
+>(_ seq: S, _ initial: U, _ combine: (U, S.Iterator.Element) -> U) -> [U] {
+	var result: [U] = []
+	result.reserveCapacity(seq.underestimatedCount)
+	var runningResult = initial
+	for element in seq {
+		runningResult = combine(runningResult, element)
+		result.append(runningResult)
+	}
+	return result
+}
+
+// From https://github.com/swiftlang/swift/blob/dfc3933a05264c0c19f7cd43ea0dca351f53ed48/stdlib/private/SwiftPrivate/SwiftPrivate.swift
+internal func withArrayOfCStrings<R>(
+	_ args: [String], _ body: ([UnsafePointer<CChar>?]) -> R
+) -> R {
+	let argsCounts = Array(args.map { $0.utf8.count + 1 })
+	let argsOffsets = [ 0 ] + scan(argsCounts, 0, +)
+	let argsBufferSize = argsOffsets.last!
+
+	var argsBuffer: [UInt8] = []
+	argsBuffer.reserveCapacity(argsBufferSize)
+	for arg in args {
+		argsBuffer.append(contentsOf: arg.utf8)
+		argsBuffer.append(0)
+	}
+
+	return argsBuffer.withUnsafeMutableBufferPointer {
+		(argsBuffer) in
+		let ptr = UnsafeRawPointer(argsBuffer.baseAddress!).bindMemory(
+			to: CChar.self, capacity: argsBuffer.count)
+		var cStrings: [UnsafePointer<CChar>?] = argsOffsets.dropLast().map { ptr + $0 }
+		return body(cStrings)
+	}
+}
+
+internal func withOptionalArrayOfCStrings<R>(
+	_ args: [String]?, _ body: ([UnsafePointer<CChar>?]?) -> R
+) -> R {
+	if let args = args {
+		return withArrayOfCStrings(args, body)
+	} else {
+		return body(nil)
+	}
+}
+
 public protocol MediaStore: SDKObject {
 }
 
@@ -42,7 +90,7 @@ public class AnyMediaStore: MediaStore {
 
 }
 
-public class MediaStoreFS: SDKObject, MediaStore {
+public class MediaStoreFS: SDKObject, MediaStore, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -103,7 +151,7 @@ public class AnyPersistence: Persistence {
 
 }
 
-public class Hash: SDKObject {
+public class Hash: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -158,7 +206,7 @@ public class Hash: SDKObject {
 	}
 }
 
-public class ChatAttachment: SDKObject {
+public class ChatAttachment: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -209,7 +257,49 @@ public class ChatAttachment: SDKObject {
 	}
 }
 
-public class ChatMessage: SDKObject {
+public class Reaction: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var senderId: String {
+		get {
+			useString(c_snikket.snikket_reaction_sender_id(o))!
+		}
+	}
+
+	public var timestamp: String {
+		get {
+			useString(c_snikket.snikket_reaction_timestamp(o))!
+		}
+	}
+
+	public var text: String {
+		get {
+			useString(c_snikket.snikket_reaction_text(o))!
+		}
+	}
+
+	public var key: String {
+		get {
+			useString(c_snikket.snikket_reaction_key(o))!
+		}
+	}
+
+	public var envelopeId: String? {
+		get {
+			useString(c_snikket.snikket_reaction_envelope_id(o))
+		}
+	}
+
+	deinit {
+		c_snikket.snikket_release(o)
+	}
+}
+
+public class ChatMessage: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -297,6 +387,25 @@ public class ChatMessage: SDKObject {
 		}
 	}
 
+	/**
+	 List of reactions to this message
+	 */
+	public var reactionKeys: Array<String> {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_snikket.snikket_chat_message_reaction_keys(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_snikket.snikket_release(__ret);return __r;}();}()
+		}
+	}
+
+	/**
+	 Details of a set of reaction to this message
+	 */
+	public func reactionDetails(reactionKey: String) -> Array<Reaction> {
+		{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_snikket.snikket_chat_message_reaction_details(
+			self.o,
+			reactionKey
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({Reaction($0!)});c_snikket.snikket_release(__ret);return __r;}();}()
+	}
+
 	/**
 	 Body text of this message or NULL
 	 */
@@ -439,7 +548,7 @@ public class ChatMessage: SDKObject {
 	}
 }
 
-public class Sqlite: SDKObject, KeyValueStore, Persistence {
+public class Sqlite: SDKObject, KeyValueStore, Persistence, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -498,7 +607,7 @@ public class Sqlite: SDKObject, KeyValueStore, Persistence {
 	}
 }
 
-public class ChatMessageBuilder: SDKObject {
+public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -669,6 +778,9 @@ public class ChatMessageBuilder: SDKObject {
 		get {
 			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_snikket.snikket_chat_message_builder_versions(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ChatMessage($0!)});c_snikket.snikket_release(__ret);return __r;}();}()
 		}
+		set {
+			c_snikket.snikket_chat_message_builder_set_versions(o, newValue.map { $0.o }, newValue.count)
+		}
 	}
 
 	public func addAttachment(attachment: ChatAttachment) -> Void {
@@ -724,7 +836,7 @@ public class ChatMessageBuilder: SDKObject {
 	}
 }
 
-public class Dummy: SDKObject, Persistence {
+public class Dummy: SDKObject, Persistence, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -745,7 +857,104 @@ public class Dummy: SDKObject, Persistence {
 	}
 }
 
-public class AudioFormat: SDKObject {
+public class Push: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public static func receive(data: String, persistence: Persistence) -> Notification? {
+		(c_snikket.snikket_push_receive(
+			data,
+			persistence.o
+		)).map({ Notification($0) })
+	}
+
+	deinit {
+		c_snikket.snikket_release(o)
+	}
+}
+
+public class Notification: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var title: String {
+		get {
+			useString(c_snikket.snikket_notification_title(o))!
+		}
+	}
+
+	public var body: String {
+		get {
+			useString(c_snikket.snikket_notification_body(o))!
+		}
+	}
+
+	public var accountId: String {
+		get {
+			useString(c_snikket.snikket_notification_account_id(o))!
+		}
+	}
+
+	public var chatId: String {
+		get {
+			useString(c_snikket.snikket_notification_chat_id(o))!
+		}
+	}
+
+	public var messageId: String {
+		get {
+			useString(c_snikket.snikket_notification_message_id(o))!
+		}
+	}
+
+	public var type: MessageType {
+		get {
+			c_snikket.snikket_notification_type(o)
+		}
+	}
+
+	public var callStatus: String? {
+		get {
+			useString(c_snikket.snikket_notification_call_status(o))
+		}
+	}
+
+	public var callSid: String? {
+		get {
+			useString(c_snikket.snikket_notification_call_sid(o))
+		}
+	}
+
+	public var imageUri: String? {
+		get {
+			useString(c_snikket.snikket_notification_image_uri(o))
+		}
+	}
+
+	public var lang: String? {
+		get {
+			useString(c_snikket.snikket_notification_lang(o))
+		}
+	}
+
+	public var timestamp: String? {
+		get {
+			useString(c_snikket.snikket_notification_timestamp(o))
+		}
+	}
+
+	deinit {
+		c_snikket.snikket_release(o)
+	}
+}
+
+public class AudioFormat: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -773,7 +982,7 @@ public class AudioFormat: SDKObject {
 	}
 }
 
-public class MediaStreamTrack: SDKObject {
+public class MediaStreamTrack: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -865,7 +1074,7 @@ public class MediaStreamTrack: SDKObject {
 	}
 }
 
-public class Chat: SDKObject {
+public class Chat: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1352,7 +1561,7 @@ public class Chat: SDKObject {
 	}
 }
 
-public class AvailableChat: SDKObject {
+public class AvailableChat: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1416,7 +1625,7 @@ public class AnySession: Session {
 
 }
 
-public class MediaStream: SDKObject {
+public class MediaStream: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1453,7 +1662,7 @@ public class MediaStream: SDKObject {
 	}
 }
 
-public class InitiatedSession: SDKObject, Session {
+public class InitiatedSession: SDKObject, Session, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1515,7 +1724,7 @@ public class InitiatedSession: SDKObject, Session {
 	}
 }
 
-public class Client: SDKObject {
+public class Client: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1541,6 +1750,21 @@ public class Client: SDKObject {
 		)
 	}
 
+	/**
+	 Gets the client ready to use but does not connect to the server
+	 */
+	public func startOffline(ready: @escaping ()->Void) -> Void {
+		let __ready_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(ready as AnyObject).toOpaque())
+		c_snikket.snikket_client_start_offline(
+			self.o,
+			{ (ctx) in
+				let ready = Unmanaged<AnyObject>.fromOpaque(ctx!).takeUnretainedValue() as! ()->Void
+				ready()
+			},
+			__ready_ptr
+		)
+	}
+
 	/**
 	 Destroy local data for this account
 	 
@@ -1667,6 +1891,30 @@ public class Client: SDKObject {
 		)).map({ Chat($0) })
 	}
 
+	/**
+	 Enable push notifications
+	 
+	 @param push_service the address of a push proxy
+	 @param vapid_private_pkcs8 the private key for signing JWT of the push service
+	 @param endpoint the final target for the push proxy to forward to
+	 @param p256dh A P-256 uncompressed point in ANSI X9.62 format
+	 @param auth Random 16 octed value
+	 @param grace Grace period during which not to generate push if another app is active for same account, in seconds (negative for none)
+	 @param claims Optional additional JWT claims as key then value
+	 */
+	public func enablePush(push_service: String, endpoint: String, p256dh: Array<UInt8>, auth: Array<UInt8>, grace: Int32, vapid_private_pkcs8: Array<UInt8>? = nil, claims: Array<String>? = nil) -> Void {
+		withOptionalArrayOfCStrings(claims) { __claims in c_snikket.snikket_client_enable_push(
+			self.o,
+			push_service,
+			endpoint,
+			p256dh, p256dh.count,
+			auth, auth.count,
+			grace,
+			vapid_private_pkcs8, vapid_private_pkcs8?.count ?? 0,
+			__claims, claims?.count ?? 0
+		)}
+	}
+
 	/**
 	 Event fired when client needs a password for authentication
 	 
@@ -1900,47 +2148,7 @@ public class Client: SDKObject {
 	}
 }
 
-public class AttachmentSource: SDKObject {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	public init(path: String, mime: String) {
-		o = c_snikket.snikket_attachment_source_new(path, mime)
-	}
-
-	public var path: String {
-		get {
-			useString(c_snikket.snikket_attachment_source_path(o))!
-		}
-	}
-
-	public var type: String {
-		get {
-			useString(c_snikket.snikket_attachment_source_type(o))!
-		}
-	}
-
-	public var name: String {
-		get {
-			useString(c_snikket.snikket_attachment_source_name(o))!
-		}
-	}
-
-	public var size: Int32 {
-		get {
-			c_snikket.snikket_attachment_source_size(o)
-		}
-	}
-
-	deinit {
-		c_snikket.snikket_release(o)
-	}
-}
-
-public class Participant: SDKObject {
+public class Participant: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1976,52 +2184,38 @@ public class Participant: SDKObject {
 	}
 }
 
-public class Channel: Chat {
-	public func isPrivate() -> Bool {
-		c_snikket.snikket_channel_is_private(
-			self.o
-		)
-	}
-
-}
-
-public class DirectChat: Chat {
-}
-
-public class Reaction: SDKObject {
+public class AttachmentSource: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
 		o = ptr
 	}
 
-	public var senderId: String {
-		get {
-			useString(c_snikket.snikket_reaction_sender_id(o))!
-		}
+	public init(path: String, mime: String) {
+		o = c_snikket.snikket_attachment_source_new(path, mime)
 	}
 
-	public var timestamp: String {
+	public var path: String {
 		get {
-			useString(c_snikket.snikket_reaction_timestamp(o))!
+			useString(c_snikket.snikket_attachment_source_path(o))!
 		}
 	}
 
-	public var text: String {
+	public var type: String {
 		get {
-			useString(c_snikket.snikket_reaction_text(o))!
+			useString(c_snikket.snikket_attachment_source_type(o))!
 		}
 	}
 
-	public var key: String {
+	public var name: String {
 		get {
-			useString(c_snikket.snikket_reaction_key(o))!
+			useString(c_snikket.snikket_attachment_source_name(o))!
 		}
 	}
 
-	public var envelopeId: String? {
+	public var size: Int32 {
 		get {
-			useString(c_snikket.snikket_reaction_envelope_id(o))
+			c_snikket.snikket_attachment_source_size(o)
 		}
 	}
 
@@ -2030,7 +2224,19 @@ public class Reaction: SDKObject {
 	}
 }
 
-public class CustomEmojiReaction: Reaction {
+public class Channel: Chat, @unchecked Sendable {
+	public func isPrivate() -> Bool {
+		c_snikket.snikket_channel_is_private(
+			self.o
+		)
+	}
+
+}
+
+public class DirectChat: Chat, @unchecked Sendable {
+}
+
+public class CustomEmojiReaction: Reaction, @unchecked Sendable {
 	public var uri: String {
 		get {
 			useString(c_snikket.snikket_custom_emoji_reaction_uri(o))!
@@ -2039,7 +2245,7 @@ public class CustomEmojiReaction: Reaction {
 
 }
 
-public class DTMFSender: SDKObject {
+public class DTMFSender: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
diff --git a/Sources/c_snikket/iinclude/cpp/_NativeString/NativeString_Impl_.h b/Sources/c_snikket/iinclude/cpp/_NativeString/NativeString_Impl_.h
new file mode 100644
index 0000000..a60500c
--- /dev/null
+++ b/Sources/c_snikket/iinclude/cpp/_NativeString/NativeString_Impl_.h
@@ -0,0 +1,62 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_cpp__NativeString_NativeString_Impl_
+#define INCLUDED_cpp__NativeString_NativeString_Impl_
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(cpp,_NativeString,NativeString_Impl_)
+
+namespace cpp{
+namespace _NativeString{
+
+
+class HXCPP_CLASS_ATTRIBUTES NativeString_Impl__obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef NativeString_Impl__obj OBJ_;
+		NativeString_Impl__obj();
+
+	public:
+		enum { _hx_ClassId = 0x46275c4c };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="cpp._NativeString.NativeString_Impl_")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"cpp._NativeString.NativeString_Impl_"); }
+
+		inline static ::hx::ObjectPtr< NativeString_Impl__obj > __new() {
+			::hx::ObjectPtr< NativeString_Impl__obj > __this = new NativeString_Impl__obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< NativeString_Impl__obj > __alloc(::hx::Ctx *_hx_ctx) {
+			NativeString_Impl__obj *__this = (NativeString_Impl__obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(NativeString_Impl__obj), false, "cpp._NativeString.NativeString_Impl_"));
+			*(void **)__this = NativeString_Impl__obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~NativeString_Impl__obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("NativeString_Impl_",88,18,12,4e); }
+
+		static ::String fromPointer(::cpp::Pointer< char > inPtr);
+		static ::Dynamic fromPointer_dyn();
+
+};
+
+} // end namespace cpp
+} // end namespace _NativeString
+
+#endif /* INCLUDED_cpp__NativeString_NativeString_Impl_ */ 
diff --git a/Sources/c_snikket/iinclude/snikket/ChatMessage.h b/Sources/c_snikket/iinclude/snikket/ChatMessage.h
index c2531ac..0b50178 100644
--- a/Sources/c_snikket/iinclude/snikket/ChatMessage.h
+++ b/Sources/c_snikket/iinclude/snikket/ChatMessage.h
@@ -13,6 +13,7 @@ HX_DECLARE_CLASS1(snikket,ChatMessage)
 HX_DECLARE_CLASS1(snikket,ChatMessageBuilder)
 HX_DECLARE_CLASS1(snikket,Hash)
 HX_DECLARE_CLASS1(snikket,JID)
+HX_DECLARE_CLASS1(snikket,Reaction)
 HX_DECLARE_CLASS1(snikket,Stanza)
 HX_DECLARE_CLASS2(snikket,_Stanza,NodeInterface)
 
@@ -99,6 +100,16 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessage_obj : public ::hx::Object
 		size_t attachments__fromC(void*** outPtr);
 
 		 ::haxe::ds::StringMap reactions;
+		size_t reactionKeys__fromC(const char*** outPtr);
+
+		::Array< ::String > get_reactionKeys();
+		::Dynamic get_reactionKeys_dyn();
+
+		::Array< ::Dynamic> reactionDetails(::String reactionKey);
+		::Dynamic reactionDetails_dyn();
+
+		size_t reactionDetails__fromC(::String reactionKey,void*** outPtr);
+
 		::String text;
 		::String text__fromC();
 		::Dynamic text__fromC_dyn();
diff --git a/Sources/c_snikket/iinclude/snikket/ChatMessageBuilder.h b/Sources/c_snikket/iinclude/snikket/ChatMessageBuilder.h
index 041e48a..98acef8 100644
--- a/Sources/c_snikket/iinclude/snikket/ChatMessageBuilder.h
+++ b/Sources/c_snikket/iinclude/snikket/ChatMessageBuilder.h
@@ -154,6 +154,9 @@ class HXCPP_CLASS_ATTRIBUTES ChatMessageBuilder_obj : public ::hx::Object
 		::Dynamic set_status__fromC_dyn();
 
 		::Array< ::Dynamic> versions;
+		void set_versions__fromC(::cpp::Pointer< void* > inPtr,size_t count);
+		::Dynamic set_versions__fromC_dyn();
+
 		size_t versions__fromC(void*** outPtr);
 
 		::Array< ::Dynamic> payloads;
diff --git a/Sources/c_snikket/iinclude/snikket/Client.h b/Sources/c_snikket/iinclude/snikket/Client.h
index 8908f68..99bf55b 100644
--- a/Sources/c_snikket/iinclude/snikket/Client.h
+++ b/Sources/c_snikket/iinclude/snikket/Client.h
@@ -87,11 +87,17 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::snikket::EventEmitter_obj
 		::String _displayName;
 		::String fastMechanism;
 		::String token;
+		 ::Dynamic fastCount;
 		 ::haxe::ds::StringMap pendingCaps;
 		bool inSync;
 		void start();
 		::Dynamic start_dyn();
 
+		void startOffline( ::Dynamic ready);
+		::Dynamic startOffline_dyn();
+
+		void startOffline__fromC(::cpp::Function< void  (void*) > ready,void* ready__context);
+
 		void logout(bool completely);
 		::Dynamic logout_dyn();
 
@@ -143,6 +149,16 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::snikket::EventEmitter_obj
 		 ::snikket::DirectChat getDirectChat(::String chatId,::hx::Null< bool >  triggerIfNew);
 		::Dynamic getDirectChat_dyn();
 
+		 ::Dynamic enabledPushData;
+		void enablePush(::String push_service,::String endpoint,::Array< unsigned char > p256dh,::Array< unsigned char > auth,int grace,::Array< unsigned char > vapid_private_pkcs8,::Array< ::String > claims);
+		::Dynamic enablePush_dyn();
+
+		void enablePush__fromC(::String push_service,::String endpoint,::cpp::Pointer< unsigned char > p256dh,size_t p256dh__len,::cpp::Pointer< unsigned char > auth,size_t auth__len,int grace,::cpp::Pointer< unsigned char > vapid_private_pkcs8,size_t vapid_private_pkcs8__len,::cpp::Pointer< const char* > claims,size_t claims__len);
+		::Dynamic enablePush__fromC_dyn();
+
+		void updatePushIfEnabled();
+		::Dynamic updatePushIfEnabled_dyn();
+
 		void addPasswordNeededListener( ::Dynamic handler);
 		::Dynamic addPasswordNeededListener_dyn();
 
diff --git a/Sources/c_snikket/iinclude/snikket/JsonPrinter.h b/Sources/c_snikket/iinclude/snikket/JsonPrinter.h
new file mode 100644
index 0000000..1d179f2
--- /dev/null
+++ b/Sources/c_snikket/iinclude/snikket/JsonPrinter.h
@@ -0,0 +1,73 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_snikket_JsonPrinter
+#define INCLUDED_snikket_JsonPrinter
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS0(StringBuf)
+HX_DECLARE_CLASS1(snikket,JsonPrinter)
+
+namespace snikket{
+
+
+class HXCPP_CLASS_ATTRIBUTES JsonPrinter_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef JsonPrinter_obj OBJ_;
+		JsonPrinter_obj();
+
+	public:
+		enum { _hx_ClassId = 0x1bd625d5 };
+
+		void __construct( ::Dynamic replacer,::String space);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="snikket.JsonPrinter")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"snikket.JsonPrinter"); }
+		static ::hx::ObjectPtr< JsonPrinter_obj > __new( ::Dynamic replacer,::String space);
+		static ::hx::ObjectPtr< JsonPrinter_obj > __alloc(::hx::Ctx *_hx_ctx, ::Dynamic replacer,::String space);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~JsonPrinter_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("JsonPrinter",72,68,9d,fd); }
+
+		static ::String print( ::Dynamic o, ::Dynamic replacer,::String space);
+		static ::Dynamic print_dyn();
+
+		 ::StringBuf buf;
+		 ::Dynamic replacer;
+		Dynamic replacer_dyn() { return replacer;}
+		::String indent;
+		bool pretty;
+		int nind;
+		void write( ::Dynamic k, ::Dynamic v);
+		::Dynamic write_dyn();
+
+		void classString( ::Dynamic v);
+		::Dynamic classString_dyn();
+
+		void fieldsString( ::Dynamic v,::Array< ::String > fields);
+		::Dynamic fieldsString_dyn();
+
+		void quote(::String s);
+		::Dynamic quote_dyn();
+
+};
+
+} // end namespace snikket
+
+#endif /* INCLUDED_snikket_JsonPrinter */ 
diff --git a/Sources/c_snikket/iinclude/snikket/Notification.h b/Sources/c_snikket/iinclude/snikket/Notification.h
index d41f56b..8de8038 100644
--- a/Sources/c_snikket/iinclude/snikket/Notification.h
+++ b/Sources/c_snikket/iinclude/snikket/Notification.h
@@ -6,7 +6,7 @@
 #include <hxcpp.h>
 #endif
 
-HX_DECLARE_STACK_FRAME(_hx_pos_b0a79cae3ba17812_21_new)
+HX_DECLARE_STACK_FRAME(_hx_pos_b0a79cae3ba17812_30_new)
 HX_DECLARE_CLASS1(snikket,ChatMessage)
 HX_DECLARE_CLASS1(snikket,Notification)
 HX_DECLARE_CLASS1(snikket,Stanza)
@@ -41,18 +41,18 @@ class HXCPP_CLASS_ATTRIBUTES Notification_obj : public ::hx::Object
 			Notification_obj *__this = (Notification_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Notification_obj), true, "snikket.Notification"));
 			*(void **)__this = Notification_obj::_hx_vtable;
 {
-            	HX_STACKFRAME(&_hx_pos_b0a79cae3ba17812_21_new)
-HXLINE(  22)		( ( ::snikket::Notification)(__this) )->title = title;
-HXLINE(  23)		( ( ::snikket::Notification)(__this) )->body = body;
-HXLINE(  24)		( ( ::snikket::Notification)(__this) )->accountId = accountId;
-HXLINE(  25)		( ( ::snikket::Notification)(__this) )->chatId = chatId;
-HXLINE(  26)		( ( ::snikket::Notification)(__this) )->messageId = messageId;
-HXLINE(  27)		( ( ::snikket::Notification)(__this) )->type = type;
-HXLINE(  28)		( ( ::snikket::Notification)(__this) )->callStatus = callStatus;
-HXLINE(  29)		( ( ::snikket::Notification)(__this) )->callSid = callSid;
-HXLINE(  30)		( ( ::snikket::Notification)(__this) )->imageUri = imageUri;
-HXLINE(  31)		( ( ::snikket::Notification)(__this) )->lang = lang;
-HXLINE(  32)		( ( ::snikket::Notification)(__this) )->timestamp = timestamp;
+            	HX_STACKFRAME(&_hx_pos_b0a79cae3ba17812_30_new)
+HXLINE(  31)		( ( ::snikket::Notification)(__this) )->title = title;
+HXLINE(  32)		( ( ::snikket::Notification)(__this) )->body = body;
+HXLINE(  33)		( ( ::snikket::Notification)(__this) )->accountId = accountId;
+HXLINE(  34)		( ( ::snikket::Notification)(__this) )->chatId = chatId;
+HXLINE(  35)		( ( ::snikket::Notification)(__this) )->messageId = messageId;
+HXLINE(  36)		( ( ::snikket::Notification)(__this) )->type = type;
+HXLINE(  37)		( ( ::snikket::Notification)(__this) )->callStatus = callStatus;
+HXLINE(  38)		( ( ::snikket::Notification)(__this) )->callSid = callSid;
+HXLINE(  39)		( ( ::snikket::Notification)(__this) )->imageUri = imageUri;
+HXLINE(  40)		( ( ::snikket::Notification)(__this) )->lang = lang;
+HXLINE(  41)		( ( ::snikket::Notification)(__this) )->timestamp = timestamp;
             	}
 		
 			return __this;
@@ -74,6 +74,8 @@ HXLINE(  32)		( ( ::snikket::Notification)(__this) )->timestamp = timestamp;
 		bool _hx_isInstanceOf(int inClassId);
 		::String __ToString() const { return HX_("Notification",0b,43,1d,24); }
 
+		static void __boot();
+		static  ::Dynamic __meta__;
 		static  ::snikket::Notification fromChatMessage( ::snikket::ChatMessage m);
 		static ::Dynamic fromChatMessage_dyn();
 
@@ -81,16 +83,49 @@ HXLINE(  32)		( ( ::snikket::Notification)(__this) )->timestamp = timestamp;
 		static ::Dynamic fromThinStanza_dyn();
 
 		::String title;
+		::String title__fromC();
+		::Dynamic title__fromC_dyn();
+
 		::String body;
+		::String body__fromC();
+		::Dynamic body__fromC_dyn();
+
 		::String accountId;
+		::String accountId__fromC();
+		::Dynamic accountId__fromC_dyn();
+
 		::String chatId;
+		::String chatId__fromC();
+		::Dynamic chatId__fromC_dyn();
+
 		::String messageId;
+		::String messageId__fromC();
+		::Dynamic messageId__fromC_dyn();
+
 		int type;
+		int type__fromC();
+		::Dynamic type__fromC_dyn();
+
 		::String callStatus;
+		::String callStatus__fromC();
+		::Dynamic callStatus__fromC_dyn();
+
 		::String callSid;
+		::String callSid__fromC();
+		::Dynamic callSid__fromC_dyn();
+
 		::String imageUri;
+		::String imageUri__fromC();
+		::Dynamic imageUri__fromC_dyn();
+
 		::String lang;
+		::String lang__fromC();
+		::Dynamic lang__fromC_dyn();
+
 		::String timestamp;
+		::String timestamp__fromC();
+		::Dynamic timestamp__fromC_dyn();
+
 };
 
 } // end namespace snikket
diff --git a/Sources/c_snikket/iinclude/snikket/Push.h b/Sources/c_snikket/iinclude/snikket/Push.h
new file mode 100644
index 0000000..8b5616a
--- /dev/null
+++ b/Sources/c_snikket/iinclude/snikket/Push.h
@@ -0,0 +1,62 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_snikket_Push
+#define INCLUDED_snikket_Push
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(snikket,Notification)
+HX_DECLARE_CLASS1(snikket,Persistence)
+HX_DECLARE_CLASS1(snikket,Push)
+
+namespace snikket{
+
+
+class HXCPP_CLASS_ATTRIBUTES Push_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Push_obj OBJ_;
+		Push_obj();
+
+	public:
+		enum { _hx_ClassId = 0x0b0d3237 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="snikket.Push")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"snikket.Push"); }
+
+		inline static ::hx::ObjectPtr< Push_obj > __new() {
+			::hx::ObjectPtr< Push_obj > __this = new Push_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Push_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Push_obj *__this = (Push_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Push_obj), false, "snikket.Push"));
+			*(void **)__this = Push_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Push_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Push",fa,3d,3a,35); }
+
+		static  ::snikket::Notification receive(::String data,::Dynamic persistence);
+		static ::Dynamic receive_dyn();
+
+};
+
+} // end namespace snikket
+
+#endif /* INCLUDED_snikket_Push */ 
diff --git a/Sources/c_snikket/iinclude/snikket/jingle/Attribute.h b/Sources/c_snikket/iinclude/snikket/jingle/Attribute.h
index ab36337..9c28f6f 100644
--- a/Sources/c_snikket/iinclude/snikket/jingle/Attribute.h
+++ b/Sources/c_snikket/iinclude/snikket/jingle/Attribute.h
@@ -6,7 +6,7 @@
 #include <hxcpp.h>
 #endif
 
-HX_DECLARE_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_624_new)
+HX_DECLARE_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_626_new)
 HX_DECLARE_CLASS2(snikket,jingle,Attribute)
 
 namespace snikket{
@@ -39,9 +39,9 @@ class HXCPP_CLASS_ATTRIBUTES Attribute_obj : public ::hx::Object
 			Attribute_obj *__this = (Attribute_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Attribute_obj), true, "snikket.jingle.Attribute"));
 			*(void **)__this = Attribute_obj::_hx_vtable;
 {
-            	HX_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_624_new)
-HXLINE( 625)		( ( ::snikket::jingle::Attribute)(__this) )->key = key;
-HXLINE( 626)		( ( ::snikket::jingle::Attribute)(__this) )->value = value;
+            	HX_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_626_new)
+HXLINE( 627)		( ( ::snikket::jingle::Attribute)(__this) )->key = key;
+HXLINE( 628)		( ( ::snikket::jingle::Attribute)(__this) )->value = value;
             	}
 		
 			return __this;
diff --git a/Sources/c_snikket/iinclude/snikket/queries/Push2Enable.h b/Sources/c_snikket/iinclude/snikket/queries/Push2Enable.h
new file mode 100644
index 0000000..cdd17e6
--- /dev/null
+++ b/Sources/c_snikket/iinclude/snikket/queries/Push2Enable.h
@@ -0,0 +1,66 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_snikket_queries_Push2Enable
+#define INCLUDED_snikket_queries_Push2Enable
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+#ifndef INCLUDED_snikket_queries_GenericQuery
+#include <snikket/queries/GenericQuery.h>
+#endif
+HX_DECLARE_CLASS1(haxe,IMap)
+HX_DECLARE_CLASS2(haxe,ds,StringMap)
+HX_DECLARE_CLASS2(haxe,io,Bytes)
+HX_DECLARE_CLASS1(snikket,Stanza)
+HX_DECLARE_CLASS2(snikket,_Stanza,NodeInterface)
+HX_DECLARE_CLASS2(snikket,queries,GenericQuery)
+HX_DECLARE_CLASS2(snikket,queries,Push2Enable)
+
+namespace snikket{
+namespace queries{
+
+
+class HXCPP_CLASS_ATTRIBUTES Push2Enable_obj : public  ::snikket::queries::GenericQuery_obj
+{
+	public:
+		typedef  ::snikket::queries::GenericQuery_obj super;
+		typedef Push2Enable_obj OBJ_;
+		Push2Enable_obj();
+
+	public:
+		enum { _hx_ClassId = 0x7fe47af2 };
+
+		void __construct(::String to,::String service,::String client, ::haxe::io::Bytes ua_public, ::haxe::io::Bytes auth_secret,::String jwt_alg, ::haxe::io::Bytes jwt_key, ::haxe::ds::StringMap jwt_claims,int grace,::Array< ::Dynamic> filters);
+		inline void *operator new(size_t inSize, bool inContainer=true,const char *inName="snikket.queries.Push2Enable")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,true,"snikket.queries.Push2Enable"); }
+		static ::hx::ObjectPtr< Push2Enable_obj > __new(::String to,::String service,::String client, ::haxe::io::Bytes ua_public, ::haxe::io::Bytes auth_secret,::String jwt_alg, ::haxe::io::Bytes jwt_key, ::haxe::ds::StringMap jwt_claims,int grace,::Array< ::Dynamic> filters);
+		static ::hx::ObjectPtr< Push2Enable_obj > __alloc(::hx::Ctx *_hx_ctx,::String to,::String service,::String client, ::haxe::io::Bytes ua_public, ::haxe::io::Bytes auth_secret,::String jwt_alg, ::haxe::io::Bytes jwt_key, ::haxe::ds::StringMap jwt_claims,int grace,::Array< ::Dynamic> filters);
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Push2Enable_obj();
+
+		HX_DO_RTTI_ALL;
+		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
+		void __GetFields(Array< ::String> &outFields);
+		static void __register();
+		void __Mark(HX_MARK_PARAMS);
+		void __Visit(HX_VISIT_PARAMS);
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Push2Enable",9b,29,c8,72); }
+
+		::String xmlns;
+		::String queryId;
+		 ::snikket::Stanza responseStanza;
+		void handleResponse( ::snikket::Stanza stanza);
+
+};
+
+} // end namespace snikket
+} // end namespace queries
+
+#endif /* INCLUDED_snikket_queries_Push2Enable */ 
diff --git a/Sources/c_snikket/iinclude/snikket/streams/XmppStropheStream.h b/Sources/c_snikket/iinclude/snikket/streams/XmppStropheStream.h
index fec9d77..f2101f2 100644
--- a/Sources/c_snikket/iinclude/snikket/streams/XmppStropheStream.h
+++ b/Sources/c_snikket/iinclude/snikket/streams/XmppStropheStream.h
@@ -23,6 +23,7 @@ HX_DECLARE_CLASS1(snikket,IqResult)
 HX_DECLARE_CLASS1(snikket,Stanza)
 HX_DECLARE_CLASS2(snikket,_Stanza,NodeInterface)
 HX_DECLARE_CLASS2(snikket,streams,XmppStropheStream)
+HX_DECLARE_CLASS2(sys,thread,EventLoop)
 
 #include "strophe.h"
 namespace snikket{
@@ -63,6 +64,12 @@ class HXCPP_CLASS_ATTRIBUTES XmppStropheStream_obj : public  ::snikket::GenericS
 
 		static void strophe_fast_token_handler( xmpp_conn_t* conn,const char* token,void* userdata);
 
+		static void strophe_sm_handler( xmpp_conn_t* conn,void* userdata,const unsigned char* sm_state,size_t sm_state_len);
+
+		static void strophe_sm_ack_handler( xmpp_conn_t* conn,void* userdata,const char* id);
+
+		static void strophe_sm_fail_handler( xmpp_conn_t* conn,void* userdata,const char* id);
+
 		static int strophe_certfail_handler( const xmpp_tlscert_t* cert,const char* err);
 
 		static int strophe_stanza( xmpp_conn_t* conn, xmpp_stanza_t* sstanza,void* userdata);
@@ -74,6 +81,7 @@ class HXCPP_CLASS_ATTRIBUTES XmppStropheStream_obj : public  ::snikket::GenericS
 		 ::haxe::ds::EnumValueMap iqHandlers;
 		::Array< ::Dynamic> pending;
 		bool ready;
+		 ::sys::thread::EventLoop mainThread;
 		::String newId();
 
 		void onIq( ::snikket::IqRequestType type,::String tag,::String xmlns, ::Dynamic handler);
@@ -82,9 +90,6 @@ class HXCPP_CLASS_ATTRIBUTES XmppStropheStream_obj : public  ::snikket::GenericS
 
 		void disconnect();
 
-		void poll();
-		::Dynamic poll_dyn();
-
 		 xmpp_stanza_t* convertFromStanza( ::snikket::Stanza el);
 		::Dynamic convertFromStanza_dyn();
 
diff --git a/Sources/c_snikket/include/snikket.h b/Sources/c_snikket/include/snikket.h
index a294c1b..8352253 100644
--- a/Sources/c_snikket/include/snikket.h
+++ b/Sources/c_snikket/include/snikket.h
@@ -168,6 +168,16 @@ API_PREFIX const char *snikket_chat_message_thread_id(void *chat_message);
  */
 API_PREFIX size_t snikket_chat_message_attachments(void *chat_message, void ***outPtr);
 
+/**
+ * List of reactions to this message
+ */
+API_PREFIX size_t snikket_chat_message_reaction_keys(void *chat_message, const char ***outPtr);
+
+/**
+ * Details of a set of reaction to this message
+ */
+API_PREFIX size_t snikket_chat_message_reaction_details(void *chat_message, const char *reactionKey, void ***outPtr);
+
 /**
  * Body text of this message or NULL
  */
@@ -273,6 +283,16 @@ API_PREFIX const char *snikket_hash_to_base_64(void *hash);
 
 API_PREFIX const char *snikket_hash_to_base_64_url(void *hash);
 
+API_PREFIX const char *snikket_reaction_sender_id(void *reaction);
+
+API_PREFIX const char *snikket_reaction_timestamp(void *reaction);
+
+API_PREFIX const char *snikket_reaction_text(void *reaction);
+
+API_PREFIX const char *snikket_reaction_key(void *reaction);
+
+API_PREFIX const char *snikket_reaction_envelope_id(void *reaction);
+
 /**
  * @returns a new blank ChatMessageBuilder
  */
@@ -397,6 +417,11 @@ API_PREFIX enum snikket_message_status snikket_chat_message_builder_status(void
  */
 API_PREFIX void snikket_chat_message_builder_set_status(void *chat_message_builder, enum snikket_message_status value);
 
+/**
+ * Array of past versions of this message, if it has been edited
+ */
+API_PREFIX void snikket_chat_message_builder_set_versions(void *chat_message_builder, void *const *inPtr, size_t count);
+
 /**
  * Array of past versions of this message, if it has been edited
  */
@@ -431,6 +456,30 @@ API_PREFIX void *snikket_chat_message_builder_build(void *chat_message_builder);
  */
 API_PREFIX void *snikket_persistence_dummy_new();
 
+API_PREFIX void *snikket_push_receive(const char *data, void *persistence);
+
+API_PREFIX const char *snikket_notification_title(void *notification);
+
+API_PREFIX const char *snikket_notification_body(void *notification);
+
+API_PREFIX const char *snikket_notification_account_id(void *notification);
+
+API_PREFIX const char *snikket_notification_chat_id(void *notification);
+
+API_PREFIX const char *snikket_notification_message_id(void *notification);
+
+API_PREFIX enum snikket_message_type snikket_notification_type(void *notification);
+
+API_PREFIX const char *snikket_notification_call_status(void *notification);
+
+API_PREFIX const char *snikket_notification_call_sid(void *notification);
+
+API_PREFIX const char *snikket_notification_image_uri(void *notification);
+
+API_PREFIX const char *snikket_notification_lang(void *notification);
+
+API_PREFIX const char *snikket_notification_timestamp(void *notification);
+
 /**
  * Create a new Client to connect to a particular account
  * 
@@ -449,6 +498,11 @@ API_PREFIX void snikket_client_set_send_available(void *client, bool value);
  */
 API_PREFIX void snikket_client_start(void *client);
 
+/**
+ * Gets the client ready to use but does not connect to the server
+ */
+API_PREFIX void snikket_client_start_offline(void *client, void (*ready) (void*), void *ready__context);
+
 /**
  * Destroy local data for this account
  * 
@@ -516,6 +570,19 @@ API_PREFIX void *snikket_client_start_chat(void *client, void *availableChat);
  */
 API_PREFIX void *snikket_client_get_chat(void *client, const char *chatId);
 
+/**
+ * Enable push notifications
+ * 
+ * @param push_service the address of a push proxy
+ * @param vapid_private_pkcs8 the private key for signing JWT of the push service
+ * @param endpoint the final target for the push proxy to forward to
+ * @param p256dh A P-256 uncompressed point in ANSI X9.62 format
+ * @param auth Random 16 octed value
+ * @param grace Grace period during which not to generate push if another app is active for same account, in seconds (negative for none)
+ * @param claims Optional additional JWT claims as key then value
+ */
+API_PREFIX void snikket_client_enable_push(void *client, const char *push_service, const char *endpoint, const unsigned char *p256dh, size_t p256dh__len, const unsigned char *auth, size_t auth__len, int grace, const unsigned char *vapid_private_pkcs8, size_t vapid_private_pkcs8__len, const char *const *claims, size_t claims__len);
+
 /**
  * Event fired when client needs a password for authentication
  * 
@@ -954,16 +1021,6 @@ API_PREFIX void snikket_jingle_media_stream_add_track(void *media_stream, void *
 
 API_PREFIX size_t snikket_jingle_media_stream_get_tracks(void *media_stream, void ***outPtr);
 
-API_PREFIX void *snikket_attachment_source_new(const char *path, const char *mime);
-
-API_PREFIX const char *snikket_attachment_source_path(void *attachment_source);
-
-API_PREFIX const char *snikket_attachment_source_type(void *attachment_source);
-
-API_PREFIX const char *snikket_attachment_source_name(void *attachment_source);
-
-API_PREFIX int snikket_attachment_source_size(void *attachment_source);
-
 API_PREFIX const char *snikket_participant_display_name(void *participant);
 
 API_PREFIX const char *snikket_participant_photo_uri(void *participant);
@@ -972,17 +1029,17 @@ API_PREFIX const char *snikket_participant_placeholder_uri(void *participant);
 
 API_PREFIX bool snikket_participant_is_self(void *participant);
 
-API_PREFIX bool snikket_channel_is_private(void *channel);
+API_PREFIX void *snikket_attachment_source_new(const char *path, const char *mime);
 
-API_PREFIX const char *snikket_reaction_sender_id(void *reaction);
+API_PREFIX const char *snikket_attachment_source_path(void *attachment_source);
 
-API_PREFIX const char *snikket_reaction_timestamp(void *reaction);
+API_PREFIX const char *snikket_attachment_source_type(void *attachment_source);
 
-API_PREFIX const char *snikket_reaction_text(void *reaction);
+API_PREFIX const char *snikket_attachment_source_name(void *attachment_source);
 
-API_PREFIX const char *snikket_reaction_key(void *reaction);
+API_PREFIX int snikket_attachment_source_size(void *attachment_source);
 
-API_PREFIX const char *snikket_reaction_envelope_id(void *reaction);
+API_PREFIX bool snikket_channel_is_private(void *channel);
 
 API_PREFIX const char *snikket_custom_emoji_reaction_uri(void *custom_emoji_reaction);
 
diff --git a/Sources/c_snikket/src/HaxeCBridge.cpp b/Sources/c_snikket/src/HaxeCBridge.cpp
index 94dcd30..635e4d6 100644
--- a/Sources/c_snikket/src/HaxeCBridge.cpp
+++ b/Sources/c_snikket/src/HaxeCBridge.cpp
@@ -43,153 +43,153 @@
 #include <sys/thread/_Thread/Thread_Impl_.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_1907_mainThreadInit,"HaxeCBridge","mainThreadInit",0x6f09ae5b,"HaxeCBridge.mainThreadInit","HaxeCBridge.hx",1907,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_1922_mainThreadRun,"HaxeCBridge","mainThreadRun",0xa4afa660,"HaxeCBridge.mainThreadRun","HaxeCBridge.hx",1922,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2001_retainHaxeArray,"HaxeCBridge","retainHaxeArray",0x7373bc46,"HaxeCBridge.retainHaxeArray","HaxeCBridge.hx",2001,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2010_retainHaxeObject,"HaxeCBridge","retainHaxeObject",0xef200772,"HaxeCBridge.retainHaxeObject","HaxeCBridge.hx",2010,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2020_retainHaxeString,"HaxeCBridge","retainHaxeString",0xeb10b184,"HaxeCBridge.retainHaxeString","HaxeCBridge.hx",2020,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2027_releaseHaxePtr,"HaxeCBridge","releaseHaxePtr",0x5df2fc29,"HaxeCBridge.releaseHaxePtr","HaxeCBridge.hx",2027,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2034_isMainThread,"HaxeCBridge","isMainThread",0x6f71c035,"HaxeCBridge.isMainThread","HaxeCBridge.hx",2034,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2039_endMainThread,"HaxeCBridge","endMainThread",0x0d9deed6,"HaxeCBridge.endMainThread","HaxeCBridge.hx",2039,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_1955_mainThreadInit,"HaxeCBridge","mainThreadInit",0x6f09ae5b,"HaxeCBridge.mainThreadInit","HaxeCBridge.hx",1955,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_1970_mainThreadRun,"HaxeCBridge","mainThreadRun",0xa4afa660,"HaxeCBridge.mainThreadRun","HaxeCBridge.hx",1970,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2049_retainHaxeArray,"HaxeCBridge","retainHaxeArray",0x7373bc46,"HaxeCBridge.retainHaxeArray","HaxeCBridge.hx",2049,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2058_retainHaxeObject,"HaxeCBridge","retainHaxeObject",0xef200772,"HaxeCBridge.retainHaxeObject","HaxeCBridge.hx",2058,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2068_retainHaxeString,"HaxeCBridge","retainHaxeString",0xeb10b184,"HaxeCBridge.retainHaxeString","HaxeCBridge.hx",2068,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2075_releaseHaxePtr,"HaxeCBridge","releaseHaxePtr",0x5df2fc29,"HaxeCBridge.releaseHaxePtr","HaxeCBridge.hx",2075,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2082_isMainThread,"HaxeCBridge","isMainThread",0x6f71c035,"HaxeCBridge.isMainThread","HaxeCBridge.hx",2082,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2087_endMainThread,"HaxeCBridge","endMainThread",0x0d9deed6,"HaxeCBridge.endMainThread","HaxeCBridge.hx",2087,0xa18550d8)
 
 void HaxeCBridge::mainThreadInit(::cpp::Function< bool  () > isMainThreadCb){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_1907_mainThreadInit)
-HXLINE(1913)		::_HaxeCBridge::Internal_obj::isMainThreadCb = isMainThreadCb;
-HXLINE(1914)		::_HaxeCBridge::Internal_obj::mainThreadWaitLock = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->waitLock;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_1955_mainThreadInit)
+HXLINE(1961)		::_HaxeCBridge::Internal_obj::isMainThreadCb = isMainThreadCb;
+HXLINE(1962)		::_HaxeCBridge::Internal_obj::mainThreadWaitLock = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->waitLock;
             	}
 
 
 void HaxeCBridge::mainThreadRun(::cpp::Function< void  () > processNativeCalls,::cpp::Function< void  (const char*) > onUnhandledException){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_1922_mainThreadRun)
-HXLINE(1923)		try {
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_1970_mainThreadRun)
+HXLINE(1971)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE(1925)				{
-HXLINE(1925)					null();
+HXLINE(1973)				{
+HXLINE(1973)					null();
             				}
-HXDLIN(1925)				 ::Dynamic e = _g;
-HXLINE(1926)				{
-HXLINE(1926)					::String s;
-HXDLIN(1926)					if (::hx::IsNull( e )) {
-HXLINE(1926)						s = HX_("null",87,9e,0e,49);
+HXDLIN(1973)				 ::Dynamic e = _g;
+HXLINE(1974)				{
+HXLINE(1974)					::String s;
+HXDLIN(1974)					if (::hx::IsNull( e )) {
+HXLINE(1974)						s = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE(1926)						s = ::Std_obj::string(e);
+HXLINE(1974)						s = ::Std_obj::string(e);
             					}
-HXDLIN(1926)					onUnhandledException(s.utf8_str());
+HXDLIN(1974)					onUnhandledException(s.utf8_str());
             				}
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE(1930)		 ::sys::thread::EventLoop eventLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE(1932)		::Array< ::Dynamic> events = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1933)		while(::_HaxeCBridge::Internal_obj::mainThreadLoopActive){
-HXLINE(1934)			try {
+HXLINE(1978)		 ::sys::thread::EventLoop eventLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE(1980)		::Array< ::Dynamic> events = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1981)		while(::_HaxeCBridge::Internal_obj::mainThreadLoopActive){
+HXLINE(1982)			try {
             				HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(1936)				processNativeCalls();
-HXLINE(1939)				Float now = ::Sys_obj::time();
-HXDLIN(1939)				::Array< ::Dynamic> eventsToRun = events;
-HXDLIN(1939)				int eventsToRunIdx = 0;
-HXDLIN(1939)				Float nextEventAt = ( (Float)(-1) );
-HXDLIN(1939)				eventLoop->mutex->acquire();
-HXDLIN(1939)				 ::sys::thread::_EventLoop::RegularEvent current = eventLoop->regularEvents;
-HXDLIN(1939)				while(::hx::IsNotNull( current )){
-HXLINE(1939)					if ((current->nextRunTime <= now)) {
-HXLINE(1939)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(1939)						eventsToRun[(eventsToRunIdx - 1)] = current->run;
-HXDLIN(1939)						 ::sys::thread::_EventLoop::RegularEvent current1 = current;
-HXDLIN(1939)						current1->nextRunTime = (current1->nextRunTime + current->interval);
-HXLINE(2152)						nextEventAt = ( (Float)(-2) );
+HXLINE(1984)				processNativeCalls();
+HXLINE(1987)				Float now = ::Sys_obj::time();
+HXDLIN(1987)				::Array< ::Dynamic> eventsToRun = events;
+HXDLIN(1987)				int eventsToRunIdx = 0;
+HXDLIN(1987)				Float nextEventAt = ( (Float)(-1) );
+HXDLIN(1987)				eventLoop->mutex->acquire();
+HXDLIN(1987)				 ::sys::thread::_EventLoop::RegularEvent current = eventLoop->regularEvents;
+HXDLIN(1987)				while(::hx::IsNotNull( current )){
+HXLINE(1987)					if ((current->nextRunTime <= now)) {
+HXLINE(1987)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(1987)						eventsToRun[(eventsToRunIdx - 1)] = current->run;
+HXDLIN(1987)						 ::sys::thread::_EventLoop::RegularEvent current1 = current;
+HXDLIN(1987)						current1->nextRunTime = (current1->nextRunTime + current->interval);
+HXLINE(2200)						nextEventAt = ( (Float)(-2) );
             					}
             					else {
-HXLINE(1939)						bool _hx_tmp;
-HXDLIN(1939)						if ((nextEventAt != -1)) {
-HXLINE(1939)							_hx_tmp = (current->nextRunTime < nextEventAt);
+HXLINE(1987)						bool _hx_tmp;
+HXDLIN(1987)						if ((nextEventAt != -1)) {
+HXLINE(1987)							_hx_tmp = (current->nextRunTime < nextEventAt);
             						}
             						else {
-HXLINE(1939)							_hx_tmp = true;
+HXLINE(1987)							_hx_tmp = true;
             						}
-HXDLIN(1939)						if (_hx_tmp) {
-HXLINE(2154)							nextEventAt = current->nextRunTime;
+HXDLIN(1987)						if (_hx_tmp) {
+HXLINE(2202)							nextEventAt = current->nextRunTime;
             						}
             					}
-HXLINE(2156)					current = current->next;
+HXLINE(2204)					current = current->next;
             				}
-HXLINE(1939)				eventLoop->mutex->release();
-HXDLIN(1939)				int _g1 = 0;
-HXDLIN(1939)				int _g2 = eventsToRunIdx;
-HXDLIN(1939)				while((_g1 < _g2)){
-HXLINE(1939)					_g1 = (_g1 + 1);
-HXDLIN(1939)					int i = (_g1 - 1);
-HXDLIN(1939)					eventsToRun->__get(i)();
-HXDLIN(1939)					eventsToRun[i] = null();
+HXLINE(1987)				eventLoop->mutex->release();
+HXDLIN(1987)				int _g1 = 0;
+HXDLIN(1987)				int _g2 = eventsToRunIdx;
+HXDLIN(1987)				while((_g1 < _g2)){
+HXLINE(1987)					_g1 = (_g1 + 1);
+HXDLIN(1987)					int i = (_g1 - 1);
+HXDLIN(1987)					eventsToRun->__get(i)();
+HXDLIN(1987)					eventsToRun[i] = null();
             				}
-HXLINE(2165)				eventsToRunIdx = 0;
-HXLINE(1939)				eventLoop->mutex->acquire();
-HXDLIN(1939)				int _g_current = 0;
-HXDLIN(1939)				::Array< ::Dynamic> _g_array = eventLoop->oneTimeEvents;
-HXDLIN(1939)				while((_g_current < _g_array->length)){
-HXLINE(1939)					 ::Dynamic _g_value = _g_array->__get(_g_current);
-HXDLIN(1939)					_g_current = (_g_current + 1);
-HXDLIN(1939)					int _g_key = (_g_current - 1);
-HXDLIN(1939)					int i1 = _g_key;
-HXDLIN(1939)					 ::Dynamic event = _g_value;
-HXDLIN(1939)					if (::hx::IsNull( event )) {
-HXLINE(1939)						goto _hx_goto_4;
+HXLINE(2213)				eventsToRunIdx = 0;
+HXLINE(1987)				eventLoop->mutex->acquire();
+HXDLIN(1987)				int _g_current = 0;
+HXDLIN(1987)				::Array< ::Dynamic> _g_array = eventLoop->oneTimeEvents;
+HXDLIN(1987)				while((_g_current < _g_array->length)){
+HXLINE(1987)					 ::Dynamic _g_value = _g_array->__get(_g_current);
+HXDLIN(1987)					_g_current = (_g_current + 1);
+HXDLIN(1987)					int _g_key = (_g_current - 1);
+HXDLIN(1987)					int i1 = _g_key;
+HXDLIN(1987)					 ::Dynamic event = _g_value;
+HXDLIN(1987)					if (::hx::IsNull( event )) {
+HXLINE(1987)						goto _hx_goto_4;
             					}
             					else {
-HXLINE(1939)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(1939)						eventsToRun[(eventsToRunIdx - 1)] = event;
-HXDLIN(1939)						eventLoop->oneTimeEvents[i1] = null();
+HXLINE(1987)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(1987)						eventsToRun[(eventsToRunIdx - 1)] = event;
+HXDLIN(1987)						eventLoop->oneTimeEvents[i1] = null();
             					}
             				}
             				_hx_goto_4:;
-HXDLIN(1939)				eventLoop->oneTimeEventsIdx = 0;
-HXDLIN(1939)				bool hasPromisedEvents = (eventLoop->promisedEventsCount > 0);
-HXDLIN(1939)				eventLoop->mutex->release();
-HXDLIN(1939)				int _g3 = 0;
-HXDLIN(1939)				int _g4 = eventsToRunIdx;
-HXDLIN(1939)				while((_g3 < _g4)){
-HXLINE(1939)					_g3 = (_g3 + 1);
-HXDLIN(1939)					int i2 = (_g3 - 1);
-HXDLIN(1939)					eventsToRun->__get(i2)();
-HXDLIN(1939)					eventsToRun[i2] = null();
+HXDLIN(1987)				eventLoop->oneTimeEventsIdx = 0;
+HXDLIN(1987)				bool hasPromisedEvents = (eventLoop->promisedEventsCount > 0);
+HXDLIN(1987)				eventLoop->mutex->release();
+HXDLIN(1987)				int _g3 = 0;
+HXDLIN(1987)				int _g4 = eventsToRunIdx;
+HXDLIN(1987)				while((_g3 < _g4)){
+HXLINE(1987)					_g3 = (_g3 + 1);
+HXDLIN(1987)					int i2 = (_g3 - 1);
+HXDLIN(1987)					eventsToRun->__get(i2)();
+HXDLIN(1987)					eventsToRun[i2] = null();
             				}
-HXDLIN(1939)				if ((eventsToRunIdx > 0)) {
-HXLINE(2190)					nextEventAt = ( (Float)(-2) );
+HXDLIN(1987)				if ((eventsToRunIdx > 0)) {
+HXLINE(2238)					nextEventAt = ( (Float)(-2) );
             				}
-HXLINE(1939)				Float eventTickInfo_nextEventAt = nextEventAt;
-HXDLIN(1939)				bool eventTickInfo_anyTime = hasPromisedEvents;
-HXLINE(1940)				{
-HXLINE(1940)					Float _g5 = eventTickInfo_nextEventAt;
-HXDLIN(1940)					Float _hx_switch_0 = _g5;
+HXLINE(1987)				Float eventTickInfo_nextEventAt = nextEventAt;
+HXDLIN(1987)				bool eventTickInfo_anyTime = hasPromisedEvents;
+HXLINE(1988)				{
+HXLINE(1988)					Float _g5 = eventTickInfo_nextEventAt;
+HXDLIN(1988)					Float _hx_switch_0 = _g5;
             					if (  (_hx_switch_0==( (Float)(-2) )) ){
-HXLINE(1941)						goto _hx_goto_6;
+HXLINE(1989)						goto _hx_goto_6;
             					}
             					if (  (_hx_switch_0==( (Float)(-1) )) ){
-HXLINE(1943)						bool _hx_tmp1;
-HXDLIN(1943)						if (::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending) {
-HXLINE(1943)							_hx_tmp1 = !(eventTickInfo_anyTime);
+HXLINE(1991)						bool _hx_tmp1;
+HXDLIN(1991)						if (::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending) {
+HXLINE(1991)							_hx_tmp1 = !(eventTickInfo_anyTime);
             						}
             						else {
-HXLINE(1943)							_hx_tmp1 = false;
+HXLINE(1991)							_hx_tmp1 = false;
             						}
-HXDLIN(1943)						if (_hx_tmp1) {
-HXLINE(1945)							goto _hx_goto_1;
+HXDLIN(1991)						if (_hx_tmp1) {
+HXLINE(1993)							goto _hx_goto_1;
             						}
-HXLINE(1947)						::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(null());
-HXLINE(1942)						goto _hx_goto_6;
+HXLINE(1995)						::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(null());
+HXLINE(1990)						goto _hx_goto_6;
             					}
             					/* default */{
-HXLINE(1948)						Float time = _g5;
-HXDLIN(1948)						{
-HXLINE(1949)							Float timeout = (time - ::Sys_obj::time());
-HXLINE(1950)							::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math_obj::max(( (Float)(0) ),timeout));
+HXLINE(1996)						Float time = _g5;
+HXDLIN(1996)						{
+HXLINE(1997)							Float timeout = (time - ::Sys_obj::time());
+HXLINE(1998)							::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math_obj::max(( (Float)(0) ),timeout));
             						}
             					}
             					_hx_goto_6:;
@@ -198,19 +198,19 @@ HXLINE(1950)							::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math
             				if (_hx_e.IsClass<  ::Dynamic >() ){
             					HX_STACK_BEGIN_CATCH
             					 ::Dynamic _g6 = _hx_e;
-HXLINE(1952)					{
-HXLINE(1952)						null();
+HXLINE(2000)					{
+HXLINE(2000)						null();
             					}
-HXDLIN(1952)					 ::Dynamic e1 = _g6;
-HXLINE(1953)					{
-HXLINE(1953)						::String s1;
-HXDLIN(1953)						if (::hx::IsNull( e1 )) {
-HXLINE(1953)							s1 = HX_("null",87,9e,0e,49);
+HXDLIN(2000)					 ::Dynamic e1 = _g6;
+HXLINE(2001)					{
+HXLINE(2001)						::String s1;
+HXDLIN(2001)						if (::hx::IsNull( e1 )) {
+HXLINE(2001)							s1 = HX_("null",87,9e,0e,49);
             						}
             						else {
-HXLINE(1953)							s1 = ::Std_obj::string(e1);
+HXLINE(2001)							s1 = ::Std_obj::string(e1);
             						}
-HXDLIN(1953)						onUnhandledException(s1.utf8_str());
+HXDLIN(2001)						onUnhandledException(s1.utf8_str());
             					}
             				}
             				else {
@@ -219,89 +219,89 @@ HXDLIN(1953)						onUnhandledException(s1.utf8_str());
             			}
             		}
             		_hx_goto_1:;
-HXLINE(1958)		__hxcpp_collect(true);
+HXLINE(2006)		__hxcpp_collect(true);
             	}
 
 
 void** HaxeCBridge::retainHaxeArray(::cpp::VirtualArray haxeArray){
-            	HX_GC_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2001_retainHaxeArray)
-HXLINE(2004)		void** ptr = (void**)haxeArray->getBase();
-HXLINE(2005)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXLINE(2006)		{
-HXLINE(2006)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN(2006)			int low = ptrInt64 & 0xffffffff;
-HXDLIN(2006)			int high = ptrInt64 >> 32;
-HXDLIN(2006)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN(2006)			if (::hx::IsNull( highMap )) {
-HXLINE(2006)				highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN(2006)				this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2049_retainHaxeArray)
+HXLINE(2052)		void** ptr = (void**)haxeArray->getBase();
+HXLINE(2053)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXLINE(2054)		{
+HXLINE(2054)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN(2054)			int low = ptrInt64 & 0xffffffff;
+HXDLIN(2054)			int high = ptrInt64 >> 32;
+HXDLIN(2054)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN(2054)			if (::hx::IsNull( highMap )) {
+HXLINE(2054)				highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN(2054)				this1->set(low,highMap);
             			}
-HXDLIN(2006)			highMap->set(high,haxeArray);
+HXDLIN(2054)			highMap->set(high,haxeArray);
             		}
-HXLINE(2007)		return ptr;
+HXLINE(2055)		return ptr;
             	}
 
 
 void* HaxeCBridge::retainHaxeObject( ::Dynamic haxeObject){
-            	HX_GC_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2010_retainHaxeObject)
-HXLINE(2012)		void* ptr = haxeObject.mPtr;
-HXLINE(2015)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXLINE(2016)		{
-HXLINE(2016)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN(2016)			int low = ptrInt64 & 0xffffffff;
-HXDLIN(2016)			int high = ptrInt64 >> 32;
-HXDLIN(2016)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN(2016)			if (::hx::IsNull( highMap )) {
-HXLINE(2016)				highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN(2016)				this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2058_retainHaxeObject)
+HXLINE(2060)		void* ptr = haxeObject.mPtr;
+HXLINE(2063)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXLINE(2064)		{
+HXLINE(2064)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN(2064)			int low = ptrInt64 & 0xffffffff;
+HXDLIN(2064)			int high = ptrInt64 >> 32;
+HXDLIN(2064)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN(2064)			if (::hx::IsNull( highMap )) {
+HXLINE(2064)				highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN(2064)				this1->set(low,highMap);
             			}
-HXDLIN(2016)			highMap->set(high,haxeObject);
+HXDLIN(2064)			highMap->set(high,haxeObject);
             		}
-HXLINE(2017)		return ptr;
+HXLINE(2065)		return ptr;
             	}
 
 
 const char* HaxeCBridge::retainHaxeString(::String haxeString){
-            	HX_GC_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2020_retainHaxeString)
-HXLINE(2021)		const char* cStrPtr = haxeString.utf8_str();
-HXLINE(2022)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXLINE(2023)		{
-HXLINE(2023)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN(2023)			int low = ptrInt64 & 0xffffffff;
-HXDLIN(2023)			int high = ptrInt64 >> 32;
-HXDLIN(2023)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN(2023)			if (::hx::IsNull( highMap )) {
-HXLINE(2023)				highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN(2023)				this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2068_retainHaxeString)
+HXLINE(2069)		const char* cStrPtr = haxeString.utf8_str();
+HXLINE(2070)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXLINE(2071)		{
+HXLINE(2071)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN(2071)			int low = ptrInt64 & 0xffffffff;
+HXDLIN(2071)			int high = ptrInt64 >> 32;
+HXDLIN(2071)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN(2071)			if (::hx::IsNull( highMap )) {
+HXLINE(2071)				highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN(2071)				this1->set(low,highMap);
             			}
-HXDLIN(2023)			highMap->set(high,haxeString);
+HXDLIN(2071)			highMap->set(high,haxeString);
             		}
-HXLINE(2024)		return cStrPtr;
+HXLINE(2072)		return cStrPtr;
             	}
 
 
 void HaxeCBridge::releaseHaxePtr(void * haxePtr){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2027_releaseHaxePtr)
-HXLINE(2028)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(haxePtr);
-HXLINE(2029)		{
-HXLINE(2029)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN(2029)			int low = ptrInt64 & 0xffffffff;
-HXDLIN(2029)			int high = ptrInt64 >> 32;
-HXDLIN(2029)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN(2029)			if (::hx::IsNotNull( highMap )) {
-HXLINE(2029)				bool removed = highMap->remove(high);
-HXDLIN(2029)				bool isHighMapEmpty = true;
-HXDLIN(2029)				{
-HXLINE(2029)					 ::Dynamic k = highMap->keys();
-HXDLIN(2029)					while(( (bool)(k->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(2029)						int k1 = ( (int)(k->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(2029)						isHighMapEmpty = false;
-HXDLIN(2029)						goto _hx_goto_11;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2075_releaseHaxePtr)
+HXLINE(2076)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(haxePtr);
+HXLINE(2077)		{
+HXLINE(2077)			 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN(2077)			int low = ptrInt64 & 0xffffffff;
+HXDLIN(2077)			int high = ptrInt64 >> 32;
+HXDLIN(2077)			 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN(2077)			if (::hx::IsNotNull( highMap )) {
+HXLINE(2077)				bool removed = highMap->remove(high);
+HXDLIN(2077)				bool isHighMapEmpty = true;
+HXDLIN(2077)				{
+HXLINE(2077)					 ::Dynamic k = highMap->keys();
+HXDLIN(2077)					while(( (bool)(k->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2077)						int k1 = ( (int)(k->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(2077)						isHighMapEmpty = false;
+HXDLIN(2077)						goto _hx_goto_11;
             					}
             					_hx_goto_11:;
             				}
-HXDLIN(2029)				if (isHighMapEmpty) {
-HXLINE(2029)					this1->remove(low);
+HXDLIN(2077)				if (isHighMapEmpty) {
+HXLINE(2077)					this1->remove(low);
             				}
             			}
             		}
@@ -309,23 +309,23 @@ HXLINE(2029)					this1->remove(low);
 
 
 bool HaxeCBridge::isMainThread(){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2034_isMainThread)
-HXDLIN(2034)		return ::_HaxeCBridge::Internal_obj::isMainThreadCb();
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2082_isMainThread)
+HXDLIN(2082)		return ::_HaxeCBridge::Internal_obj::isMainThreadCb();
             	}
 
 
 void HaxeCBridge::endMainThread(bool waitOnScheduledEvents){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2039_endMainThread)
-HXLINE(2040)		::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending = true;
-HXLINE(2041)		bool _hx_tmp;
-HXDLIN(2041)		if (::_HaxeCBridge::Internal_obj::mainThreadLoopActive) {
-HXLINE(2041)			_hx_tmp = waitOnScheduledEvents;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2087_endMainThread)
+HXLINE(2088)		::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending = true;
+HXLINE(2089)		bool _hx_tmp;
+HXDLIN(2089)		if (::_HaxeCBridge::Internal_obj::mainThreadLoopActive) {
+HXLINE(2089)			_hx_tmp = waitOnScheduledEvents;
             		}
             		else {
-HXLINE(2041)			_hx_tmp = false;
+HXLINE(2089)			_hx_tmp = false;
             		}
-HXDLIN(2041)		::_HaxeCBridge::Internal_obj::mainThreadLoopActive = _hx_tmp;
-HXLINE(2042)		 ::__hxcpp_lock_release(::_HaxeCBridge::Internal_obj::mainThreadWaitLock->l);
+HXDLIN(2089)		::_HaxeCBridge::Internal_obj::mainThreadLoopActive = _hx_tmp;
+HXLINE(2090)		 ::__hxcpp_lock_release(::_HaxeCBridge::Internal_obj::mainThreadWaitLock->l);
             	}
 
 
diff --git a/Sources/c_snikket/src/_HaxeCBridge/Int64Map_Impl_.cpp b/Sources/c_snikket/src/_HaxeCBridge/Int64Map_Impl_.cpp
index 8ce460f..84068a0 100644
--- a/Sources/c_snikket/src/_HaxeCBridge/Int64Map_Impl_.cpp
+++ b/Sources/c_snikket/src/_HaxeCBridge/Int64Map_Impl_.cpp
@@ -11,7 +11,7 @@
 #include <haxe/ds/IntMap.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_d939fa764c7c1922_2072__new,"_HaxeCBridge.Int64Map_Impl_","_new",0x93ec2b39,"_HaxeCBridge.Int64Map_Impl_._new","HaxeCBridge.hx",2072,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_d939fa764c7c1922_2120__new,"_HaxeCBridge.Int64Map_Impl_","_new",0x93ec2b39,"_HaxeCBridge.Int64Map_Impl_._new","HaxeCBridge.hx",2120,0xa18550d8)
 namespace _HaxeCBridge{
 
 void Int64Map_Impl__obj::__construct() { }
@@ -32,8 +32,8 @@ bool Int64Map_Impl__obj::_hx_isInstanceOf(int inClassId) {
 }
 
  ::haxe::ds::IntMap Int64Map_Impl__obj::_new(){
-            	HX_GC_STACKFRAME(&_hx_pos_d939fa764c7c1922_2072__new)
-HXDLIN(2072)		return  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+            	HX_GC_STACKFRAME(&_hx_pos_d939fa764c7c1922_2120__new)
+HXDLIN(2120)		return  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
             	}
 
 
diff --git a/Sources/c_snikket/src/_HaxeCBridge/Internal.cpp b/Sources/c_snikket/src/_HaxeCBridge/Internal.cpp
index 845cacc..c9d064f 100644
--- a/Sources/c_snikket/src/_HaxeCBridge/Internal.cpp
+++ b/Sources/c_snikket/src/_HaxeCBridge/Internal.cpp
@@ -17,9 +17,9 @@
 #include <sys/thread/Lock.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2060_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2060,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2061_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2061,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2062_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2062,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2108_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2108,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2109_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2109,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2110_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2110,0xa18550d8)
 namespace _HaxeCBridge{
 
 void Internal_obj::__construct() { }
@@ -168,16 +168,16 @@ void Internal_obj::__register()
 void Internal_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2060_boot)
-HXDLIN(2060)		mainThreadLoopActive = true;
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2108_boot)
+HXDLIN(2108)		mainThreadLoopActive = true;
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2061_boot)
-HXDLIN(2061)		mainThreadEndIfNoPending = false;
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2109_boot)
+HXDLIN(2109)		mainThreadEndIfNoPending = false;
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2062_boot)
-HXDLIN(2062)		gcRetainMap = ::_HaxeCBridge::Int64Map_Impl__obj::_new();
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2110_boot)
+HXDLIN(2110)		gcRetainMap = ::_HaxeCBridge::Int64Map_Impl__obj::_new();
             	}
 }
 
diff --git a/Sources/c_snikket/src/__HaxeCBridgeBindings__.cpp b/Sources/c_snikket/src/__HaxeCBridgeBindings__.cpp
index 5b6f6b2..88b3cf0 100644
--- a/Sources/c_snikket/src/__HaxeCBridgeBindings__.cpp
+++ b/Sources/c_snikket/src/__HaxeCBridgeBindings__.cpp
@@ -28,14 +28,16 @@
 #include <snikket/ChatMessageBuilder.h>
 #include <snikket/ChatAttachment.h>
 #include <snikket/Hash.h>
+#include <snikket/Reaction.h>
 #include <snikket/persistence/Dummy.h>
-#include <snikket/Client.h>
+#include <snikket/Push.h>
 #include <snikket/Persistence.h>
+#include <snikket/Notification.h>
+#include <snikket/Client.h>
 #include <snikket/AttachmentSource.h>
 #include <snikket/AvailableChat.h>
 #include <snikket/Chat.h>
 #include <snikket/Participant.h>
-#include <snikket/Reaction.h>
 #include <snikket/jingle/DTMFSender.h>
 #include <snikket/jingle/MediaStreamTrack.h>
 #include <snikket/jingle/AudioFormat.h>
@@ -767,6 +769,78 @@ size_t snikket_chat_message_attachments(void *a0, void ***a1) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+size_t snikket_chat_message_reaction_keys(void *a0, const char ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (snikket::ChatMessage((hx::Object *)a0, true))->reactionKeys__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; const char*** a1;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (snikket::ChatMessage((hx::Object *)data->args.a0, true))->reactionKeys__fromC(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute reactionKeys__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t snikket_chat_message_reaction_details(void *a0, const char *a1, void ***a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (snikket::ChatMessage((hx::Object *)a0, true))->reactionDetails__fromC(a1, a2);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; void*** a2;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (snikket::ChatMessage((hx::Object *)data->args.a0, true))->reactionDetails__fromC(data->args.a1, data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute reactionDetails__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 const char *snikket_chat_message_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -1809,6 +1883,186 @@ const char *snikket_hash_to_base_64_url(void *a0) {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_reaction_sender_id(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->senderId__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->senderId__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_reaction_timestamp(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->timestamp__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_reaction_text(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->text__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->text__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_reaction_key(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->key__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->key__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute key__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_reaction_envelope_id(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->envelopeId__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->envelopeId__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute envelopeId__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void *snikket_chat_message_builder_new() {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -2722,21 +2976,20 @@ void snikket_chat_message_builder_set_status(void *a0, enum snikket_message_stat
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t snikket_chat_message_builder_versions(void *a0, void ***a1) {
+void snikket_chat_message_builder_set_versions(void *a0, void *const *a1, size_t a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (snikket::ChatMessageBuilder((hx::Object *)a0, true))->versions__fromC(a1);
+		return (snikket::ChatMessageBuilder((hx::Object *)a0, true))->set_versions__fromC(a1, a2);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; void* const* a1; size_t a2;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (snikket::ChatMessageBuilder((hx::Object *)data->args.a0, true))->versions__fromC(data->args.a1);
+				(snikket::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_versions__fromC(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2749,9 +3002,44 @@ size_t snikket_chat_message_builder_versions(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute versions__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_versions__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t snikket_chat_message_builder_versions(void *a0, void ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (snikket::ChatMessageBuilder((hx::Object *)a0, true))->versions__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; void*** a1;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (snikket::ChatMessageBuilder((hx::Object *)data->args.a0, true))->versions__fromC(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute versions__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
@@ -3005,6 +3293,438 @@ void *snikket_persistence_dummy_new() {
 	return data.ret;
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void *snikket_push_receive(const char *a0, void *a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeObject(snikket::Push_obj::receive(a0, Dynamic((hx::Object *)a1)));
+	}
+	struct Data {
+		struct {const char * a0; void * a1;} args;
+		HxSemaphore lock;
+		void * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeObject(snikket::Push_obj::receive(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute receive() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_title(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->title__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->title__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute title__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_body(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->body__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->body__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute body__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_account_id(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->accountId__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->accountId__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute accountId__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_chat_id(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->chatId__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->chatId__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_message_id(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->messageId__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->messageId__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute messageId__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+enum snikket_message_type snikket_notification_type(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return static_cast<enum snikket_message_type>((snikket::Notification((hx::Object *)a0, true))->type__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		enum snikket_message_type ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = static_cast<enum snikket_message_type>((snikket::Notification((hx::Object *)data->args.a0, true))->type__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_call_status(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->callStatus__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->callStatus__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute callStatus__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_call_sid(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->callSid__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->callSid__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute callSid__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_image_uri(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->imageUri__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->imageUri__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute imageUri__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_lang(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->lang__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->lang__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *snikket_notification_timestamp(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)a0, true))->timestamp__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((snikket::Notification((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void *snikket_client_new(const char *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -3109,6 +3829,40 @@ void snikket_client_start(void *a0) {
 	data.lock.Wait();
 }
 
+HAXE_C_BRIDGE_LINKAGE
+void snikket_client_start_offline(void *a0, void (*a1) (void*), void *a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (snikket::Client((hx::Object *)a0, true))->startOffline__fromC(cpp::Function<void(void*)>(a1), a2);
+	}
+	struct Data {
+		struct {void * a0; void (* a1) (void*); void* a2;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				(snikket::Client((hx::Object *)data->args.a0, true))->startOffline__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute startOffline__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
 HAXE_C_BRIDGE_LINKAGE
 void snikket_client_logout(void *a0, bool a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -3388,12 +4142,48 @@ void snikket_client_find_available_chats(void *a0, const char *a1, void (*a2) (c
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *snikket_client_start_chat(void *a0, void *a1) {
+void *snikket_client_start_chat(void *a0, void *a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)a0, true))->startChat(Dynamic((hx::Object *)a1)));
+	}
+	struct Data {
+		struct {void * a0; void * a1;} args;
+		HxSemaphore lock;
+		void * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)data->args.a0, true))->startChat(Dynamic((hx::Object *)data->args.a1)));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute startChat() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void *snikket_client_get_chat(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)a0, true))->startChat(Dynamic((hx::Object *)a1)));
+		return HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)a0, true))->getChat(a1));
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 		void * ret;
 	};
@@ -3402,7 +4192,7 @@ void *snikket_client_start_chat(void *a0, void *a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)data->args.a0, true))->startChat(Dynamic((hx::Object *)data->args.a1)));
+				data->ret = HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)data->args.a0, true))->getChat(data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3417,28 +4207,27 @@ void *snikket_client_start_chat(void *a0, void *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute startChat() on the main thread and wait until execution completes
+	// queue a callback to execute getChat() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *snikket_client_get_chat(void *a0, const char *a1) {
+void snikket_client_enable_push(void *a0, const char *a1, const char *a2, const unsigned char *a3, size_t a4, const unsigned char *a5, size_t a6, int a7, const unsigned char *a8, size_t a9, const char *const *a10, size_t a11) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)a0, true))->getChat(a1));
+		return (snikket::Client((hx::Object *)a0, true))->enablePush__fromC(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0; const char * a1; const char * a2; const unsigned char* a3; size_t a4; const unsigned char* a5; size_t a6; int a7; const unsigned char* a8; size_t a9; const char* const* a10; size_t a11;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((snikket::Client((hx::Object *)data->args.a0, true))->getChat(data->args.a1));
+				(snikket::Client((hx::Object *)data->args.a0, true))->enablePush__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4, data->args.a5, data->args.a6, data->args.a7, data->args.a8, data->args.a9, data->args.a10, data->args.a11);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3451,12 +4240,11 @@ void *snikket_client_get_chat(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11} };
 
-	// queue a callback to execute getChat() on the main thread and wait until execution completes
+	// queue a callback to execute enablePush__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
@@ -6431,186 +7219,6 @@ size_t snikket_jingle_media_stream_get_tracks(void *a0, void ***a1) {
 	return data.ret;
 }
 
-HAXE_C_BRIDGE_LINKAGE
-void *snikket_attachment_source_new(const char *a0, const char *a1) {
-	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(snikket::AttachmentSource_obj::__new(a0, a1));
-	}
-	struct Data {
-		struct {const char * a0; const char * a1;} args;
-		HxSemaphore lock;
-		void * ret;
-	};
-	struct Callback {
-		static void run(void* p) {
-			// executed within the haxe main thread
-			Data* data = (Data*) p;
-			try {
-				data->ret = HaxeCBridge::retainHaxeObject(snikket::AttachmentSource_obj::__new(data->args.a0, data->args.a1));
-				data->lock.Set();
-			} catch(Dynamic runtimeException) {
-				data->lock.Set();
-				throw runtimeException;
-			}
-		}
-	};
-
-	#ifdef HXCPP_DEBUG
-	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
-	#endif
-
-	Data data = { {a0, a1} };
-
-	// queue a callback to execute new() on the main thread and wait until execution completes
-	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
-	data.lock.Wait();
-	return data.ret;
-}
-
-HAXE_C_BRIDGE_LINKAGE
-const char *snikket_attachment_source_path(void *a0) {
-	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)a0, true))->path__fromC());
-	}
-	struct Data {
-		struct {void * a0;} args;
-		HxSemaphore lock;
-		const char * ret;
-	};
-	struct Callback {
-		static void run(void* p) {
-			// executed within the haxe main thread
-			Data* data = (Data*) p;
-			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)data->args.a0, true))->path__fromC());
-				data->lock.Set();
-			} catch(Dynamic runtimeException) {
-				data->lock.Set();
-				throw runtimeException;
-			}
-		}
-	};
-
-	#ifdef HXCPP_DEBUG
-	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
-	#endif
-
-	Data data = { {a0} };
-
-	// queue a callback to execute path__fromC() on the main thread and wait until execution completes
-	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
-	data.lock.Wait();
-	return data.ret;
-}
-
-HAXE_C_BRIDGE_LINKAGE
-const char *snikket_attachment_source_type(void *a0) {
-	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)a0, true))->type__fromC());
-	}
-	struct Data {
-		struct {void * a0;} args;
-		HxSemaphore lock;
-		const char * ret;
-	};
-	struct Callback {
-		static void run(void* p) {
-			// executed within the haxe main thread
-			Data* data = (Data*) p;
-			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)data->args.a0, true))->type__fromC());
-				data->lock.Set();
-			} catch(Dynamic runtimeException) {
-				data->lock.Set();
-				throw runtimeException;
-			}
-		}
-	};
-
-	#ifdef HXCPP_DEBUG
-	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
-	#endif
-
-	Data data = { {a0} };
-
-	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
-	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
-	data.lock.Wait();
-	return data.ret;
-}
-
-HAXE_C_BRIDGE_LINKAGE
-const char *snikket_attachment_source_name(void *a0) {
-	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)a0, true))->name__fromC());
-	}
-	struct Data {
-		struct {void * a0;} args;
-		HxSemaphore lock;
-		const char * ret;
-	};
-	struct Callback {
-		static void run(void* p) {
-			// executed within the haxe main thread
-			Data* data = (Data*) p;
-			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)data->args.a0, true))->name__fromC());
-				data->lock.Set();
-			} catch(Dynamic runtimeException) {
-				data->lock.Set();
-				throw runtimeException;
-			}
-		}
-	};
-
-	#ifdef HXCPP_DEBUG
-	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
-	#endif
-
-	Data data = { {a0} };
-
-	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
-	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
-	data.lock.Wait();
-	return data.ret;
-}
-
-HAXE_C_BRIDGE_LINKAGE
-int snikket_attachment_source_size(void *a0) {
-	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (snikket::AttachmentSource((hx::Object *)a0, true))->size__fromC();
-	}
-	struct Data {
-		struct {void * a0;} args;
-		HxSemaphore lock;
-		int ret;
-	};
-	struct Callback {
-		static void run(void* p) {
-			// executed within the haxe main thread
-			Data* data = (Data*) p;
-			try {
-				data->ret = (snikket::AttachmentSource((hx::Object *)data->args.a0, true))->size__fromC();
-				data->lock.Set();
-			} catch(Dynamic runtimeException) {
-				data->lock.Set();
-				throw runtimeException;
-			}
-		}
-	};
-
-	#ifdef HXCPP_DEBUG
-	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
-	#endif
-
-	Data data = { {a0} };
-
-	// queue a callback to execute size__fromC() on the main thread and wait until execution completes
-	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
-	data.lock.Wait();
-	return data.ret;
-}
-
 HAXE_C_BRIDGE_LINKAGE
 const char *snikket_participant_display_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
@@ -6756,21 +7364,21 @@ bool snikket_participant_is_self(void *a0) {
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool snikket_channel_is_private(void *a0) {
+void *snikket_attachment_source_new(const char *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (snikket::Channel((hx::Object *)a0, true))->isPrivate();
+		return HaxeCBridge::retainHaxeObject(snikket::AttachmentSource_obj::__new(a0, a1));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {const char * a0; const char * a1;} args;
 		HxSemaphore lock;
-		bool ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (snikket::Channel((hx::Object *)data->args.a0, true))->isPrivate();
+				data->ret = HaxeCBridge::retainHaxeObject(snikket::AttachmentSource_obj::__new(data->args.a0, data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6783,18 +7391,18 @@ bool snikket_channel_is_private(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use snikket_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute isPrivate() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *snikket_reaction_sender_id(void *a0) {
+const char *snikket_attachment_source_path(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->senderId__fromC());
+		return HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)a0, true))->path__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -6806,7 +7414,7 @@ const char *snikket_reaction_sender_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->senderId__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)data->args.a0, true))->path__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6821,16 +7429,16 @@ const char *snikket_reaction_sender_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute path__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *snikket_reaction_timestamp(void *a0) {
+const char *snikket_attachment_source_type(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->timestamp__fromC());
+		return HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)a0, true))->type__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -6842,7 +7450,7 @@ const char *snikket_reaction_timestamp(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)data->args.a0, true))->type__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6857,16 +7465,16 @@ const char *snikket_reaction_timestamp(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *snikket_reaction_text(void *a0) {
+const char *snikket_attachment_source_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->text__fromC());
+		return HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)a0, true))->name__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -6878,7 +7486,7 @@ const char *snikket_reaction_text(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->text__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((snikket::AttachmentSource((hx::Object *)data->args.a0, true))->name__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6893,28 +7501,28 @@ const char *snikket_reaction_text(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *snikket_reaction_key(void *a0) {
+int snikket_attachment_source_size(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->key__fromC());
+		return (snikket::AttachmentSource((hx::Object *)a0, true))->size__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		int ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->key__fromC());
+				data->ret = (snikket::AttachmentSource((hx::Object *)data->args.a0, true))->size__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6929,28 +7537,28 @@ const char *snikket_reaction_key(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute key__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute size__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *snikket_reaction_envelope_id(void *a0) {
+bool snikket_channel_is_private(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)a0, true))->envelopeId__fromC());
+		return (snikket::Channel((hx::Object *)a0, true))->isPrivate();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((snikket::Reaction((hx::Object *)data->args.a0, true))->envelopeId__fromC());
+				data->ret = (snikket::Channel((hx::Object *)data->args.a0, true))->isPrivate();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6965,7 +7573,7 @@ const char *snikket_reaction_envelope_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute envelopeId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute isPrivate() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
diff --git a/Sources/c_snikket/src/__boot__.cpp b/Sources/c_snikket/src/__boot__.cpp
index 7ce0df6..44ea6f5 100644
--- a/Sources/c_snikket/src/__boot__.cpp
+++ b/Sources/c_snikket/src/__boot__.cpp
@@ -163,6 +163,9 @@
 #ifndef INCLUDED_snikket_Participant
 #include <snikket/Participant.h>
 #endif
+#ifndef INCLUDED_snikket_Notification
+#include <snikket/Notification.h>
+#endif
 #ifndef INCLUDED_snikket_Hash
 #include <snikket/Hash.h>
 #endif
@@ -565,6 +568,9 @@
 #ifndef INCLUDED_snikket_queries_RosterGet
 #include <snikket/queries/RosterGet.h>
 #endif
+#ifndef INCLUDED_snikket_queries_Push2Enable
+#include <snikket/queries/Push2Enable.h>
+#endif
 #ifndef INCLUDED_snikket_queries_Push2Disable
 #include <snikket/queries/Push2Disable.h>
 #endif
@@ -667,8 +673,8 @@
 #ifndef INCLUDED_snikket_ReactionUpdate
 #include <snikket/ReactionUpdate.h>
 #endif
-#ifndef INCLUDED_snikket__Push_Push_Fields_
-#include <snikket/_Push/Push_Fields_.h>
+#ifndef INCLUDED_snikket_Push
+#include <snikket/Push.h>
 #endif
 #ifndef INCLUDED_snikket_PubsubEvent
 #include <snikket/PubsubEvent.h>
@@ -676,9 +682,6 @@
 #ifndef INCLUDED_snikket_Presence
 #include <snikket/Presence.h>
 #endif
-#ifndef INCLUDED_snikket_Notification
-#include <snikket/Notification.h>
-#endif
 #ifndef INCLUDED_snikket_ModerationAction
 #include <snikket/ModerationAction.h>
 #endif
@@ -688,6 +691,9 @@
 #ifndef INCLUDED_snikket_Message
 #include <snikket/Message.h>
 #endif
+#ifndef INCLUDED_snikket_JsonPrinter
+#include <snikket/JsonPrinter.h>
+#endif
 #ifndef INCLUDED_snikket_JID
 #include <snikket/JID.h>
 #endif
@@ -904,6 +910,9 @@
 #ifndef INCLUDED_datetime__DateTime_DateTime_Impl_
 #include <datetime/_DateTime/DateTime_Impl_.h>
 #endif
+#ifndef INCLUDED_cpp__NativeString_NativeString_Impl_
+#include <cpp/_NativeString/NativeString_Impl_.h>
+#endif
 #ifndef INCLUDED_cpp_Lib
 #include <cpp/Lib.h>
 #endif
@@ -1007,6 +1016,7 @@ __files__boot();
 ::snikket::Reaction_obj::__register();
 ::snikket::Persistence_obj::__register();
 ::snikket::Participant_obj::__register();
+::snikket::Notification_obj::__register();
 ::snikket::Hash_obj::__register();
 ::snikket::EmojiUtil_obj::__register();
 ::snikket::Config_obj::__register();
@@ -1141,6 +1151,7 @@ __files__boot();
 ::snikket::streams::XmppStropheStream_obj::__register();
 ::snikket::queries::VcardTempGet_obj::__register();
 ::snikket::queries::RosterGet_obj::__register();
+::snikket::queries::Push2Enable_obj::__register();
 ::snikket::queries::Push2Disable_obj::__register();
 ::snikket::queries::PubsubGet_obj::__register();
 ::snikket::queries::MAMQuery_obj::__register();
@@ -1175,13 +1186,13 @@ __files__boot();
 ::snikket::TextNode_obj::__register();
 ::snikket::_Stanza::NodeInterface_obj::__register();
 ::snikket::ReactionUpdate_obj::__register();
-::snikket::_Push::Push_Fields__obj::__register();
+::snikket::Push_obj::__register();
 ::snikket::PubsubEvent_obj::__register();
 ::snikket::Presence_obj::__register();
-::snikket::Notification_obj::__register();
 ::snikket::ModerationAction_obj::__register();
 ::snikket::MessageSync_obj::__register();
 ::snikket::Message_obj::__register();
+::snikket::JsonPrinter_obj::__register();
 ::snikket::JID_obj::__register();
 ::snikket::Identicon_obj::__register();
 ::snikket::ID_obj::__register();
@@ -1254,6 +1265,7 @@ __files__boot();
 ::datetime::cores::DateTimeIntervalCore_obj::__register();
 ::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::__register();
 ::datetime::_DateTime::DateTime_Impl__obj::__register();
+::cpp::_NativeString::NativeString_Impl__obj::__register();
 ::cpp::Lib_obj::__register();
 ::haxe::IMap_obj::__register();
 ::_Xml::XmlType_Impl__obj::__register();
@@ -1325,6 +1337,7 @@ __files__boot();
 ::snikket::Config_obj::__boot();
 ::snikket::EmojiUtil_obj::__boot();
 ::snikket::Hash_obj::__boot();
+::snikket::Notification_obj::__boot();
 ::snikket::Participant_obj::__boot();
 ::snikket::Persistence_obj::__boot();
 ::snikket::Reaction_obj::__boot();
diff --git a/Sources/c_snikket/src/__files__.cpp b/Sources/c_snikket/src/__files__.cpp
index ee2081b..a3961b8 100644
--- a/Sources/c_snikket/src/__files__.cpp
+++ b/Sources/c_snikket/src/__files__.cpp
@@ -8,6 +8,7 @@ const char *__hxcpp_all_files[] = {
 "/usr/local/lib/haxe/std/StringTools.hx",
 "/usr/local/lib/haxe/std/UnicodeString.hx",
 "/usr/local/lib/haxe/std/Xml.hx",
+"/usr/local/lib/haxe/std/cpp/NativeString.hx",
 "/usr/local/lib/haxe/std/cpp/_std/Date.hx",
 "/usr/local/lib/haxe/std/cpp/_std/EReg.hx",
 "/usr/local/lib/haxe/std/cpp/_std/Reflect.hx",
@@ -104,6 +105,7 @@ const char *__hxcpp_all_files[] = {
 "snikket/ID.hx",
 "snikket/Identicon.hx",
 "snikket/JID.hx",
+"snikket/JsonPrinter.hx",
 "snikket/Message.hx",
 "snikket/MessageSync.hx",
 "snikket/ModerationAction.hx",
@@ -138,6 +140,7 @@ const char *__hxcpp_all_files[] = {
 "snikket/queries/MAMQuery.hx",
 "snikket/queries/PubsubGet.hx",
 "snikket/queries/Push2Disable.hx",
+"snikket/queries/Push2Enable.hx",
 "snikket/queries/RosterGet.hx",
 "snikket/queries/VcardTempGet.hx",
 "snikket/streams/XmppStropheStream.hx",
@@ -193,6 +196,7 @@ const char *__hxcpp_all_files_fullpath[] = {
 "/usr/local/lib/haxe/std/StringTools.hx",
 "/usr/local/lib/haxe/std/UnicodeString.hx",
 "/usr/local/lib/haxe/std/Xml.hx",
+"/usr/local/lib/haxe/std/cpp/NativeString.hx",
 "/usr/local/lib/haxe/std/cpp/_std/Date.hx",
 "/usr/local/lib/haxe/std/cpp/_std/EReg.hx",
 "/usr/local/lib/haxe/std/cpp/_std/Reflect.hx",
@@ -289,6 +293,7 @@ const char *__hxcpp_all_files_fullpath[] = {
 "/Users/singpolyma/src/snikket-sdk/snikket/ID.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/Identicon.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/JID.hx",
+"/Users/singpolyma/src/snikket-sdk/snikket/JsonPrinter.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/Message.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/MessageSync.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/ModerationAction.hx",
@@ -323,6 +328,7 @@ const char *__hxcpp_all_files_fullpath[] = {
 "/Users/singpolyma/src/snikket-sdk/snikket/queries/MAMQuery.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/queries/PubsubGet.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/queries/Push2Disable.hx",
+"/Users/singpolyma/src/snikket-sdk/snikket/queries/Push2Enable.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/queries/RosterGet.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/queries/VcardTempGet.hx",
 "/Users/singpolyma/src/snikket-sdk/snikket/streams/XmppStropheStream.hx",
@@ -390,6 +396,7 @@ const char *__hxcpp_all_classes[] = {
 "_Xml.XmlType_Impl_",
 "Xml",
 "cpp.Lib",
+"cpp._NativeString.NativeString_Impl_",
 "datetime._DateTime.DateTime_Impl_",
 "datetime._DateTimeInterval.DateTimeInterval_Impl_",
 "datetime.cores.DateTimeIntervalCore",
@@ -483,6 +490,7 @@ const char *__hxcpp_all_classes[] = {
 "snikket.ID",
 "snikket.Identicon",
 "snikket.JID",
+"snikket.JsonPrinter",
 "snikket.Message",
 "snikket.MessageSync",
 "snikket.ModerationAction",
@@ -490,7 +498,7 @@ const char *__hxcpp_all_classes[] = {
 "snikket.Participant",
 "snikket.Presence",
 "snikket.PubsubEvent",
-"snikket._Push.Push_Fields_",
+"snikket.Push",
 "snikket.Reaction",
 "snikket.CustomEmojiReaction",
 "snikket.ReactionUpdate",
@@ -531,6 +539,7 @@ const char *__hxcpp_all_classes[] = {
 "snikket.queries.MAMQuery",
 "snikket.queries.PubsubGet",
 "snikket.queries.Push2Disable",
+"snikket.queries.Push2Enable",
 "snikket.queries.RosterGet",
 "snikket.queries.VcardTempGet",
 "snikket.streams.XmppStropheStream",
diff --git a/Sources/c_snikket/src/cpp/_NativeString/NativeString_Impl_.cpp b/Sources/c_snikket/src/cpp/_NativeString/NativeString_Impl_.cpp
new file mode 100644
index 0000000..892e53e
--- /dev/null
+++ b/Sources/c_snikket/src/cpp/_NativeString/NativeString_Impl_.cpp
@@ -0,0 +1,87 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_cpp__NativeString_NativeString_Impl_
+#include <cpp/_NativeString/NativeString_Impl_.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_da218193861e58a1_33_fromPointer,"cpp._NativeString.NativeString_Impl_","fromPointer",0x96fcd37f,"cpp._NativeString.NativeString_Impl_.fromPointer","/usr/local/lib/haxe/std/cpp/NativeString.hx",33,0xfeba240d)
+namespace cpp{
+namespace _NativeString{
+
+void NativeString_Impl__obj::__construct() { }
+
+Dynamic NativeString_Impl__obj::__CreateEmpty() { return new NativeString_Impl__obj; }
+
+void *NativeString_Impl__obj::_hx_vtable = 0;
+
+Dynamic NativeString_Impl__obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< NativeString_Impl__obj > _hx_result = new NativeString_Impl__obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool NativeString_Impl__obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x46275c4c;
+}
+
+::String NativeString_Impl__obj::fromPointer(::cpp::Pointer< char > inPtr){
+            	HX_STACKFRAME(&_hx_pos_da218193861e58a1_33_fromPointer)
+HXDLIN(  33)		return  ::String(inPtr->ptr);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(NativeString_Impl__obj,fromPointer,return )
+
+
+NativeString_Impl__obj::NativeString_Impl__obj()
+{
+}
+
+bool NativeString_Impl__obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 11:
+		if (HX_FIELD_EQ(inName,"fromPointer") ) { outValue = fromPointer_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *NativeString_Impl__obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *NativeString_Impl__obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class NativeString_Impl__obj::__mClass;
+
+static ::String NativeString_Impl__obj_sStaticFields[] = {
+	HX_("fromPointer",73,24,62,e9),
+	::String(null())
+};
+
+void NativeString_Impl__obj::__register()
+{
+	NativeString_Impl__obj _hx_dummy;
+	NativeString_Impl__obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("cpp._NativeString.NativeString_Impl_",7a,ad,29,f1);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &NativeString_Impl__obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(NativeString_Impl__obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< NativeString_Impl__obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = NativeString_Impl__obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = NativeString_Impl__obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace cpp
+} // end namespace _NativeString
diff --git a/Sources/c_snikket/src/hx/Date.cpp b/Sources/c_snikket/src/hx/Date.cpp
index cdc665b..003832a 100644
--- a/Sources/c_snikket/src/hx/Date.cpp
+++ b/Sources/c_snikket/src/hx/Date.cpp
@@ -25,16 +25,12 @@
    #endif
 #endif
 
-#ifdef HX_MACOS
+#if defined(HX_MACOS) || defined(IPHONE) || defined(APPLETV)
 #include <mach/mach_time.h>
 #include <mach-o/dyld.h>
 #include <CoreServices/CoreServices.h>
 #endif
 
-#if defined(IPHONE) || defined(APPLETV)
-#include <QuartzCore/QuartzCore.h>
-#endif
-
 
 //#include <hxMacros.h>
 
@@ -61,7 +57,7 @@ double __hxcpp_time_stamp()
    }
 
    return (double)clock() / ( (double)CLOCKS_PER_SEC);
-#elif defined(HX_MACOS)
+#elif defined(HX_MACOS) || defined(IPHONE) || defined(APPLETV)
    static double time_scale = 0.0;
    if (time_scale==0.0)
    {
diff --git a/Sources/c_snikket/src/snikket/AttachmentSource.cpp b/Sources/c_snikket/src/snikket/AttachmentSource.cpp
index 49b7eeb..9616206 100644
--- a/Sources/c_snikket/src/snikket/AttachmentSource.cpp
+++ b/Sources/c_snikket/src/snikket/AttachmentSource.cpp
@@ -42,10 +42,10 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_1589e03dacb7e96d_18_new,"snikket.AttachmentSource","new",0xbdfe18c1,"snikket.AttachmentSource.new","snikket/AttachmentSource.cpp.hx",18,0x88ae23d9)
-HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_307_path__fromC,"snikket.AttachmentSource","path__fromC",0xcaffcad5,"snikket.AttachmentSource.path__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_307_type__fromC,"snikket.AttachmentSource","type__fromC",0xde17ba60,"snikket.AttachmentSource.type__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_307_name__fromC,"snikket.AttachmentSource","name__fromC",0x5911beef,"snikket.AttachmentSource.name__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_307_size__fromC,"snikket.AttachmentSource","size__fromC",0x95ffeb39,"snikket.AttachmentSource.size__fromC","HaxeCBridge.hx",307,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_355_path__fromC,"snikket.AttachmentSource","path__fromC",0xcaffcad5,"snikket.AttachmentSource.path__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_355_type__fromC,"snikket.AttachmentSource","type__fromC",0xde17ba60,"snikket.AttachmentSource.type__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_355_name__fromC,"snikket.AttachmentSource","name__fromC",0x5911beef,"snikket.AttachmentSource.name__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_178ee577f3d4b8ba_355_size__fromC,"snikket.AttachmentSource","size__fromC",0x95ffeb39,"snikket.AttachmentSource.size__fromC","HaxeCBridge.hx",355,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_1589e03dacb7e96d_27_tinkSource,"snikket.AttachmentSource","tinkSource",0x8a7a292c,"snikket.AttachmentSource.tinkSource","snikket/AttachmentSource.cpp.hx",27,0x88ae23d9)
 HX_LOCAL_STACK_FRAME(_hx_pos_1589e03dacb7e96d_12_boot,"snikket.AttachmentSource","boot",0x787090b1,"snikket.AttachmentSource.boot","snikket/AttachmentSource.cpp.hx",12,0x88ae23d9)
 namespace snikket{
@@ -74,32 +74,32 @@ bool AttachmentSource_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String AttachmentSource_obj::path__fromC(){
-            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_307_path__fromC)
-HXDLIN( 307)		return this->path;
+            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_355_path__fromC)
+HXDLIN( 355)		return this->path;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AttachmentSource_obj,path__fromC,return )
 
 ::String AttachmentSource_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_307_type__fromC)
-HXDLIN( 307)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_355_type__fromC)
+HXDLIN( 355)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AttachmentSource_obj,type__fromC,return )
 
 ::String AttachmentSource_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_307_name__fromC)
-HXDLIN( 307)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_355_name__fromC)
+HXDLIN( 355)		return this->name;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AttachmentSource_obj,name__fromC,return )
 
 int AttachmentSource_obj::size__fromC(){
-            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_307_size__fromC)
-HXDLIN( 307)		return this->size;
+            	HX_STACKFRAME(&_hx_pos_178ee577f3d4b8ba_355_size__fromC)
+HXDLIN( 355)		return this->size;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/Autolink.cpp b/Sources/c_snikket/src/snikket/Autolink.cpp
index 02b59de..9546015 100644
--- a/Sources/c_snikket/src/snikket/Autolink.cpp
+++ b/Sources/c_snikket/src/snikket/Autolink.cpp
@@ -20,35 +20,35 @@
 #include <snikket/_Stanza/NodeInterface.h>
 #endif
 
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_348_one,"snikket.Autolink","one",0x4e62ad12,"snikket.Autolink.one","snikket/Autolink.hx",348,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_349_one,"snikket.Autolink","one",0x4e62ad12,"snikket.Autolink.one","snikket/Autolink.hx",349,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_341_one,"snikket.Autolink","one",0x4e62ad12,"snikket.Autolink.one","snikket/Autolink.hx",341,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_342_one,"snikket.Autolink","one",0x4e62ad12,"snikket.Autolink.one","snikket/Autolink.hx",342,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_334_one,"snikket.Autolink","one",0x4e62ad12,"snikket.Autolink.one","snikket/Autolink.hx",334,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_345_match,"snikket.Autolink","match",0x7edc5ef1,"snikket.Autolink.match","snikket/Autolink.hx",345,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_352_match,"snikket.Autolink","match",0x7edc5ef1,"snikket.Autolink.match","snikket/Autolink.hx",352,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_28_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",28,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_40_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",40,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_162_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",162,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_164_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",164,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_181_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",181,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_202_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",202,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_224_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",224,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_233_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",233,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_237_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",237,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_242_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",242,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_204_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",204,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_231_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",231,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_240_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",240,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_244_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",244,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_245_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",245,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_248_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",248,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_249_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",249,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_251_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",251,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_252_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",252,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_269_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",269,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_274_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",274,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_255_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",255,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_256_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",256,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_259_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",259,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_276_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",276,0x041baf83)
 HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_281_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",281,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_286_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",286,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_291_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",291,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_304_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",304,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_321_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",321,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_324_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",324,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_327_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",327,0x041baf83)
-HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_329_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",329,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_288_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",288,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_293_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",293,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_298_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",298,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_311_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",311,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_328_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",328,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_331_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",331,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_334_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",334,0x041baf83)
+HX_LOCAL_STACK_FRAME(_hx_pos_e03e81a8315e14a8_336_boot,"snikket.Autolink","boot",0x3f5dc806,"snikket.Autolink.boot","snikket/Autolink.hx",336,0x041baf83)
 namespace snikket{
 
 void Autolink_obj::__construct() { }
@@ -119,71 +119,71 @@ bool Autolink_obj::_hx_isInstanceOf(int inClassId) {
  ::Dynamic Autolink_obj::one(::String s,int start){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		int _hx_run( ::Dynamic x, ::Dynamic y){
-            			HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_341_one)
-HXLINE( 341)			return (( (int)(x->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ) - ( (int)(y->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ));
+            			HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_348_one)
+HXLINE( 348)			return (( (int)(x->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ) - ( (int)(y->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ));
             		}
             		HX_END_LOCAL_FUNC2(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::Dynamic match){
-            			HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_342_one)
-HXLINE( 342)			return ::hx::IsNotNull( match->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic) );
+            			HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_349_one)
+HXLINE( 349)			return ::hx::IsNotNull( match->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic) );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_334_one)
-HXLINE( 336)		 ::Dynamic matches = ::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::XMPP_URI,false);
-HXLINE( 337)		 ::Dynamic matches1 = ::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::TEL_URI,false);
-HXLINE( 338)		 ::Dynamic matches2 = ::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::SMS_URI,false);
-HXLINE( 335)		::Array< ::Dynamic> matches3 = ::Array_obj< ::Dynamic>::__new(4)->init(0,matches)->init(1,matches1)->init(2,matches2)->init(3,::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::AUTOLINK_WEB_URL,true));
-HXLINE( 341)		matches3->sort( ::Dynamic(new _hx_Closure_0()));
-HXLINE( 342)		 ::Dynamic tmp = ::Lambda_obj::find(matches3, ::Dynamic(new _hx_Closure_1()));
-HXDLIN( 342)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 342)			return tmp;
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_341_one)
+HXLINE( 343)		 ::Dynamic matches = ::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::XMPP_URI,false);
+HXLINE( 344)		 ::Dynamic matches1 = ::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::TEL_URI,false);
+HXLINE( 345)		 ::Dynamic matches2 = ::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::SMS_URI,false);
+HXLINE( 342)		::Array< ::Dynamic> matches3 = ::Array_obj< ::Dynamic>::__new(4)->init(0,matches)->init(1,matches1)->init(2,matches2)->init(3,::snikket::Autolink_obj::match(s,start,::snikket::Autolink_obj::AUTOLINK_WEB_URL,true));
+HXLINE( 348)		matches3->sort( ::Dynamic(new _hx_Closure_0()));
+HXLINE( 349)		 ::Dynamic tmp = ::Lambda_obj::find(matches3, ::Dynamic(new _hx_Closure_1()));
+HXDLIN( 349)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 349)			return tmp;
             		}
             		else {
-HXLINE( 342)			return matches3->__get(0);
+HXLINE( 349)			return matches3->__get(0);
             		}
-HXDLIN( 342)		return null();
+HXDLIN( 349)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(Autolink_obj,one,return )
 
  ::Dynamic Autolink_obj::match(::String s,int start,::String pattern,bool addHttps){
-            	HX_GC_STACKFRAME(&_hx_pos_e03e81a8315e14a8_345_match)
-HXLINE( 347)		 ::EReg pattern1 =  ::EReg_obj::__alloc( HX_CTX ,pattern,HX_("u",75,00,00,00));
-HXLINE( 348)		if (pattern1->matchSub(s,start,null())) {
-HXLINE( 349)			 ::Dynamic pos = pattern1->matchedPos();
-HXLINE( 350)			::String link = pattern1->matched(0);
-HXLINE( 351)			::String uri;
-HXDLIN( 351)			bool uri1;
-HXDLIN( 351)			if (addHttps) {
-HXLINE( 351)				uri1 = (link.indexOf(HX_("://",da,2b,2c,00),null()) != -1);
+            	HX_GC_STACKFRAME(&_hx_pos_e03e81a8315e14a8_352_match)
+HXLINE( 354)		 ::EReg pattern1 =  ::EReg_obj::__alloc( HX_CTX ,pattern,HX_("u",75,00,00,00));
+HXLINE( 355)		if (pattern1->matchSub(s,start,null())) {
+HXLINE( 356)			 ::Dynamic pos = pattern1->matchedPos();
+HXLINE( 357)			::String link = pattern1->matched(0);
+HXLINE( 358)			::String uri;
+HXDLIN( 358)			bool uri1;
+HXDLIN( 358)			if (addHttps) {
+HXLINE( 358)				uri1 = (link.indexOf(HX_("://",da,2b,2c,00),null()) != -1);
             			}
             			else {
-HXLINE( 351)				uri1 = true;
+HXLINE( 358)				uri1 = true;
             			}
-HXDLIN( 351)			if (uri1) {
-HXLINE( 351)				uri = link;
+HXDLIN( 358)			if (uri1) {
+HXLINE( 358)				uri = link;
             			}
             			else {
-HXLINE( 351)				uri = (HX_("https://",cf,b4,ae,3e) + link);
+HXLINE( 358)				uri = (HX_("https://",cf,b4,ae,3e) + link);
             			}
-HXLINE( 353)			 ::snikket::Node _hx_tmp = ::snikket::Node_obj::Element( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("a",61,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 360)			 ::snikket::Node _hx_tmp = ::snikket::Node_obj::Element( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("a",61,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("href",eb,09,15,45),uri)))->text(link));
-HXDLIN( 353)			return  ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 360)			return  ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("start",62,74,0b,84), ::Dynamic(pos->__Field(HX_("pos",94,5d,55,00),::hx::paccDynamic)))
             				->setFixed(1,HX_("end",db,03,4d,00), ::Dynamic((pos->__Field(HX_("pos",94,5d,55,00),::hx::paccDynamic) + pos->__Field(HX_("len",d5,4b,52,00),::hx::paccDynamic))))
             				->setFixed(2,HX_("span",ca,da,58,4c),_hx_tmp));
             		}
             		else {
-HXLINE( 355)			return  ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 362)			return  ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("start",62,74,0b,84),s.length)
             				->setFixed(1,HX_("end",db,03,4d,00),s.length)
             				->setFixed(2,HX_("span",ca,da,58,4c),null()));
             		}
-HXLINE( 348)		return null();
+HXLINE( 355)		return null();
             	}
 
 
@@ -489,84 +489,84 @@ HXDLIN( 164)		IP_ADDRESS = (((HX_("((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9
 HXDLIN( 181)		IP6_ADDRESS = (((((((((((((((((HX_("\\[",7f,50,00,00) + HX_("(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|",95,9e,ad,bb)) + HX_("([0-9a-fA-F]{1,4}:){1,7}:|",24,ce,ee,30)) + HX_("([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|",a2,da,a4,21)) + HX_("([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|",4b,b7,dc,9c)) + HX_("([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|",4b,bc,50,d7)) + HX_("([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|",4b,c1,c4,11)) + HX_("([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|",4b,c6,38,4c)) + HX_("[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|",4d,77,45,e4)) + HX_(":((:[0-9a-fA-F]{1,4}){1,7}|:)|",27,df,3d,33)) + HX_("fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|",ee,41,f7,25)) + HX_("::(ffff(:0{1,4}){0,1}:){0,1}",b1,6f,8b,25)) + HX_("((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}",34,d9,ed,ae)) + HX_("(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|",97,b1,d5,90)) + HX_("([0-9a-fA-F]{1,4}:){1,4}:",95,58,1a,e8)) + HX_("((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}",34,d9,ed,ae)) + HX_("(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))",44,b1,d5,90)) + HX_("\\]",81,50,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_202_boot)
-HXDLIN( 202)		UCS_CHAR = (((HX_("[",5b,00,00,00) + HX_("\\x{00A0}-\\x{D7FF}",29,32,b0,f1)) + HX_("\\x{F900}-\\x{FDCF}",9f,26,06,f2)) + HX_("\\x{FDF0}-\\x{FFEF}",94,e8,12,99));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_204_boot)
+HXDLIN( 204)		UCS_CHAR = ((HX_("\\x{00A0}-\\x{D7FF}",29,32,b0,f1) + HX_("\\x{F900}-\\x{FDCF}",9f,26,06,f2)) + HX_("\\x{FDF0}-\\x{FFEF}",94,e8,12,99));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_224_boot)
-HXDLIN( 224)		LABEL_CHAR = (HX_("a-zA-Z0-9",1c,c7,6d,ee) + ::snikket::Autolink_obj::UCS_CHAR);
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_231_boot)
+HXDLIN( 231)		LABEL_CHAR = (HX_("a-zA-Z0-9",1c,c7,6d,ee) + ::snikket::Autolink_obj::UCS_CHAR);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_233_boot)
-HXDLIN( 233)		IRI_LABEL = ((((((HX_("[",5b,00,00,00) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("](?:[",95,7c,e4,a6)) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("\\-]{0,61}[",84,06,f0,9b)) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("]){0,1}",77,15,13,72));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_240_boot)
+HXDLIN( 240)		IRI_LABEL = ((((((HX_("[",5b,00,00,00) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("](?:[",95,7c,e4,a6)) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("\\-]{0,61}[",84,06,f0,9b)) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("]){0,1}",77,15,13,72));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_237_boot)
-HXDLIN( 237)		PUNYCODE_TLD = HX_("xn\\-\\-[\\w\\-]{0,58}\\w",0c,c7,30,ad);
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_244_boot)
+HXDLIN( 244)		PUNYCODE_TLD = HX_("xn\\-\\-[\\w\\-]{0,58}\\w",0c,c7,30,ad);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_242_boot)
-HXDLIN( 242)		PROTOCOL = HX_("(?:http|https|rtsp):\\/\\/",38,1d,38,84);
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_249_boot)
+HXDLIN( 249)		PROTOCOL = HX_("(?:http|https|rtsp):\\/\\/",38,1d,38,84);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_244_boot)
-HXDLIN( 244)		WORD_BOUNDARY = HX_("(?:\\b|$|^)",36,7d,03,89);
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_251_boot)
+HXDLIN( 251)		WORD_BOUNDARY = HX_("(?:\\b|$|^)",36,7d,03,89);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_245_boot)
-HXDLIN( 245)		USER_INFO = ((HX_("(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)",98,4a,e0,1a) + HX_("\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_",82,eb,76,e5)) + HX_("\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@",60,f3,93,36));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_252_boot)
+HXDLIN( 252)		USER_INFO = ((HX_("(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)",98,4a,e0,1a) + HX_("\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_",82,eb,76,e5)) + HX_("\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@",60,f3,93,36));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_248_boot)
-HXDLIN( 248)		PORT_NUMBER = HX_("\\:\\d{1,5}",18,ba,64,a4);
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_255_boot)
+HXDLIN( 255)		PORT_NUMBER = HX_("\\:\\d{1,5}",18,ba,64,a4);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_249_boot)
-HXDLIN( 249)		PATH_CHAR = (((HX_("(?:(?:[",7b,78,b4,2f) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("\\;\\/\\?\\:\\@\\&\\=\\#\\~",6b,f2,13,64)) + HX_("\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_\\$])|(?:\\%[a-fA-F0-9]{2}))",ca,f2,2d,5c));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_256_boot)
+HXDLIN( 256)		PATH_CHAR = (((HX_("(?:(?:[",7b,78,b4,2f) + ::snikket::Autolink_obj::LABEL_CHAR) + HX_("\\;\\/\\?\\:\\@\\&\\=\\#\\~",6b,f2,13,64)) + HX_("\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_\\$])|(?:\\%[a-fA-F0-9]{2}))",ca,f2,2d,5c));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_252_boot)
-HXDLIN( 252)		PATH_AND_QUERY = ((HX_("\\/",53,50,00,00) + ::snikket::Autolink_obj::PATH_CHAR) + HX_("*",2a,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_259_boot)
+HXDLIN( 259)		PATH_AND_QUERY = ((HX_("\\/",53,50,00,00) + ::snikket::Autolink_obj::PATH_CHAR) + HX_("*",2a,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_269_boot)
-HXDLIN( 269)		STRICT_TLD = ((((HX_("(?:",43,91,1e,00) + ::snikket::Autolink_obj::IANA_TOP_LEVEL_DOMAINS) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::PUNYCODE_TLD) + HX_(")",29,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_276_boot)
+HXDLIN( 276)		STRICT_TLD = ((((HX_("(?:",43,91,1e,00) + ::snikket::Autolink_obj::IANA_TOP_LEVEL_DOMAINS) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::PUNYCODE_TLD) + HX_(")",29,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_274_boot)
-HXDLIN( 274)		STRICT_HOST_NAME = ((((HX_("(?:(?:",e0,eb,f9,6a) + ::snikket::Autolink_obj::IRI_LABEL) + HX_("\\.)+",b4,ac,f2,3c)) + ::snikket::Autolink_obj::STRICT_TLD) + HX_(")",29,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_281_boot)
+HXDLIN( 281)		STRICT_HOST_NAME = ((((HX_("(?:(?:",e0,eb,f9,6a) + ::snikket::Autolink_obj::IRI_LABEL) + HX_("\\.)+",b4,ac,f2,3c)) + ::snikket::Autolink_obj::STRICT_TLD) + HX_(")",29,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_281_boot)
-HXDLIN( 281)		STRICT_DOMAIN_NAME = ((((((HX_("(?:",43,91,1e,00) + ::snikket::Autolink_obj::STRICT_HOST_NAME) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP_ADDRESS) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP6_ADDRESS) + HX_(")",29,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_288_boot)
+HXDLIN( 288)		STRICT_DOMAIN_NAME = ((((((HX_("(?:",43,91,1e,00) + ::snikket::Autolink_obj::STRICT_HOST_NAME) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP_ADDRESS) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP6_ADDRESS) + HX_(")",29,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_286_boot)
-HXDLIN( 286)		RELAXED_DOMAIN_NAME = (((((((((HX_("(?:",43,91,1e,00) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::IRI_LABEL) + HX_("(?:\\.(?=\\S))",a8,58,ad,af)) + HX_("?)+",e1,f1,2f,00)) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP_ADDRESS) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP6_ADDRESS) + HX_(")",29,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_293_boot)
+HXDLIN( 293)		RELAXED_DOMAIN_NAME = (((((((((HX_("(?:",43,91,1e,00) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::IRI_LABEL) + HX_("(?:\\.(?=\\S))",a8,58,ad,af)) + HX_("?)+",e1,f1,2f,00)) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP_ADDRESS) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::IP6_ADDRESS) + HX_(")",29,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_291_boot)
-HXDLIN( 291)		WEB_URL_WITHOUT_PROTOCOL = ((((((((((((((HX_("(",28,00,00,00) + ::snikket::Autolink_obj::WORD_BOUNDARY) + HX_("(?<!:\\/\\/)",c5,eb,09,02)) + HX_("(",28,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::STRICT_DOMAIN_NAME) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PORT_NUMBER) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PATH_AND_QUERY) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_298_boot)
+HXDLIN( 298)		WEB_URL_WITHOUT_PROTOCOL = ((((((((((((((HX_("(",28,00,00,00) + ::snikket::Autolink_obj::WORD_BOUNDARY) + HX_("(?<!:\\/\\/)",c5,eb,09,02)) + HX_("(",28,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::STRICT_DOMAIN_NAME) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PORT_NUMBER) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PATH_AND_QUERY) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_304_boot)
-HXDLIN( 304)		WEB_URL_WITH_PROTOCOL = (((((((((((((((((((HX_("(",28,00,00,00) + ::snikket::Autolink_obj::WORD_BOUNDARY) + HX_("(?:",43,91,1e,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PROTOCOL) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::USER_INFO) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::RELAXED_DOMAIN_NAME) + HX_(")?",f6,23,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PORT_NUMBER) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PATH_AND_QUERY) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_311_boot)
+HXDLIN( 311)		WEB_URL_WITH_PROTOCOL = (((((((((((((((((((HX_("(",28,00,00,00) + ::snikket::Autolink_obj::WORD_BOUNDARY) + HX_("(?:",43,91,1e,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PROTOCOL) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::USER_INFO) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::RELAXED_DOMAIN_NAME) + HX_(")?",f6,23,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PORT_NUMBER) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00)) + HX_("(?:",43,91,1e,00)) + ::snikket::Autolink_obj::PATH_AND_QUERY) + HX_(")?",f6,23,00,00)) + HX_(")",29,00,00,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_321_boot)
-HXDLIN( 321)		AUTOLINK_WEB_URL = (((((HX_("(",28,00,00,00) + ::snikket::Autolink_obj::WEB_URL_WITH_PROTOCOL) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::WEB_URL_WITHOUT_PROTOCOL) + HX_(")",29,00,00,00)) + ::snikket::Autolink_obj::WORD_BOUNDARY);
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_328_boot)
+HXDLIN( 328)		AUTOLINK_WEB_URL = (((((HX_("(",28,00,00,00) + ::snikket::Autolink_obj::WEB_URL_WITH_PROTOCOL) + HX_("|",7c,00,00,00)) + ::snikket::Autolink_obj::WEB_URL_WITHOUT_PROTOCOL) + HX_(")",29,00,00,00)) + ::snikket::Autolink_obj::WORD_BOUNDARY);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_324_boot)
-HXDLIN( 324)		TEL_URI = ((HX_("tel:(?:(?:\\+\\d+)|(?:\\d+;phone-context=",00,31,ab,3d) + ::snikket::Autolink_obj::PATH_CHAR) + HX_("+))",cb,c4,20,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_331_boot)
+HXDLIN( 331)		TEL_URI = ((HX_("tel:(?:(?:\\+\\d+)|(?:\\d+;phone-context=",00,31,ab,3d) + ::snikket::Autolink_obj::PATH_CHAR) + HX_("+))",cb,c4,20,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_327_boot)
-HXDLIN( 327)		SMS_URI = ((HX_("sms:(?:(?:\\+\\d+)|(?:\\d+;phone-context=",02,3f,54,78) + ::snikket::Autolink_obj::PATH_CHAR) + HX_("+))",cb,c4,20,00));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_334_boot)
+HXDLIN( 334)		SMS_URI = ((HX_("sms:(?:(?:\\+\\d+)|(?:\\d+;phone-context=",02,3f,54,78) + ::snikket::Autolink_obj::PATH_CHAR) + HX_("+))",cb,c4,20,00));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_329_boot)
-HXDLIN( 329)		XMPP_URI = (((HX_("xmpp\\:(?:(?:[",08,ef,83,26) + ::snikket::Autolink_obj::GOOD_IRI_CHAR) + HX_("\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])",75,2a,04,95)) + HX_("|(?:\\%[a-fA-F0-9]{2}))+",d1,f8,1c,37));
+            	HX_STACKFRAME(&_hx_pos_e03e81a8315e14a8_336_boot)
+HXDLIN( 336)		XMPP_URI = (((HX_("xmpp\\:(?:(?:[",08,ef,83,26) + ::snikket::Autolink_obj::GOOD_IRI_CHAR) + HX_("\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])",75,2a,04,95)) + HX_("|(?:\\%[a-fA-F0-9]{2}))+",d1,f8,1c,37));
             	}
 }
 
diff --git a/Sources/c_snikket/src/snikket/AvailableChat.cpp b/Sources/c_snikket/src/snikket/AvailableChat.cpp
index 567be00..1d4d240 100644
--- a/Sources/c_snikket/src/snikket/AvailableChat.cpp
+++ b/Sources/c_snikket/src/snikket/AvailableChat.cpp
@@ -8,20 +8,20 @@
 #include <snikket/Caps.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_eb4b7fa35bcf9ef4_1546_new,"snikket.AvailableChat","new",0xe206b262,"snikket.AvailableChat.new","snikket/Chat.hx",1546,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_84f492ff0c9cb600_307_chatId__fromC,"snikket.AvailableChat","chatId__fromC",0xa5503488,"snikket.AvailableChat.chatId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_84f492ff0c9cb600_307_displayName__fromC,"snikket.AvailableChat","displayName__fromC",0x0c214eaa,"snikket.AvailableChat.displayName__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_84f492ff0c9cb600_307_note__fromC,"snikket.AvailableChat","note__fromC",0xff5acec9,"snikket.AvailableChat.note__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_eb4b7fa35bcf9ef4_1542_isChannel,"snikket.AvailableChat","isChannel",0x4a03cd7b,"snikket.AvailableChat.isChannel","snikket/Chat.hx",1542,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_eb4b7fa35bcf9ef4_1522_boot,"snikket.AvailableChat","boot",0xdbee63f0,"snikket.AvailableChat.boot","snikket/Chat.hx",1522,0x18616bf4)
+HX_DEFINE_STACK_FRAME(_hx_pos_eb4b7fa35bcf9ef4_1544_new,"snikket.AvailableChat","new",0xe206b262,"snikket.AvailableChat.new","snikket/Chat.hx",1544,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_84f492ff0c9cb600_355_chatId__fromC,"snikket.AvailableChat","chatId__fromC",0xa5503488,"snikket.AvailableChat.chatId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_84f492ff0c9cb600_355_displayName__fromC,"snikket.AvailableChat","displayName__fromC",0x0c214eaa,"snikket.AvailableChat.displayName__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_84f492ff0c9cb600_355_note__fromC,"snikket.AvailableChat","note__fromC",0xff5acec9,"snikket.AvailableChat.note__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_eb4b7fa35bcf9ef4_1540_isChannel,"snikket.AvailableChat","isChannel",0x4a03cd7b,"snikket.AvailableChat.isChannel","snikket/Chat.hx",1540,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_eb4b7fa35bcf9ef4_1520_boot,"snikket.AvailableChat","boot",0xdbee63f0,"snikket.AvailableChat.boot","snikket/Chat.hx",1520,0x18616bf4)
 namespace snikket{
 
 void AvailableChat_obj::__construct(::String chatId,::String displayName,::String note, ::snikket::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_eb4b7fa35bcf9ef4_1546_new)
-HXLINE(1547)		this->chatId = chatId;
-HXLINE(1548)		this->displayName = displayName;
-HXLINE(1549)		this->note = note;
-HXLINE(1550)		this->caps = caps;
+            	HX_STACKFRAME(&_hx_pos_eb4b7fa35bcf9ef4_1544_new)
+HXLINE(1545)		this->chatId = chatId;
+HXLINE(1546)		this->displayName = displayName;
+HXLINE(1547)		this->note = note;
+HXLINE(1548)		this->caps = caps;
             	}
 
 Dynamic AvailableChat_obj::__CreateEmpty() { return new AvailableChat_obj; }
@@ -40,32 +40,32 @@ bool AvailableChat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String AvailableChat_obj::chatId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_84f492ff0c9cb600_307_chatId__fromC)
-HXDLIN( 307)		return this->chatId;
+            	HX_STACKFRAME(&_hx_pos_84f492ff0c9cb600_355_chatId__fromC)
+HXDLIN( 355)		return this->chatId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,chatId__fromC,return )
 
 ::String AvailableChat_obj::displayName__fromC(){
-            	HX_STACKFRAME(&_hx_pos_84f492ff0c9cb600_307_displayName__fromC)
-HXDLIN( 307)		return this->displayName;
+            	HX_STACKFRAME(&_hx_pos_84f492ff0c9cb600_355_displayName__fromC)
+HXDLIN( 355)		return this->displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,displayName__fromC,return )
 
 ::String AvailableChat_obj::note__fromC(){
-            	HX_STACKFRAME(&_hx_pos_84f492ff0c9cb600_307_note__fromC)
-HXDLIN( 307)		return this->note;
+            	HX_STACKFRAME(&_hx_pos_84f492ff0c9cb600_355_note__fromC)
+HXDLIN( 355)		return this->note;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,note__fromC,return )
 
 bool AvailableChat_obj::isChannel(){
-            	HX_STACKFRAME(&_hx_pos_eb4b7fa35bcf9ef4_1542_isChannel)
-HXDLIN(1542)		return this->caps->isChannel(this->chatId);
+            	HX_STACKFRAME(&_hx_pos_eb4b7fa35bcf9ef4_1540_isChannel)
+HXDLIN(1540)		return this->caps->isChannel(this->chatId);
             	}
 
 
@@ -208,8 +208,8 @@ void AvailableChat_obj::__register()
 void AvailableChat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_eb4b7fa35bcf9ef4_1522_boot)
-HXDLIN(1522)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_eb4b7fa35bcf9ef4_1520_boot)
+HXDLIN(1520)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("chatId__fromC",06,fc,b1,94), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_snikket/src/snikket/Channel.cpp b/Sources/c_snikket/src/snikket/Channel.cpp
index 9f34407..106f956 100644
--- a/Sources/c_snikket/src/snikket/Channel.cpp
+++ b/Sources/c_snikket/src/snikket/Channel.cpp
@@ -125,87 +125,87 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_5e4df8d46126c981_975_new,"snikket.Channel","new",0x8a02a1a4,"snikket.Channel.new","snikket/Chat.hx",975,0x18616bf4)
+HX_DEFINE_STACK_FRAME(_hx_pos_5e4df8d46126c981_973_new,"snikket.Channel","new",0x8a02a1a4,"snikket.Channel.new","snikket/Chat.hx",973,0x18616bf4)
 static const ::String _hx_array_data_db683fb2_1[] = {
 	HX_("http://jabber.org/protocol/muc",07,b2,7f,c6),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1018_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",1018,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1008_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",1008,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_996_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",996,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1000_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",1000,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1042_join,"snikket.Channel","join",0x35ad7e26,"snikket.Channel.join","snikket/Chat.hx",1042,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1034_join,"snikket.Channel","join",0x35ad7e26,"snikket.Channel.join","snikket/Chat.hx",1034,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1053_selfPingSuccess,"snikket.Channel","selfPingSuccess",0xafddf489,"snikket.Channel.selfPingSuccess","snikket/Chat.hx",1053,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1064_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1064,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1065_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1065,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1073_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1073,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1080_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1080,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1103_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1103,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1016_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",1016,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1006_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",1006,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_994_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",994,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_998_selfPing,"snikket.Channel","selfPing",0x9e7c785a,"snikket.Channel.selfPing","snikket/Chat.hx",998,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1040_join,"snikket.Channel","join",0x35ad7e26,"snikket.Channel.join","snikket/Chat.hx",1040,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1032_join,"snikket.Channel","join",0x35ad7e26,"snikket.Channel.join","snikket/Chat.hx",1032,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1051_selfPingSuccess,"snikket.Channel","selfPingSuccess",0xafddf489,"snikket.Channel.selfPingSuccess","snikket/Chat.hx",1051,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1062_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1062,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1063_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1063,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1071_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1071,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1078_setPresence,"snikket.Channel","setPresence",0x9dbfd141,"snikket.Channel.setPresence","snikket/Chat.hx",1078,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1101_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1101,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1130_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1130,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1132_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1132,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1134_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1134,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1163_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1163,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1109_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1109,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1125_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1125,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1121_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1121,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1173_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1173,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1086_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1086,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1186_isTrusted,"snikket.Channel","isTrusted",0x2c7a5171,"snikket.Channel.isTrusted","snikket/Chat.hx",1186,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1190_isPrivate,"snikket.Channel","isPrivate",0x9f42c67d,"snikket.Channel.isPrivate","snikket/Chat.hx",1190,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1196_refreshDisco,"snikket.Channel","refreshDisco",0x9d89e5db,"snikket.Channel.refreshDisco","snikket/Chat.hx",1196,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1161_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1161,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1107_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1107,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1123_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1123,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1119_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1119,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1171_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1171,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1084_doSync,"snikket.Channel","doSync",0xa5ffb0c2,"snikket.Channel.doSync","snikket/Chat.hx",1084,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1184_isTrusted,"snikket.Channel","isTrusted",0x2c7a5171,"snikket.Channel.isTrusted","snikket/Chat.hx",1184,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1188_isPrivate,"snikket.Channel","isPrivate",0x9f42c67d,"snikket.Channel.isPrivate","snikket/Chat.hx",1188,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1194_refreshDisco,"snikket.Channel","refreshDisco",0x9d89e5db,"snikket.Channel.refreshDisco","snikket/Chat.hx",1194,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1209_preview,"snikket.Channel","preview",0x1b05a34c,"snikket.Channel.preview","snikket/Chat.hx",1209,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1216_livePresence,"snikket.Channel","livePresence",0x644ddf83,"snikket.Channel.livePresence","snikket/Chat.hx",1216,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1223_syncing,"snikket.Channel","syncing",0x8651c0ab,"snikket.Channel.syncing","snikket/Chat.hx",1223,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1227_canAudioCall,"snikket.Channel","canAudioCall",0x94c730a0,"snikket.Channel.canAudioCall","snikket/Chat.hx",1227,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1231_canVideoCall,"snikket.Channel","canVideoCall",0x9aca02c5,"snikket.Channel.canVideoCall","snikket/Chat.hx",1231,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1235_nickInUse,"snikket.Channel","nickInUse",0x59744703,"snikket.Channel.nickInUse","snikket/Chat.hx",1235,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1239_getFullJid,"snikket.Channel","getFullJid",0xa835e1bc,"snikket.Channel.getFullJid","snikket/Chat.hx",1239,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1245_getParticipants,"snikket.Channel","getParticipants",0x390cb25a,"snikket.Channel.getParticipants","snikket/Chat.hx",1245,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1192_refreshDisco,"snikket.Channel","refreshDisco",0x9d89e5db,"snikket.Channel.refreshDisco","snikket/Chat.hx",1192,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1207_preview,"snikket.Channel","preview",0x1b05a34c,"snikket.Channel.preview","snikket/Chat.hx",1207,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1214_livePresence,"snikket.Channel","livePresence",0x644ddf83,"snikket.Channel.livePresence","snikket/Chat.hx",1214,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1221_syncing,"snikket.Channel","syncing",0x8651c0ab,"snikket.Channel.syncing","snikket/Chat.hx",1221,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1225_canAudioCall,"snikket.Channel","canAudioCall",0x94c730a0,"snikket.Channel.canAudioCall","snikket/Chat.hx",1225,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1229_canVideoCall,"snikket.Channel","canVideoCall",0x9aca02c5,"snikket.Channel.canVideoCall","snikket/Chat.hx",1229,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1233_nickInUse,"snikket.Channel","nickInUse",0x59744703,"snikket.Channel.nickInUse","snikket/Chat.hx",1233,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1237_getFullJid,"snikket.Channel","getFullJid",0xa835e1bc,"snikket.Channel.getFullJid","snikket/Chat.hx",1237,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1243_getParticipants,"snikket.Channel","getParticipants",0x390cb25a,"snikket.Channel.getParticipants","snikket/Chat.hx",1243,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1250_getParticipantDetails,"snikket.Channel","getParticipantDetails",0xdfad9dc9,"snikket.Channel.getParticipantDetails","snikket/Chat.hx",1250,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1263_getMessagesBefore,"snikket.Channel","getMessagesBefore",0xefb5f1e5,"snikket.Channel.getMessagesBefore","snikket/Chat.hx",1263,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1269_getMessagesBefore,"snikket.Channel","getMessagesBefore",0xefb5f1e5,"snikket.Channel.getMessagesBefore","snikket/Chat.hx",1269,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1241_getParticipants,"snikket.Channel","getParticipants",0x390cb25a,"snikket.Channel.getParticipants","snikket/Chat.hx",1241,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1248_getParticipantDetails,"snikket.Channel","getParticipantDetails",0xdfad9dc9,"snikket.Channel.getParticipantDetails","snikket/Chat.hx",1248,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1261_getMessagesBefore,"snikket.Channel","getMessagesBefore",0xefb5f1e5,"snikket.Channel.getMessagesBefore","snikket/Chat.hx",1261,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1286_getMessagesAfter,"snikket.Channel","getMessagesAfter",0x103df776,"snikket.Channel.getMessagesAfter","snikket/Chat.hx",1286,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1292_getMessagesAfter,"snikket.Channel","getMessagesAfter",0x103df776,"snikket.Channel.getMessagesAfter","snikket/Chat.hx",1292,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1280_getMessagesAfter,"snikket.Channel","getMessagesAfter",0x103df776,"snikket.Channel.getMessagesAfter","snikket/Chat.hx",1280,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1305_getMessagesAround,"snikket.Channel","getMessagesAround",0x0b8795b3,"snikket.Channel.getMessagesAround","snikket/Chat.hx",1305,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1304_getMessagesAround,"snikket.Channel","getMessagesAround",0x0b8795b3,"snikket.Channel.getMessagesAround","snikket/Chat.hx",1304,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1315_prepareIncomingMessage,"snikket.Channel","prepareIncomingMessage",0x3bfa74f6,"snikket.Channel.prepareIncomingMessage","snikket/Chat.hx",1315,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1326_prepareOutgoingMessage,"snikket.Channel","prepareOutgoingMessage",0xa2273a30,"snikket.Channel.prepareOutgoingMessage","snikket/Chat.hx",1326,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1344_correctMessage,"snikket.Channel","correctMessage",0x4d2d23b9,"snikket.Channel.correctMessage","snikket/Chat.hx",1344,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1339_correctMessage,"snikket.Channel","correctMessage",0x4d2d23b9,"snikket.Channel.correctMessage","snikket/Chat.hx",1339,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1357_sendMessage,"snikket.Channel","sendMessage",0x2aa53ea3,"snikket.Channel.sendMessage","snikket/Chat.hx",1357,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1373_sendMessage,"snikket.Channel","sendMessage",0x2aa53ea3,"snikket.Channel.sendMessage","snikket/Chat.hx",1373,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1380_sendMessage,"snikket.Channel","sendMessage",0x2aa53ea3,"snikket.Channel.sendMessage","snikket/Chat.hx",1380,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1411_removeReaction,"snikket.Channel","removeReaction",0x19751149,"snikket.Channel.removeReaction","snikket/Chat.hx",1411,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1391_removeReaction,"snikket.Channel","removeReaction",0x19751149,"snikket.Channel.removeReaction","snikket/Chat.hx",1391,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1406_removeReaction,"snikket.Channel","removeReaction",0x19751149,"snikket.Channel.removeReaction","snikket/Chat.hx",1406,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1421_lastMessageId,"snikket.Channel","lastMessageId",0xa72b1e90,"snikket.Channel.lastMessageId","snikket/Chat.hx",1421,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1426_markReadUpTo,"snikket.Channel","markReadUpTo",0x9e644e95,"snikket.Channel.markReadUpTo","snikket/Chat.hx",1426,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1425_markReadUpTo,"snikket.Channel","markReadUpTo",0x9e644e95,"snikket.Channel.markReadUpTo","snikket/Chat.hx",1425,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1461_bookmark,"snikket.Channel","bookmark",0x9931a4f2,"snikket.Channel.bookmark","snikket/Chat.hx",1461,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1479_bookmark,"snikket.Channel","bookmark",0x9931a4f2,"snikket.Channel.bookmark","snikket/Chat.hx",1479,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1440_bookmark,"snikket.Channel","bookmark",0x9931a4f2,"snikket.Channel.bookmark","snikket/Chat.hx",1440,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1490_sendChatState,"snikket.Channel","sendChatState",0xee67aff5,"snikket.Channel.sendChatState","snikket/Chat.hx",1490,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1506_close,"snikket.Channel","close",0xb85bc1fc,"snikket.Channel.close","snikket/Chat.hx",1506,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_975_boot,"snikket.Channel","boot",0x3063ce6e,"snikket.Channel.boot","snikket/Chat.hx",975,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1267_getMessagesBefore,"snikket.Channel","getMessagesBefore",0xefb5f1e5,"snikket.Channel.getMessagesBefore","snikket/Chat.hx",1267,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1259_getMessagesBefore,"snikket.Channel","getMessagesBefore",0xefb5f1e5,"snikket.Channel.getMessagesBefore","snikket/Chat.hx",1259,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1284_getMessagesAfter,"snikket.Channel","getMessagesAfter",0x103df776,"snikket.Channel.getMessagesAfter","snikket/Chat.hx",1284,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1290_getMessagesAfter,"snikket.Channel","getMessagesAfter",0x103df776,"snikket.Channel.getMessagesAfter","snikket/Chat.hx",1290,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1278_getMessagesAfter,"snikket.Channel","getMessagesAfter",0x103df776,"snikket.Channel.getMessagesAfter","snikket/Chat.hx",1278,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1303_getMessagesAround,"snikket.Channel","getMessagesAround",0x0b8795b3,"snikket.Channel.getMessagesAround","snikket/Chat.hx",1303,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1302_getMessagesAround,"snikket.Channel","getMessagesAround",0x0b8795b3,"snikket.Channel.getMessagesAround","snikket/Chat.hx",1302,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1313_prepareIncomingMessage,"snikket.Channel","prepareIncomingMessage",0x3bfa74f6,"snikket.Channel.prepareIncomingMessage","snikket/Chat.hx",1313,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1324_prepareOutgoingMessage,"snikket.Channel","prepareOutgoingMessage",0xa2273a30,"snikket.Channel.prepareOutgoingMessage","snikket/Chat.hx",1324,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1342_correctMessage,"snikket.Channel","correctMessage",0x4d2d23b9,"snikket.Channel.correctMessage","snikket/Chat.hx",1342,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1337_correctMessage,"snikket.Channel","correctMessage",0x4d2d23b9,"snikket.Channel.correctMessage","snikket/Chat.hx",1337,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1355_sendMessage,"snikket.Channel","sendMessage",0x2aa53ea3,"snikket.Channel.sendMessage","snikket/Chat.hx",1355,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1371_sendMessage,"snikket.Channel","sendMessage",0x2aa53ea3,"snikket.Channel.sendMessage","snikket/Chat.hx",1371,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1378_sendMessage,"snikket.Channel","sendMessage",0x2aa53ea3,"snikket.Channel.sendMessage","snikket/Chat.hx",1378,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1409_removeReaction,"snikket.Channel","removeReaction",0x19751149,"snikket.Channel.removeReaction","snikket/Chat.hx",1409,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1389_removeReaction,"snikket.Channel","removeReaction",0x19751149,"snikket.Channel.removeReaction","snikket/Chat.hx",1389,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1404_removeReaction,"snikket.Channel","removeReaction",0x19751149,"snikket.Channel.removeReaction","snikket/Chat.hx",1404,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1419_lastMessageId,"snikket.Channel","lastMessageId",0xa72b1e90,"snikket.Channel.lastMessageId","snikket/Chat.hx",1419,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1424_markReadUpTo,"snikket.Channel","markReadUpTo",0x9e644e95,"snikket.Channel.markReadUpTo","snikket/Chat.hx",1424,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1423_markReadUpTo,"snikket.Channel","markReadUpTo",0x9e644e95,"snikket.Channel.markReadUpTo","snikket/Chat.hx",1423,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1459_bookmark,"snikket.Channel","bookmark",0x9931a4f2,"snikket.Channel.bookmark","snikket/Chat.hx",1459,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1477_bookmark,"snikket.Channel","bookmark",0x9931a4f2,"snikket.Channel.bookmark","snikket/Chat.hx",1477,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1438_bookmark,"snikket.Channel","bookmark",0x9931a4f2,"snikket.Channel.bookmark","snikket/Chat.hx",1438,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1488_sendChatState,"snikket.Channel","sendChatState",0xee67aff5,"snikket.Channel.sendChatState","snikket/Chat.hx",1488,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_1504_close,"snikket.Channel","close",0xb85bc1fc,"snikket.Channel.close","snikket/Chat.hx",1504,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_5e4df8d46126c981_973_boot,"snikket.Channel","boot",0x3063ce6e,"snikket.Channel.boot","snikket/Chat.hx",973,0x18616bf4)
 namespace snikket{
 
 void Channel_obj::__construct( ::snikket::Client client, ::snikket::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBlocked, ::snikket::Stanza extensions,::String readUpToId,::String readUpToBy, ::snikket::Caps disco){
             		int uiState = __o_uiState.Default(1);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_975_new)
-HXLINE( 981)		this->_nickInUse = null();
-HXLINE( 980)		this->forceLive = false;
-HXLINE( 979)		this->sync = null();
-HXLINE( 978)		this->inSync = true;
-HXLINE( 977)		this->disco =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_db683fb2_1,1));
-HXLINE( 985)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy);
-HXLINE( 986)		if (::hx::IsNotNull( disco )) {
-HXLINE( 987)			this->disco = disco;
-HXLINE( 988)			if (!(disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
-HXLINE( 990)				this->forceLive = true;
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_973_new)
+HXLINE( 979)		this->_nickInUse = null();
+HXLINE( 978)		this->forceLive = false;
+HXLINE( 977)		this->sync = null();
+HXLINE( 976)		this->inSync = true;
+HXLINE( 975)		this->disco =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_db683fb2_1,1));
+HXLINE( 983)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy);
+HXLINE( 984)		if (::hx::IsNotNull( disco )) {
+HXLINE( 985)			this->disco = disco;
+HXLINE( 986)			if (!(disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
+HXLINE( 988)				this->forceLive = true;
             			}
             		}
             	}
@@ -234,100 +234,100 @@ void Channel_obj::selfPing(bool refresh){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::snikket::Channel,_gthis) HXARGC(1)
             			void _hx_run( ::snikket::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1018_selfPing)
-HXLINE(1018)				if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1019)					 ::snikket::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1019)					 ::snikket::Stanza err;
-HXDLIN(1019)					if (::hx::IsNotNull( tmp )) {
-HXLINE(1019)						err = tmp->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+            				HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1016_selfPing)
+HXLINE(1016)				if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE(1017)					 ::snikket::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(1017)					 ::snikket::Stanza err;
+HXDLIN(1017)					if (::hx::IsNotNull( tmp )) {
+HXLINE(1017)						err = tmp->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             					}
             					else {
-HXLINE(1019)						err = null();
+HXLINE(1017)						err = null();
             					}
-HXLINE(1020)					bool _hx_tmp;
-HXDLIN(1020)					if ((err->name != HX_("service-unavailable",f8,3c,11,1c))) {
-HXLINE(1020)						_hx_tmp = (err->name == HX_("feature-not-implemented",71,20,2e,96));
+HXLINE(1018)					bool _hx_tmp;
+HXDLIN(1018)					if ((err->name != HX_("service-unavailable",f8,3c,11,1c))) {
+HXLINE(1018)						_hx_tmp = (err->name == HX_("feature-not-implemented",71,20,2e,96));
             					}
             					else {
-HXLINE(1020)						_hx_tmp = true;
+HXLINE(1018)						_hx_tmp = true;
             					}
-HXDLIN(1020)					if (_hx_tmp) {
-HXLINE(1020)						_gthis->selfPingSuccess();
-HXDLIN(1020)						return;
+HXDLIN(1018)					if (_hx_tmp) {
+HXLINE(1018)						_gthis->selfPingSuccess();
+HXDLIN(1018)						return;
             					}
-HXLINE(1021)					bool _hx_tmp1;
-HXDLIN(1021)					if ((err->name != HX_("remote-server-not-found",e5,4f,ca,aa))) {
-HXLINE(1021)						_hx_tmp1 = (err->name == HX_("remote-server-timeout",fe,b0,ee,1a));
+HXLINE(1019)					bool _hx_tmp1;
+HXDLIN(1019)					if ((err->name != HX_("remote-server-not-found",e5,4f,ca,aa))) {
+HXLINE(1019)						_hx_tmp1 = (err->name == HX_("remote-server-timeout",fe,b0,ee,1a));
             					}
             					else {
-HXLINE(1021)						_hx_tmp1 = true;
+HXLINE(1019)						_hx_tmp1 = true;
             					}
-HXDLIN(1021)					if (_hx_tmp1) {
-HXLINE(1021)						_gthis->selfPingSuccess();
-HXDLIN(1021)						return;
+HXDLIN(1019)					if (_hx_tmp1) {
+HXLINE(1019)						_gthis->selfPingSuccess();
+HXDLIN(1019)						return;
             					}
-HXLINE(1022)					if ((err->name == HX_("item-not-found",4e,b5,9b,5b))) {
-HXLINE(1022)						_gthis->selfPingSuccess();
-HXDLIN(1022)						return;
+HXLINE(1020)					if ((err->name == HX_("item-not-found",4e,b5,9b,5b))) {
+HXLINE(1020)						_gthis->selfPingSuccess();
+HXDLIN(1020)						return;
             					}
-HXLINE(1023)					::haxe::Log_obj::trace(HX_("SYNC: self-ping fail, join",ea,45,f2,f0), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1021)					::haxe::Log_obj::trace(HX_("SYNC: self-ping fail, join",ea,45,f2,f0), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Channel",b2,3f,68,db))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis->chatId))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("selfPing",1e,60,3c,38))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Chat.hx",f4,6b,61,18))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1023)));
-HXLINE(1024)					_gthis->join();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1021)));
+HXLINE(1022)					_gthis->join();
             				}
             				else {
-HXLINE(1026)					_gthis->selfPingSuccess();
+HXLINE(1024)					_gthis->selfPingSuccess();
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1008_selfPing)
-HXLINE(1009)			if (!(_gthis->disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
-HXLINE(1011)				_gthis->forceLive = true;
-HXLINE(1012)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1006_selfPing)
+HXLINE(1007)			if (!(_gthis->disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
+HXLINE(1009)				_gthis->forceLive = true;
+HXLINE(1010)				return;
             			}
-HXLINE(1014)			 ::snikket::GenericStream _gthis1 = _gthis->stream;
-HXLINE(1015)			::String _hx_tmp = _gthis->getFullJid()->asString();
-HXLINE(1014)			_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1012)			 ::snikket::GenericStream _gthis1 = _gthis->stream;
+HXLINE(1013)			::String _hx_tmp = _gthis->getFullJid()->asString();
+HXLINE(1012)			_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp)
             				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("ping",72,f2,57,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:ping",8e,30,3f,fd))))->up(), ::Dynamic(new _hx_Closure_2(_gthis)));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_996_selfPing)
-HXDLIN( 996)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 997)		if ((this->uiState == 2)) {
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_994_selfPing)
+HXDLIN( 994)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 995)		if ((this->uiState == 2)) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			 ::snikket::Stanza _hx_run( ::snikket::Stanza stanza){
-            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1000_selfPing)
-HXLINE(1001)				::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("unavailable",50,e0,29,fd));
-HXLINE(1002)				return stanza;
+            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_998_selfPing)
+HXLINE( 999)				::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("unavailable",50,e0,29,fd));
+HXLINE(1000)				return stanza;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 998)			 ::snikket::Client _hx_tmp = this->client;
-HXDLIN( 998)			_hx_tmp->sendPresence(this->getFullJid()->asString(), ::Dynamic(new _hx_Closure_0()));
-HXLINE(1005)			return;
+HXLINE( 996)			 ::snikket::Client _hx_tmp = this->client;
+HXDLIN( 996)			_hx_tmp->sendPresence(this->getFullJid()->asString(), ::Dynamic(new _hx_Closure_0()));
+HXLINE(1003)			return;
             		}
-HXLINE(1008)		 ::Dynamic _hx_tmp1;
-HXDLIN(1008)		if (refresh) {
-HXLINE(1008)			_hx_tmp1 = this->refreshDisco_dyn();
+HXLINE(1006)		 ::Dynamic _hx_tmp1;
+HXDLIN(1006)		if (refresh) {
+HXLINE(1006)			_hx_tmp1 = this->refreshDisco_dyn();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::Dynamic cb){
-            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1008_selfPing)
-HXLINE(1008)				cb();
+            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1006_selfPing)
+HXLINE(1006)				cb();
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1008)			_hx_tmp1 =  ::Dynamic(new _hx_Closure_1());
+HXLINE(1006)			_hx_tmp1 =  ::Dynamic(new _hx_Closure_1());
             		}
-HXDLIN(1008)		_hx_tmp1( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXDLIN(1006)		_hx_tmp1( ::Dynamic(new _hx_Closure_3(_gthis)));
             	}
 
 
@@ -336,167 +336,167 @@ HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,selfPing,(void))
 void Channel_obj::join(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(1)
             		 ::snikket::Stanza _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1042_join)
-HXLINE(1043)			stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1040_join)
+HXLINE(1041)			stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc",07,b2,7f,c6))));
-HXLINE(1044)			if (_gthis->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da))) {
-HXLINE(1044)				stanza->tag(HX_("history",54,35,47,64), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1042)			if (_gthis->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da))) {
+HXLINE(1042)				stanza->tag(HX_("history",54,35,47,64), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("maxchars",b9,7f,a3,5c),HX_("0",30,00,00,00))))->up();
             			}
-HXLINE(1046)			stanza->up();
-HXLINE(1047)			return stanza;
+HXLINE(1044)			stanza->up();
+HXLINE(1045)			return stanza;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1034_join)
-HXDLIN(1034)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1035)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1036)		this->_nickInUse = null();
-HXLINE(1037)		this->inSync = false;
-HXLINE(1038)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1039)		 ::snikket::JID desiredFullJid = ::snikket::JID_obj::parse(this->chatId);
-HXDLIN(1039)		 ::snikket::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
-HXLINE(1040)		 ::snikket::Client _hx_tmp = this->client;
-HXDLIN(1040)		_hx_tmp->sendPresence(desiredFullJid1->asString(), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1050)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1050)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1050)		::snikket::Persistence_obj::lastId(_hx_tmp1,_hx_tmp2,this->chatId,this->doSync_dyn());
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1032_join)
+HXDLIN(1032)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1033)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1034)		this->_nickInUse = null();
+HXLINE(1035)		this->inSync = false;
+HXLINE(1036)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1037)		 ::snikket::JID desiredFullJid = ::snikket::JID_obj::parse(this->chatId);
+HXDLIN(1037)		 ::snikket::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
+HXLINE(1038)		 ::snikket::Client _hx_tmp = this->client;
+HXDLIN(1038)		_hx_tmp->sendPresence(desiredFullJid1->asString(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1048)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1048)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1048)		::snikket::Persistence_obj::lastId(_hx_tmp1,_hx_tmp2,this->chatId,this->doSync_dyn());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,join,(void))
 
 void Channel_obj::selfPingSuccess(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1053_selfPingSuccess)
-HXLINE(1054)		::String _hx_tmp = this->nickInUse();
-HXDLIN(1054)		if ((_hx_tmp != this->client->displayName())) {
-HXLINE(1055)			 ::snikket::JID desiredFullJid = ::snikket::JID_obj::parse(this->chatId);
-HXDLIN(1055)			 ::snikket::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
-HXLINE(1056)			 ::snikket::Client _hx_tmp1 = this->client;
-HXDLIN(1056)			_hx_tmp1->sendPresence(desiredFullJid1->asString(),null());
-            		}
-HXLINE(1060)		this->inSync = false;
-HXLINE(1061)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1061)		::String _hx_tmp3 = this->client->accountId();
-HXDLIN(1061)		::snikket::Persistence_obj::lastId(_hx_tmp2,_hx_tmp3,this->chatId,this->doSync_dyn());
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1051_selfPingSuccess)
+HXLINE(1052)		::String _hx_tmp = this->nickInUse();
+HXDLIN(1052)		if ((_hx_tmp != this->client->displayName())) {
+HXLINE(1053)			 ::snikket::JID desiredFullJid = ::snikket::JID_obj::parse(this->chatId);
+HXDLIN(1053)			 ::snikket::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
+HXLINE(1054)			 ::snikket::Client _hx_tmp1 = this->client;
+HXDLIN(1054)			_hx_tmp1->sendPresence(desiredFullJid1->asString(),null());
+            		}
+HXLINE(1058)		this->inSync = false;
+HXLINE(1059)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1059)		::String _hx_tmp3 = this->client->accountId();
+HXDLIN(1059)		::snikket::Persistence_obj::lastId(_hx_tmp2,_hx_tmp3,this->chatId,this->doSync_dyn());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,selfPingSuccess,(void))
 
 void Channel_obj::setPresence(::String resource, ::snikket::Presence presence){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1064_setPresence)
-HXLINE(1065)		 ::snikket::Stanza tmp;
-HXDLIN(1065)		if (::hx::IsNotNull( presence )) {
-HXLINE(1065)			tmp = presence->mucUser;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1062_setPresence)
+HXLINE(1063)		 ::snikket::Stanza tmp;
+HXDLIN(1063)		if (::hx::IsNotNull( presence )) {
+HXLINE(1063)			tmp = presence->mucUser;
             		}
             		else {
-HXLINE(1065)			tmp = null();
+HXLINE(1063)			tmp = null();
             		}
-HXDLIN(1065)		 ::snikket::Stanza oneTen;
-HXDLIN(1065)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1063)		 ::snikket::Stanza oneTen;
+HXDLIN(1063)		if (::hx::IsNotNull( tmp )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::snikket::Stanza status){
-            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1065_setPresence)
-HXLINE(1065)				return (( (::String)(::Reflect_obj::field(status->attr,HX_("code",2d,b1,c4,41))) ) == HX_("110",50,59,25,00));
+            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1063_setPresence)
+HXLINE(1063)				return (( (::String)(::Reflect_obj::field(status->attr,HX_("code",2d,b1,c4,41))) ) == HX_("110",50,59,25,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1065)			oneTen = ( ( ::snikket::Stanza)(::Lambda_obj::find(tmp->allTags(HX_("status",32,e7,fb,05),null()), ::Dynamic(new _hx_Closure_0()))) );
+HXLINE(1063)			oneTen = ( ( ::snikket::Stanza)(::Lambda_obj::find(tmp->allTags(HX_("status",32,e7,fb,05),null()), ::Dynamic(new _hx_Closure_0()))) );
             		}
             		else {
-HXLINE(1065)			oneTen = null();
+HXLINE(1063)			oneTen = null();
             		}
-HXLINE(1066)		if (::hx::IsNotNull( oneTen )) {
-HXLINE(1067)			this->_nickInUse = resource;
+HXLINE(1064)		if (::hx::IsNotNull( oneTen )) {
+HXLINE(1065)			this->_nickInUse = resource;
             		}
             		else {
-HXLINE(1068)			if ((resource == this->_nickInUse)) {
-HXLINE(1069)				this->_nickInUse = null();
+HXLINE(1066)			if ((resource == this->_nickInUse)) {
+HXLINE(1067)				this->_nickInUse = null();
             			}
             		}
-HXLINE(1071)		bool _hx_tmp;
-HXDLIN(1071)		bool _hx_tmp1;
-HXDLIN(1071)		if (::hx::IsNotNull( presence )) {
-HXLINE(1071)			_hx_tmp1 = ::hx::IsNotNull( presence->mucUser );
+HXLINE(1069)		bool _hx_tmp;
+HXDLIN(1069)		bool _hx_tmp1;
+HXDLIN(1069)		if (::hx::IsNotNull( presence )) {
+HXLINE(1069)			_hx_tmp1 = ::hx::IsNotNull( presence->mucUser );
             		}
             		else {
-HXLINE(1071)			_hx_tmp1 = false;
+HXLINE(1069)			_hx_tmp1 = false;
             		}
-HXDLIN(1071)		if (_hx_tmp1) {
-HXLINE(1071)			_hx_tmp = ::hx::IsNull( oneTen );
+HXDLIN(1069)		if (_hx_tmp1) {
+HXLINE(1069)			_hx_tmp = ::hx::IsNull( oneTen );
             		}
             		else {
-HXLINE(1071)			_hx_tmp = false;
-            		}
-HXDLIN(1071)		if (_hx_tmp) {
-HXLINE(1072)			 ::snikket::Presence existing = ( ( ::snikket::Presence)(this->presence->get(resource)) );
-HXLINE(1073)			bool _hx_tmp2;
-HXDLIN(1073)			if (::hx::IsNotNull( existing )) {
-HXLINE(1073)				 ::snikket::Stanza tmp1;
-HXDLIN(1073)				if (::hx::IsNotNull( existing )) {
-HXLINE(1073)					tmp1 = existing->mucUser;
+HXLINE(1069)			_hx_tmp = false;
+            		}
+HXDLIN(1069)		if (_hx_tmp) {
+HXLINE(1070)			 ::snikket::Presence existing = ( ( ::snikket::Presence)(this->presence->get(resource)) );
+HXLINE(1071)			bool _hx_tmp2;
+HXDLIN(1071)			if (::hx::IsNotNull( existing )) {
+HXLINE(1071)				 ::snikket::Stanza tmp1;
+HXDLIN(1071)				if (::hx::IsNotNull( existing )) {
+HXLINE(1071)					tmp1 = existing->mucUser;
             				}
             				else {
-HXLINE(1073)					tmp1 = null();
+HXLINE(1071)					tmp1 = null();
             				}
-HXDLIN(1073)				 ::snikket::Stanza _hx_tmp3;
-HXDLIN(1073)				if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1071)				 ::snikket::Stanza _hx_tmp3;
+HXDLIN(1071)				if (::hx::IsNotNull( tmp1 )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             					bool _hx_run( ::snikket::Stanza status){
-            						HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1073_setPresence)
-HXLINE(1073)						return (( (::String)(::Reflect_obj::field(status->attr,HX_("code",2d,b1,c4,41))) ) == HX_("110",50,59,25,00));
+            						HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1071_setPresence)
+HXLINE(1071)						return (( (::String)(::Reflect_obj::field(status->attr,HX_("code",2d,b1,c4,41))) ) == HX_("110",50,59,25,00));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1073)					_hx_tmp3 = ( ( ::snikket::Stanza)(::Lambda_obj::find(tmp1->allTags(HX_("status",32,e7,fb,05),null()), ::Dynamic(new _hx_Closure_1()))) );
+HXLINE(1071)					_hx_tmp3 = ( ( ::snikket::Stanza)(::Lambda_obj::find(tmp1->allTags(HX_("status",32,e7,fb,05),null()), ::Dynamic(new _hx_Closure_1()))) );
             				}
             				else {
-HXLINE(1073)					_hx_tmp3 = null();
+HXLINE(1071)					_hx_tmp3 = null();
             				}
-HXDLIN(1073)				_hx_tmp2 = ::hx::IsNotNull( _hx_tmp3 );
+HXDLIN(1071)				_hx_tmp2 = ::hx::IsNotNull( _hx_tmp3 );
             			}
             			else {
-HXLINE(1073)				_hx_tmp2 = false;
+HXLINE(1071)				_hx_tmp2 = false;
             			}
-HXDLIN(1073)			if (_hx_tmp2) {
-HXLINE(1074)				presence->mucUser->tag(HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1071)			if (_hx_tmp2) {
+HXLINE(1072)				presence->mucUser->tag(HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("code",2d,b1,c4,41),HX_("110",50,59,25,00))));
-HXLINE(1075)				this->setPresence(resource,presence);
-HXLINE(1076)				return;
+HXLINE(1073)				this->setPresence(resource,presence);
+HXLINE(1074)				return;
             			}
             		}
-HXLINE(1079)		this->super::setPresence(resource,presence);
-HXLINE(1080)		 ::snikket::Stanza tmp2;
-HXDLIN(1080)		if (::hx::IsNotNull( presence )) {
-HXLINE(1080)			tmp2 = presence->mucUser;
+HXLINE(1077)		this->super::setPresence(resource,presence);
+HXLINE(1078)		 ::snikket::Stanza tmp2;
+HXDLIN(1078)		if (::hx::IsNotNull( presence )) {
+HXLINE(1078)			tmp2 = presence->mucUser;
             		}
             		else {
-HXLINE(1080)			tmp2 = null();
+HXLINE(1078)			tmp2 = null();
             		}
-HXDLIN(1080)		 ::snikket::Stanza tripleThree;
-HXDLIN(1080)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1078)		 ::snikket::Stanza tripleThree;
+HXDLIN(1078)		if (::hx::IsNotNull( tmp2 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::snikket::Stanza status){
-            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1080_setPresence)
-HXLINE(1080)				return (( (::String)(::Reflect_obj::field(status->attr,HX_("code",2d,b1,c4,41))) ) == HX_("333",93,df,26,00));
+            				HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1078_setPresence)
+HXLINE(1078)				return (( (::String)(::Reflect_obj::field(status->attr,HX_("code",2d,b1,c4,41))) ) == HX_("333",93,df,26,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1080)			tripleThree = ( ( ::snikket::Stanza)(::Lambda_obj::find(tmp2->allTags(HX_("status",32,e7,fb,05),null()), ::Dynamic(new _hx_Closure_2()))) );
+HXLINE(1078)			tripleThree = ( ( ::snikket::Stanza)(::Lambda_obj::find(tmp2->allTags(HX_("status",32,e7,fb,05),null()), ::Dynamic(new _hx_Closure_2()))) );
             		}
             		else {
-HXLINE(1080)			tripleThree = null();
+HXLINE(1078)			tripleThree = null();
             		}
-HXLINE(1081)		bool _hx_tmp4;
-HXDLIN(1081)		if (::hx::IsNotNull( oneTen )) {
-HXLINE(1081)			_hx_tmp4 = ::hx::IsNotNull( tripleThree );
+HXLINE(1079)		bool _hx_tmp4;
+HXDLIN(1079)		if (::hx::IsNotNull( oneTen )) {
+HXLINE(1079)			_hx_tmp4 = ::hx::IsNotNull( tripleThree );
             		}
             		else {
-HXLINE(1081)			_hx_tmp4 = false;
+HXLINE(1079)			_hx_tmp4 = false;
             		}
-HXDLIN(1081)		if (_hx_tmp4) {
-HXLINE(1082)			this->selfPing(true);
+HXDLIN(1079)		if (_hx_tmp4) {
+HXLINE(1080)			this->selfPing(true);
             		}
             	}
 
@@ -504,10 +504,10 @@ HXLINE(1082)			this->selfPing(true);
 void Channel_obj::doSync(::String lastId){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(2)
             		 ::snikket::ChatMessageBuilder _hx_run( ::snikket::ChatMessageBuilder builder, ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1103_doSync)
-HXLINE(1104)			builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1105)			builder->syncPoint = true;
-HXLINE(1106)			return builder;
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1101_doSync)
+HXLINE(1102)			builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1103)			builder->syncPoint = true;
+HXLINE(1104)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
@@ -515,140 +515,140 @@ HXLINE(1106)			return builder;
             		void _hx_run( ::Dynamic messageList){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5, ::snikket::Channel,_gthis,::Array< ::Dynamic>,pageChatMessages) HXARGC(2)
             			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            				HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1132_doSync)
-HXLINE(1132)				_gthis->client->storeMessages(pageChatMessages,resolve);
+            				HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1130_doSync)
+HXLINE(1130)				_gthis->client->storeMessages(pageChatMessages,resolve);
             			}
             			HX_END_LOCAL_FUNC2((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_7, ::snikket::Channel,_gthis,::Array< ::Dynamic>,chatMessages) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> stored){
-            				HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1134_doSync)
-HXLINE(1135)				{
-HXLINE(1135)					int _g = 0;
-HXDLIN(1135)					while((_g < stored->length)){
-HXLINE(1135)						::Array< ::Dynamic> messages = stored->__get(_g).StaticCast< ::Array< ::Dynamic> >();
-HXDLIN(1135)						_g = (_g + 1);
-HXLINE(1136)						if (::hx::IsNotNull( messages )) {
-HXLINE(1137)							int _g1 = 0;
-HXDLIN(1137)							while((_g1 < messages->length)){
-HXLINE(1137)								 ::snikket::ChatMessage message = messages->__get(_g1).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN(1137)								_g1 = (_g1 + 1);
-HXLINE(1138)								_gthis->client->notifySyncMessageHandlers(message);
-HXLINE(1139)								bool _hx_tmp;
-HXDLIN(1139)								if (::hx::IsNotNull( message )) {
-HXLINE(1139)									::String _hx_tmp1 = message->chatId();
-HXDLIN(1139)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
+            				HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1132_doSync)
+HXLINE(1133)				{
+HXLINE(1133)					int _g = 0;
+HXDLIN(1133)					while((_g < stored->length)){
+HXLINE(1133)						::Array< ::Dynamic> messages = stored->__get(_g).StaticCast< ::Array< ::Dynamic> >();
+HXDLIN(1133)						_g = (_g + 1);
+HXLINE(1134)						if (::hx::IsNotNull( messages )) {
+HXLINE(1135)							int _g1 = 0;
+HXDLIN(1135)							while((_g1 < messages->length)){
+HXLINE(1135)								 ::snikket::ChatMessage message = messages->__get(_g1).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN(1135)								_g1 = (_g1 + 1);
+HXLINE(1136)								_gthis->client->notifySyncMessageHandlers(message);
+HXLINE(1137)								bool _hx_tmp;
+HXDLIN(1137)								if (::hx::IsNotNull( message )) {
+HXLINE(1137)									::String _hx_tmp1 = message->chatId();
+HXDLIN(1137)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
             								}
             								else {
-HXLINE(1139)									_hx_tmp = false;
+HXLINE(1137)									_hx_tmp = false;
             								}
-HXDLIN(1139)								if (_hx_tmp) {
-HXLINE(1139)									chatMessages->push(message);
+HXDLIN(1137)								if (_hx_tmp) {
+HXLINE(1137)									chatMessages->push(message);
             								}
-HXLINE(1140)								if ((chatMessages->length > 1000)) {
-HXLINE(1140)									chatMessages->shift().StaticCast<  ::snikket::ChatMessage >();
+HXLINE(1138)								if ((chatMessages->length > 1000)) {
+HXLINE(1138)									chatMessages->shift().StaticCast<  ::snikket::ChatMessage >();
             								}
             							}
             						}
             					}
             				}
-HXLINE(1144)				if (_gthis->sync->hasMore()) {
-HXLINE(1145)					_gthis->sync->fetchNext();
+HXLINE(1142)				if (_gthis->sync->hasMore()) {
+HXLINE(1143)					_gthis->sync->fetchNext();
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::snikket::Channel,_gthis) HXARGC(1)
             					bool _hx_run( ::snikket::ChatMessage m){
-            						HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1163_doSync)
-HXLINE(1163)						::String m1 = m->serverId;
-HXDLIN(1163)						if ((m1 != _gthis->readUpTo())) {
-HXLINE(1163)							return !(m->isIncoming());
+            						HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1161_doSync)
+HXLINE(1161)						::String m1 = m->serverId;
+HXDLIN(1161)						if ((m1 != _gthis->readUpTo())) {
+HXLINE(1161)							return !(m->isIncoming());
             						}
             						else {
-HXLINE(1163)							return true;
+HXLINE(1161)							return true;
             						}
-HXDLIN(1163)						return false;
+HXDLIN(1161)						return false;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1147)					_gthis->inSync = true;
-HXLINE(1148)					_gthis->sync = null();
-HXLINE(1149)					 ::snikket::ChatMessage lastFromSync = chatMessages->__get((chatMessages->length - 1)).StaticCast<  ::snikket::ChatMessage >();
-HXLINE(1150)					bool _hx_tmp2;
-HXDLIN(1150)					if (::hx::IsNotNull( lastFromSync )) {
-HXLINE(1150)						if (::hx::IsNotNull( _gthis->lastMessageTimestamp() )) {
-HXLINE(1150)							::String lastFromSync1 = lastFromSync->timestamp;
-HXDLIN(1150)							_hx_tmp2 = (::Reflect_obj::compare(lastFromSync1,_gthis->lastMessageTimestamp()) > 0);
+HXLINE(1145)					_gthis->inSync = true;
+HXLINE(1146)					_gthis->sync = null();
+HXLINE(1147)					 ::snikket::ChatMessage lastFromSync = chatMessages->__get((chatMessages->length - 1)).StaticCast<  ::snikket::ChatMessage >();
+HXLINE(1148)					bool _hx_tmp2;
+HXDLIN(1148)					if (::hx::IsNotNull( lastFromSync )) {
+HXLINE(1148)						if (::hx::IsNotNull( _gthis->lastMessageTimestamp() )) {
+HXLINE(1148)							::String lastFromSync1 = lastFromSync->timestamp;
+HXDLIN(1148)							_hx_tmp2 = (::Reflect_obj::compare(lastFromSync1,_gthis->lastMessageTimestamp()) > 0);
             						}
             						else {
-HXLINE(1150)							_hx_tmp2 = true;
+HXLINE(1148)							_hx_tmp2 = true;
             						}
             					}
             					else {
-HXLINE(1150)						_hx_tmp2 = false;
+HXLINE(1148)						_hx_tmp2 = false;
             					}
-HXDLIN(1150)					if (_hx_tmp2) {
-HXLINE(1151)						_gthis->setLastMessage(lastFromSync);
-HXLINE(1152)						_gthis->client->sortChats();
+HXDLIN(1148)					if (_hx_tmp2) {
+HXLINE(1149)						_gthis->setLastMessage(lastFromSync);
+HXLINE(1150)						_gthis->client->sortChats();
             					}
-HXLINE(1154)					 ::haxe::ds::StringMap serverIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1155)					::Array< ::Dynamic> dedupedMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1156)					chatMessages->reverse();
-HXLINE(1157)					{
-HXLINE(1157)						int _g2 = 0;
-HXDLIN(1157)						while((_g2 < chatMessages->length)){
-HXLINE(1157)							 ::snikket::ChatMessage m = chatMessages->__get(_g2).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN(1157)							_g2 = (_g2 + 1);
-HXLINE(1158)							 ::Dynamic tmp = serverIds->get(m->serverId);
-HXDLIN(1158)							bool _hx_tmp3;
-HXDLIN(1158)							if (::hx::IsNotNull( tmp )) {
-HXLINE(1158)								_hx_tmp3 = ( (bool)(tmp) );
+HXLINE(1152)					 ::haxe::ds::StringMap serverIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1153)					::Array< ::Dynamic> dedupedMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1154)					chatMessages->reverse();
+HXLINE(1155)					{
+HXLINE(1155)						int _g2 = 0;
+HXDLIN(1155)						while((_g2 < chatMessages->length)){
+HXLINE(1155)							 ::snikket::ChatMessage m = chatMessages->__get(_g2).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN(1155)							_g2 = (_g2 + 1);
+HXLINE(1156)							 ::Dynamic tmp = serverIds->get(m->serverId);
+HXDLIN(1156)							bool _hx_tmp3;
+HXDLIN(1156)							if (::hx::IsNotNull( tmp )) {
+HXLINE(1156)								_hx_tmp3 = ( (bool)(tmp) );
             							}
             							else {
-HXLINE(1158)								_hx_tmp3 = false;
+HXLINE(1156)								_hx_tmp3 = false;
             							}
-HXDLIN(1158)							if (!(_hx_tmp3)) {
-HXLINE(1159)								dedupedMessages->unshift(m);
-HXLINE(1160)								serverIds->set(m->serverId,true);
+HXDLIN(1156)							if (!(_hx_tmp3)) {
+HXLINE(1157)								dedupedMessages->unshift(m);
+HXLINE(1158)								serverIds->set(m->serverId,true);
             							}
             						}
             					}
-HXLINE(1163)					int readIndex = ::Lambda_obj::findIndex(dedupedMessages, ::Dynamic(new _hx_Closure_6(_gthis)));
-HXLINE(1164)					if ((readIndex < 0)) {
-HXLINE(1165)						 ::snikket::Channel _gthis1 = _gthis;
-HXDLIN(1165)						int _hx_tmp4 = _gthis->unreadCount();
-HXDLIN(1165)						_gthis1->setUnreadCount((_hx_tmp4 + dedupedMessages->length));
+HXLINE(1161)					int readIndex = ::Lambda_obj::findIndex(dedupedMessages, ::Dynamic(new _hx_Closure_6(_gthis)));
+HXLINE(1162)					if ((readIndex < 0)) {
+HXLINE(1163)						 ::snikket::Channel _gthis1 = _gthis;
+HXDLIN(1163)						int _hx_tmp4 = _gthis->unreadCount();
+HXDLIN(1163)						_gthis1->setUnreadCount((_hx_tmp4 + dedupedMessages->length));
             					}
             					else {
-HXLINE(1167)						_gthis->setUnreadCount(((dedupedMessages->length - readIndex) - 1));
+HXLINE(1165)						_gthis->setUnreadCount(((dedupedMessages->length - readIndex) - 1));
             					}
-HXLINE(1169)					_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1167)					_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1109_doSync)
-HXLINE(1110)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1111)			::Array< ::Dynamic> pageChatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1112)			{
-HXLINE(1112)				int _g = 0;
-HXDLIN(1112)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN(1112)				while((_g < _g1->length)){
-HXLINE(1112)					 ::snikket::MessageStanza m = _g1->__get(_g).StaticCast<  ::snikket::MessageStanza >();
-HXDLIN(1112)					_g = (_g + 1);
-HXLINE(1113)					switch((int)(m->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1107_doSync)
+HXLINE(1108)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1109)			::Array< ::Dynamic> pageChatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1110)			{
+HXLINE(1110)				int _g = 0;
+HXDLIN(1110)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN(1110)				while((_g < _g1->length)){
+HXLINE(1110)					 ::snikket::MessageStanza m = _g1->__get(_g).StaticCast<  ::snikket::MessageStanza >();
+HXDLIN(1110)					_g = (_g + 1);
+HXLINE(1111)					switch((int)(m->_hx_getIndex())){
             						case (int)1: {
-HXLINE(1114)							 ::snikket::ChatMessage message = m->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN(1114)							{
-HXLINE(1115)								{
-HXLINE(1115)									int _g2 = 0;
-HXDLIN(1115)									::Array< ::Dynamic> _g3 = message->inlineHashReferences();
-HXDLIN(1115)									while((_g2 < _g3->length)){
-HXLINE(1115)										 ::snikket::Hash hash = _g3->__get(_g2).StaticCast<  ::snikket::Hash >();
-HXDLIN(1115)										_g2 = (_g2 + 1);
-HXLINE(1116)										_gthis->client->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,message->from));
+HXLINE(1112)							 ::snikket::ChatMessage message = m->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN(1112)							{
+HXLINE(1113)								{
+HXLINE(1113)									int _g2 = 0;
+HXDLIN(1113)									::Array< ::Dynamic> _g3 = message->inlineHashReferences();
+HXDLIN(1113)									while((_g2 < _g3->length)){
+HXLINE(1113)										 ::snikket::Hash hash = _g3->__get(_g2).StaticCast<  ::snikket::Hash >();
+HXDLIN(1113)										_g2 = (_g2 + 1);
+HXLINE(1114)										_gthis->client->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,message->from));
             									}
             								}
-HXLINE(1118)								pageChatMessages->push(message);
+HXLINE(1116)								pageChatMessages->push(message);
             							}
             						}
             						break;
@@ -657,18 +657,18 @@ HXLINE(1118)								pageChatMessages->push(message);
             							void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,resolve) HXARGC(1)
             								void _hx_run( ::snikket::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1125_doSync)
-HXLINE(1125)									resolve(null());
+            									HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1123_doSync)
+HXLINE(1123)									resolve(null());
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-            								HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1125_doSync)
-HXLINE(1125)								::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->moderateMessage(action), ::Dynamic(new _hx_Closure_1(resolve)),null());
+            								HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1123_doSync)
+HXLINE(1123)								::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->moderateMessage(action), ::Dynamic(new _hx_Closure_1(resolve)),null());
             							}
             							HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1123)							 ::snikket::ModerationAction action = m->_hx_getObject(0).StaticCast<  ::snikket::ModerationAction >();
-HXLINE(1124)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,action))));
+HXLINE(1121)							 ::snikket::ModerationAction action = m->_hx_getObject(0).StaticCast<  ::snikket::ModerationAction >();
+HXLINE(1122)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,action))));
             						}
             						break;
             						case (int)3: {
@@ -676,20 +676,20 @@ HXLINE(1124)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new(
             							void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,resolve) HXARGC(1)
             								void _hx_run( ::snikket::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1121_doSync)
-HXLINE(1121)									resolve(null());
+            									HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1119_doSync)
+HXLINE(1119)									resolve(null());
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-            								HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1121_doSync)
-HXLINE(1121)								::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1121)								::String _hx_tmp = _gthis->client->accountId();
-HXDLIN(1121)								::snikket::Persistence_obj::storeReaction(_gthis1,_hx_tmp,update, ::Dynamic(new _hx_Closure_3(resolve)));
+            								HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1119_doSync)
+HXLINE(1119)								::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1119)								::String _hx_tmp = _gthis->client->accountId();
+HXDLIN(1119)								::snikket::Persistence_obj::storeReaction(_gthis1,_hx_tmp,update, ::Dynamic(new _hx_Closure_3(resolve)));
             							}
             							HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1119)							 ::snikket::ReactionUpdate update = m->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
-HXLINE(1120)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,update))));
+HXLINE(1117)							 ::snikket::ReactionUpdate update = m->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
+HXLINE(1118)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,update))));
             						}
             						break;
             						default:{
@@ -697,70 +697,70 @@ HXLINE(1120)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new(
             					}
             				}
             			}
-HXLINE(1131)			promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,pageChatMessages))));
-HXLINE(1134)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_7(_gthis,chatMessages)),null());
+HXLINE(1129)			promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,pageChatMessages))));
+HXLINE(1132)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_7(_gthis,chatMessages)),null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_9, ::snikket::Channel,_gthis,::String,lastId) HXARGC(1)
             		void _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1173_doSync)
-HXLINE(1174)			_gthis->sync = null();
-HXLINE(1175)			if (::hx::IsNotNull( lastId )) {
-HXLINE(1177)				_gthis->doSync(null());
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1171_doSync)
+HXLINE(1172)			_gthis->sync = null();
+HXLINE(1173)			if (::hx::IsNotNull( lastId )) {
+HXLINE(1175)				_gthis->doSync(null());
             			}
             			else {
-HXLINE(1179)				::haxe::Log_obj::trace(HX_("SYNC failed",e2,ec,6f,fa), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1177)				::haxe::Log_obj::trace(HX_("SYNC failed",e2,ec,6f,fa), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Channel",b2,3f,68,db))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,_gthis->chatId)->init(1,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Chat.hx",f4,6b,61,18))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1179)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1177)));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1086_doSync)
-HXDLIN(1086)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1087)		if (!(this->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da)))) {
-HXLINE(1088)			this->inSync = true;
-HXLINE(1089)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1084_doSync)
+HXDLIN(1084)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1085)		if (!(this->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da)))) {
+HXLINE(1086)			this->inSync = true;
+HXLINE(1087)			return;
             		}
-HXLINE(1091)		if (::hx::IsNotNull( this->sync )) {
-HXLINE(1091)			return;
+HXLINE(1089)		if (::hx::IsNotNull( this->sync )) {
+HXLINE(1089)			return;
             		}
-HXLINE(1093)		::String threeDaysAgo = ::snikket::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-259200000.))));
-HXLINE(1099)		 ::Dynamic _hx_tmp;
-HXDLIN(1099)		if (::hx::IsNull( lastId )) {
-HXLINE(1099)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1091)		::String threeDaysAgo = ::snikket::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-259200000.))));
+HXLINE(1097)		 ::Dynamic _hx_tmp;
+HXDLIN(1097)		if (::hx::IsNull( lastId )) {
+HXLINE(1097)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("startTime",8f,45,f0,05),threeDaysAgo));
             		}
             		else {
-HXLINE(1099)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1097)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("after",1c,66,a2,1d),lastId))));
             		}
-HXLINE(1096)		this->sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,this->client,this->stream,_hx_tmp,this->chatId);
-HXLINE(1102)		this->sync->setNewestPageFirst(false);
-HXLINE(1103)		this->sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1108)		::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1109)		this->sync->onMessages( ::Dynamic(new _hx_Closure_8(_gthis,chatMessages)));
-HXLINE(1173)		this->sync->onError( ::Dynamic(new _hx_Closure_9(_gthis,lastId)));
-HXLINE(1182)		this->sync->fetchNext();
+HXLINE(1094)		this->sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,this->client,this->stream,_hx_tmp,this->chatId);
+HXLINE(1100)		this->sync->setNewestPageFirst(false);
+HXLINE(1101)		this->sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1106)		::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1107)		this->sync->onMessages( ::Dynamic(new _hx_Closure_8(_gthis,chatMessages)));
+HXLINE(1171)		this->sync->onError( ::Dynamic(new _hx_Closure_9(_gthis,lastId)));
+HXLINE(1180)		this->sync->fetchNext();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,doSync,(void))
 
 bool Channel_obj::isTrusted(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1186_isTrusted)
-HXDLIN(1186)		return (this->uiState != 2);
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1184_isTrusted)
+HXDLIN(1184)		return (this->uiState != 2);
             	}
 
 
 bool Channel_obj::isPrivate(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1190_isPrivate)
-HXDLIN(1190)		return this->disco->features->contains(HX_("muc_membersonly",41,e9,70,b7));
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1188_isPrivate)
+HXDLIN(1188)		return this->disco->features->contains(HX_("muc_membersonly",41,e9,70,b7));
             	}
 
 
@@ -769,154 +769,154 @@ HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,isPrivate,return )
 void Channel_obj::refreshDisco( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis, ::snikket::queries::DiscoInfoGet,discoGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1196_refreshDisco)
-HXLINE(1197)			if (::hx::IsNotNull( discoGet->getResult() )) {
-HXLINE(1198)				bool setupNotifications;
-HXDLIN(1198)				if (::hx::IsNull( _gthis->disco )) {
-HXLINE(1198)					setupNotifications = ::hx::IsNull( _gthis->notificationSettings );
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1194_refreshDisco)
+HXLINE(1195)			if (::hx::IsNotNull( discoGet->getResult() )) {
+HXLINE(1196)				bool setupNotifications;
+HXDLIN(1196)				if (::hx::IsNull( _gthis->disco )) {
+HXLINE(1196)					setupNotifications = ::hx::IsNull( _gthis->notificationSettings );
             				}
             				else {
-HXLINE(1198)					setupNotifications = false;
+HXLINE(1196)					setupNotifications = false;
             				}
-HXLINE(1199)				_gthis->disco = discoGet->getResult();
-HXLINE(1200)				bool _hx_tmp;
-HXDLIN(1200)				if (setupNotifications) {
-HXLINE(1200)					_hx_tmp = !(_gthis->isPrivate());
+HXLINE(1197)				_gthis->disco = discoGet->getResult();
+HXLINE(1198)				bool _hx_tmp;
+HXDLIN(1198)				if (setupNotifications) {
+HXLINE(1198)					_hx_tmp = !(_gthis->isPrivate());
             				}
             				else {
-HXLINE(1200)					_hx_tmp = false;
+HXLINE(1198)					_hx_tmp = false;
             				}
-HXDLIN(1200)				if (_hx_tmp) {
-HXLINE(1200)					_gthis->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN(1198)				if (_hx_tmp) {
+HXLINE(1198)					_gthis->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("mention",ea,9e,bf,b9),true)
             						->setFixed(1,HX_("reply",2a,09,c6,e6),false));
             				}
-HXLINE(1201)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1201)				::snikket::Persistence_obj::storeCaps(_gthis1,discoGet->getResult());
-HXLINE(1202)				::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1202)				::String _hx_tmp1 = _gthis->client->accountId();
-HXDLIN(1202)				::snikket::Persistence_obj::storeChats(_gthis2,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis));
+HXLINE(1199)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1199)				::snikket::Persistence_obj::storeCaps(_gthis1,discoGet->getResult());
+HXLINE(1200)				::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(1200)				::String _hx_tmp1 = _gthis->client->accountId();
+HXDLIN(1200)				::snikket::Persistence_obj::storeChats(_gthis2,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis));
             			}
-HXLINE(1204)			if (::hx::IsNotNull( callback )) {
-HXLINE(1204)				callback();
+HXLINE(1202)			if (::hx::IsNotNull( callback )) {
+HXLINE(1202)				callback();
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1194_refreshDisco)
-HXDLIN(1194)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1195)		 ::snikket::queries::DiscoInfoGet discoGet =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,this->chatId,null());
-HXLINE(1196)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,discoGet,callback)));
-HXLINE(1206)		this->client->sendQuery(discoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1192_refreshDisco)
+HXDLIN(1192)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1193)		 ::snikket::queries::DiscoInfoGet discoGet =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,this->chatId,null());
+HXLINE(1194)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,discoGet,callback)));
+HXLINE(1204)		this->client->sendQuery(discoGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,refreshDisco,(void))
 
 ::String Channel_obj::preview(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1209_preview)
-HXLINE(1210)		if (::hx::IsNull( this->lastMessage )) {
-HXLINE(1210)			return this->super::preview();
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1207_preview)
+HXLINE(1208)		if (::hx::IsNull( this->lastMessage )) {
+HXLINE(1208)			return this->super::preview();
             		}
-HXLINE(1212)		::String _hx_tmp = (this->getParticipantDetails(this->lastMessage->senderId)->displayName + HX_(": ",a6,32,00,00));
-HXDLIN(1212)		return (_hx_tmp + this->super::preview());
+HXLINE(1210)		::String _hx_tmp = (this->getParticipantDetails(this->lastMessage->senderId)->displayName + HX_(": ",a6,32,00,00));
+HXDLIN(1210)		return (_hx_tmp + this->super::preview());
             	}
 
 
 bool Channel_obj::livePresence(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1216_livePresence)
-HXLINE(1217)		if (this->forceLive) {
-HXLINE(1217)			return true;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1214_livePresence)
+HXLINE(1215)		if (this->forceLive) {
+HXLINE(1215)			return true;
             		}
-HXLINE(1219)		return ::hx::IsNotNull( this->_nickInUse );
+HXLINE(1217)		return ::hx::IsNotNull( this->_nickInUse );
             	}
 
 
 bool Channel_obj::syncing(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1223_syncing)
-HXDLIN(1223)		if (this->inSync) {
-HXDLIN(1223)			return !(this->livePresence());
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1221_syncing)
+HXDLIN(1221)		if (this->inSync) {
+HXDLIN(1221)			return !(this->livePresence());
             		}
             		else {
-HXDLIN(1223)			return true;
+HXDLIN(1221)			return true;
             		}
-HXDLIN(1223)		return false;
+HXDLIN(1221)		return false;
             	}
 
 
 bool Channel_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1227_canAudioCall)
-HXDLIN(1227)		 ::snikket::Caps tmp = this->disco;
-HXDLIN(1227)		::Array< ::String > tmp1;
-HXDLIN(1227)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1227)			tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1225_canAudioCall)
+HXDLIN(1225)		 ::snikket::Caps tmp = this->disco;
+HXDLIN(1225)		::Array< ::String > tmp1;
+HXDLIN(1225)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1225)			tmp1 = tmp->features;
             		}
             		else {
-HXDLIN(1227)			tmp1 = null();
+HXDLIN(1225)			tmp1 = null();
             		}
-HXDLIN(1227)		 ::Dynamic tmp2;
-HXDLIN(1227)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1227)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+HXDLIN(1225)		 ::Dynamic tmp2;
+HXDLIN(1225)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1225)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             		}
             		else {
-HXDLIN(1227)			tmp2 = null();
+HXDLIN(1225)			tmp2 = null();
             		}
-HXDLIN(1227)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1227)			return ( (bool)(tmp2) );
+HXDLIN(1225)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1225)			return ( (bool)(tmp2) );
             		}
             		else {
-HXDLIN(1227)			return false;
+HXDLIN(1225)			return false;
             		}
-HXDLIN(1227)		return false;
+HXDLIN(1225)		return false;
             	}
 
 
 bool Channel_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1231_canVideoCall)
-HXDLIN(1231)		 ::snikket::Caps tmp = this->disco;
-HXDLIN(1231)		::Array< ::String > tmp1;
-HXDLIN(1231)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1231)			tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1229_canVideoCall)
+HXDLIN(1229)		 ::snikket::Caps tmp = this->disco;
+HXDLIN(1229)		::Array< ::String > tmp1;
+HXDLIN(1229)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1229)			tmp1 = tmp->features;
             		}
             		else {
-HXDLIN(1231)			tmp1 = null();
+HXDLIN(1229)			tmp1 = null();
             		}
-HXDLIN(1231)		 ::Dynamic tmp2;
-HXDLIN(1231)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1231)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+HXDLIN(1229)		 ::Dynamic tmp2;
+HXDLIN(1229)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1229)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             		}
             		else {
-HXDLIN(1231)			tmp2 = null();
+HXDLIN(1229)			tmp2 = null();
             		}
-HXDLIN(1231)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1231)			return ( (bool)(tmp2) );
+HXDLIN(1229)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1229)			return ( (bool)(tmp2) );
             		}
             		else {
-HXDLIN(1231)			return false;
+HXDLIN(1229)			return false;
             		}
-HXDLIN(1231)		return false;
+HXDLIN(1229)		return false;
             	}
 
 
 ::String Channel_obj::nickInUse(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1235_nickInUse)
-HXDLIN(1235)		::String tmp = this->_nickInUse;
-HXDLIN(1235)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1235)			return tmp;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1233_nickInUse)
+HXDLIN(1233)		::String tmp = this->_nickInUse;
+HXDLIN(1233)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1233)			return tmp;
             		}
             		else {
-HXDLIN(1235)			return this->client->displayName();
+HXDLIN(1233)			return this->client->displayName();
             		}
-HXDLIN(1235)		return null();
+HXDLIN(1233)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,nickInUse,return )
 
  ::snikket::JID Channel_obj::getFullJid(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1239_getFullJid)
-HXDLIN(1239)		 ::snikket::JID _hx_tmp = ::snikket::JID_obj::parse(this->chatId);
-HXDLIN(1239)		return _hx_tmp->withResource(this->nickInUse());
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1237_getFullJid)
+HXDLIN(1237)		 ::snikket::JID _hx_tmp = ::snikket::JID_obj::parse(this->chatId);
+HXDLIN(1237)		return _hx_tmp->withResource(this->nickInUse());
             	}
 
 
@@ -925,207 +925,207 @@ HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,getFullJid,return )
 ::Array< ::String > Channel_obj::getParticipants(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1245_getParticipants)
-HXLINE(1245)			return _gthis->presence->keys();
+            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1243_getParticipants)
+HXLINE(1243)			return _gthis->presence->keys();
             		}
             		HX_END_LOCAL_FUNC0(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run(::String resource){
-            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1245_getParticipants)
-HXLINE(1245)			return ::hx::IsNotNull( resource );
+            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1243_getParticipants)
+HXLINE(1243)			return ::hx::IsNotNull( resource );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1243_getParticipants)
-HXDLIN(1243)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1244)		 ::snikket::JID jid = ::snikket::JID_obj::parse(this->chatId);
-HXLINE(1245)		::Array< ::String > _this = ::Lambda_obj::filter( ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1241_getParticipants)
+HXDLIN(1241)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1242)		 ::snikket::JID jid = ::snikket::JID_obj::parse(this->chatId);
+HXLINE(1243)		::Array< ::String > _this = ::Lambda_obj::filter( ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_gthis)))), ::Dynamic(new _hx_Closure_1()));
-HXDLIN(1245)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1245)		{
-HXLINE(1245)			int _g = 0;
-HXDLIN(1245)			int _g1 = _this->length;
-HXDLIN(1245)			while((_g < _g1)){
-HXLINE(1245)				_g = (_g + 1);
-HXDLIN(1245)				int i = (_g - 1);
-HXDLIN(1245)				{
-HXLINE(1245)					::String resource = ( (::String)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN(1245)					::String inValue =  ::snikket::JID_obj::__alloc( HX_CTX ,jid->node,jid->domain,resource)->asString();
-HXDLIN(1245)					result->__unsafe_set(i,inValue);
+HXDLIN(1243)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1243)		{
+HXLINE(1243)			int _g = 0;
+HXDLIN(1243)			int _g1 = _this->length;
+HXDLIN(1243)			while((_g < _g1)){
+HXLINE(1243)				_g = (_g + 1);
+HXDLIN(1243)				int i = (_g - 1);
+HXDLIN(1243)				{
+HXLINE(1243)					::String resource = ( (::String)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN(1243)					::String inValue =  ::snikket::JID_obj::__alloc( HX_CTX ,jid->node,jid->domain,resource)->asString();
+HXDLIN(1243)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN(1245)		return result;
+HXDLIN(1243)		return result;
             	}
 
 
  ::snikket::Participant Channel_obj::getParticipantDetails(::String participantId){
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1250_getParticipantDetails)
-HXDLIN(1250)		if ((participantId == this->getFullJid()->asString())) {
-HXLINE(1251)			 ::snikket::Client chat = this->client;
-HXDLIN(1251)			 ::snikket::DirectChat chat1 = chat->getDirectChat(this->client->accountId(),false);
-HXLINE(1252)			::String _hx_tmp = this->client->displayName();
-HXDLIN(1252)			::String _hx_tmp1 = chat1->getPhoto();
-HXDLIN(1252)			return  ::snikket::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,chat1->getPlaceholder(),true);
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1248_getParticipantDetails)
+HXDLIN(1248)		if ((participantId == this->getFullJid()->asString())) {
+HXLINE(1249)			 ::snikket::Client chat = this->client;
+HXDLIN(1249)			 ::snikket::DirectChat chat1 = chat->getDirectChat(this->client->accountId(),false);
+HXLINE(1250)			::String _hx_tmp = this->client->displayName();
+HXDLIN(1250)			::String _hx_tmp1 = chat1->getPhoto();
+HXDLIN(1250)			return  ::snikket::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,chat1->getPlaceholder(),true);
             		}
             		else {
-HXLINE(1254)			::String nick = ::snikket::JID_obj::parse(participantId)->resource;
-HXLINE(1255)			::String placeholderUri;
-HXDLIN(1255)			if (::hx::IsNull( nick )) {
-HXLINE(1255)				placeholderUri = HX_(" ",20,00,00,00);
+HXLINE(1252)			::String nick = ::snikket::JID_obj::parse(participantId)->resource;
+HXLINE(1253)			::String placeholderUri;
+HXDLIN(1253)			if (::hx::IsNull( nick )) {
+HXLINE(1253)				placeholderUri = HX_(" ",20,00,00,00);
             			}
             			else {
-HXLINE(1255)				placeholderUri = nick.charAt(0);
+HXLINE(1253)				placeholderUri = nick.charAt(0);
             			}
-HXDLIN(1255)			::String placeholderUri1 = ::snikket::Color_obj::defaultPhoto(participantId,placeholderUri);
-HXLINE(1256)			return  ::snikket::Participant_obj::__alloc( HX_CTX ,nick,null(),placeholderUri1,false);
+HXDLIN(1253)			::String placeholderUri1 = ::snikket::Color_obj::defaultPhoto(participantId,placeholderUri);
+HXLINE(1254)			return  ::snikket::Participant_obj::__alloc( HX_CTX ,nick,null(),placeholderUri1,false);
             		}
-HXLINE(1250)		return null();
+HXLINE(1248)		return null();
             	}
 
 
 void Channel_obj::getMessagesBefore(::String beforeId,::String beforeTime, ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::snikket::Channel,_gthis,::String,beforeId, ::Dynamic,handler) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1263_getMessagesBefore)
-HXLINE(1263)			if ((messages->length > 0)) {
-HXLINE(1264)				handler(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1261_getMessagesBefore)
+HXLINE(1261)			if ((messages->length > 0)) {
+HXLINE(1262)				handler(messages);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(2)
             				 ::snikket::ChatMessageBuilder _hx_run( ::snikket::ChatMessageBuilder builder, ::snikket::Stanza stanza){
-            					HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1269_getMessagesBefore)
-HXLINE(1270)					builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1271)					builder->syncPoint = false;
-HXLINE(1272)					return builder;
+            					HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1267_getMessagesBefore)
+HXLINE(1268)					builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1269)					builder->syncPoint = false;
+HXLINE(1270)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1266)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(1267)				if (::hx::IsNotNull( beforeId )) {
-HXLINE(1267)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1264)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(1265)				if (::hx::IsNotNull( beforeId )) {
+HXLINE(1265)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("before",7f,54,32,9a),beforeId)),::hx::paccDynamic);
             				}
-HXLINE(1268)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
-HXLINE(1269)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1274)				_gthis->fetchFromSync(sync,handler);
+HXLINE(1266)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
+HXLINE(1267)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1272)				_gthis->fetchFromSync(sync,handler);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1261_getMessagesBefore)
-HXDLIN(1261)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1262)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1262)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN(1262)		::snikket::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime, ::Dynamic(new _hx_Closure_1(_gthis,beforeId,handler)));
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1259_getMessagesBefore)
+HXDLIN(1259)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1260)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1260)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN(1260)		::snikket::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime, ::Dynamic(new _hx_Closure_1(_gthis,beforeId,handler)));
             	}
 
 
 void Channel_obj::getMessagesAfter(::String afterId,::String afterTime, ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::snikket::Channel,_gthis,::String,afterId, ::Dynamic,handler) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1286_getMessagesAfter)
-HXLINE(1286)			if ((messages->length > 0)) {
-HXLINE(1287)				handler(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1284_getMessagesAfter)
+HXLINE(1284)			if ((messages->length > 0)) {
+HXLINE(1285)				handler(messages);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(2)
             				 ::snikket::ChatMessageBuilder _hx_run( ::snikket::ChatMessageBuilder builder, ::snikket::Stanza stanza){
-            					HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1292_getMessagesAfter)
-HXLINE(1293)					builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1294)					builder->syncPoint = false;
-HXLINE(1295)					return builder;
+            					HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1290_getMessagesAfter)
+HXLINE(1291)					builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1292)					builder->syncPoint = false;
+HXLINE(1293)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1289)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(1290)				if (::hx::IsNotNull( afterId )) {
-HXLINE(1290)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1287)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(1288)				if (::hx::IsNotNull( afterId )) {
+HXLINE(1288)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("after",1c,66,a2,1d),afterId)),::hx::paccDynamic);
             				}
-HXLINE(1291)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
-HXLINE(1292)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1297)				_gthis->fetchFromSync(sync,handler);
+HXLINE(1289)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
+HXLINE(1290)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1295)				_gthis->fetchFromSync(sync,handler);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1280_getMessagesAfter)
-HXDLIN(1280)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1281)		bool _hx_tmp;
-HXDLIN(1281)		::String afterId1 = afterId;
-HXDLIN(1281)		if ((afterId1 == this->lastMessageId())) {
-HXLINE(1281)			_hx_tmp = !(this->syncing());
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1278_getMessagesAfter)
+HXDLIN(1278)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1279)		bool _hx_tmp;
+HXDLIN(1279)		::String afterId1 = afterId;
+HXDLIN(1279)		if ((afterId1 == this->lastMessageId())) {
+HXLINE(1279)			_hx_tmp = !(this->syncing());
             		}
             		else {
-HXLINE(1281)			_hx_tmp = false;
+HXLINE(1279)			_hx_tmp = false;
             		}
-HXDLIN(1281)		if (_hx_tmp) {
-HXLINE(1282)			handler(::Array_obj< ::Dynamic>::__new(0));
-HXLINE(1283)			return;
+HXDLIN(1279)		if (_hx_tmp) {
+HXLINE(1280)			handler(::Array_obj< ::Dynamic>::__new(0));
+HXLINE(1281)			return;
             		}
-HXLINE(1285)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1285)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1285)		::snikket::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime, ::Dynamic(new _hx_Closure_1(_gthis,afterId,handler)));
+HXLINE(1283)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1283)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1283)		::snikket::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime, ::Dynamic(new _hx_Closure_1(_gthis,afterId,handler)));
             	}
 
 
 void Channel_obj::getMessagesAround(::String aroundId,::String aroundTime, ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1305_getMessagesAround)
-HXLINE(1305)			if ((messages->length > 0)) {
-HXLINE(1306)				handler(messages);
+            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1303_getMessagesAround)
+HXLINE(1303)			if ((messages->length > 0)) {
+HXLINE(1304)				handler(messages);
             			}
             			else {
-HXLINE(1309)				handler(::Array_obj< ::Dynamic>::__new(0));
+HXLINE(1307)				handler(::Array_obj< ::Dynamic>::__new(0));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1304_getMessagesAround)
-HXDLIN(1304)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1304)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN(1304)		::snikket::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime, ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1302_getMessagesAround)
+HXDLIN(1302)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1302)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN(1302)		::snikket::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime, ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
  ::snikket::ChatMessageBuilder Channel_obj::prepareIncomingMessage( ::snikket::ChatMessageBuilder message, ::snikket::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1315_prepareIncomingMessage)
-HXLINE(1316)		message->syncPoint = !(this->syncing());
-HXLINE(1317)		if ((message->type == 0)) {
-HXLINE(1317)			message->type = 3;
-            		}
-HXLINE(1318)		message->senderId = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE(1319)		::String _hx_tmp = message->get_senderId();
-HXDLIN(1319)		if ((_hx_tmp == this->getFullJid()->asString())) {
-HXLINE(1320)			message->recipients = message->replyTo;
-HXLINE(1321)			message->direction = 1;
-            		}
-HXLINE(1323)		return message;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1313_prepareIncomingMessage)
+HXLINE(1314)		message->syncPoint = !(this->syncing());
+HXLINE(1315)		if ((message->type == 0)) {
+HXLINE(1315)			message->type = 3;
+            		}
+HXLINE(1316)		message->senderId = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE(1317)		::String _hx_tmp = message->get_senderId();
+HXDLIN(1317)		if ((_hx_tmp == this->getFullJid()->asString())) {
+HXLINE(1318)			message->recipients = message->replyTo;
+HXLINE(1319)			message->direction = 1;
+            		}
+HXLINE(1321)		return message;
             	}
 
 
  ::snikket::ChatMessageBuilder Channel_obj::prepareOutgoingMessage( ::snikket::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1326_prepareOutgoingMessage)
-HXLINE(1327)		message->type = 2;
-HXLINE(1328)		::String tmp = message->timestamp;
-HXDLIN(1328)		::String _hx_tmp;
-HXDLIN(1328)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1328)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1324_prepareOutgoingMessage)
+HXLINE(1325)		message->type = 2;
+HXLINE(1326)		::String tmp = message->timestamp;
+HXDLIN(1326)		::String _hx_tmp;
+HXDLIN(1326)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1326)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE(1328)			_hx_tmp = ::snikket::Date_obj::format(::Date_obj::now());
-            		}
-HXDLIN(1328)		message->timestamp = _hx_tmp;
-HXLINE(1329)		message->direction = 1;
-HXLINE(1330)		message->from = this->client->jid;
-HXLINE(1331)		message->sender = this->getFullJid();
-HXLINE(1332)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
-HXLINE(1333)		message->to = ::snikket::JID_obj::parse(this->chatId);
-HXLINE(1334)		message->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->to);
-HXLINE(1335)		return message;
+HXLINE(1326)			_hx_tmp = ::snikket::Date_obj::format(::Date_obj::now());
+            		}
+HXDLIN(1326)		message->timestamp = _hx_tmp;
+HXLINE(1327)		message->direction = 1;
+HXLINE(1328)		message->from = this->client->jid;
+HXLINE(1329)		message->sender = this->getFullJid();
+HXLINE(1330)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
+HXLINE(1331)		message->to = ::snikket::JID_obj::parse(this->chatId);
+HXLINE(1332)		message->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->to);
+HXLINE(1333)		return message;
             	}
 
 
@@ -1134,123 +1134,123 @@ HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,prepareOutgoingMessage,return )
 void Channel_obj::correctMessage(::String localId, ::snikket::ChatMessageBuilder message){
             		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis,::Array< ::Dynamic>,message1,::String,localId,::String,toSendId) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> corrected){
-            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1344_correctMessage)
-HXLINE(1345)			::Array< ::Dynamic> _hx_tmp;
-HXDLIN(1345)			if ((corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->localId == localId)) {
-HXLINE(1345)				_hx_tmp = corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions;
+            			HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1342_correctMessage)
+HXLINE(1343)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(1343)			if ((corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->localId == localId)) {
+HXLINE(1343)				_hx_tmp = corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions;
             			}
             			else {
-HXLINE(1345)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build());
+HXLINE(1343)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build());
             			}
-HXDLIN(1345)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = _hx_tmp;
-HXLINE(1346)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = toSendId;
-HXLINE(1347)			 ::snikket::Client _gthis1 = _gthis->client;
-HXDLIN(1347)			_gthis1->sendStanza(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza());
-HXLINE(1348)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >(),1);
-HXLINE(1349)			 ::snikket::ChatMessage tmp = _gthis->lastMessage;
-HXDLIN(1349)			::String _hx_tmp1;
-HXDLIN(1349)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1349)				_hx_tmp1 = tmp->localId;
+HXDLIN(1343)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = _hx_tmp;
+HXLINE(1344)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = toSendId;
+HXLINE(1345)			 ::snikket::Client _gthis1 = _gthis->client;
+HXDLIN(1345)			_gthis1->sendStanza(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza());
+HXLINE(1346)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >(),1);
+HXLINE(1347)			 ::snikket::ChatMessage tmp = _gthis->lastMessage;
+HXDLIN(1347)			::String _hx_tmp1;
+HXDLIN(1347)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1347)				_hx_tmp1 = tmp->localId;
             			}
             			else {
-HXLINE(1349)				_hx_tmp1 = null();
+HXLINE(1347)				_hx_tmp1 = null();
             			}
-HXDLIN(1349)			if ((localId == _hx_tmp1)) {
-HXLINE(1350)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >());
-HXLINE(1351)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1347)			if ((localId == _hx_tmp1)) {
+HXLINE(1348)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >());
+HXLINE(1349)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1339_correctMessage)
-HXDLIN(1339)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(1339)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1340)		::String toSendId = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId;
-HXLINE(1341)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >());
-HXLINE(1342)		 ::snikket::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build();
-HXDLIN(1342)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
-HXLINE(1343)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = localId;
-HXLINE(1344)		 ::snikket::Client _hx_tmp1 = this->client;
-HXDLIN(1344)		_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId)));
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1337_correctMessage)
+HXDLIN(1337)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(1337)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1338)		::String toSendId = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId;
+HXLINE(1339)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >());
+HXLINE(1340)		 ::snikket::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build();
+HXDLIN(1340)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
+HXLINE(1341)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = localId;
+HXLINE(1342)		 ::snikket::Client _hx_tmp1 = this->client;
+HXDLIN(1342)		_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId)));
             	}
 
 
 void Channel_obj::sendMessage( ::snikket::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1357_sendMessage)
-HXDLIN(1357)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1358)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1358)			this->typingTimer->stop();
-            		}
-HXLINE(1359)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
-HXLINE(1360)		message = this->prepareOutgoingMessage(message);
-HXLINE(1361)		 ::snikket::Stanza stanza = message->build()->asStanza();
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1355_sendMessage)
+HXDLIN(1355)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1356)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1356)			this->typingTimer->stop();
+            		}
+HXLINE(1357)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
+HXLINE(1358)		message = this->prepareOutgoingMessage(message);
+HXLINE(1359)		 ::snikket::Stanza stanza = message->build()->asStanza();
+HXLINE(1361)		{
+HXLINE(1361)			 ::Dynamic this1 = stanza->attr;
+HXDLIN(1361)			::String value = this->getFullJid()->asString();
+HXDLIN(1361)			::Reflect_obj::setField(this1,HX_("from",6a,a5,c2,43),value);
+            		}
+HXLINE(1362)		 ::snikket::MessageStanza fromStanza = ::snikket::Message_obj::fromStanza(stanza,this->client->jid,null())->parsed;
 HXLINE(1363)		{
-HXLINE(1363)			 ::Dynamic this1 = stanza->attr;
-HXDLIN(1363)			::String value = this->getFullJid()->asString();
-HXDLIN(1363)			::Reflect_obj::setField(this1,HX_("from",6a,a5,c2,43),value);
-            		}
-HXLINE(1364)		 ::snikket::MessageStanza fromStanza = ::snikket::Message_obj::fromStanza(stanza,this->client->jid,null())->parsed;
-HXLINE(1365)		{
-HXLINE(1365)			 ::Dynamic this2 = stanza->attr;
-HXDLIN(1365)			::String value1 = this->client->jid->asString();
-HXDLIN(1365)			::Reflect_obj::setField(this2,HX_("from",6a,a5,c2,43),value1);
+HXLINE(1363)			 ::Dynamic this2 = stanza->attr;
+HXDLIN(1363)			::String value1 = this->client->jid->asString();
+HXDLIN(1363)			::Reflect_obj::setField(this2,HX_("from",6a,a5,c2,43),value1);
             		}
-HXLINE(1366)		switch((int)(fromStanza->_hx_getIndex())){
+HXLINE(1364)		switch((int)(fromStanza->_hx_getIndex())){
             			case (int)1: {
-HXLINE(1367)				 ::snikket::ChatMessage _g = fromStanza->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN(1367)				{
+HXLINE(1365)				 ::snikket::ChatMessage _g = fromStanza->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN(1365)				{
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis, ::snikket::Stanza,stanza) HXARGC(1)
             					void _hx_run(::Array< ::Dynamic> stored){
-            						HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1373_sendMessage)
-HXLINE(1374)						_gthis->client->sendStanza(stanza);
-HXLINE(1375)						_gthis->setLastMessage(stored->__get(0).StaticCast<  ::snikket::ChatMessage >());
-HXLINE(1376)						int _hx_tmp;
-HXDLIN(1376)						if ((stored->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->length > 1)) {
-HXLINE(1376)							_hx_tmp = 1;
+            						HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1371_sendMessage)
+HXLINE(1372)						_gthis->client->sendStanza(stanza);
+HXLINE(1373)						_gthis->setLastMessage(stored->__get(0).StaticCast<  ::snikket::ChatMessage >());
+HXLINE(1374)						int _hx_tmp;
+HXDLIN(1374)						if ((stored->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->length > 1)) {
+HXLINE(1374)							_hx_tmp = 1;
             						}
             						else {
-HXLINE(1376)							_hx_tmp = 0;
+HXLINE(1374)							_hx_tmp = 0;
             						}
-HXDLIN(1376)						_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::snikket::ChatMessage >(),_hx_tmp);
-HXLINE(1377)						_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1374)						_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::snikket::ChatMessage >(),_hx_tmp);
+HXLINE(1375)						_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1368)					if (::hx::IsNotNull( this->isActive )) {
-HXLINE(1369)						this->isActive = true;
-HXLINE(1370)						this->activeThread = message->threadId;
-HXLINE(1371)						stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1366)					if (::hx::IsNotNull( this->isActive )) {
+HXLINE(1367)						this->isActive = true;
+HXLINE(1368)						this->activeThread = message->threadId;
+HXLINE(1369)						stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
             							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
             					}
-HXLINE(1373)					 ::snikket::Client _hx_tmp = this->client;
-HXDLIN(1373)					_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message->build()), ::Dynamic(new _hx_Closure_0(_gthis,stanza)));
+HXLINE(1371)					 ::snikket::Client _hx_tmp = this->client;
+HXDLIN(1371)					_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message->build()), ::Dynamic(new _hx_Closure_0(_gthis,stanza)));
             				}
             			}
             			break;
             			case (int)3: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::Channel,_gthis, ::snikket::Stanza,stanza) HXARGC(1)
             				void _hx_run( ::snikket::ChatMessage stored){
-            					HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1380_sendMessage)
-HXLINE(1381)					_gthis->client->sendStanza(stanza);
-HXLINE(1382)					if (::hx::IsNotNull( stored )) {
-HXLINE(1382)						_gthis->client->notifyMessageHandlers(stored,2);
+            					HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1378_sendMessage)
+HXLINE(1379)					_gthis->client->sendStanza(stanza);
+HXLINE(1380)					if (::hx::IsNotNull( stored )) {
+HXLINE(1380)						_gthis->client->notifyMessageHandlers(stored,2);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1379)				 ::snikket::ReactionUpdate update = fromStanza->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
-HXLINE(1380)				::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1380)				::snikket::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),update, ::Dynamic(new _hx_Closure_1(_gthis,stanza)));
+HXLINE(1377)				 ::snikket::ReactionUpdate update = fromStanza->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
+HXLINE(1378)				::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1378)				::snikket::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),update, ::Dynamic(new _hx_Closure_1(_gthis,stanza)));
             			}
             			break;
             			default:{
-HXLINE(1385)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1383)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Channel",b2,3f,68,db))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,fromStanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("sendMessage",5f,89,1d,24))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Chat.hx",f4,6b,61,18))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1385)));
-HXLINE(1386)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1383)));
+HXLINE(1384)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
             			}
             		}
             	}
@@ -1259,143 +1259,143 @@ HXLINE(1386)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0
 void Channel_obj::removeReaction( ::snikket::ChatMessage m, ::snikket::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::Channel,_gthis, ::snikket::ReactionUpdate,update4) HXARGC(1)
             		void _hx_run( ::snikket::ChatMessage stored){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1411_removeReaction)
-HXLINE(1412)			 ::snikket::Stanza stanza = update4->asStanza();
-HXLINE(1413)			{
-HXLINE(1413)				::String value = _gthis->chatId;
-HXDLIN(1413)				::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),value);
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1409_removeReaction)
+HXLINE(1410)			 ::snikket::Stanza stanza = update4->asStanza();
+HXLINE(1411)			{
+HXLINE(1411)				::String value = _gthis->chatId;
+HXDLIN(1411)				::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),value);
             			}
-HXLINE(1414)			_gthis->client->sendStanza(stanza);
-HXLINE(1415)			if (::hx::IsNotNull( stored )) {
-HXLINE(1415)				_gthis->client->notifyMessageHandlers(stored,2);
+HXLINE(1412)			_gthis->client->sendStanza(stanza);
+HXLINE(1413)			if (::hx::IsNotNull( stored )) {
+HXLINE(1413)				_gthis->client->notifyMessageHandlers(stored,2);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1391_removeReaction)
-HXDLIN(1391)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1392)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::snikket::CustomEmojiReaction >())) {
-HXLINE(1393)			if (::hx::IsNull( reaction->envelopeId )) {
-HXLINE(1393)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1389_removeReaction)
+HXDLIN(1389)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1390)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::snikket::CustomEmojiReaction >())) {
+HXLINE(1391)			if (::hx::IsNull( reaction->envelopeId )) {
+HXLINE(1391)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
             			}
-HXLINE(1394)			 ::snikket::ChatMessageBuilder correct = m->reply();
-HXLINE(1395)			correct->localId = ::snikket::ID_obj::_hx_long();
-HXLINE(1396)			correct->setHtml(HX_("",00,00,00,00));
-HXLINE(1397)			correct->text = null();
-HXLINE(1398)			this->correctMessage(reaction->envelopeId,correct);
-HXLINE(1399)			return;
-            		}
-HXLINE(1403)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1404)		{
-HXLINE(1404)			::Dynamic map = m->reactions;
-HXDLIN(1404)			::Dynamic _g_map = map;
-HXDLIN(1404)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN(1404)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1404)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1404)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN(1404)				::String _g_key = key;
-HXDLIN(1404)				::String areaction = _g_key;
-HXDLIN(1404)				::Array< ::Dynamic> reacts = _g_value;
-HXLINE(1405)				if ((areaction != reaction->key)) {
+HXLINE(1392)			 ::snikket::ChatMessageBuilder correct = m->reply();
+HXLINE(1393)			correct->localId = ::snikket::ID_obj::_hx_long();
+HXLINE(1394)			correct->setHtml(HX_("",00,00,00,00));
+HXLINE(1395)			correct->text = null();
+HXLINE(1396)			this->correctMessage(reaction->envelopeId,correct);
+HXLINE(1397)			return;
+            		}
+HXLINE(1401)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1402)		{
+HXLINE(1402)			::Dynamic map = m->reactions;
+HXDLIN(1402)			::Dynamic _g_map = map;
+HXDLIN(1402)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1402)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1402)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1402)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN(1402)				::String _g_key = key;
+HXDLIN(1402)				::String areaction = _g_key;
+HXDLIN(1402)				::Array< ::Dynamic> reacts = _g_value;
+HXLINE(1403)				if ((areaction != reaction->key)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(1)
             					bool _hx_run( ::snikket::Reaction r){
-            						HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1406_removeReaction)
-HXLINE(1406)						::String r1 = r->senderId;
-HXDLIN(1406)						return (r1 == _gthis->getFullJid()->asString());
+            						HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1404_removeReaction)
+HXLINE(1404)						::String r1 = r->senderId;
+HXDLIN(1404)						return (r1 == _gthis->getFullJid()->asString());
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1406)					 ::snikket::Reaction react = ( ( ::snikket::Reaction)(::Lambda_obj::find(reacts, ::Dynamic(new _hx_Closure_0(_gthis)))) );
-HXLINE(1407)					bool _hx_tmp;
-HXDLIN(1407)					if (::hx::IsNotNull( react )) {
-HXLINE(1407)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::snikket::CustomEmojiReaction >()));
+HXLINE(1404)					 ::snikket::Reaction react = ( ( ::snikket::Reaction)(::Lambda_obj::find(reacts, ::Dynamic(new _hx_Closure_0(_gthis)))) );
+HXLINE(1405)					bool _hx_tmp;
+HXDLIN(1405)					if (::hx::IsNotNull( react )) {
+HXLINE(1405)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::snikket::CustomEmojiReaction >()));
             					}
             					else {
-HXLINE(1407)						_hx_tmp = false;
+HXLINE(1405)						_hx_tmp = false;
             					}
-HXDLIN(1407)					if (_hx_tmp) {
-HXLINE(1407)						reactions->push(react);
+HXDLIN(1405)					if (_hx_tmp) {
+HXLINE(1405)						reactions->push(react);
             					}
             				}
             			}
             		}
-HXLINE(1410)		::String update = ::snikket::ID_obj::_hx_long();
-HXDLIN(1410)		::String m1 = m->serverId;
-HXDLIN(1410)		::String update1 = m->chatId();
-HXDLIN(1410)		::String update2 = m->chatId();
-HXDLIN(1410)		::String update3 = this->getFullJid()->asString();
-HXDLIN(1410)		 ::snikket::ReactionUpdate update4 =  ::snikket::ReactionUpdate_obj::__alloc( HX_CTX ,update,m1,update1,null(),update2,update3,::snikket::Date_obj::format(::Date_obj::now()),reactions,0);
-HXLINE(1411)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1411)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1411)		::snikket::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update4, ::Dynamic(new _hx_Closure_1(_gthis,update4)));
+HXLINE(1408)		::String update = ::snikket::ID_obj::_hx_long();
+HXDLIN(1408)		::String m1 = m->serverId;
+HXDLIN(1408)		::String update1 = m->chatId();
+HXDLIN(1408)		::String update2 = m->chatId();
+HXDLIN(1408)		::String update3 = this->getFullJid()->asString();
+HXDLIN(1408)		 ::snikket::ReactionUpdate update4 =  ::snikket::ReactionUpdate_obj::__alloc( HX_CTX ,update,m1,update1,null(),update2,update3,::snikket::Date_obj::format(::Date_obj::now()),reactions,0);
+HXLINE(1409)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1409)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1409)		::snikket::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update4, ::Dynamic(new _hx_Closure_1(_gthis,update4)));
             	}
 
 
 ::String Channel_obj::lastMessageId(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1421_lastMessageId)
-HXDLIN(1421)		 ::snikket::ChatMessage tmp = this->lastMessage;
-HXDLIN(1421)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1421)			return tmp->serverId;
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1419_lastMessageId)
+HXDLIN(1419)		 ::snikket::ChatMessage tmp = this->lastMessage;
+HXDLIN(1419)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1419)			return tmp->serverId;
             		}
             		else {
-HXDLIN(1421)			return null();
+HXDLIN(1419)			return null();
             		}
-HXDLIN(1421)		return null();
+HXDLIN(1419)		return null();
             	}
 
 
 void Channel_obj::markReadUpTo( ::snikket::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::ChatMessage,message, ::snikket::Channel,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1426_markReadUpTo)
-HXLINE(1427)			::String _gthis1 = _gthis->chatId;
-HXDLIN(1427)			::String stanza = ::snikket::ID_obj::_hx_long();
-HXDLIN(1427)			 ::snikket::Stanza stanza1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1424_markReadUpTo)
+HXLINE(1425)			::String _gthis1 = _gthis->chatId;
+HXDLIN(1425)			::String stanza = ::snikket::ID_obj::_hx_long();
+HXDLIN(1425)			 ::snikket::Stanza stanza1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),stanza)
             				->setFixed(1,HX_("to",7b,65,00,00),_gthis1)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),message->serverId)
             				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))))->up();
-HXLINE(1429)			if (::hx::IsNotNull( message->threadId )) {
-HXLINE(1430)				stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
+HXLINE(1427)			if (::hx::IsNotNull( message->threadId )) {
+HXLINE(1428)				stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
             			}
-HXLINE(1432)			_gthis->client->sendStanza(stanza1);
-HXLINE(1434)			_gthis->publishMds();
-HXLINE(1435)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1430)			_gthis->client->sendStanza(stanza1);
+HXLINE(1432)			_gthis->publishMds();
+HXLINE(1433)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1425_markReadUpTo)
-HXDLIN(1425)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1426)		this->markReadUpToMessage(message, ::Dynamic(new _hx_Closure_0(message,_gthis)));
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1423_markReadUpTo)
+HXDLIN(1423)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1424)		this->markReadUpToMessage(message, ::Dynamic(new _hx_Closure_0(message,_gthis)));
             	}
 
 
 void Channel_obj::bookmark(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::Channel,_gthis) HXARGC(1)
             		void _hx_run( ::snikket::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1461_bookmark)
-HXLINE(1461)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1462)				 ::snikket::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1462)				 ::snikket::Stanza preconditionError;
-HXDLIN(1462)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1462)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
+            			HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1459_bookmark)
+HXLINE(1459)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE(1460)				 ::snikket::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(1460)				 ::snikket::Stanza preconditionError;
+HXDLIN(1460)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1460)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
             				}
             				else {
-HXLINE(1462)					preconditionError = null();
+HXLINE(1460)					preconditionError = null();
             				}
-HXLINE(1463)				if (::hx::IsNotNull( preconditionError )) {
+HXLINE(1461)				if (::hx::IsNotNull( preconditionError )) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,_gthis) HXARGC(1)
             					void _hx_run( ::snikket::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1479_bookmark)
-HXLINE(1479)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
-HXLINE(1480)							_gthis->bookmark();
+            						HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1477_bookmark)
+HXLINE(1477)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
+HXLINE(1478)							_gthis->bookmark();
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1465)					 ::snikket::GenericStream _gthis1 = _gthis->stream;
-HXDLIN(1465)					_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1463)					 ::snikket::GenericStream _gthis1 = _gthis->stream;
+HXDLIN(1463)					_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))))->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
@@ -1414,28 +1414,28 @@ HXDLIN(1465)					_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("i
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1440_bookmark)
-HXDLIN(1440)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1441)		 ::snikket::GenericStream _hx_tmp = this->stream;
-HXLINE(1442)		 ::snikket::Stanza _hx_tmp1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1438_bookmark)
+HXDLIN(1438)		 ::snikket::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1439)		 ::snikket::GenericStream _hx_tmp = this->stream;
+HXLINE(1440)		 ::snikket::Stanza _hx_tmp1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)));
-HXLINE(1446)		::String _hx_tmp2 = this->getDisplayName();
-HXDLIN(1446)		::String _hx_tmp3;
-HXDLIN(1446)		if ((this->uiState == 2)) {
-HXLINE(1446)			_hx_tmp3 = HX_("false",a3,35,4f,fb);
+HXLINE(1444)		::String _hx_tmp2 = this->getDisplayName();
+HXDLIN(1444)		::String _hx_tmp3;
+HXDLIN(1444)		if ((this->uiState == 2)) {
+HXLINE(1444)			_hx_tmp3 = HX_("false",a3,35,4f,fb);
             		}
             		else {
-HXLINE(1446)			_hx_tmp3 = HX_("true",4e,a7,03,4d);
+HXLINE(1444)			_hx_tmp3 = HX_("true",4e,a7,03,4d);
             		}
-HXLINE(1442)		 ::snikket::Stanza _hx_tmp4 = _hx_tmp1->tag(HX_("conference",1c,2b,83,41), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1440)		 ::snikket::Stanza _hx_tmp4 = _hx_tmp1->tag(HX_("conference",1c,2b,83,41), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("autojoin",d9,f6,b1,3e),_hx_tmp3)
             			->setFixed(1,HX_("name",4b,72,ff,48),_hx_tmp2)
             			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
-HXLINE(1447)		::String _hx_tmp5 = this->client->displayName();
-HXLINE(1441)		_hx_tmp->sendIq(_hx_tmp4->textTag(HX_("nick",a3,7b,05,49),_hx_tmp5,null())->addChild(this->extensions)->up()->up()->tag(HX_("publish-options",60,0b,5c,74),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1445)		::String _hx_tmp5 = this->client->displayName();
+HXLINE(1439)		_hx_tmp->sendIq(_hx_tmp4->textTag(HX_("nick",a3,7b,05,49),_hx_tmp5,null())->addChild(this->extensions)->up()->up()->tag(HX_("publish-options",60,0b,5c,74),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
@@ -1450,34 +1450,34 @@ HXLINE(1441)		_hx_tmp->sendIq(_hx_tmp4->textTag(HX_("nick",a3,7b,05,49),_hx_tmp5
 
 
 void Channel_obj::sendChatState(::String state,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1490_sendChatState)
-HXLINE(1492)		::String stanza = ::snikket::ID_obj::_hx_long();
-HXLINE(1494)		::String stanza1 = this->client->jid->asString();
-HXLINE(1491)		 ::snikket::Stanza stanza2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_GC_STACKFRAME(&_hx_pos_5e4df8d46126c981_1488_sendChatState)
+HXLINE(1490)		::String stanza = ::snikket::ID_obj::_hx_long();
+HXLINE(1492)		::String stanza1 = this->client->jid->asString();
+HXLINE(1489)		 ::snikket::Stanza stanza2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
             			->setFixed(0,HX_("id",db,5b,00,00),stanza)
             			->setFixed(1,HX_("to",7b,65,00,00),this->chatId)
             			->setFixed(2,HX_("from",6a,a5,c2,43),stanza1)
             			->setFixed(3,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))))->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
-HXLINE(1499)		if (::hx::IsNotNull( threadId )) {
-HXLINE(1500)			stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
+HXLINE(1497)		if (::hx::IsNotNull( threadId )) {
+HXLINE(1498)			stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
             		}
-HXLINE(1502)		this->stream->sendStanza(stanza2);
+HXLINE(1500)		this->stream->sendStanza(stanza2);
             	}
 
 
 void Channel_obj::close(){
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1506_close)
-HXLINE(1507)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1507)			this->typingTimer->stop();
-            		}
-HXLINE(1508)		this->uiState = 2;
-HXLINE(1509)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1509)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1510)		this->selfPing(false);
-HXLINE(1511)		this->bookmark();
-HXLINE(1512)		this->sendChatState(HX_("gone",5f,94,69,44),null());
-HXLINE(1513)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_1504_close)
+HXLINE(1505)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1505)			this->typingTimer->stop();
+            		}
+HXLINE(1506)		this->uiState = 2;
+HXLINE(1507)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1507)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1508)		this->selfPing(false);
+HXLINE(1509)		this->bookmark();
+HXLINE(1510)		this->sendChatState(HX_("gone",5f,94,69,44),null());
+HXLINE(1511)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
@@ -1703,8 +1703,8 @@ void Channel_obj::__register()
 void Channel_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_975_boot)
-HXDLIN( 975)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_5e4df8d46126c981_973_boot)
+HXDLIN( 973)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(19)
             				->setFixed(0,HX_("setPresence",fd,1b,38,97), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_snikket/src/snikket/Chat.cpp b/Sources/c_snikket/src/snikket/Chat.cpp
index a916fbb..7930100 100644
--- a/Sources/c_snikket/src/snikket/Chat.cpp
+++ b/Sources/c_snikket/src/snikket/Chat.cpp
@@ -120,84 +120,84 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_43_new,"snikket.Chat","new",0x69f01dfb,"snikket.Chat.new","snikket/Chat.hx",43,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_271_chatId__fromC,"snikket.Chat","chatId__fromC",0x863b7961,"snikket.Chat.chatId__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_271_uiState__fromC,"snikket.Chat","uiState__fromC",0x25366141,"snikket.Chat.uiState__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_271_isBlocked__fromC,"snikket.Chat","isBlocked__fromC",0xbc9aae1c,"snikket.Chat.isBlocked__fromC","HaxeCBridge.hx",271,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_308_chatId__fromC,"snikket.Chat","chatId__fromC",0x863b7961,"snikket.Chat.chatId__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_308_uiState__fromC,"snikket.Chat","uiState__fromC",0x25366141,"snikket.Chat.uiState__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_308_isBlocked__fromC,"snikket.Chat","isBlocked__fromC",0xbc9aae1c,"snikket.Chat.isBlocked__fromC","HaxeCBridge.hx",308,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_221_getMessagesBefore__fromC,"snikket.Chat","getMessagesBefore__fromC",0x76faff7d,"snikket.Chat.getMessagesBefore__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_getMessagesBefore__fromC,"snikket.Chat","getMessagesBefore__fromC",0x76faff7d,"snikket.Chat.getMessagesBefore__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_getMessagesBefore__fromC,"snikket.Chat","getMessagesBefore__fromC",0x76faff7d,"snikket.Chat.getMessagesBefore__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_221_getMessagesAfter__fromC,"snikket.Chat","getMessagesAfter__fromC",0xc6ff459a,"snikket.Chat.getMessagesAfter__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_getMessagesAfter__fromC,"snikket.Chat","getMessagesAfter__fromC",0xc6ff459a,"snikket.Chat.getMessagesAfter__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_getMessagesAfter__fromC,"snikket.Chat","getMessagesAfter__fromC",0xc6ff459a,"snikket.Chat.getMessagesAfter__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_221_getMessagesAround__fromC,"snikket.Chat","getMessagesAround__fromC",0x0c8b916f,"snikket.Chat.getMessagesAround__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_getMessagesAround__fromC,"snikket.Chat","getMessagesAround__fromC",0x0c8b916f,"snikket.Chat.getMessagesAround__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_getMessagesAround__fromC,"snikket.Chat","getMessagesAround__fromC",0x0c8b916f,"snikket.Chat.getMessagesAround__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_143_fetchFromSync,"snikket.Chat","fetchFromSync",0xa446a09a,"snikket.Chat.fetchFromSync","snikket/Chat.hx",143,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_128_fetchFromSync,"snikket.Chat","fetchFromSync",0xa446a09a,"snikket.Chat.fetchFromSync","snikket/Chat.hx",128,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_135_fetchFromSync,"snikket.Chat","fetchFromSync",0xa446a09a,"snikket.Chat.fetchFromSync","snikket/Chat.hx",135,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_127_fetchFromSync,"snikket.Chat","fetchFromSync",0xa446a09a,"snikket.Chat.fetchFromSync","snikket/Chat.hx",127,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_sendMessage__fromC,"snikket.Chat","sendMessage__fromC",0xcfa599bf,"snikket.Chat.sendMessage__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_markReadUpTo__fromC,"snikket.Chat","markReadUpTo__fromC",0xb4ac28db,"snikket.Chat.markReadUpTo__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_bookmark__fromC,"snikket.Chat","bookmark__fromC",0xb349509e,"snikket.Chat.bookmark__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_242_getParticipants__fromC,"snikket.Chat","getParticipants__fromC",0x549a1368,"snikket.Chat.getParticipants__fromC","HaxeCBridge.hx",242,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_getParticipantDetails__fromC,"snikket.Chat","getParticipantDetails__fromC",0x3039b099,"snikket.Chat.getParticipantDetails__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_correctMessage__fromC,"snikket.Chat","correctMessage__fromC",0x7adc83f7,"snikket.Chat.correctMessage__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_sendMessage__fromC,"snikket.Chat","sendMessage__fromC",0xcfa599bf,"snikket.Chat.sendMessage__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_markReadUpTo__fromC,"snikket.Chat","markReadUpTo__fromC",0xb4ac28db,"snikket.Chat.markReadUpTo__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_bookmark__fromC,"snikket.Chat","bookmark__fromC",0xb349509e,"snikket.Chat.bookmark__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_250_getParticipants__fromC,"snikket.Chat","getParticipants__fromC",0x549a1368,"snikket.Chat.getParticipants__fromC","HaxeCBridge.hx",250,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_getParticipantDetails__fromC,"snikket.Chat","getParticipantDetails__fromC",0x3039b099,"snikket.Chat.getParticipantDetails__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_correctMessage__fromC,"snikket.Chat","correctMessage__fromC",0x7adc83f7,"snikket.Chat.correctMessage__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_203_addReaction,"snikket.Chat","addReaction",0xe26cff85,"snikket.Chat.addReaction","snikket/Chat.hx",203,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_206_addReaction,"snikket.Chat","addReaction",0xe26cff85,"snikket.Chat.addReaction","snikket/Chat.hx",206,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_198_addReaction,"snikket.Chat","addReaction",0xe26cff85,"snikket.Chat.addReaction","snikket/Chat.hx",198,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_removeReaction__fromC,"snikket.Chat","removeReaction__fromC",0xb57c6867,"snikket.Chat.removeReaction__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_removeReaction__fromC,"snikket.Chat","removeReaction__fromC",0xb57c6867,"snikket.Chat.removeReaction__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_251_typing,"snikket.Chat","typing",0x22ffe3bc,"snikket.Chat.typing","snikket/Chat.hx",251,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_230_typing,"snikket.Chat","typing",0x22ffe3bc,"snikket.Chat.typing","snikket/Chat.hx",230,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_245_typing,"snikket.Chat","typing",0x22ffe3bc,"snikket.Chat.typing","snikket/Chat.hx",245,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_269_setActive,"snikket.Chat","setActive",0x1ec0aae3,"snikket.Chat.setActive","snikket/Chat.hx",269,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_close__fromC,"snikket.Chat","close__fromC",0x4574e6c6,"snikket.Chat.close__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_close__fromC,"snikket.Chat","close__fromC",0x4574e6c6,"snikket.Chat.close__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_294_togglePinned,"snikket.Chat","togglePinned",0x82375cd1,"snikket.Chat.togglePinned","snikket/Chat.hx",294,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_304_block,"snikket.Chat","block",0xf87b9fa8,"snikket.Chat.block","snikket/Chat.hx",304,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_321_block,"snikket.Chat","block",0xf87b9fa8,"snikket.Chat.block","snikket/Chat.hx",321,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_328_unblock,"snikket.Chat","unblock",0x32f0236f,"snikket.Chat.unblock","snikket/Chat.hx",328,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_338_unblock,"snikket.Chat","unblock",0x32f0236f,"snikket.Chat.unblock","snikket/Chat.hx",338,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_346_setNotifications,"snikket.Chat","setNotifications",0xb3d8bbab,"snikket.Chat.setNotifications","snikket/Chat.hx",346,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_362_notificationsFiltered,"snikket.Chat","notificationsFiltered",0x958be1ba,"snikket.Chat.notificationsFiltered","snikket/Chat.hx",362,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_369_notifyMention,"snikket.Chat","notifyMention",0x4bac447c,"snikket.Chat.notifyMention","snikket/Chat.hx",369,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_376_notifyReply,"snikket.Chat","notifyReply",0xf1fbc63c,"snikket.Chat.notifyReply","snikket/Chat.hx",376,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_244_lastMessageId__fromC,"snikket.Chat","lastMessageId__fromC",0xf7fe75b2,"snikket.Chat.lastMessageId__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_388_lastMessageTimestamp,"snikket.Chat","lastMessageTimestamp",0x5028348a,"snikket.Chat.lastMessageTimestamp","snikket/Chat.hx",388,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_392_updateFromBookmark,"snikket.Chat","updateFromBookmark",0x2780dcae,"snikket.Chat.updateFromBookmark","snikket/Chat.hx",392,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_401_updateFromRoster,"snikket.Chat","updateFromRoster",0x1d9e4f83,"snikket.Chat.updateFromRoster","snikket/Chat.hx",401,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_409_getPhoto,"snikket.Chat","getPhoto",0xd6c858c1,"snikket.Chat.getPhoto","snikket/Chat.hx",409,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_418_getPlaceholder,"snikket.Chat","getPlaceholder",0xa955f8c2,"snikket.Chat.getPlaceholder","snikket/Chat.hx",418,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_425_readUpTo,"snikket.Chat","readUpTo",0x2aa097b1,"snikket.Chat.readUpTo","snikket/Chat.hx",425,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_432_unreadCount,"snikket.Chat","unreadCount",0x5b4cf8bb,"snikket.Chat.unreadCount","snikket/Chat.hx",432,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_437_setUnreadCount,"snikket.Chat","setUnreadCount",0xaf7385e3,"snikket.Chat.setUnreadCount","snikket/Chat.hx",437,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_443_preview,"snikket.Chat","preview",0xbd3d9723,"snikket.Chat.preview","snikket/Chat.hx",443,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_456_setLastMessage,"snikket.Chat","setLastMessage",0x5d3f57d4,"snikket.Chat.setLastMessage","snikket/Chat.hx",456,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_459_setDisplayName,"snikket.Chat","setDisplayName",0x3f747f70,"snikket.Chat.setDisplayName","snikket/Chat.hx",459,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_467_getDisplayName,"snikket.Chat","getDisplayName",0x1f5496fc,"snikket.Chat.getDisplayName","snikket/Chat.hx",467,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_482_setPresence,"snikket.Chat","setPresence",0x5193fc98,"snikket.Chat.setPresence","snikket/Chat.hx",482,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_486_setCaps,"snikket.Chat","setCaps",0x88a113fe,"snikket.Chat.setCaps","snikket/Chat.hx",486,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_498_removePresence,"snikket.Chat","removePresence",0x97f1c0e4,"snikket.Chat.removePresence","snikket/Chat.hx",498,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_506_getCaps,"snikket.Chat","getCaps",0x959f82f2,"snikket.Chat.getCaps","snikket/Chat.hx",506,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_502_getCaps,"snikket.Chat","getCaps",0x959f82f2,"snikket.Chat.getCaps","snikket/Chat.hx",502,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_515_getResourceCaps,"snikket.Chat","getResourceCaps",0x30ef43e0,"snikket.Chat.getResourceCaps","snikket/Chat.hx",515,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_520_setAvatarSha1,"snikket.Chat","setAvatarSha1",0xd1ceb0db,"snikket.Chat.setAvatarSha1","snikket/Chat.hx",520,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_524_setTrusted,"snikket.Chat","setTrusted",0x7948483a,"snikket.Chat.setTrusted","snikket/Chat.hx",524,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_531_isTrusted,"snikket.Chat","isTrusted",0xc3782908,"snikket.Chat.isTrusted","snikket/Chat.hx",531,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_536_livePresence,"snikket.Chat","livePresence",0x0a1fa04c,"snikket.Chat.livePresence","snikket/Chat.hx",536,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_540_syncing,"snikket.Chat","syncing",0x2889b482,"snikket.Chat.syncing","snikket/Chat.hx",540,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_546_canAudioCall,"snikket.Chat","canAudioCall",0x3a98f169,"snikket.Chat.canAudioCall","snikket/Chat.hx",546,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_557_canVideoCall,"snikket.Chat","canVideoCall",0x409bc38e,"snikket.Chat.canVideoCall","snikket/Chat.hx",557,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_571_startCall,"snikket.Chat","startCall",0xa38085fb,"snikket.Chat.startCall","snikket/Chat.hx",571,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_578_addMedia,"snikket.Chat","addMedia",0x3416ab88,"snikket.Chat.addMedia","snikket/Chat.hx",578,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_587_acceptCall,"snikket.Chat","acceptCall",0xc4d6678b,"snikket.Chat.acceptCall","snikket/Chat.hx",587,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_596_hangup,"snikket.Chat","hangup",0x83c5b792,"snikket.Chat.hangup","snikket/Chat.hx",596,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_605_callStatus,"snikket.Chat","callStatus",0x40ee2a35,"snikket.Chat.callStatus","snikket/Chat.hx",605,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_616_dtmf,"snikket.Chat","dtmf",0x419954ee,"snikket.Chat.dtmf","snikket/Chat.hx",616,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_629_videoTracks,"snikket.Chat","videoTracks",0x7880a2fe,"snikket.Chat.videoTracks","snikket/Chat.hx",629,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_242_videoTracks__fromC,"snikket.Chat","videoTracks__fromC",0xb4b1493b,"snikket.Chat.videoTracks__fromC","HaxeCBridge.hx",242,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_640_markReadUpToId,"snikket.Chat","markReadUpToId",0x495f62d9,"snikket.Chat.markReadUpToId","snikket/Chat.hx",640,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_633_markReadUpToId,"snikket.Chat","markReadUpToId",0x495f62d9,"snikket.Chat.markReadUpToId","snikket/Chat.hx",633,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_659_markReadUpToMessage,"snikket.Chat","markReadUpToMessage",0xab221609,"snikket.Chat.markReadUpToMessage","snikket/Chat.hx",659,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_650_markReadUpToMessage,"snikket.Chat","markReadUpToMessage",0xab221609,"snikket.Chat.markReadUpToMessage","snikket/Chat.hx",650,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_684_publishMds,"snikket.Chat","publishMds",0x809032b2,"snikket.Chat.publishMds","snikket/Chat.hx",684,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_700_publishMds,"snikket.Chat","publishMds",0x809032b2,"snikket.Chat.publishMds","snikket/Chat.hx",700,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_666_publishMds,"snikket.Chat","publishMds",0x809032b2,"snikket.Chat.publishMds","snikket/Chat.hx",666,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_360_notificationsFiltered,"snikket.Chat","notificationsFiltered",0x958be1ba,"snikket.Chat.notificationsFiltered","snikket/Chat.hx",360,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_367_notifyMention,"snikket.Chat","notifyMention",0x4bac447c,"snikket.Chat.notifyMention","snikket/Chat.hx",367,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_374_notifyReply,"snikket.Chat","notifyReply",0xf1fbc63c,"snikket.Chat.notifyReply","snikket/Chat.hx",374,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_252_lastMessageId__fromC,"snikket.Chat","lastMessageId__fromC",0xf7fe75b2,"snikket.Chat.lastMessageId__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_386_lastMessageTimestamp,"snikket.Chat","lastMessageTimestamp",0x5028348a,"snikket.Chat.lastMessageTimestamp","snikket/Chat.hx",386,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_390_updateFromBookmark,"snikket.Chat","updateFromBookmark",0x2780dcae,"snikket.Chat.updateFromBookmark","snikket/Chat.hx",390,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_399_updateFromRoster,"snikket.Chat","updateFromRoster",0x1d9e4f83,"snikket.Chat.updateFromRoster","snikket/Chat.hx",399,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_407_getPhoto,"snikket.Chat","getPhoto",0xd6c858c1,"snikket.Chat.getPhoto","snikket/Chat.hx",407,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_416_getPlaceholder,"snikket.Chat","getPlaceholder",0xa955f8c2,"snikket.Chat.getPlaceholder","snikket/Chat.hx",416,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_423_readUpTo,"snikket.Chat","readUpTo",0x2aa097b1,"snikket.Chat.readUpTo","snikket/Chat.hx",423,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_430_unreadCount,"snikket.Chat","unreadCount",0x5b4cf8bb,"snikket.Chat.unreadCount","snikket/Chat.hx",430,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_435_setUnreadCount,"snikket.Chat","setUnreadCount",0xaf7385e3,"snikket.Chat.setUnreadCount","snikket/Chat.hx",435,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_441_preview,"snikket.Chat","preview",0xbd3d9723,"snikket.Chat.preview","snikket/Chat.hx",441,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_454_setLastMessage,"snikket.Chat","setLastMessage",0x5d3f57d4,"snikket.Chat.setLastMessage","snikket/Chat.hx",454,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_457_setDisplayName,"snikket.Chat","setDisplayName",0x3f747f70,"snikket.Chat.setDisplayName","snikket/Chat.hx",457,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_465_getDisplayName,"snikket.Chat","getDisplayName",0x1f5496fc,"snikket.Chat.getDisplayName","snikket/Chat.hx",465,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_480_setPresence,"snikket.Chat","setPresence",0x5193fc98,"snikket.Chat.setPresence","snikket/Chat.hx",480,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_484_setCaps,"snikket.Chat","setCaps",0x88a113fe,"snikket.Chat.setCaps","snikket/Chat.hx",484,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_496_removePresence,"snikket.Chat","removePresence",0x97f1c0e4,"snikket.Chat.removePresence","snikket/Chat.hx",496,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_504_getCaps,"snikket.Chat","getCaps",0x959f82f2,"snikket.Chat.getCaps","snikket/Chat.hx",504,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_500_getCaps,"snikket.Chat","getCaps",0x959f82f2,"snikket.Chat.getCaps","snikket/Chat.hx",500,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_513_getResourceCaps,"snikket.Chat","getResourceCaps",0x30ef43e0,"snikket.Chat.getResourceCaps","snikket/Chat.hx",513,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_518_setAvatarSha1,"snikket.Chat","setAvatarSha1",0xd1ceb0db,"snikket.Chat.setAvatarSha1","snikket/Chat.hx",518,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_522_setTrusted,"snikket.Chat","setTrusted",0x7948483a,"snikket.Chat.setTrusted","snikket/Chat.hx",522,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_529_isTrusted,"snikket.Chat","isTrusted",0xc3782908,"snikket.Chat.isTrusted","snikket/Chat.hx",529,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_534_livePresence,"snikket.Chat","livePresence",0x0a1fa04c,"snikket.Chat.livePresence","snikket/Chat.hx",534,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_538_syncing,"snikket.Chat","syncing",0x2889b482,"snikket.Chat.syncing","snikket/Chat.hx",538,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_544_canAudioCall,"snikket.Chat","canAudioCall",0x3a98f169,"snikket.Chat.canAudioCall","snikket/Chat.hx",544,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_555_canVideoCall,"snikket.Chat","canVideoCall",0x409bc38e,"snikket.Chat.canVideoCall","snikket/Chat.hx",555,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_569_startCall,"snikket.Chat","startCall",0xa38085fb,"snikket.Chat.startCall","snikket/Chat.hx",569,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_576_addMedia,"snikket.Chat","addMedia",0x3416ab88,"snikket.Chat.addMedia","snikket/Chat.hx",576,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_585_acceptCall,"snikket.Chat","acceptCall",0xc4d6678b,"snikket.Chat.acceptCall","snikket/Chat.hx",585,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_594_hangup,"snikket.Chat","hangup",0x83c5b792,"snikket.Chat.hangup","snikket/Chat.hx",594,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_603_callStatus,"snikket.Chat","callStatus",0x40ee2a35,"snikket.Chat.callStatus","snikket/Chat.hx",603,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_614_dtmf,"snikket.Chat","dtmf",0x419954ee,"snikket.Chat.dtmf","snikket/Chat.hx",614,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_627_videoTracks,"snikket.Chat","videoTracks",0x7880a2fe,"snikket.Chat.videoTracks","snikket/Chat.hx",627,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_12e7dd114cfbd541_250_videoTracks__fromC,"snikket.Chat","videoTracks__fromC",0xb4b1493b,"snikket.Chat.videoTracks__fromC","HaxeCBridge.hx",250,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_638_markReadUpToId,"snikket.Chat","markReadUpToId",0x495f62d9,"snikket.Chat.markReadUpToId","snikket/Chat.hx",638,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_631_markReadUpToId,"snikket.Chat","markReadUpToId",0x495f62d9,"snikket.Chat.markReadUpToId","snikket/Chat.hx",631,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_657_markReadUpToMessage,"snikket.Chat","markReadUpToMessage",0xab221609,"snikket.Chat.markReadUpToMessage","snikket/Chat.hx",657,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_648_markReadUpToMessage,"snikket.Chat","markReadUpToMessage",0xab221609,"snikket.Chat.markReadUpToMessage","snikket/Chat.hx",648,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_682_publishMds,"snikket.Chat","publishMds",0x809032b2,"snikket.Chat.publishMds","snikket/Chat.hx",682,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_698_publishMds,"snikket.Chat","publishMds",0x809032b2,"snikket.Chat.publishMds","snikket/Chat.hx",698,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_664_publishMds,"snikket.Chat","publishMds",0x809032b2,"snikket.Chat.publishMds","snikket/Chat.hx",664,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_3993c1e3d3f53fe2_43_boot,"snikket.Chat","boot",0x40431e37,"snikket.Chat.boot","snikket/Chat.hx",43,0x18616bf4)
 namespace snikket{
 
@@ -244,24 +244,24 @@ bool Chat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Chat_obj::chatId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_271_chatId__fromC)
-HXDLIN( 271)		return this->chatId;
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_308_chatId__fromC)
+HXDLIN( 308)		return this->chatId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,chatId__fromC,return )
 
 int Chat_obj::uiState__fromC(){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_271_uiState__fromC)
-HXDLIN( 271)		return this->uiState;
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_308_uiState__fromC)
+HXDLIN( 308)		return this->uiState;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,uiState__fromC,return )
 
 bool Chat_obj::isBlocked__fromC(){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_271_isBlocked__fromC)
-HXDLIN( 271)		return this->isBlocked;
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_308_isBlocked__fromC)
+HXDLIN( 308)		return this->isBlocked;
             	}
 
 
@@ -316,8 +316,8 @@ HXLINE( 221)			handler1(ptr1,( (size_t)(a0->length) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_getMessagesBefore__fromC)
-HXDLIN( 244)		this->getMessagesBefore(beforeId,beforeTime, ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_getMessagesBefore__fromC)
+HXDLIN( 252)		this->getMessagesBefore(beforeId,beforeTime, ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
@@ -368,8 +368,8 @@ HXLINE( 221)			handler1(ptr1,( (size_t)(a0->length) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_getMessagesAfter__fromC)
-HXDLIN( 244)		this->getMessagesAfter(afterId,afterTime, ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_getMessagesAfter__fromC)
+HXDLIN( 252)		this->getMessagesAfter(afterId,afterTime, ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
@@ -420,8 +420,8 @@ HXLINE( 221)			handler1(ptr1,( (size_t)(a0->length) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_getMessagesAround__fromC)
-HXDLIN( 244)		this->getMessagesAround(aroundId,aroundTime, ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_getMessagesAround__fromC)
+HXDLIN( 252)		this->getMessagesAround(aroundId,aroundTime, ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
@@ -508,8 +508,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,fetchFromSync,(void))
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,sendMessage,(void))
 
 void Chat_obj::sendMessage__fromC( ::snikket::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_sendMessage__fromC)
-HXDLIN( 244)		this->sendMessage(message);
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_sendMessage__fromC)
+HXDLIN( 252)		this->sendMessage(message);
             	}
 
 
@@ -518,8 +518,8 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,sendMessage__fromC,(void))
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpTo,(void))
 
 void Chat_obj::markReadUpTo__fromC( ::snikket::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_markReadUpTo__fromC)
-HXDLIN( 244)		this->markReadUpTo(message);
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_markReadUpTo__fromC)
+HXDLIN( 252)		this->markReadUpTo(message);
             	}
 
 
@@ -528,8 +528,8 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpTo__fromC,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,bookmark,(void))
 
 void Chat_obj::bookmark__fromC(){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_bookmark__fromC)
-HXDLIN( 244)		this->bookmark();
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_bookmark__fromC)
+HXDLIN( 252)		this->bookmark();
             	}
 
 
@@ -538,63 +538,63 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,bookmark__fromC,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getParticipants,return )
 
 size_t Chat_obj::getParticipants__fromC(const char*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_12e7dd114cfbd541_242_getParticipants__fromC)
-HXDLIN( 242)		::Array< ::String > out = this->getParticipants();
-HXDLIN( 242)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 242)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 242)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 242)			{
-HXDLIN( 242)				int _g_current = 0;
-HXDLIN( 242)				::Array< ::String > _g_array = out;
-HXDLIN( 242)				while((_g_current < _g_array->length)){
-HXDLIN( 242)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 242)					_g_current = (_g_current + 1);
-HXDLIN( 242)					int _g_key = (_g_current - 1);
-HXDLIN( 242)					int i = _g_key;
-HXDLIN( 242)					::String el = _g_value;
-HXDLIN( 242)					{
-HXDLIN( 242)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 242)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 242)						{
-HXDLIN( 242)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 242)							int high = ptrInt64 >> 32;
-HXDLIN( 242)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 242)							if (::hx::IsNull( highMap )) {
-HXLINE(2083)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXLINE( 242)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_12e7dd114cfbd541_250_getParticipants__fromC)
+HXDLIN( 250)		::Array< ::String > out = this->getParticipants();
+HXDLIN( 250)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 250)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 250)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 250)			{
+HXDLIN( 250)				int _g_current = 0;
+HXDLIN( 250)				::Array< ::String > _g_array = out;
+HXDLIN( 250)				while((_g_current < _g_array->length)){
+HXDLIN( 250)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 250)					_g_current = (_g_current + 1);
+HXDLIN( 250)					int _g_key = (_g_current - 1);
+HXDLIN( 250)					int i = _g_key;
+HXDLIN( 250)					::String el = _g_value;
+HXDLIN( 250)					{
+HXDLIN( 250)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 250)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 250)						{
+HXDLIN( 250)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 250)							int high = ptrInt64 >> 32;
+HXDLIN( 250)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 250)							if (::hx::IsNull( highMap )) {
+HXLINE(2131)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE( 250)								this1->set(low,highMap);
             							}
-HXDLIN( 242)							highMap->set(high,el);
+HXDLIN( 250)							highMap->set(high,el);
             						}
-HXDLIN( 242)						const char* ptr = cStrPtr;
-HXDLIN( 242)						arr[i] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 250)						const char* ptr = cStrPtr;
+HXDLIN( 250)						arr[i] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 242)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 242)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 242)			{
-HXDLIN( 242)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 242)				int high1 = ptrInt641 >> 32;
-HXDLIN( 242)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 242)				if (::hx::IsNull( highMap1 )) {
-HXLINE(2083)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXLINE( 242)					this2->set(low1,highMap1);
+HXDLIN( 250)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 250)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 250)			{
+HXDLIN( 250)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 250)				int high1 = ptrInt641 >> 32;
+HXDLIN( 250)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 250)				if (::hx::IsNull( highMap1 )) {
+HXLINE(2131)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE( 250)					this2->set(low1,highMap1);
             				}
-HXDLIN( 242)				highMap1->set(high1,arr);
+HXDLIN( 250)				highMap1->set(high1,arr);
             			}
-HXDLIN( 242)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 250)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 242)		return ( (size_t)(out->length) );
+HXDLIN( 250)		return ( (size_t)(out->length) );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,getParticipantDetails,return )
 
  ::snikket::Participant Chat_obj::getParticipantDetails__fromC(::String participantId){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_getParticipantDetails__fromC)
-HXDLIN( 244)		return this->getParticipantDetails(participantId);
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_getParticipantDetails__fromC)
+HXDLIN( 252)		return this->getParticipantDetails(participantId);
             	}
 
 
@@ -603,8 +603,8 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,getParticipantDetails__fromC,return )
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,correctMessage,(void))
 
 void Chat_obj::correctMessage__fromC(::String localId, ::snikket::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_correctMessage__fromC)
-HXDLIN( 244)		this->correctMessage(localId,message);
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_correctMessage__fromC)
+HXDLIN( 252)		this->correctMessage(localId,message);
             	}
 
 
@@ -648,8 +648,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,addReaction,(void))
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,removeReaction,(void))
 
 void Chat_obj::removeReaction__fromC( ::snikket::ChatMessage m, ::snikket::Reaction reaction){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_removeReaction__fromC)
-HXDLIN( 244)		this->removeReaction(m,reaction);
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_removeReaction__fromC)
+HXDLIN( 252)		this->removeReaction(m,reaction);
             	}
 
 
@@ -773,8 +773,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setActive,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,close,(void))
 
 void Chat_obj::close__fromC(){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_close__fromC)
-HXDLIN( 244)		this->close();
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_close__fromC)
+HXDLIN( 252)		this->close();
             	}
 
 
@@ -886,42 +886,43 @@ HXLINE( 350)			this->notificationSettings = null();
             		}
 HXLINE( 352)		::Dynamic _hx_tmp = this->persistence;
 HXDLIN( 352)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 353)		this->client->updatePushIfEnabled();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,setNotifications,(void))
 
 bool Chat_obj::notificationsFiltered(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_362_notificationsFiltered)
-HXDLIN( 362)		return ::hx::IsNotNull( this->notificationSettings );
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_360_notificationsFiltered)
+HXDLIN( 360)		return ::hx::IsNotNull( this->notificationSettings );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notificationsFiltered,return )
 
 bool Chat_obj::notifyMention(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_369_notifyMention)
-HXDLIN( 369)		if (::hx::IsNotNull( this->notificationSettings )) {
-HXDLIN( 369)			return ( (bool)(this->notificationSettings->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) );
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_367_notifyMention)
+HXDLIN( 367)		if (::hx::IsNotNull( this->notificationSettings )) {
+HXDLIN( 367)			return ( (bool)(this->notificationSettings->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) );
             		}
             		else {
-HXDLIN( 369)			return true;
+HXDLIN( 367)			return true;
             		}
-HXDLIN( 369)		return false;
+HXDLIN( 367)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notifyMention,return )
 
 bool Chat_obj::notifyReply(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_376_notifyReply)
-HXDLIN( 376)		if (::hx::IsNotNull( this->notificationSettings )) {
-HXDLIN( 376)			return ( (bool)(this->notificationSettings->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) );
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_374_notifyReply)
+HXDLIN( 374)		if (::hx::IsNotNull( this->notificationSettings )) {
+HXDLIN( 374)			return ( (bool)(this->notificationSettings->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) );
             		}
             		else {
-HXDLIN( 376)			return true;
+HXDLIN( 374)			return true;
             		}
-HXDLIN( 376)		return false;
+HXDLIN( 374)		return false;
             	}
 
 
@@ -930,89 +931,89 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notifyReply,return )
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,lastMessageId,return )
 
 ::String Chat_obj::lastMessageId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_244_lastMessageId__fromC)
-HXDLIN( 244)		return this->lastMessageId();
+            	HX_STACKFRAME(&_hx_pos_12e7dd114cfbd541_252_lastMessageId__fromC)
+HXDLIN( 252)		return this->lastMessageId();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,lastMessageId__fromC,return )
 
 ::String Chat_obj::lastMessageTimestamp(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_388_lastMessageTimestamp)
-HXDLIN( 388)		 ::snikket::ChatMessage tmp = this->lastMessage;
-HXDLIN( 388)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 388)			return tmp->timestamp;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_386_lastMessageTimestamp)
+HXDLIN( 386)		 ::snikket::ChatMessage tmp = this->lastMessage;
+HXDLIN( 386)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 386)			return tmp->timestamp;
             		}
             		else {
-HXDLIN( 388)			return null();
+HXDLIN( 386)			return null();
             		}
-HXDLIN( 388)		return null();
+HXDLIN( 386)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,lastMessageTimestamp,return )
 
 void Chat_obj::updateFromBookmark( ::snikket::Stanza item){
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_392_updateFromBookmark)
-HXLINE( 393)		 ::snikket::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
-HXLINE( 394)		::String fn = ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) );
-HXLINE( 395)		if (::hx::IsNotNull( fn )) {
-HXLINE( 395)			this->displayName = fn;
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_390_updateFromBookmark)
+HXLINE( 391)		 ::snikket::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE( 392)		::String fn = ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) );
+HXLINE( 393)		if (::hx::IsNotNull( fn )) {
+HXLINE( 393)			this->displayName = fn;
             		}
-HXLINE( 396)		int _hx_tmp;
-HXDLIN( 396)		bool _hx_tmp1;
-HXDLIN( 396)		if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
-HXLINE( 396)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
+HXLINE( 394)		int _hx_tmp;
+HXDLIN( 394)		bool _hx_tmp1;
+HXDLIN( 394)		if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
+HXLINE( 394)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
             		}
             		else {
-HXLINE( 396)			_hx_tmp1 = true;
+HXLINE( 394)			_hx_tmp1 = true;
             		}
-HXDLIN( 396)		if (_hx_tmp1) {
-HXLINE( 396)			if ((this->uiState == 0)) {
-HXLINE( 396)				_hx_tmp = 0;
+HXDLIN( 394)		if (_hx_tmp1) {
+HXLINE( 394)			if ((this->uiState == 0)) {
+HXLINE( 394)				_hx_tmp = 0;
             			}
             			else {
-HXLINE( 396)				_hx_tmp = 1;
+HXLINE( 394)				_hx_tmp = 1;
             			}
             		}
             		else {
-HXLINE( 396)			_hx_tmp = 2;
+HXLINE( 394)			_hx_tmp = 2;
             		}
-HXDLIN( 396)		this->uiState = _hx_tmp;
-HXLINE( 397)		 ::snikket::Stanza tmp = conf->getChild(HX_("extensions",14,7c,70,89),null());
-HXDLIN( 397)		 ::snikket::Stanza _hx_tmp2;
-HXDLIN( 397)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 397)			_hx_tmp2 = tmp;
+HXDLIN( 394)		this->uiState = _hx_tmp;
+HXLINE( 395)		 ::snikket::Stanza tmp = conf->getChild(HX_("extensions",14,7c,70,89),null());
+HXDLIN( 395)		 ::snikket::Stanza _hx_tmp2;
+HXDLIN( 395)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 395)			_hx_tmp2 = tmp;
             		}
             		else {
-HXLINE( 397)			_hx_tmp2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 395)			_hx_tmp2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
             		}
-HXDLIN( 397)		this->extensions = _hx_tmp2;
+HXDLIN( 395)		this->extensions = _hx_tmp2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,updateFromBookmark,(void))
 
 void Chat_obj::updateFromRoster( ::Dynamic item){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_401_updateFromRoster)
-HXLINE( 402)		bool _hx_tmp;
-HXDLIN( 402)		if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("both",81,88,1b,41) )) {
-HXLINE( 402)			_hx_tmp = ::hx::IsEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("from",6a,a5,c2,43) );
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_399_updateFromRoster)
+HXLINE( 400)		bool _hx_tmp;
+HXDLIN( 400)		if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("both",81,88,1b,41) )) {
+HXLINE( 400)			_hx_tmp = ::hx::IsEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("from",6a,a5,c2,43) );
             		}
             		else {
-HXLINE( 402)			_hx_tmp = true;
+HXLINE( 400)			_hx_tmp = true;
             		}
-HXDLIN( 402)		this->setTrusted(_hx_tmp);
-HXLINE( 403)		bool _hx_tmp1;
-HXDLIN( 403)		if (::hx::IsNotNull( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic) )) {
-HXLINE( 403)			_hx_tmp1 = ::hx::IsNotEq( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 400)		this->setTrusted(_hx_tmp);
+HXLINE( 401)		bool _hx_tmp1;
+HXDLIN( 401)		if (::hx::IsNotNull( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic) )) {
+HXLINE( 401)			_hx_tmp1 = ::hx::IsNotEq( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 403)			_hx_tmp1 = false;
+HXLINE( 401)			_hx_tmp1 = false;
             		}
-HXDLIN( 403)		if (_hx_tmp1) {
-HXLINE( 403)			this->displayName = ( (::String)(item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
+HXDLIN( 401)		if (_hx_tmp1) {
+HXLINE( 401)			this->displayName = ( (::String)(item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
             		}
             	}
 
@@ -1020,189 +1021,189 @@ HXLINE( 403)			this->displayName = ( (::String)(item->__Field(HX_("fn",48,59,00,
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,updateFromRoster,(void))
 
 ::String Chat_obj::getPhoto(){
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_409_getPhoto)
-HXLINE( 410)		bool _hx_tmp;
-HXDLIN( 410)		if (::hx::IsNotNull( this->avatarSha1 )) {
-HXLINE( 410)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(this->avatarSha1)->length < 1);
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_407_getPhoto)
+HXLINE( 408)		bool _hx_tmp;
+HXDLIN( 408)		if (::hx::IsNotNull( this->avatarSha1 )) {
+HXLINE( 408)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(this->avatarSha1)->length < 1);
             		}
             		else {
-HXLINE( 410)			_hx_tmp = true;
+HXLINE( 408)			_hx_tmp = true;
             		}
-HXDLIN( 410)		if (_hx_tmp) {
-HXLINE( 410)			return null();
+HXDLIN( 408)		if (_hx_tmp) {
+HXLINE( 408)			return null();
             		}
-HXLINE( 411)		return  ::snikket::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),this->avatarSha1)->toUri();
+HXLINE( 409)		return  ::snikket::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),this->avatarSha1)->toUri();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getPhoto,return )
 
 ::String Chat_obj::getPlaceholder(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_418_getPlaceholder)
-HXDLIN( 418)		::String _hx_tmp = this->chatId;
-HXDLIN( 418)		return ::snikket::Color_obj::defaultPhoto(_hx_tmp,this->getDisplayName().charAt(0).toUpperCase());
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_416_getPlaceholder)
+HXDLIN( 416)		::String _hx_tmp = this->chatId;
+HXDLIN( 416)		return ::snikket::Color_obj::defaultPhoto(_hx_tmp,this->getDisplayName().charAt(0).toUpperCase());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getPlaceholder,return )
 
 ::String Chat_obj::readUpTo(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_425_readUpTo)
-HXDLIN( 425)		return this->readUpToId;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_423_readUpTo)
+HXDLIN( 423)		return this->readUpToId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,readUpTo,return )
 
 int Chat_obj::unreadCount(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_432_unreadCount)
-HXDLIN( 432)		return this->_unreadCount;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_430_unreadCount)
+HXDLIN( 430)		return this->_unreadCount;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,unreadCount,return )
 
 void Chat_obj::setUnreadCount(int count){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_437_setUnreadCount)
-HXDLIN( 437)		this->_unreadCount = count;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_435_setUnreadCount)
+HXDLIN( 435)		this->_unreadCount = count;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setUnreadCount,(void))
 
 ::String Chat_obj::preview(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_443_preview)
-HXLINE( 444)		if (::hx::IsNull( this->lastMessage )) {
-HXLINE( 444)			return HX_("",00,00,00,00);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_441_preview)
+HXLINE( 442)		if (::hx::IsNull( this->lastMessage )) {
+HXLINE( 442)			return HX_("",00,00,00,00);
             		}
-HXLINE( 446)		if ((this->lastMessage->type == 1)) {
-HXLINE( 448)			if (this->lastMessage->isIncoming()) {
-HXLINE( 448)				return HX_("Incoming Call",18,e2,4d,47);
+HXLINE( 444)		if ((this->lastMessage->type == 1)) {
+HXLINE( 446)			if (this->lastMessage->isIncoming()) {
+HXLINE( 446)				return HX_("Incoming Call",18,e2,4d,47);
             			}
             			else {
-HXLINE( 448)				return HX_("Outgoing Call",d2,04,61,e8);
+HXLINE( 446)				return HX_("Outgoing Call",d2,04,61,e8);
             			}
             		}
             		else {
-HXLINE( 450)			return this->lastMessage->text;
+HXLINE( 448)			return this->lastMessage->text;
             		}
-HXLINE( 446)		return null();
+HXLINE( 444)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,preview,return )
 
 void Chat_obj::setLastMessage( ::snikket::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_456_setLastMessage)
-HXDLIN( 456)		this->lastMessage = message;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_454_setLastMessage)
+HXDLIN( 454)		this->lastMessage = message;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setLastMessage,(void))
 
 void Chat_obj::setDisplayName(::String fn){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_459_setDisplayName)
-HXLINE( 460)		this->displayName = fn;
-HXLINE( 461)		this->bookmark();
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_457_setDisplayName)
+HXLINE( 458)		this->displayName = fn;
+HXLINE( 459)		this->bookmark();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setDisplayName,(void))
 
 ::String Chat_obj::getDisplayName(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_467_getDisplayName)
-HXDLIN( 467)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 468)		::String fn;
-HXDLIN( 468)		bool fn1;
-HXDLIN( 468)		if ((this->displayName == this->chatId)) {
-HXLINE( 468)			::String fn2 = this->chatId;
-HXDLIN( 468)			fn1 = (fn2 == this->client->accountId());
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_465_getDisplayName)
+HXDLIN( 465)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 466)		::String fn;
+HXDLIN( 466)		bool fn1;
+HXDLIN( 466)		if ((this->displayName == this->chatId)) {
+HXLINE( 466)			::String fn2 = this->chatId;
+HXDLIN( 466)			fn1 = (fn2 == this->client->accountId());
             		}
             		else {
-HXLINE( 468)			fn1 = false;
+HXLINE( 466)			fn1 = false;
             		}
-HXDLIN( 468)		if (fn1) {
-HXLINE( 468)			fn = this->client->displayName();
+HXDLIN( 466)		if (fn1) {
+HXLINE( 466)			fn = this->client->displayName();
             		}
             		else {
-HXLINE( 468)			fn = this->displayName;
+HXLINE( 466)			fn = this->displayName;
             		}
-HXLINE( 469)		::Array< ::String > participants = this->getParticipants();
-HXLINE( 470)		bool _hx_tmp;
-HXDLIN( 470)		bool _hx_tmp1;
-HXDLIN( 470)		if ((fn == this->chatId)) {
-HXLINE( 470)			_hx_tmp1 = (participants->length > 2);
+HXLINE( 467)		::Array< ::String > participants = this->getParticipants();
+HXLINE( 468)		bool _hx_tmp;
+HXDLIN( 468)		bool _hx_tmp1;
+HXDLIN( 468)		if ((fn == this->chatId)) {
+HXLINE( 468)			_hx_tmp1 = (participants->length > 2);
             		}
             		else {
-HXLINE( 470)			_hx_tmp1 = false;
+HXLINE( 468)			_hx_tmp1 = false;
             		}
-HXDLIN( 470)		if (_hx_tmp1) {
-HXLINE( 470)			_hx_tmp = (participants->length < 20);
+HXDLIN( 468)		if (_hx_tmp1) {
+HXLINE( 468)			_hx_tmp = (participants->length < 20);
             		}
             		else {
-HXLINE( 470)			_hx_tmp = false;
-            		}
-HXDLIN( 470)		if (_hx_tmp) {
-HXLINE( 471)			::Array< ::String > result = ::Array_obj< ::String >::__new(participants->length);
-HXDLIN( 471)			{
-HXLINE( 471)				int _g = 0;
-HXDLIN( 471)				int _g1 = participants->length;
-HXDLIN( 471)				while((_g < _g1)){
-HXLINE( 471)					_g = (_g + 1);
-HXDLIN( 471)					int i = (_g - 1);
-HXDLIN( 471)					{
-HXLINE( 472)						 ::snikket::Participant p = _gthis->getParticipantDetails(( (::String)(_hx_array_unsafe_get(participants,i)) ));
-HXLINE( 471)						::String inValue;
-HXLINE( 473)						if (p->isSelf) {
-HXLINE( 471)							inValue = null();
+HXLINE( 468)			_hx_tmp = false;
+            		}
+HXDLIN( 468)		if (_hx_tmp) {
+HXLINE( 469)			::Array< ::String > result = ::Array_obj< ::String >::__new(participants->length);
+HXDLIN( 469)			{
+HXLINE( 469)				int _g = 0;
+HXDLIN( 469)				int _g1 = participants->length;
+HXDLIN( 469)				while((_g < _g1)){
+HXLINE( 469)					_g = (_g + 1);
+HXDLIN( 469)					int i = (_g - 1);
+HXDLIN( 469)					{
+HXLINE( 470)						 ::snikket::Participant p = _gthis->getParticipantDetails(( (::String)(_hx_array_unsafe_get(participants,i)) ));
+HXLINE( 469)						::String inValue;
+HXLINE( 471)						if (p->isSelf) {
+HXLINE( 469)							inValue = null();
             						}
             						else {
-HXLINE( 471)							inValue = p->displayName;
+HXLINE( 469)							inValue = p->displayName;
             						}
-HXDLIN( 471)						result->__unsafe_set(i,inValue);
+HXDLIN( 469)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 471)			::Array< ::String > _g2 = ::Array_obj< ::String >::__new(0);
-HXDLIN( 471)			{
-HXLINE( 471)				int _g3 = 0;
-HXDLIN( 471)				::Array< ::String > _g4 = result;
-HXDLIN( 471)				while((_g3 < _g4->length)){
-HXLINE( 471)					::String v = _g4->__get(_g3);
-HXDLIN( 471)					_g3 = (_g3 + 1);
-HXDLIN( 471)					if (::hx::IsNotNull( v )) {
-HXLINE( 471)						_g2->push(v);
+HXDLIN( 469)			::Array< ::String > _g2 = ::Array_obj< ::String >::__new(0);
+HXDLIN( 469)			{
+HXLINE( 469)				int _g3 = 0;
+HXDLIN( 469)				::Array< ::String > _g4 = result;
+HXDLIN( 469)				while((_g3 < _g4->length)){
+HXLINE( 469)					::String v = _g4->__get(_g3);
+HXDLIN( 469)					_g3 = (_g3 + 1);
+HXDLIN( 469)					if (::hx::IsNotNull( v )) {
+HXLINE( 469)						_g2->push(v);
             					}
             				}
             			}
-HXDLIN( 471)			return _g2->join(HX_(", ",74,26,00,00));
+HXDLIN( 469)			return _g2->join(HX_(", ",74,26,00,00));
             		}
             		else {
-HXLINE( 476)			return fn;
+HXLINE( 474)			return fn;
             		}
-HXLINE( 470)		return null();
+HXLINE( 468)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getDisplayName,return )
 
 void Chat_obj::setPresence(::String resource, ::snikket::Presence presence){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_482_setPresence)
-HXDLIN( 482)		this->presence->set(resource,presence);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_480_setPresence)
+HXDLIN( 480)		this->presence->set(resource,presence);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setPresence,(void))
 
 void Chat_obj::setCaps(::String resource, ::snikket::Caps caps){
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_486_setCaps)
-HXLINE( 487)		 ::snikket::Presence presence = ( ( ::snikket::Presence)(this->presence->get(resource)) );
-HXLINE( 488)		if (::hx::IsNotNull( presence )) {
-HXLINE( 489)			presence->caps = caps;
-HXLINE( 490)			this->setPresence(resource,presence);
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_484_setCaps)
+HXLINE( 485)		 ::snikket::Presence presence = ( ( ::snikket::Presence)(this->presence->get(resource)) );
+HXLINE( 486)		if (::hx::IsNotNull( presence )) {
+HXLINE( 487)			presence->caps = caps;
+HXLINE( 488)			this->setPresence(resource,presence);
             		}
             		else {
-HXLINE( 492)			this->setPresence(resource, ::snikket::Presence_obj::__alloc( HX_CTX ,caps,null()));
+HXLINE( 490)			this->setPresence(resource, ::snikket::Presence_obj::__alloc( HX_CTX ,caps,null()));
             		}
             	}
 
@@ -1210,8 +1211,8 @@ HXLINE( 492)			this->setPresence(resource, ::snikket::Presence_obj::__alloc( HX_
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setCaps,(void))
 
 void Chat_obj::removePresence(::String resource){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_498_removePresence)
-HXDLIN( 498)		this->presence->remove(resource);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_496_removePresence)
+HXDLIN( 496)		this->presence->remove(resource);
             	}
 
 
@@ -1220,17 +1221,17 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,removePresence,(void))
  ::Dynamic Chat_obj::getCaps(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,iter) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_506_getCaps)
-HXLINE( 507)			 ::Dynamic n = iter->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 508)			return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_504_getCaps)
+HXLINE( 505)			 ::Dynamic n = iter->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 506)			return  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("key",9f,89,51,00), ::Dynamic(n->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)))
             				->setFixed(1,HX_("value",71,7f,b8,31),( ( ::snikket::Presence)(n->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) )->caps));
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_502_getCaps)
-HXLINE( 503)		 ::Dynamic iter =  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,this->presence);
-HXLINE( 504)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_500_getCaps)
+HXLINE( 501)		 ::Dynamic iter =  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,this->presence);
+HXLINE( 502)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("hasNext",6d,a5,46,18), ::Dynamic(iter->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)))
             			->setFixed(1,HX_("next",f3,84,02,49), ::Dynamic(new _hx_Closure_0(iter))));
             	}
@@ -1239,188 +1240,188 @@ HXLINE( 504)		return  ::Dynamic(::hx::Anon_obj::Create(2)
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getCaps,return )
 
  ::snikket::Caps Chat_obj::getResourceCaps(::String resource){
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_515_getResourceCaps)
-HXDLIN( 515)		 ::snikket::Presence tmp = ( ( ::snikket::Presence)(this->presence->get(resource)) );
-HXDLIN( 515)		 ::snikket::Caps tmp1;
-HXDLIN( 515)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 515)			tmp1 = tmp->caps;
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_513_getResourceCaps)
+HXDLIN( 513)		 ::snikket::Presence tmp = ( ( ::snikket::Presence)(this->presence->get(resource)) );
+HXDLIN( 513)		 ::snikket::Caps tmp1;
+HXDLIN( 513)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 513)			tmp1 = tmp->caps;
             		}
             		else {
-HXDLIN( 515)			tmp1 = null();
+HXDLIN( 513)			tmp1 = null();
             		}
-HXDLIN( 515)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 515)			return tmp1;
+HXDLIN( 513)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 513)			return tmp1;
             		}
             		else {
-HXDLIN( 515)			return  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0));
+HXDLIN( 513)			return  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0));
             		}
-HXDLIN( 515)		return null();
+HXDLIN( 513)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,getResourceCaps,return )
 
 void Chat_obj::setAvatarSha1(::Array< unsigned char > sha1){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_520_setAvatarSha1)
-HXDLIN( 520)		this->avatarSha1 = sha1;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_518_setAvatarSha1)
+HXDLIN( 518)		this->avatarSha1 = sha1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setAvatarSha1,(void))
 
 void Chat_obj::setTrusted(bool trusted){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_524_setTrusted)
-HXDLIN( 524)		this->trusted = trusted;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_522_setTrusted)
+HXDLIN( 522)		this->trusted = trusted;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setTrusted,(void))
 
 bool Chat_obj::isTrusted(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_531_isTrusted)
-HXDLIN( 531)		return this->trusted;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_529_isTrusted)
+HXDLIN( 529)		return this->trusted;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,isTrusted,return )
 
 bool Chat_obj::livePresence(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_536_livePresence)
-HXDLIN( 536)		return true;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_534_livePresence)
+HXDLIN( 534)		return true;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,livePresence,return )
 
 bool Chat_obj::syncing(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_540_syncing)
-HXDLIN( 540)		return !(this->client->inSync);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_538_syncing)
+HXDLIN( 538)		return !(this->client->inSync);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,syncing,return )
 
 bool Chat_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_546_canAudioCall)
-HXLINE( 547)		{
-HXLINE( 547)			::Dynamic map = this->presence;
-HXDLIN( 547)			::Dynamic _g_map = map;
-HXDLIN( 547)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 547)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 547)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 547)				 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 547)				::String _g_key = key;
-HXDLIN( 547)				::String resource = _g_key;
-HXDLIN( 547)				 ::snikket::Presence p = _g_value;
-HXLINE( 548)				bool _hx_tmp;
-HXDLIN( 548)				 ::snikket::Caps tmp = p->caps;
-HXDLIN( 548)				::Array< ::String > tmp1;
-HXDLIN( 548)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 548)					tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_544_canAudioCall)
+HXLINE( 545)		{
+HXLINE( 545)			::Dynamic map = this->presence;
+HXDLIN( 545)			::Dynamic _g_map = map;
+HXDLIN( 545)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 545)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 545)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 545)				 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 545)				::String _g_key = key;
+HXDLIN( 545)				::String resource = _g_key;
+HXDLIN( 545)				 ::snikket::Presence p = _g_value;
+HXLINE( 546)				bool _hx_tmp;
+HXDLIN( 546)				 ::snikket::Caps tmp = p->caps;
+HXDLIN( 546)				::Array< ::String > tmp1;
+HXDLIN( 546)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 546)					tmp1 = tmp->features;
             				}
             				else {
-HXLINE( 548)					tmp1 = null();
+HXLINE( 546)					tmp1 = null();
             				}
-HXDLIN( 548)				 ::Dynamic tmp2;
-HXDLIN( 548)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 548)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+HXDLIN( 546)				 ::Dynamic tmp2;
+HXDLIN( 546)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 546)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             				}
             				else {
-HXLINE( 548)					tmp2 = null();
+HXLINE( 546)					tmp2 = null();
             				}
-HXDLIN( 548)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 548)					_hx_tmp = ( (bool)(tmp2) );
+HXDLIN( 546)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 546)					_hx_tmp = ( (bool)(tmp2) );
             				}
             				else {
-HXLINE( 548)					_hx_tmp = false;
+HXLINE( 546)					_hx_tmp = false;
             				}
-HXDLIN( 548)				if (_hx_tmp) {
-HXLINE( 548)					return true;
+HXDLIN( 546)				if (_hx_tmp) {
+HXLINE( 546)					return true;
             				}
             			}
             		}
-HXLINE( 551)		return false;
+HXLINE( 549)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canAudioCall,return )
 
 bool Chat_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_557_canVideoCall)
-HXLINE( 558)		{
-HXLINE( 558)			::Dynamic map = this->presence;
-HXDLIN( 558)			::Dynamic _g_map = map;
-HXDLIN( 558)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 558)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 558)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 558)				 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 558)				::String _g_key = key;
-HXDLIN( 558)				::String resource = _g_key;
-HXDLIN( 558)				 ::snikket::Presence p = _g_value;
-HXLINE( 559)				bool _hx_tmp;
-HXDLIN( 559)				 ::snikket::Caps tmp = p->caps;
-HXDLIN( 559)				::Array< ::String > tmp1;
-HXDLIN( 559)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 559)					tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_555_canVideoCall)
+HXLINE( 556)		{
+HXLINE( 556)			::Dynamic map = this->presence;
+HXDLIN( 556)			::Dynamic _g_map = map;
+HXDLIN( 556)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 556)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 556)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 556)				 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 556)				::String _g_key = key;
+HXDLIN( 556)				::String resource = _g_key;
+HXDLIN( 556)				 ::snikket::Presence p = _g_value;
+HXLINE( 557)				bool _hx_tmp;
+HXDLIN( 557)				 ::snikket::Caps tmp = p->caps;
+HXDLIN( 557)				::Array< ::String > tmp1;
+HXDLIN( 557)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 557)					tmp1 = tmp->features;
             				}
             				else {
-HXLINE( 559)					tmp1 = null();
+HXLINE( 557)					tmp1 = null();
             				}
-HXDLIN( 559)				 ::Dynamic tmp2;
-HXDLIN( 559)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 559)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+HXDLIN( 557)				 ::Dynamic tmp2;
+HXDLIN( 557)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 557)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             				}
             				else {
-HXLINE( 559)					tmp2 = null();
+HXLINE( 557)					tmp2 = null();
             				}
-HXDLIN( 559)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 559)					_hx_tmp = ( (bool)(tmp2) );
+HXDLIN( 557)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 557)					_hx_tmp = ( (bool)(tmp2) );
             				}
             				else {
-HXLINE( 559)					_hx_tmp = false;
+HXLINE( 557)					_hx_tmp = false;
             				}
-HXDLIN( 559)				if (_hx_tmp) {
-HXLINE( 559)					return true;
+HXDLIN( 557)				if (_hx_tmp) {
+HXLINE( 557)					return true;
             				}
             			}
             		}
-HXLINE( 562)		return false;
+HXLINE( 560)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canVideoCall,return )
 
 void Chat_obj::startCall(bool audio,bool video){
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_571_startCall)
-HXLINE( 572)		 ::snikket::Client session = this->client;
-HXDLIN( 572)		 ::snikket::jingle::OutgoingProposedSession session1 =  ::snikket::jingle::OutgoingProposedSession_obj::__alloc( HX_CTX ,session,::snikket::JID_obj::parse(this->chatId));
-HXLINE( 573)		{
-HXLINE( 573)			::Dynamic this1 = this->jingleSessions;
-HXDLIN( 573)			( ( ::haxe::ds::StringMap)(this1) )->set(session1->get_sid(),session1);
-            		}
-HXLINE( 574)		session1->propose(audio,video);
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_569_startCall)
+HXLINE( 570)		 ::snikket::Client session = this->client;
+HXDLIN( 570)		 ::snikket::jingle::OutgoingProposedSession session1 =  ::snikket::jingle::OutgoingProposedSession_obj::__alloc( HX_CTX ,session,::snikket::JID_obj::parse(this->chatId));
+HXLINE( 571)		{
+HXLINE( 571)			::Dynamic this1 = this->jingleSessions;
+HXDLIN( 571)			( ( ::haxe::ds::StringMap)(this1) )->set(session1->get_sid(),session1);
+            		}
+HXLINE( 572)		session1->propose(audio,video);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,startCall,(void))
 
 void Chat_obj::addMedia(::Array< ::Dynamic> streams){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_578_addMedia)
-HXLINE( 579)		if ((this->callStatus() != HX_("ongoing",3b,aa,04,9b))) {
-HXLINE( 579)			HX_STACK_DO_THROW(HX_("cannot add media when no call ongoing",6a,0b,2b,6e));
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_576_addMedia)
+HXLINE( 577)		if ((this->callStatus() != HX_("ongoing",3b,aa,04,9b))) {
+HXLINE( 577)			HX_STACK_DO_THROW(HX_("cannot add media when no call ongoing",6a,0b,2b,6e));
             		}
-HXLINE( 580)		::snikket::jingle::Session_obj::addMedia(this->jingleSessions->iterator()->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)(),streams);
+HXLINE( 578)		::snikket::jingle::Session_obj::addMedia(this->jingleSessions->iterator()->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)(),streams);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,addMedia,(void))
 
 void Chat_obj::acceptCall(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_587_acceptCall)
-HXDLIN( 587)		 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 587)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 587)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 588)			::snikket::jingle::Session_obj::accept(session1);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_585_acceptCall)
+HXDLIN( 585)		 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 585)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 585)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 586)			::snikket::jingle::Session_obj::accept(session1);
             		}
             	}
 
@@ -1428,14 +1429,14 @@ HXLINE( 588)			::snikket::jingle::Session_obj::accept(session1);
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,acceptCall,(void))
 
 void Chat_obj::hangup(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_596_hangup)
-HXDLIN( 596)		 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 596)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 596)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 597)			::snikket::jingle::Session_obj::hangup(session1);
-HXLINE( 598)			{
-HXLINE( 598)				::Dynamic this1 = this->jingleSessions;
-HXDLIN( 598)				( ( ::haxe::ds::StringMap)(this1) )->remove(::snikket::jingle::Session_obj::get_sid(session1));
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_594_hangup)
+HXDLIN( 594)		 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 594)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 594)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 595)			::snikket::jingle::Session_obj::hangup(session1);
+HXLINE( 596)			{
+HXLINE( 596)				::Dynamic this1 = this->jingleSessions;
+HXDLIN( 596)				( ( ::haxe::ds::StringMap)(this1) )->remove(::snikket::jingle::Session_obj::get_sid(session1));
             			}
             		}
             	}
@@ -1444,159 +1445,159 @@ HXDLIN( 598)				( ( ::haxe::ds::StringMap)(this1) )->remove(::snikket::jingle::S
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,hangup,(void))
 
 ::String Chat_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_605_callStatus)
-HXLINE( 606)		{
-HXLINE( 606)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 606)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 606)				::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 607)				return ::snikket::jingle::Session_obj::callStatus(session1);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_603_callStatus)
+HXLINE( 604)		{
+HXLINE( 604)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 604)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 604)				::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 605)				return ::snikket::jingle::Session_obj::callStatus(session1);
             			}
             		}
-HXLINE( 610)		return HX_("none",b8,12,0a,49);
+HXLINE( 608)		return HX_("none",b8,12,0a,49);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,callStatus,return )
 
  ::snikket::jingle::DTMFSender Chat_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_616_dtmf)
-HXLINE( 617)		{
-HXLINE( 617)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 617)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 617)				::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 618)				 ::snikket::jingle::DTMFSender dtmf = ::snikket::jingle::Session_obj::dtmf(session1);
-HXLINE( 619)				if (::hx::IsNotNull( dtmf )) {
-HXLINE( 619)					return dtmf;
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_614_dtmf)
+HXLINE( 615)		{
+HXLINE( 615)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 615)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 615)				::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 616)				 ::snikket::jingle::DTMFSender dtmf = ::snikket::jingle::Session_obj::dtmf(session1);
+HXLINE( 617)				if (::hx::IsNotNull( dtmf )) {
+HXLINE( 617)					return dtmf;
             				}
             			}
             		}
-HXLINE( 622)		return null();
+HXLINE( 620)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,dtmf,return )
 
 ::Array< ::Dynamic> Chat_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_629_videoTracks)
-HXDLIN( 629)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 629)		{
-HXDLIN( 629)			 ::Dynamic x = this->jingleSessions->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 629)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 629)				::Dynamic x1 = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 629)				_g->push(::snikket::jingle::Session_obj::videoTracks(x1));
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_627_videoTracks)
+HXDLIN( 627)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 627)		{
+HXDLIN( 627)			 ::Dynamic x = this->jingleSessions->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 627)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 627)				::Dynamic x1 = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 627)				_g->push(::snikket::jingle::Session_obj::videoTracks(x1));
             			}
             		}
-HXDLIN( 629)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 629)		{
-HXDLIN( 629)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 629)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 629)				 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 629)				{
-HXDLIN( 629)					 ::Dynamic x2 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 629)					while(( (bool)(x2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 629)						 ::snikket::jingle::MediaStreamTrack x3 = ( ( ::snikket::jingle::MediaStreamTrack)(x2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 629)						_g1->push(x3);
+HXDLIN( 627)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 627)		{
+HXDLIN( 627)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 627)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 627)				 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 627)				{
+HXDLIN( 627)					 ::Dynamic x2 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 627)					while(( (bool)(x2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 627)						 ::snikket::jingle::MediaStreamTrack x3 = ( ( ::snikket::jingle::MediaStreamTrack)(x2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 627)						_g1->push(x3);
             					}
             				}
             			}
             		}
-HXDLIN( 629)		return _g1;
+HXDLIN( 627)		return _g1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,videoTracks,return )
 
 size_t Chat_obj::videoTracks__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_12e7dd114cfbd541_242_videoTracks__fromC)
-HXDLIN( 242)		::Array< ::Dynamic> out = this->videoTracks();
-HXDLIN( 242)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 242)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 242)			{
-HXDLIN( 242)				int _g = 0;
-HXDLIN( 242)				while((_g < out->length)){
-HXDLIN( 242)					 ::snikket::jingle::MediaStreamTrack el = out->__get(_g).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
-HXDLIN( 242)					_g = (_g + 1);
-HXDLIN( 242)					{
-HXDLIN( 242)						 ::Dynamic haxeObject = el;
-HXDLIN( 242)						void* ptr = haxeObject.mPtr;
-HXDLIN( 242)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 242)						{
-HXDLIN( 242)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 242)							int high = ptrInt64 >> 32;
-HXDLIN( 242)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 242)							if (::hx::IsNull( highMap )) {
-HXDLIN( 242)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_12e7dd114cfbd541_250_videoTracks__fromC)
+HXDLIN( 250)		::Array< ::Dynamic> out = this->videoTracks();
+HXDLIN( 250)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 250)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 250)			{
+HXDLIN( 250)				int _g = 0;
+HXDLIN( 250)				while((_g < out->length)){
+HXDLIN( 250)					 ::snikket::jingle::MediaStreamTrack el = out->__get(_g).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
+HXDLIN( 250)					_g = (_g + 1);
+HXDLIN( 250)					{
+HXDLIN( 250)						 ::Dynamic haxeObject = el;
+HXDLIN( 250)						void* ptr = haxeObject.mPtr;
+HXDLIN( 250)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 250)						{
+HXDLIN( 250)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 250)							int high = ptrInt64 >> 32;
+HXDLIN( 250)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 250)							if (::hx::IsNull( highMap )) {
+HXDLIN( 250)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)								this1->set(low,highMap);
             							}
-HXDLIN( 242)							highMap->set(high,haxeObject);
+HXDLIN( 250)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 242)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 242)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 242)			{
-HXDLIN( 242)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 242)				int high1 = ptrInt641 >> 32;
-HXDLIN( 242)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 242)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 242)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)					this2->set(low1,highMap1);
+HXDLIN( 250)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 250)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 250)			{
+HXDLIN( 250)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 250)				int high1 = ptrInt641 >> 32;
+HXDLIN( 250)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 250)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 250)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)					this2->set(low1,highMap1);
             				}
-HXDLIN( 242)				highMap1->set(high1,out);
+HXDLIN( 250)				highMap1->set(high1,out);
             			}
-HXDLIN( 242)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 250)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 242)		return ( (size_t)(out->length) );
+HXDLIN( 250)		return ( (size_t)(out->length) );
             	}
 
 
 void Chat_obj::markReadUpToId(::String upTo,::String upToBy, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Chat,_gthis, ::Dynamic,callback) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_640_markReadUpToId)
-HXLINE( 641)			int i = messages->length;
-HXLINE( 642)			while(true){
-HXLINE( 642)				i = (i - 1);
-HXDLIN( 642)				if (!((i >= 0))) {
-HXLINE( 642)					goto _hx_goto_90;
+            			HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_638_markReadUpToId)
+HXLINE( 639)			int i = messages->length;
+HXLINE( 640)			while(true){
+HXLINE( 640)				i = (i - 1);
+HXDLIN( 640)				if (!((i >= 0))) {
+HXLINE( 640)					goto _hx_goto_90;
             				}
-HXLINE( 643)				bool _hx_tmp;
-HXDLIN( 643)				if ((messages->__get(i).StaticCast<  ::snikket::ChatMessage >()->serverId != _gthis->readUpToId)) {
-HXLINE( 643)					_hx_tmp = !(messages->__get(i).StaticCast<  ::snikket::ChatMessage >()->isIncoming());
+HXLINE( 641)				bool _hx_tmp;
+HXDLIN( 641)				if ((messages->__get(i).StaticCast<  ::snikket::ChatMessage >()->serverId != _gthis->readUpToId)) {
+HXLINE( 641)					_hx_tmp = !(messages->__get(i).StaticCast<  ::snikket::ChatMessage >()->isIncoming());
             				}
             				else {
-HXLINE( 643)					_hx_tmp = true;
+HXLINE( 641)					_hx_tmp = true;
             				}
-HXDLIN( 643)				if (_hx_tmp) {
-HXLINE( 643)					goto _hx_goto_90;
+HXDLIN( 641)				if (_hx_tmp) {
+HXLINE( 641)					goto _hx_goto_90;
             				}
             			}
             			_hx_goto_90:;
-HXLINE( 645)			_gthis->setUnreadCount((messages->length - (i + 1)));
-HXLINE( 646)			if (::hx::IsNotNull( callback )) {
-HXLINE( 646)				callback();
+HXLINE( 643)			_gthis->setUnreadCount((messages->length - (i + 1)));
+HXLINE( 644)			if (::hx::IsNotNull( callback )) {
+HXLINE( 644)				callback();
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_633_markReadUpToId)
-HXDLIN( 633)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 634)		if (::hx::IsNull( upTo )) {
-HXLINE( 634)			return;
-            		}
-HXLINE( 635)		if ((this->readUpTo() == upTo)) {
-HXLINE( 635)			return;
-            		}
-HXLINE( 637)		this->readUpToId = upTo;
-HXLINE( 638)		this->readUpToBy = upToBy;
-HXLINE( 639)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 639)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 640)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 640)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN( 640)		::snikket::Persistence_obj::getMessagesBefore(_hx_tmp1,_hx_tmp2,this->chatId,null(),null(), ::Dynamic(new _hx_Closure_0(_gthis,callback)));
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_631_markReadUpToId)
+HXDLIN( 631)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 632)		if (::hx::IsNull( upTo )) {
+HXLINE( 632)			return;
+            		}
+HXLINE( 633)		if ((this->readUpTo() == upTo)) {
+HXLINE( 633)			return;
+            		}
+HXLINE( 635)		this->readUpToId = upTo;
+HXLINE( 636)		this->readUpToBy = upToBy;
+HXLINE( 637)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 637)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 638)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 638)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN( 638)		::snikket::Persistence_obj::getMessagesBefore(_hx_tmp1,_hx_tmp2,this->chatId,null(),null(), ::Dynamic(new _hx_Closure_0(_gthis,callback)));
             	}
 
 
@@ -1605,46 +1606,46 @@ HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,markReadUpToId,(void))
 void Chat_obj::markReadUpToMessage( ::snikket::ChatMessage message, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::Chat,_gthis, ::snikket::ChatMessage,message, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::snikket::ChatMessage readMessage){
-            			HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_659_markReadUpToMessage)
-HXLINE( 660)			bool _hx_tmp;
-HXDLIN( 660)			if (::hx::IsNotNull( readMessage )) {
-HXLINE( 660)				_hx_tmp = (::Reflect_obj::compare(message->timestamp,readMessage->timestamp) <= 0);
+            			HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_657_markReadUpToMessage)
+HXLINE( 658)			bool _hx_tmp;
+HXDLIN( 658)			if (::hx::IsNotNull( readMessage )) {
+HXLINE( 658)				_hx_tmp = (::Reflect_obj::compare(message->timestamp,readMessage->timestamp) <= 0);
             			}
             			else {
-HXLINE( 660)				_hx_tmp = false;
+HXLINE( 658)				_hx_tmp = false;
             			}
-HXDLIN( 660)			if (_hx_tmp) {
-HXLINE( 660)				return;
+HXDLIN( 658)			if (_hx_tmp) {
+HXLINE( 658)				return;
             			}
-HXLINE( 662)			_gthis->markReadUpToId(message->serverId,message->serverIdBy,callback);
+HXLINE( 660)			_gthis->markReadUpToId(message->serverId,message->serverIdBy,callback);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_650_markReadUpToMessage)
-HXDLIN( 650)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 651)		bool _hx_tmp;
-HXDLIN( 651)		if (::hx::IsNotNull( message->serverId )) {
-HXLINE( 651)			::String _hx_tmp1 = message->chatId();
-HXDLIN( 651)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_648_markReadUpToMessage)
+HXDLIN( 648)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 649)		bool _hx_tmp;
+HXDLIN( 649)		if (::hx::IsNotNull( message->serverId )) {
+HXLINE( 649)			::String _hx_tmp1 = message->chatId();
+HXDLIN( 649)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE( 651)			_hx_tmp = true;
+HXLINE( 649)			_hx_tmp = true;
             		}
-HXDLIN( 651)		if (_hx_tmp) {
-HXLINE( 651)			return;
+HXDLIN( 649)		if (_hx_tmp) {
+HXLINE( 649)			return;
             		}
-HXLINE( 652)		::String _hx_tmp2 = this->readUpTo();
-HXDLIN( 652)		if ((_hx_tmp2 == message->serverId)) {
-HXLINE( 652)			return;
+HXLINE( 650)		::String _hx_tmp2 = this->readUpTo();
+HXDLIN( 650)		if ((_hx_tmp2 == message->serverId)) {
+HXLINE( 650)			return;
             		}
-HXLINE( 654)		if (::hx::IsNull( this->readUpTo() )) {
-HXLINE( 655)			this->markReadUpToId(message->serverId,message->serverIdBy,callback);
-HXLINE( 656)			return;
+HXLINE( 652)		if (::hx::IsNull( this->readUpTo() )) {
+HXLINE( 653)			this->markReadUpToId(message->serverId,message->serverIdBy,callback);
+HXLINE( 654)			return;
             		}
-HXLINE( 659)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 659)		::String _hx_tmp4 = this->client->accountId();
-HXDLIN( 659)		::String _hx_tmp5 = this->chatId;
-HXDLIN( 659)		::snikket::Persistence_obj::getMessage(_hx_tmp3,_hx_tmp4,_hx_tmp5,this->readUpTo(),null(), ::Dynamic(new _hx_Closure_0(_gthis,message,callback)));
+HXLINE( 657)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN( 657)		::String _hx_tmp4 = this->client->accountId();
+HXDLIN( 657)		::String _hx_tmp5 = this->chatId;
+HXDLIN( 657)		::snikket::Persistence_obj::getMessage(_hx_tmp3,_hx_tmp4,_hx_tmp5,this->readUpTo(),null(), ::Dynamic(new _hx_Closure_0(_gthis,message,callback)));
             	}
 
 
@@ -1653,28 +1654,28 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,markReadUpToMessage,(void))
 void Chat_obj::publishMds(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::Chat,_gthis) HXARGC(1)
             		void _hx_run( ::snikket::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_684_publishMds)
-HXLINE( 684)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 685)				 ::snikket::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN( 685)				 ::snikket::Stanza preconditionError;
-HXDLIN( 685)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 685)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
+            			HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_682_publishMds)
+HXLINE( 682)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE( 683)				 ::snikket::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN( 683)				 ::snikket::Stanza preconditionError;
+HXDLIN( 683)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 683)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
             				}
             				else {
-HXLINE( 685)					preconditionError = null();
+HXLINE( 683)					preconditionError = null();
             				}
-HXLINE( 686)				if (::hx::IsNotNull( preconditionError )) {
+HXLINE( 684)				if (::hx::IsNotNull( preconditionError )) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Chat,_gthis) HXARGC(1)
             					void _hx_run( ::snikket::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_700_publishMds)
-HXLINE( 700)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
-HXLINE( 701)							_gthis->publishMds();
+            						HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_698_publishMds)
+HXLINE( 698)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
+HXLINE( 699)							_gthis->publishMds();
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 688)					 ::snikket::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 688)					_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 686)					 ::snikket::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 686)					_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))))->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
@@ -1691,17 +1692,17 @@ HXDLIN( 688)					_gthis1->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("i
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_666_publishMds)
-HXDLIN( 666)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 667)		 ::snikket::GenericStream _hx_tmp = this->stream;
-HXLINE( 668)		 ::snikket::Stanza _hx_tmp1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_3993c1e3d3f53fe2_664_publishMds)
+HXDLIN( 664)		 ::snikket::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 665)		 ::snikket::GenericStream _hx_tmp = this->stream;
+HXLINE( 666)		 ::snikket::Stanza _hx_tmp1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))));
-HXLINE( 673)		::String _hx_tmp2 = this->readUpTo();
-HXLINE( 667)		_hx_tmp->sendIq(_hx_tmp1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 671)		::String _hx_tmp2 = this->readUpTo();
+HXLINE( 665)		_hx_tmp->sendIq(_hx_tmp1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("by",d7,55,00,00),this->readUpToBy)
             			->setFixed(1,HX_("id",db,5b,00,00),_hx_tmp2)
             			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up()->up()->up()->tag(HX_("publish-options",60,0b,5c,74),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
diff --git a/Sources/c_snikket/src/snikket/ChatAttachment.cpp b/Sources/c_snikket/src/snikket/ChatAttachment.cpp
index e94b45b..1d1defb 100644
--- a/Sources/c_snikket/src/snikket/ChatAttachment.cpp
+++ b/Sources/c_snikket/src/snikket/ChatAttachment.cpp
@@ -18,11 +18,11 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_ca1a43507843787c_45_new,"snikket.ChatAttachment","new",0x546decbe,"snikket.ChatAttachment.new","snikket/ChatMessage.hx",45,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_307_name__fromC,"snikket.ChatAttachment","name__fromC",0xe8a157ec,"snikket.ChatAttachment.name__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_307_mime__fromC,"snikket.ChatAttachment","mime__fromC",0x6a16aba3,"snikket.ChatAttachment.mime__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_307_size__fromC,"snikket.ChatAttachment","size__fromC",0x258f8436,"snikket.ChatAttachment.size__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_297_uris__fromC,"snikket.ChatAttachment","uris__fromC",0x08a4d630,"snikket.ChatAttachment.uris__fromC","HaxeCBridge.hx",297,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_297_hashes__fromC,"snikket.ChatAttachment","hashes__fromC",0x7bbb061b,"snikket.ChatAttachment.hashes__fromC","HaxeCBridge.hx",297,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_355_name__fromC,"snikket.ChatAttachment","name__fromC",0xe8a157ec,"snikket.ChatAttachment.name__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_355_mime__fromC,"snikket.ChatAttachment","mime__fromC",0x6a16aba3,"snikket.ChatAttachment.mime__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_355_size__fromC,"snikket.ChatAttachment","size__fromC",0x258f8436,"snikket.ChatAttachment.size__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_334_uris__fromC,"snikket.ChatAttachment","uris__fromC",0x08a4d630,"snikket.ChatAttachment.uris__fromC","HaxeCBridge.hx",334,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_78db3de7bf8d6ae8_334_hashes__fromC,"snikket.ChatAttachment","hashes__fromC",0x7bbb061b,"snikket.ChatAttachment.hashes__fromC","HaxeCBridge.hx",334,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_ca1a43507843787c_55_create,"snikket.ChatAttachment","create",0xf450d95e,"snikket.ChatAttachment.create","snikket/ChatMessage.hx",55,0x79a8b101)
 HX_LOCAL_STACK_FRAME(_hx_pos_ca1a43507843787c_32_boot,"snikket.ChatAttachment","boot",0x83da3a14,"snikket.ChatAttachment.boot","snikket/ChatMessage.hx",32,0x79a8b101)
 namespace snikket{
@@ -52,128 +52,128 @@ bool ChatAttachment_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ChatAttachment_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_307_name__fromC)
-HXDLIN( 307)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_355_name__fromC)
+HXDLIN( 355)		return this->name;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,name__fromC,return )
 
 ::String ChatAttachment_obj::mime__fromC(){
-            	HX_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_307_mime__fromC)
-HXDLIN( 307)		return this->mime;
+            	HX_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_355_mime__fromC)
+HXDLIN( 355)		return this->mime;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,mime__fromC,return )
 
  ::Dynamic ChatAttachment_obj::size__fromC(){
-            	HX_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_307_size__fromC)
-HXDLIN( 307)		return this->size;
+            	HX_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_355_size__fromC)
+HXDLIN( 355)		return this->size;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,size__fromC,return )
 
 size_t ChatAttachment_obj::uris__fromC(const char*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_297_uris__fromC)
-HXDLIN( 297)		::Array< ::String > x = this->uris;
-HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 297)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 297)			::Array< ::String > x1 = x;
-HXDLIN( 297)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->length);
-HXDLIN( 297)			{
-HXDLIN( 297)				int _g_current = 0;
-HXDLIN( 297)				::Array< ::String > _g_array = x1;
-HXDLIN( 297)				while((_g_current < _g_array->length)){
-HXDLIN( 297)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 297)					_g_current = (_g_current + 1);
-HXDLIN( 297)					int _g_key = (_g_current - 1);
-HXDLIN( 297)					int i = _g_key;
-HXDLIN( 297)					::String el = _g_value;
-HXDLIN( 297)					{
-HXDLIN( 297)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 297)						{
-HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 297)							int high = ptrInt64 >> 32;
-HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 297)							if (::hx::IsNull( highMap )) {
-HXLINE(2083)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXLINE( 297)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_334_uris__fromC)
+HXDLIN( 334)		::Array< ::String > x = this->uris;
+HXDLIN( 334)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 334)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 334)			::Array< ::String > x1 = x;
+HXDLIN( 334)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->length);
+HXDLIN( 334)			{
+HXDLIN( 334)				int _g_current = 0;
+HXDLIN( 334)				::Array< ::String > _g_array = x1;
+HXDLIN( 334)				while((_g_current < _g_array->length)){
+HXDLIN( 334)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 334)					_g_current = (_g_current + 1);
+HXDLIN( 334)					int _g_key = (_g_current - 1);
+HXDLIN( 334)					int i = _g_key;
+HXDLIN( 334)					::String el = _g_value;
+HXDLIN( 334)					{
+HXDLIN( 334)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 334)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 334)						{
+HXDLIN( 334)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 334)							int high = ptrInt64 >> 32;
+HXDLIN( 334)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 334)							if (::hx::IsNull( highMap )) {
+HXLINE(2131)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE( 334)								this1->set(low,highMap);
             							}
-HXDLIN( 297)							highMap->set(high,el);
+HXDLIN( 334)							highMap->set(high,el);
             						}
-HXDLIN( 297)						const char* ptr = cStrPtr;
-HXDLIN( 297)						arr[i] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 334)						const char* ptr = cStrPtr;
+HXDLIN( 334)						arr[i] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 297)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 297)			{
-HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 297)				int high1 = ptrInt641 >> 32;
-HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
-HXLINE(2083)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXLINE( 297)					this2->set(low1,highMap1);
+HXDLIN( 334)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 334)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 334)			{
+HXDLIN( 334)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 334)				int high1 = ptrInt641 >> 32;
+HXDLIN( 334)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 334)				if (::hx::IsNull( highMap1 )) {
+HXLINE(2131)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE( 334)					this2->set(low1,highMap1);
             				}
-HXDLIN( 297)				highMap1->set(high1,arr);
+HXDLIN( 334)				highMap1->set(high1,arr);
             			}
-HXDLIN( 297)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 334)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 297)		return ( (size_t)(x->length) );
+HXDLIN( 334)		return ( (size_t)(x->length) );
             	}
 
 
 size_t ChatAttachment_obj::hashes__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_297_hashes__fromC)
-HXDLIN( 297)		::Array< ::Dynamic> x = this->hashes;
-HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 297)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 297)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 297)			{
-HXDLIN( 297)				int _g = 0;
-HXDLIN( 297)				while((_g < x1->length)){
-HXDLIN( 297)					 ::snikket::Hash el = x1->__get(_g).StaticCast<  ::snikket::Hash >();
-HXDLIN( 297)					_g = (_g + 1);
-HXDLIN( 297)					{
-HXDLIN( 297)						 ::Dynamic haxeObject = el;
-HXDLIN( 297)						void* ptr = haxeObject.mPtr;
-HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)						{
-HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 297)							int high = ptrInt64 >> 32;
-HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 297)							if (::hx::IsNull( highMap )) {
-HXDLIN( 297)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_78db3de7bf8d6ae8_334_hashes__fromC)
+HXDLIN( 334)		::Array< ::Dynamic> x = this->hashes;
+HXDLIN( 334)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 334)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 334)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 334)			{
+HXDLIN( 334)				int _g = 0;
+HXDLIN( 334)				while((_g < x1->length)){
+HXDLIN( 334)					 ::snikket::Hash el = x1->__get(_g).StaticCast<  ::snikket::Hash >();
+HXDLIN( 334)					_g = (_g + 1);
+HXDLIN( 334)					{
+HXDLIN( 334)						 ::Dynamic haxeObject = el;
+HXDLIN( 334)						void* ptr = haxeObject.mPtr;
+HXDLIN( 334)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 334)						{
+HXDLIN( 334)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 334)							int high = ptrInt64 >> 32;
+HXDLIN( 334)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 334)							if (::hx::IsNull( highMap )) {
+HXDLIN( 334)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)								this1->set(low,highMap);
             							}
-HXDLIN( 297)							highMap->set(high,haxeObject);
+HXDLIN( 334)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 297)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 297)			{
-HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 297)				int high1 = ptrInt641 >> 32;
-HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 297)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)					this2->set(low1,highMap1);
+HXDLIN( 334)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 334)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 334)			{
+HXDLIN( 334)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 334)				int high1 = ptrInt641 >> 32;
+HXDLIN( 334)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 334)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 334)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)					this2->set(low1,highMap1);
             				}
-HXDLIN( 297)				highMap1->set(high1,x1);
+HXDLIN( 334)				highMap1->set(high1,x1);
             			}
-HXDLIN( 297)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 334)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 297)		return ( (size_t)(x->length) );
+HXDLIN( 334)		return ( (size_t)(x->length) );
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/ChatMessage.cpp b/Sources/c_snikket/src/snikket/ChatMessage.cpp
index d412501..a4f8498 100644
--- a/Sources/c_snikket/src/snikket/ChatMessage.cpp
+++ b/Sources/c_snikket/src/snikket/ChatMessage.cpp
@@ -95,153 +95,157 @@
 #include <snikket/_Stanza/NodeInterface.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_b3673a050e0c4d12_190_new,"snikket.ChatMessage","new",0x32c68430,"snikket.ChatMessage.new","snikket/ChatMessage.hx",190,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_localId__fromC,"snikket.ChatMessage","localId__fromC",0xd3c36543,"snikket.ChatMessage.localId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_serverId__fromC,"snikket.ChatMessage","serverId__fromC",0xdb59e68b,"snikket.ChatMessage.serverId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_serverIdBy__fromC,"snikket.ChatMessage","serverIdBy__fromC",0xd54611f4,"snikket.ChatMessage.serverIdBy__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_type__fromC,"snikket.ChatMessage","type__fromC",0xb86faccf,"snikket.ChatMessage.type__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_timestamp__fromC,"snikket.ChatMessage","timestamp__fromC",0xe3f8ac93,"snikket.ChatMessage.timestamp__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_senderId__fromC,"snikket.ChatMessage","senderId__fromC",0x24e23b59,"snikket.ChatMessage.senderId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_271_replyToMessage__fromC,"snikket.ChatMessage","replyToMessage__fromC",0x89f44d87,"snikket.ChatMessage.replyToMessage__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_threadId__fromC,"snikket.ChatMessage","threadId__fromC",0xd31afda4,"snikket.ChatMessage.threadId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_297_attachments__fromC,"snikket.ChatMessage","attachments__fromC",0xb2a7ed79,"snikket.ChatMessage.attachments__fromC","HaxeCBridge.hx",297,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_text__fromC,"snikket.ChatMessage","text__fromC",0xa41e473c,"snikket.ChatMessage.text__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_lang__fromC,"snikket.ChatMessage","lang__fromC",0x7703281b,"snikket.ChatMessage.lang__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_direction__fromC,"snikket.ChatMessage","direction__fromC",0x58338e4a,"snikket.ChatMessage.direction__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_307_status__fromC,"snikket.ChatMessage","status__fromC",0x4fcd4b57,"snikket.ChatMessage.status__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_318_set_status__fromC,"snikket.ChatMessage","set_status__fromC",0x9e1b56ba,"snikket.ChatMessage.set_status__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_297_versions__fromC,"snikket.ChatMessage","versions__fromC",0x6e819f4e,"snikket.ChatMessage.versions__fromC","HaxeCBridge.hx",297,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_229_reply,"snikket.ChatMessage","reply",0xa22950fa,"snikket.ChatMessage.reply","snikket/ChatMessage.hx",229,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_237_getReplyId,"snikket.ChatMessage","getReplyId",0x993253df,"snikket.ChatMessage.getReplyId","snikket/ChatMessage.hx",237,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_243_set_replyToMessage,"snikket.ChatMessage","set_replyToMessage",0x0059f86f,"snikket.ChatMessage.set_replyToMessage","snikket/ChatMessage.hx",243,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_252_set_reactions,"snikket.ChatMessage","set_reactions",0x9ca71a5d,"snikket.ChatMessage.set_reactions","snikket/ChatMessage.hx",252,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_253_set_reactions,"snikket.ChatMessage","set_reactions",0x9ca71a5d,"snikket.ChatMessage.set_reactions","snikket/ChatMessage.hx",253,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_260_inlineHashReferences,"snikket.ChatMessage","inlineHashReferences",0xd9e9761f,"snikket.ChatMessage.inlineHashReferences","snikket/ChatMessage.hx",260,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_258_inlineHashReferences,"snikket.ChatMessage","inlineHashReferences",0xd9e9761f,"snikket.ChatMessage.inlineHashReferences","snikket/ChatMessage.hx",258,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_262_inlineHashReferences,"snikket.ChatMessage","inlineHashReferences",0xd9e9761f,"snikket.ChatMessage.inlineHashReferences","snikket/ChatMessage.hx",262,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_287_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",287,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_312_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",312,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_317_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",317,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_286_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",286,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_289_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",289,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_324_chatId,"snikket.ChatMessage","chatId",0xf2f29303,"snikket.ChatMessage.chatId","snikket/ChatMessage.hx",324,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_335_account,"snikket.ChatMessage","account",0x71fad87d,"snikket.ChatMessage.account","snikket/ChatMessage.hx",335,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_342_isIncoming,"snikket.ChatMessage","isIncoming",0x345ab920,"snikket.ChatMessage.isIncoming","snikket/ChatMessage.hx",342,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_349_threadIcon,"snikket.ChatMessage","threadIcon",0xe0122193,"snikket.ChatMessage.threadIcon","snikket/ChatMessage.hx",349,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_356_callStatus,"snikket.ChatMessage","callStatus",0xcfc224a0,"snikket.ChatMessage.callStatus","snikket/ChatMessage.hx",356,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_363_callSid,"snikket.ChatMessage","callSid",0x24f4d0e0,"snikket.ChatMessage.callSid","snikket/ChatMessage.hx",363,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_369_callDuration,"snikket.ChatMessage","callDuration",0x8a710442,"snikket.ChatMessage.callDuration","snikket/ChatMessage.hx",369,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_393_asStanza,"snikket.ChatMessage","asStanza",0x50ece2b7,"snikket.ChatMessage.asStanza","snikket/ChatMessage.hx",393,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_440_asStanza,"snikket.ChatMessage","asStanza",0x50ece2b7,"snikket.ChatMessage.asStanza","snikket/ChatMessage.hx",440,0x79a8b101)
-HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_218_fromStanza,"snikket.ChatMessage","fromStanza",0xe7d1c92f,"snikket.ChatMessage.fromStanza","snikket/ChatMessage.hx",218,0x79a8b101)
+HX_DEFINE_STACK_FRAME(_hx_pos_b3673a050e0c4d12_209_new,"snikket.ChatMessage","new",0x32c68430,"snikket.ChatMessage.new","snikket/ChatMessage.hx",209,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_localId__fromC,"snikket.ChatMessage","localId__fromC",0xd3c36543,"snikket.ChatMessage.localId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_serverId__fromC,"snikket.ChatMessage","serverId__fromC",0xdb59e68b,"snikket.ChatMessage.serverId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_serverIdBy__fromC,"snikket.ChatMessage","serverIdBy__fromC",0xd54611f4,"snikket.ChatMessage.serverIdBy__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_type__fromC,"snikket.ChatMessage","type__fromC",0xb86faccf,"snikket.ChatMessage.type__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_timestamp__fromC,"snikket.ChatMessage","timestamp__fromC",0xe3f8ac93,"snikket.ChatMessage.timestamp__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_senderId__fromC,"snikket.ChatMessage","senderId__fromC",0x24e23b59,"snikket.ChatMessage.senderId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_308_replyToMessage__fromC,"snikket.ChatMessage","replyToMessage__fromC",0x89f44d87,"snikket.ChatMessage.replyToMessage__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_threadId__fromC,"snikket.ChatMessage","threadId__fromC",0xd31afda4,"snikket.ChatMessage.threadId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_334_attachments__fromC,"snikket.ChatMessage","attachments__fromC",0xb2a7ed79,"snikket.ChatMessage.attachments__fromC","HaxeCBridge.hx",334,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_297_reactionKeys__fromC,"snikket.ChatMessage","reactionKeys__fromC",0x0eb437ac,"snikket.ChatMessage.reactionKeys__fromC","HaxeCBridge.hx",297,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_141_get_reactionKeys,"snikket.ChatMessage","get_reactionKeys",0x825894f6,"snikket.ChatMessage.get_reactionKeys","snikket/ChatMessage.hx",141,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_148_reactionDetails,"snikket.ChatMessage","reactionDetails",0x21547fe9,"snikket.ChatMessage.reactionDetails","snikket/ChatMessage.hx",148,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_250_reactionDetails__fromC,"snikket.ChatMessage","reactionDetails__fromC",0xf79fafb0,"snikket.ChatMessage.reactionDetails__fromC","HaxeCBridge.hx",250,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_text__fromC,"snikket.ChatMessage","text__fromC",0xa41e473c,"snikket.ChatMessage.text__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_lang__fromC,"snikket.ChatMessage","lang__fromC",0x7703281b,"snikket.ChatMessage.lang__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_direction__fromC,"snikket.ChatMessage","direction__fromC",0x58338e4a,"snikket.ChatMessage.direction__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_355_status__fromC,"snikket.ChatMessage","status__fromC",0x4fcd4b57,"snikket.ChatMessage.status__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_366_set_status__fromC,"snikket.ChatMessage","set_status__fromC",0x9e1b56ba,"snikket.ChatMessage.set_status__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_672f2a9d33b9a067_334_versions__fromC,"snikket.ChatMessage","versions__fromC",0x6e819f4e,"snikket.ChatMessage.versions__fromC","HaxeCBridge.hx",334,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_248_reply,"snikket.ChatMessage","reply",0xa22950fa,"snikket.ChatMessage.reply","snikket/ChatMessage.hx",248,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_256_getReplyId,"snikket.ChatMessage","getReplyId",0x993253df,"snikket.ChatMessage.getReplyId","snikket/ChatMessage.hx",256,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_262_set_replyToMessage,"snikket.ChatMessage","set_replyToMessage",0x0059f86f,"snikket.ChatMessage.set_replyToMessage","snikket/ChatMessage.hx",262,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_271_set_reactions,"snikket.ChatMessage","set_reactions",0x9ca71a5d,"snikket.ChatMessage.set_reactions","snikket/ChatMessage.hx",271,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_272_set_reactions,"snikket.ChatMessage","set_reactions",0x9ca71a5d,"snikket.ChatMessage.set_reactions","snikket/ChatMessage.hx",272,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_279_inlineHashReferences,"snikket.ChatMessage","inlineHashReferences",0xd9e9761f,"snikket.ChatMessage.inlineHashReferences","snikket/ChatMessage.hx",279,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_277_inlineHashReferences,"snikket.ChatMessage","inlineHashReferences",0xd9e9761f,"snikket.ChatMessage.inlineHashReferences","snikket/ChatMessage.hx",277,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_281_inlineHashReferences,"snikket.ChatMessage","inlineHashReferences",0xd9e9761f,"snikket.ChatMessage.inlineHashReferences","snikket/ChatMessage.hx",281,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_306_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",306,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_331_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",331,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_336_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",336,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_305_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",305,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_308_html,"snikket.ChatMessage","html",0x3701379b,"snikket.ChatMessage.html","snikket/ChatMessage.hx",308,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_343_chatId,"snikket.ChatMessage","chatId",0xf2f29303,"snikket.ChatMessage.chatId","snikket/ChatMessage.hx",343,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_354_account,"snikket.ChatMessage","account",0x71fad87d,"snikket.ChatMessage.account","snikket/ChatMessage.hx",354,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_361_isIncoming,"snikket.ChatMessage","isIncoming",0x345ab920,"snikket.ChatMessage.isIncoming","snikket/ChatMessage.hx",361,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_368_threadIcon,"snikket.ChatMessage","threadIcon",0xe0122193,"snikket.ChatMessage.threadIcon","snikket/ChatMessage.hx",368,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_375_callStatus,"snikket.ChatMessage","callStatus",0xcfc224a0,"snikket.ChatMessage.callStatus","snikket/ChatMessage.hx",375,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_382_callSid,"snikket.ChatMessage","callSid",0x24f4d0e0,"snikket.ChatMessage.callSid","snikket/ChatMessage.hx",382,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_388_callDuration,"snikket.ChatMessage","callDuration",0x8a710442,"snikket.ChatMessage.callDuration","snikket/ChatMessage.hx",388,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_412_asStanza,"snikket.ChatMessage","asStanza",0x50ece2b7,"snikket.ChatMessage.asStanza","snikket/ChatMessage.hx",412,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_459_asStanza,"snikket.ChatMessage","asStanza",0x50ece2b7,"snikket.ChatMessage.asStanza","snikket/ChatMessage.hx",459,0x79a8b101)
+HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_237_fromStanza,"snikket.ChatMessage","fromStanza",0xe7d1c92f,"snikket.ChatMessage.fromStanza","snikket/ChatMessage.hx",237,0x79a8b101)
 HX_LOCAL_STACK_FRAME(_hx_pos_b3673a050e0c4d12_66_boot,"snikket.ChatMessage","boot",0x33062662,"snikket.ChatMessage.boot","snikket/ChatMessage.hx",66,0x79a8b101)
 namespace snikket{
 
 void ChatMessage_obj::__construct( ::Dynamic params){
-            	HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_190_new)
-HXLINE( 191)		this->localId = ( (::String)(params->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)) );
-HXLINE( 192)		this->serverId = ( (::String)(params->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)) );
-HXLINE( 193)		this->serverIdBy = ( (::String)(params->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)) );
-HXLINE( 194)		 ::Dynamic tmp = params->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic);
-HXDLIN( 194)		int _hx_tmp;
-HXDLIN( 194)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 194)			_hx_tmp = ( (int)(tmp) );
+            	HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_209_new)
+HXLINE( 210)		this->localId = ( (::String)(params->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)) );
+HXLINE( 211)		this->serverId = ( (::String)(params->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)) );
+HXLINE( 212)		this->serverIdBy = ( (::String)(params->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)) );
+HXLINE( 213)		 ::Dynamic tmp = params->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic);
+HXDLIN( 213)		int _hx_tmp;
+HXDLIN( 213)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 213)			_hx_tmp = ( (int)(tmp) );
             		}
             		else {
-HXLINE( 194)			_hx_tmp = 0;
+HXLINE( 213)			_hx_tmp = 0;
             		}
-HXDLIN( 194)		this->type = _hx_tmp;
-HXLINE( 195)		 ::Dynamic tmp1 = params->__Field(HX_("syncPoint",f5,ff,94,98),::hx::paccDynamic);
-HXDLIN( 195)		bool _hx_tmp1;
-HXDLIN( 195)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 195)			_hx_tmp1 = ( (bool)(tmp1) );
+HXDLIN( 213)		this->type = _hx_tmp;
+HXLINE( 214)		 ::Dynamic tmp1 = params->__Field(HX_("syncPoint",f5,ff,94,98),::hx::paccDynamic);
+HXDLIN( 214)		bool _hx_tmp1;
+HXDLIN( 214)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 214)			_hx_tmp1 = ( (bool)(tmp1) );
             		}
             		else {
-HXLINE( 195)			_hx_tmp1 = false;
-            		}
-HXDLIN( 195)		this->syncPoint = _hx_tmp1;
-HXLINE( 196)		this->replyId = ( (::String)(params->__Field(HX_("replyId",a5,67,3a,ab),::hx::paccDynamic)) );
-HXLINE( 197)		this->timestamp = ( (::String)(params->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
-HXLINE( 198)		this->to = ( ( ::snikket::JID)(params->__Field(HX_("to",7b,65,00,00),::hx::paccDynamic)) );
-HXLINE( 199)		this->from = ( ( ::snikket::JID)(params->__Field(HX_("from",6a,a5,c2,43),::hx::paccDynamic)) );
-HXLINE( 200)		this->senderId = ( (::String)(params->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) );
-HXLINE( 201)		::Array< ::Dynamic> tmp2 = ( (::Array< ::Dynamic>)(params->__Field(HX_("recipients",7a,62,59,87),::hx::paccDynamic)) );
-HXDLIN( 201)		::Array< ::Dynamic> _hx_tmp2;
-HXDLIN( 201)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 201)			_hx_tmp2 = tmp2;
+HXLINE( 214)			_hx_tmp1 = false;
+            		}
+HXDLIN( 214)		this->syncPoint = _hx_tmp1;
+HXLINE( 215)		this->replyId = ( (::String)(params->__Field(HX_("replyId",a5,67,3a,ab),::hx::paccDynamic)) );
+HXLINE( 216)		this->timestamp = ( (::String)(params->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
+HXLINE( 217)		this->to = ( ( ::snikket::JID)(params->__Field(HX_("to",7b,65,00,00),::hx::paccDynamic)) );
+HXLINE( 218)		this->from = ( ( ::snikket::JID)(params->__Field(HX_("from",6a,a5,c2,43),::hx::paccDynamic)) );
+HXLINE( 219)		this->senderId = ( (::String)(params->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) );
+HXLINE( 220)		::Array< ::Dynamic> tmp2 = ( (::Array< ::Dynamic>)(params->__Field(HX_("recipients",7a,62,59,87),::hx::paccDynamic)) );
+HXDLIN( 220)		::Array< ::Dynamic> _hx_tmp2;
+HXDLIN( 220)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 220)			_hx_tmp2 = tmp2;
             		}
             		else {
-HXLINE( 201)			_hx_tmp2 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 220)			_hx_tmp2 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 201)		this->recipients = _hx_tmp2;
-HXLINE( 202)		::Array< ::Dynamic> tmp3 = ( (::Array< ::Dynamic>)(params->__Field(HX_("replyTo",45,71,3a,ab),::hx::paccDynamic)) );
-HXDLIN( 202)		::Array< ::Dynamic> _hx_tmp3;
-HXDLIN( 202)		if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 202)			_hx_tmp3 = tmp3;
+HXDLIN( 220)		this->recipients = _hx_tmp2;
+HXLINE( 221)		::Array< ::Dynamic> tmp3 = ( (::Array< ::Dynamic>)(params->__Field(HX_("replyTo",45,71,3a,ab),::hx::paccDynamic)) );
+HXDLIN( 221)		::Array< ::Dynamic> _hx_tmp3;
+HXDLIN( 221)		if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 221)			_hx_tmp3 = tmp3;
             		}
             		else {
-HXLINE( 202)			_hx_tmp3 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 221)			_hx_tmp3 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 202)		this->replyTo = _hx_tmp3;
-HXLINE( 203)		this->replyToMessage = ( ( ::snikket::ChatMessage)(params->__Field(HX_("replyToMessage",02,cf,60,a6),::hx::paccDynamic)) );
-HXLINE( 204)		this->threadId = ( (::String)(params->__Field(HX_("threadId",45,81,25,cc),::hx::paccDynamic)) );
-HXLINE( 205)		::Array< ::Dynamic> tmp4 = ( (::Array< ::Dynamic>)(params->__Field(HX_("attachments",30,df,33,e7),::hx::paccDynamic)) );
-HXDLIN( 205)		::Array< ::Dynamic> _hx_tmp4;
-HXDLIN( 205)		if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 205)			_hx_tmp4 = tmp4;
+HXDLIN( 221)		this->replyTo = _hx_tmp3;
+HXLINE( 222)		this->replyToMessage = ( ( ::snikket::ChatMessage)(params->__Field(HX_("replyToMessage",02,cf,60,a6),::hx::paccDynamic)) );
+HXLINE( 223)		this->threadId = ( (::String)(params->__Field(HX_("threadId",45,81,25,cc),::hx::paccDynamic)) );
+HXLINE( 224)		::Array< ::Dynamic> tmp4 = ( (::Array< ::Dynamic>)(params->__Field(HX_("attachments",30,df,33,e7),::hx::paccDynamic)) );
+HXDLIN( 224)		::Array< ::Dynamic> _hx_tmp4;
+HXDLIN( 224)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 224)			_hx_tmp4 = tmp4;
             		}
             		else {
-HXLINE( 205)			_hx_tmp4 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 224)			_hx_tmp4 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 205)		this->attachments = _hx_tmp4;
-HXLINE( 206)		 ::haxe::ds::StringMap tmp5 = ( ( ::haxe::ds::StringMap)(params->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) );
-HXDLIN( 206)		 ::haxe::ds::StringMap _hx_tmp5;
-HXDLIN( 206)		if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 206)			_hx_tmp5 = tmp5;
+HXDLIN( 224)		this->attachments = _hx_tmp4;
+HXLINE( 225)		 ::haxe::ds::StringMap tmp5 = ( ( ::haxe::ds::StringMap)(params->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) );
+HXDLIN( 225)		 ::haxe::ds::StringMap _hx_tmp5;
+HXDLIN( 225)		if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 225)			_hx_tmp5 = tmp5;
             		}
             		else {
-HXLINE( 206)			_hx_tmp5 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 225)			_hx_tmp5 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
             		}
-HXDLIN( 206)		this->reactions = _hx_tmp5;
-HXLINE( 207)		this->text = ( (::String)(params->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) );
-HXLINE( 208)		this->lang = ( (::String)(params->__Field(HX_("lang",ee,05,ad,47),::hx::paccDynamic)) );
-HXLINE( 209)		 ::Dynamic tmp6 = params->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic);
-HXDLIN( 209)		int _hx_tmp6;
-HXDLIN( 209)		if (::hx::IsNotNull( tmp6 )) {
-HXLINE( 209)			_hx_tmp6 = ( (int)(tmp6) );
+HXDLIN( 225)		this->reactions = _hx_tmp5;
+HXLINE( 226)		this->text = ( (::String)(params->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) );
+HXLINE( 227)		this->lang = ( (::String)(params->__Field(HX_("lang",ee,05,ad,47),::hx::paccDynamic)) );
+HXLINE( 228)		 ::Dynamic tmp6 = params->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic);
+HXDLIN( 228)		int _hx_tmp6;
+HXDLIN( 228)		if (::hx::IsNotNull( tmp6 )) {
+HXLINE( 228)			_hx_tmp6 = ( (int)(tmp6) );
             		}
             		else {
-HXLINE( 209)			_hx_tmp6 = 1;
+HXLINE( 228)			_hx_tmp6 = 1;
             		}
-HXDLIN( 209)		this->direction = _hx_tmp6;
-HXLINE( 210)		 ::Dynamic tmp7 = params->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
-HXDLIN( 210)		int _hx_tmp7;
-HXDLIN( 210)		if (::hx::IsNotNull( tmp7 )) {
-HXLINE( 210)			_hx_tmp7 = ( (int)(tmp7) );
+HXDLIN( 228)		this->direction = _hx_tmp6;
+HXLINE( 229)		 ::Dynamic tmp7 = params->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic);
+HXDLIN( 229)		int _hx_tmp7;
+HXDLIN( 229)		if (::hx::IsNotNull( tmp7 )) {
+HXLINE( 229)			_hx_tmp7 = ( (int)(tmp7) );
             		}
             		else {
-HXLINE( 210)			_hx_tmp7 = 0;
+HXLINE( 229)			_hx_tmp7 = 0;
             		}
-HXDLIN( 210)		this->status = _hx_tmp7;
-HXLINE( 211)		::Array< ::Dynamic> tmp8 = ( (::Array< ::Dynamic>)(params->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) );
-HXDLIN( 211)		::Array< ::Dynamic> _hx_tmp8;
-HXDLIN( 211)		if (::hx::IsNotNull( tmp8 )) {
-HXLINE( 211)			_hx_tmp8 = tmp8;
+HXDLIN( 229)		this->status = _hx_tmp7;
+HXLINE( 230)		::Array< ::Dynamic> tmp8 = ( (::Array< ::Dynamic>)(params->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) );
+HXDLIN( 230)		::Array< ::Dynamic> _hx_tmp8;
+HXDLIN( 230)		if (::hx::IsNotNull( tmp8 )) {
+HXLINE( 230)			_hx_tmp8 = tmp8;
             		}
             		else {
-HXLINE( 211)			_hx_tmp8 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 230)			_hx_tmp8 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 211)		this->versions = _hx_tmp8;
-HXLINE( 212)		::Array< ::Dynamic> tmp9 = ( (::Array< ::Dynamic>)(params->__Field(HX_("payloads",25,dd,d1,a1),::hx::paccDynamic)) );
-HXDLIN( 212)		::Array< ::Dynamic> _hx_tmp9;
-HXDLIN( 212)		if (::hx::IsNotNull( tmp9 )) {
-HXLINE( 212)			_hx_tmp9 = tmp9;
+HXDLIN( 230)		this->versions = _hx_tmp8;
+HXLINE( 231)		::Array< ::Dynamic> tmp9 = ( (::Array< ::Dynamic>)(params->__Field(HX_("payloads",25,dd,d1,a1),::hx::paccDynamic)) );
+HXDLIN( 231)		::Array< ::Dynamic> _hx_tmp9;
+HXDLIN( 231)		if (::hx::IsNotNull( tmp9 )) {
+HXLINE( 231)			_hx_tmp9 = tmp9;
             		}
             		else {
-HXLINE( 212)			_hx_tmp9 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 231)			_hx_tmp9 = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 212)		this->payloads = _hx_tmp9;
-HXLINE( 213)		this->stanza = ( ( ::snikket::Stanza)(params->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXDLIN( 231)		this->payloads = _hx_tmp9;
+HXLINE( 232)		this->stanza = ( ( ::snikket::Stanza)(params->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
             	}
 
 Dynamic ChatMessage_obj::__CreateEmpty() { return new ChatMessage_obj; }
@@ -260,99 +264,152 @@ bool ChatMessage_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ChatMessage_obj::localId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_localId__fromC)
-HXDLIN( 307)		return this->localId;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_localId__fromC)
+HXDLIN( 355)		return this->localId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,localId__fromC,return )
 
 ::String ChatMessage_obj::serverId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_serverId__fromC)
-HXDLIN( 307)		return this->serverId;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_serverId__fromC)
+HXDLIN( 355)		return this->serverId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,serverId__fromC,return )
 
 ::String ChatMessage_obj::serverIdBy__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_serverIdBy__fromC)
-HXDLIN( 307)		return this->serverIdBy;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_serverIdBy__fromC)
+HXDLIN( 355)		return this->serverIdBy;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,serverIdBy__fromC,return )
 
 int ChatMessage_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_type__fromC)
-HXDLIN( 307)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_type__fromC)
+HXDLIN( 355)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,type__fromC,return )
 
 ::String ChatMessage_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_timestamp__fromC)
-HXDLIN( 307)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_timestamp__fromC)
+HXDLIN( 355)		return this->timestamp;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,timestamp__fromC,return )
 
 ::String ChatMessage_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_senderId__fromC)
-HXDLIN( 307)		return this->senderId;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_senderId__fromC)
+HXDLIN( 355)		return this->senderId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,senderId__fromC,return )
 
  ::snikket::ChatMessage ChatMessage_obj::replyToMessage__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_271_replyToMessage__fromC)
-HXDLIN( 271)		return this->replyToMessage;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_308_replyToMessage__fromC)
+HXDLIN( 308)		return this->replyToMessage;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,replyToMessage__fromC,return )
 
 ::String ChatMessage_obj::threadId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_threadId__fromC)
-HXDLIN( 307)		return this->threadId;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_threadId__fromC)
+HXDLIN( 355)		return this->threadId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,threadId__fromC,return )
 
 size_t ChatMessage_obj::attachments__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_672f2a9d33b9a067_297_attachments__fromC)
-HXDLIN( 297)		::Array< ::Dynamic> x = this->attachments;
+            	HX_GC_STACKFRAME(&_hx_pos_672f2a9d33b9a067_334_attachments__fromC)
+HXDLIN( 334)		::Array< ::Dynamic> x = this->attachments;
+HXDLIN( 334)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 334)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 334)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 334)			{
+HXDLIN( 334)				int _g = 0;
+HXDLIN( 334)				while((_g < x1->length)){
+HXDLIN( 334)					 ::snikket::ChatAttachment el = x1->__get(_g).StaticCast<  ::snikket::ChatAttachment >();
+HXDLIN( 334)					_g = (_g + 1);
+HXDLIN( 334)					{
+HXDLIN( 334)						 ::Dynamic haxeObject = el;
+HXDLIN( 334)						void* ptr = haxeObject.mPtr;
+HXDLIN( 334)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 334)						{
+HXDLIN( 334)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 334)							int high = ptrInt64 >> 32;
+HXDLIN( 334)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 334)							if (::hx::IsNull( highMap )) {
+HXDLIN( 334)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)								this1->set(low,highMap);
+            							}
+HXDLIN( 334)							highMap->set(high,haxeObject);
+            						}
+            					}
+            				}
+            			}
+HXDLIN( 334)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 334)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 334)			{
+HXDLIN( 334)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 334)				int high1 = ptrInt641 >> 32;
+HXDLIN( 334)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 334)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 334)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)					this2->set(low1,highMap1);
+            				}
+HXDLIN( 334)				highMap1->set(high1,x1);
+            			}
+HXDLIN( 334)			_hx_tmp->set_ref(ptr1);
+            		}
+HXDLIN( 334)		return ( (size_t)(x->length) );
+            	}
+
+
+size_t ChatMessage_obj::reactionKeys__fromC(const char*** outPtr){
+            	HX_GC_STACKFRAME(&_hx_pos_672f2a9d33b9a067_297_reactionKeys__fromC)
+HXDLIN( 297)		::Array< ::String > x = this->get_reactionKeys();
 HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 297)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 297)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 297)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 297)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x->length);
 HXDLIN( 297)			{
-HXDLIN( 297)				int _g = 0;
-HXDLIN( 297)				while((_g < x1->length)){
-HXDLIN( 297)					 ::snikket::ChatAttachment el = x1->__get(_g).StaticCast<  ::snikket::ChatAttachment >();
-HXDLIN( 297)					_g = (_g + 1);
+HXDLIN( 297)				int _g_current = 0;
+HXDLIN( 297)				::Array< ::String > _g_array = x;
+HXDLIN( 297)				while((_g_current < _g_array->length)){
+HXDLIN( 297)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 297)					_g_current = (_g_current + 1);
+HXDLIN( 297)					int _g_key = (_g_current - 1);
+HXDLIN( 297)					int i = _g_key;
+HXDLIN( 297)					::String el = _g_value;
 HXDLIN( 297)					{
-HXDLIN( 297)						 ::Dynamic haxeObject = el;
-HXDLIN( 297)						void* ptr = haxeObject.mPtr;
-HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 297)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
 HXDLIN( 297)						{
 HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
 HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
 HXDLIN( 297)							int high = ptrInt64 >> 32;
 HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
 HXDLIN( 297)							if (::hx::IsNull( highMap )) {
-HXDLIN( 297)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)								this1->set(low,highMap);
+HXLINE(2131)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE( 297)								this1->set(low,highMap);
             							}
-HXDLIN( 297)							highMap->set(high,haxeObject);
+HXDLIN( 297)							highMap->set(high,el);
             						}
+HXDLIN( 297)						const char* ptr = cStrPtr;
+HXDLIN( 297)						arr[i] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 297)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 297)			void** ptr1 = (void**)arr->getBase();
 HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
 HXDLIN( 297)			{
 HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
@@ -360,203 +417,282 @@ HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
 HXDLIN( 297)				int high1 = ptrInt641 >> 32;
 HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
 HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 297)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)					this2->set(low1,highMap1);
+HXLINE(2131)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE( 297)					this2->set(low1,highMap1);
             				}
-HXDLIN( 297)				highMap1->set(high1,x1);
+HXDLIN( 297)				highMap1->set(high1,arr);
             			}
-HXDLIN( 297)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 297)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
 HXDLIN( 297)		return ( (size_t)(x->length) );
             	}
 
 
+::Array< ::String > ChatMessage_obj::get_reactionKeys(){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::StringMap,_e) HXARGC(0)
+            		 ::Dynamic _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_141_get_reactionKeys)
+HXDLIN( 141)			return _e->keys();
+            		}
+            		HX_END_LOCAL_FUNC0(return)
+
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_141_get_reactionKeys)
+HXDLIN( 141)		 ::haxe::ds::StringMap _e = this->reactions;
+HXDLIN( 141)		return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_e)))));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,get_reactionKeys,return )
+
+::Array< ::Dynamic> ChatMessage_obj::reactionDetails(::String reactionKey){
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_148_reactionDetails)
+HXDLIN( 148)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(this->reactions->get(reactionKey)) );
+HXDLIN( 148)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 148)			return tmp;
+            		}
+            		else {
+HXDLIN( 148)			return ::Array_obj< ::Dynamic>::__new(0);
+            		}
+HXDLIN( 148)		return null();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,reactionDetails,return )
+
+size_t ChatMessage_obj::reactionDetails__fromC(::String reactionKey,void*** outPtr){
+            	HX_GC_STACKFRAME(&_hx_pos_672f2a9d33b9a067_250_reactionDetails__fromC)
+HXDLIN( 250)		::Array< ::Dynamic> out = this->reactionDetails(reactionKey);
+HXDLIN( 250)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 250)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 250)			{
+HXDLIN( 250)				int _g = 0;
+HXDLIN( 250)				while((_g < out->length)){
+HXDLIN( 250)					 ::snikket::Reaction el = out->__get(_g).StaticCast<  ::snikket::Reaction >();
+HXDLIN( 250)					_g = (_g + 1);
+HXDLIN( 250)					{
+HXDLIN( 250)						 ::Dynamic haxeObject = el;
+HXDLIN( 250)						void* ptr = haxeObject.mPtr;
+HXDLIN( 250)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 250)						{
+HXDLIN( 250)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 250)							int high = ptrInt64 >> 32;
+HXDLIN( 250)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 250)							if (::hx::IsNull( highMap )) {
+HXDLIN( 250)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)								this1->set(low,highMap);
+            							}
+HXDLIN( 250)							highMap->set(high,haxeObject);
+            						}
+            					}
+            				}
+            			}
+HXDLIN( 250)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 250)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 250)			{
+HXDLIN( 250)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 250)				int high1 = ptrInt641 >> 32;
+HXDLIN( 250)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 250)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 250)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)					this2->set(low1,highMap1);
+            				}
+HXDLIN( 250)				highMap1->set(high1,out);
+            			}
+HXDLIN( 250)			_hx_tmp->set_ref(ptr1);
+            		}
+HXDLIN( 250)		return ( (size_t)(out->length) );
+            	}
+
+
 ::String ChatMessage_obj::text__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_text__fromC)
-HXDLIN( 307)		return this->text;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_text__fromC)
+HXDLIN( 355)		return this->text;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,text__fromC,return )
 
 ::String ChatMessage_obj::lang__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_lang__fromC)
-HXDLIN( 307)		return this->lang;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_lang__fromC)
+HXDLIN( 355)		return this->lang;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,lang__fromC,return )
 
 int ChatMessage_obj::direction__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_direction__fromC)
-HXDLIN( 307)		return this->direction;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_direction__fromC)
+HXDLIN( 355)		return this->direction;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,direction__fromC,return )
 
 int ChatMessage_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_307_status__fromC)
-HXDLIN( 307)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_355_status__fromC)
+HXDLIN( 355)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,status__fromC,return )
 
 void ChatMessage_obj::set_status__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_318_set_status__fromC)
-HXDLIN( 318)		this->status = value;
+            	HX_STACKFRAME(&_hx_pos_672f2a9d33b9a067_366_set_status__fromC)
+HXDLIN( 366)		this->status = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,set_status__fromC,(void))
 
 size_t ChatMessage_obj::versions__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_672f2a9d33b9a067_297_versions__fromC)
-HXDLIN( 297)		::Array< ::Dynamic> x = this->versions;
-HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 297)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 297)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 297)			{
-HXDLIN( 297)				int _g = 0;
-HXDLIN( 297)				while((_g < x1->length)){
-HXDLIN( 297)					 ::snikket::ChatMessage el = x1->__get(_g).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 297)					_g = (_g + 1);
-HXDLIN( 297)					{
-HXDLIN( 297)						 ::Dynamic haxeObject = el;
-HXDLIN( 297)						void* ptr = haxeObject.mPtr;
-HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)						{
-HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 297)							int high = ptrInt64 >> 32;
-HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 297)							if (::hx::IsNull( highMap )) {
-HXDLIN( 297)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_672f2a9d33b9a067_334_versions__fromC)
+HXDLIN( 334)		::Array< ::Dynamic> x = this->versions;
+HXDLIN( 334)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 334)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 334)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 334)			{
+HXDLIN( 334)				int _g = 0;
+HXDLIN( 334)				while((_g < x1->length)){
+HXDLIN( 334)					 ::snikket::ChatMessage el = x1->__get(_g).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 334)					_g = (_g + 1);
+HXDLIN( 334)					{
+HXDLIN( 334)						 ::Dynamic haxeObject = el;
+HXDLIN( 334)						void* ptr = haxeObject.mPtr;
+HXDLIN( 334)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 334)						{
+HXDLIN( 334)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 334)							int high = ptrInt64 >> 32;
+HXDLIN( 334)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 334)							if (::hx::IsNull( highMap )) {
+HXDLIN( 334)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)								this1->set(low,highMap);
             							}
-HXDLIN( 297)							highMap->set(high,haxeObject);
+HXDLIN( 334)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 297)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 297)			{
-HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 297)				int high1 = ptrInt641 >> 32;
-HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 297)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)					this2->set(low1,highMap1);
+HXDLIN( 334)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 334)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 334)			{
+HXDLIN( 334)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 334)				int high1 = ptrInt641 >> 32;
+HXDLIN( 334)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 334)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 334)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)					this2->set(low1,highMap1);
             				}
-HXDLIN( 297)				highMap1->set(high1,x1);
+HXDLIN( 334)				highMap1->set(high1,x1);
             			}
-HXDLIN( 297)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 334)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 297)		return ( (size_t)(x->length) );
+HXDLIN( 334)		return ( (size_t)(x->length) );
             	}
 
 
  ::snikket::ChatMessageBuilder ChatMessage_obj::reply(){
-            	HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_229_reply)
-HXLINE( 230)		 ::snikket::ChatMessageBuilder m =  ::snikket::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE( 231)		m->type = this->type;
-HXLINE( 232)		::String tmp = this->threadId;
-HXDLIN( 232)		::String _hx_tmp;
-HXDLIN( 232)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 232)			_hx_tmp = tmp;
+            	HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_248_reply)
+HXLINE( 249)		 ::snikket::ChatMessageBuilder m =  ::snikket::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE( 250)		m->type = this->type;
+HXLINE( 251)		::String tmp = this->threadId;
+HXDLIN( 251)		::String _hx_tmp;
+HXDLIN( 251)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 251)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE( 232)			_hx_tmp = ::snikket::ID_obj::_hx_long();
+HXLINE( 251)			_hx_tmp = ::snikket::ID_obj::_hx_long();
             		}
-HXDLIN( 232)		m->threadId = _hx_tmp;
-HXLINE( 233)		m->replyToMessage = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 234)		return m;
+HXDLIN( 251)		m->threadId = _hx_tmp;
+HXLINE( 252)		m->replyToMessage = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 253)		return m;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,reply,return )
 
 ::String ChatMessage_obj::getReplyId(){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_237_getReplyId)
-HXLINE( 238)		if (::hx::IsNotNull( this->replyId )) {
-HXLINE( 238)			return this->replyId;
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_256_getReplyId)
+HXLINE( 257)		if (::hx::IsNotNull( this->replyId )) {
+HXLINE( 257)			return this->replyId;
             		}
-HXLINE( 239)		bool _hx_tmp;
-HXDLIN( 239)		if ((this->type != 2)) {
-HXLINE( 239)			_hx_tmp = (this->type == 3);
+HXLINE( 258)		bool _hx_tmp;
+HXDLIN( 258)		if ((this->type != 2)) {
+HXLINE( 258)			_hx_tmp = (this->type == 3);
             		}
             		else {
-HXLINE( 239)			_hx_tmp = true;
+HXLINE( 258)			_hx_tmp = true;
             		}
-HXDLIN( 239)		if (_hx_tmp) {
-HXLINE( 239)			return this->serverId;
+HXDLIN( 258)		if (_hx_tmp) {
+HXLINE( 258)			return this->serverId;
             		}
             		else {
-HXLINE( 239)			return this->localId;
+HXLINE( 258)			return this->localId;
             		}
-HXDLIN( 239)		return null();
+HXDLIN( 258)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,getReplyId,return )
 
  ::snikket::ChatMessage ChatMessage_obj::set_replyToMessage( ::snikket::ChatMessage m){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_243_set_replyToMessage)
-HXLINE( 244)		 ::snikket::ChatMessage rtm = this->replyToMessage;
-HXLINE( 245)		if (::hx::IsNull( rtm )) {
-HXLINE( 245)			HX_STACK_DO_THROW(HX_("Cannot hydrate null replyToMessage",f1,d9,4b,bf));
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_262_set_replyToMessage)
+HXLINE( 263)		 ::snikket::ChatMessage rtm = this->replyToMessage;
+HXLINE( 264)		if (::hx::IsNull( rtm )) {
+HXLINE( 264)			HX_STACK_DO_THROW(HX_("Cannot hydrate null replyToMessage",f1,d9,4b,bf));
             		}
-HXLINE( 246)		bool _hx_tmp;
-HXDLIN( 246)		if (::hx::IsNotNull( rtm->serverId )) {
-HXLINE( 246)			_hx_tmp = (rtm->serverId != m->serverId);
+HXLINE( 265)		bool _hx_tmp;
+HXDLIN( 265)		if (::hx::IsNotNull( rtm->serverId )) {
+HXLINE( 265)			_hx_tmp = (rtm->serverId != m->serverId);
             		}
             		else {
-HXLINE( 246)			_hx_tmp = false;
+HXLINE( 265)			_hx_tmp = false;
             		}
-HXDLIN( 246)		if (_hx_tmp) {
-HXLINE( 246)			HX_STACK_DO_THROW(HX_("Hydrate serverId mismatch",43,6c,05,df));
+HXDLIN( 265)		if (_hx_tmp) {
+HXLINE( 265)			HX_STACK_DO_THROW(HX_("Hydrate serverId mismatch",43,6c,05,df));
             		}
-HXLINE( 247)		bool _hx_tmp1;
-HXDLIN( 247)		if (::hx::IsNotNull( rtm->localId )) {
-HXLINE( 247)			_hx_tmp1 = (rtm->localId != m->localId);
+HXLINE( 266)		bool _hx_tmp1;
+HXDLIN( 266)		if (::hx::IsNotNull( rtm->localId )) {
+HXLINE( 266)			_hx_tmp1 = (rtm->localId != m->localId);
             		}
             		else {
-HXLINE( 247)			_hx_tmp1 = false;
+HXLINE( 266)			_hx_tmp1 = false;
             		}
-HXDLIN( 247)		if (_hx_tmp1) {
-HXLINE( 247)			HX_STACK_DO_THROW(HX_("Hydrate localId mismatch",d5,ef,ca,42));
+HXDLIN( 266)		if (_hx_tmp1) {
+HXLINE( 266)			HX_STACK_DO_THROW(HX_("Hydrate localId mismatch",d5,ef,ca,42));
             		}
-HXLINE( 248)		return (this->replyToMessage = m);
+HXLINE( 267)		return (this->replyToMessage = m);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,set_replyToMessage,return )
 
  ::haxe::ds::StringMap ChatMessage_obj::set_reactions( ::haxe::ds::StringMap r){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_252_set_reactions)
-HXDLIN( 252)		 ::snikket::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 253)		bool _hx_tmp;
-HXDLIN( 253)		if (::hx::IsNotNull( this->reactions )) {
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_271_set_reactions)
+HXDLIN( 271)		 ::snikket::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 272)		bool _hx_tmp;
+HXDLIN( 272)		if (::hx::IsNotNull( this->reactions )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::ChatMessage,_gthis) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_253_set_reactions)
-HXLINE( 253)				return _gthis->reactions->keys();
+            				HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_272_set_reactions)
+HXLINE( 272)				return _gthis->reactions->keys();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 253)			_hx_tmp = !(::Lambda_obj::empty( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 272)			_hx_tmp = !(::Lambda_obj::empty( ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_gthis))))));
             		}
             		else {
-HXLINE( 253)			_hx_tmp = false;
+HXLINE( 272)			_hx_tmp = false;
             		}
-HXDLIN( 253)		if (_hx_tmp) {
-HXLINE( 253)			HX_STACK_DO_THROW(HX_("Reactions already hydrated",4f,72,b8,9d));
+HXDLIN( 272)		if (_hx_tmp) {
+HXLINE( 272)			HX_STACK_DO_THROW(HX_("Reactions already hydrated",4f,72,b8,9d));
             		}
-HXLINE( 254)		return (this->reactions = r);
+HXLINE( 273)		return (this->reactions = r);
             	}
 
 
@@ -565,49 +701,49 @@ HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,set_reactions,return )
 ::Array< ::Dynamic> ChatMessage_obj::inlineHashReferences(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::snikket::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_260_inlineHashReferences)
-HXLINE( 260)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
-HXLINE( 260)				return (p->name == HX_("html",6b,95,16,45));
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_279_inlineHashReferences)
+HXLINE( 279)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
+HXLINE( 279)				return (p->name == HX_("html",6b,95,16,45));
             			}
             			else {
-HXLINE( 260)				return false;
+HXLINE( 279)				return false;
             			}
-HXDLIN( 260)			return false;
+HXDLIN( 279)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_258_inlineHashReferences)
-HXLINE( 259)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 260)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 260)		 ::snikket::Stanza htmlBody;
-HXDLIN( 260)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 260)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_277_inlineHashReferences)
+HXLINE( 278)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 279)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 279)		 ::snikket::Stanza htmlBody;
+HXDLIN( 279)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 279)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
             		}
             		else {
-HXLINE( 260)			htmlBody = null();
+HXLINE( 279)			htmlBody = null();
             		}
-HXLINE( 261)		if (::hx::IsNotNull( htmlBody )) {
+HXLINE( 280)		if (::hx::IsNotNull( htmlBody )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,result) HXARGC(1)
             			bool _hx_run( ::snikket::Stanza child){
-            				HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_262_inlineHashReferences)
-HXLINE( 263)				if ((child->name == HX_("img",03,0c,50,00))) {
-HXLINE( 264)					::String src = ( (::String)(::Reflect_obj::field(child->attr,HX_("src",e4,a6,57,00))) );
-HXLINE( 265)					if (::hx::IsNotNull( src )) {
-HXLINE( 266)						 ::snikket::Hash hash = ::snikket::Hash_obj::fromUri(src);
-HXLINE( 267)						if (::hx::IsNotNull( hash )) {
-HXLINE( 268)							 ::snikket::Hash x = hash;
-HXLINE( 269)							result->push(x);
+            				HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_281_inlineHashReferences)
+HXLINE( 282)				if ((child->name == HX_("img",03,0c,50,00))) {
+HXLINE( 283)					::String src = ( (::String)(::Reflect_obj::field(child->attr,HX_("src",e4,a6,57,00))) );
+HXLINE( 284)					if (::hx::IsNotNull( src )) {
+HXLINE( 285)						 ::snikket::Hash hash = ::snikket::Hash_obj::fromUri(src);
+HXLINE( 286)						if (::hx::IsNotNull( hash )) {
+HXLINE( 287)							 ::snikket::Hash x = hash;
+HXLINE( 288)							result->push(x);
             						}
             					}
-HXLINE( 272)					return true;
+HXLINE( 291)					return true;
             				}
-HXLINE( 274)				return false;
+HXLINE( 293)				return false;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 262)			htmlBody->traverse( ::Dynamic(new _hx_Closure_1(result)));
+HXLINE( 281)			htmlBody->traverse( ::Dynamic(new _hx_Closure_1(result)));
             		}
-HXLINE( 278)		return result;
+HXLINE( 297)		return result;
             	}
 
 
@@ -616,360 +752,360 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,inlineHashReferences,return )
 ::String ChatMessage_obj::html(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::snikket::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_287_html)
-HXLINE( 287)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
-HXLINE( 287)				return (p->name == HX_("html",6b,95,16,45));
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_306_html)
+HXLINE( 306)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xhtml-im",c2,5d,b2,ce))) {
+HXLINE( 306)				return (p->name == HX_("html",6b,95,16,45));
             			}
             			else {
-HXLINE( 287)				return false;
+HXLINE( 306)				return false;
             			}
-HXDLIN( 287)			return false;
+HXDLIN( 306)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             		int _hx_run( ::Dynamic x, ::Dynamic y){
-            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_312_html)
-HXLINE( 312)			return (( (int)(y->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ) - ( (int)(x->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ));
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_331_html)
+HXLINE( 331)			return (( (int)(y->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ) - ( (int)(x->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) ));
             		}
             		HX_END_LOCAL_FUNC2(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             		bool _hx_run( ::snikket::Stanza p){
-            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_317_html)
-HXLINE( 317)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:styling:0",48,d3,aa,fb))) {
-HXLINE( 317)				return (p->name == HX_("unstyled",2c,15,1a,18));
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_336_html)
+HXLINE( 336)			if ((( (::String)(::Reflect_obj::field(p->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:styling:0",48,d3,aa,fb))) {
+HXLINE( 336)				return (p->name == HX_("unstyled",2c,15,1a,18));
             			}
             			else {
-HXLINE( 317)				return false;
+HXLINE( 336)				return false;
             			}
-HXDLIN( 317)			return false;
+HXDLIN( 336)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_286_html)
-HXDLIN( 286)		 ::snikket::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 287)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 287)		 ::snikket::Stanza htmlBody;
-HXDLIN( 287)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 287)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_305_html)
+HXDLIN( 305)		 ::snikket::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 306)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 306)		 ::snikket::Stanza htmlBody;
+HXDLIN( 306)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 306)			htmlBody = tmp->getChild(HX_("body",a2,7a,1b,41),HX_("http://www.w3.org/1999/xhtml",90,6d,f8,c8));
             		}
             		else {
-HXLINE( 287)			htmlBody = null();
-            		}
-HXLINE( 288)		if (::hx::IsNotNull( htmlBody )) {
-HXLINE( 289)			::Array< ::Dynamic> _this = htmlBody->getChildren();
-HXDLIN( 289)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 289)			{
-HXLINE( 289)				int _g = 0;
-HXDLIN( 289)				int _g1 = _this->length;
-HXDLIN( 289)				while((_g < _g1)){
-HXLINE( 289)					_g = (_g + 1);
-HXDLIN( 289)					int i = (_g - 1);
-HXDLIN( 289)					{
+HXLINE( 306)			htmlBody = null();
+            		}
+HXLINE( 307)		if (::hx::IsNotNull( htmlBody )) {
+HXLINE( 308)			::Array< ::Dynamic> _this = htmlBody->getChildren();
+HXDLIN( 308)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 308)			{
+HXLINE( 308)				int _g = 0;
+HXDLIN( 308)				int _g1 = _this->length;
+HXDLIN( 308)				while((_g < _g1)){
+HXLINE( 308)					_g = (_g + 1);
+HXDLIN( 308)					int i = (_g - 1);
+HXDLIN( 308)					{
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             						bool _hx_run( ::snikket::Stanza child){
-            							HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_289_html)
-HXLINE( 290)							if ((child->name == HX_("img",03,0c,50,00))) {
-HXLINE( 291)								::String src = ( (::String)(::Reflect_obj::field(child->attr,HX_("src",e4,a6,57,00))) );
-HXLINE( 292)								if (::hx::IsNotNull( src )) {
-HXLINE( 293)									 ::snikket::Hash hash = ::snikket::Hash_obj::fromUri(src);
-HXLINE( 294)									if (::hx::IsNotNull( hash )) {
-HXLINE( 295)										 ::Dynamic this1 = child->attr;
-HXDLIN( 295)										::String value = hash->toUri();
-HXDLIN( 295)										::Reflect_obj::setField(this1,HX_("src",e4,a6,57,00),value);
+            							HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_308_html)
+HXLINE( 309)							if ((child->name == HX_("img",03,0c,50,00))) {
+HXLINE( 310)								::String src = ( (::String)(::Reflect_obj::field(child->attr,HX_("src",e4,a6,57,00))) );
+HXLINE( 311)								if (::hx::IsNotNull( src )) {
+HXLINE( 312)									 ::snikket::Hash hash = ::snikket::Hash_obj::fromUri(src);
+HXLINE( 313)									if (::hx::IsNotNull( hash )) {
+HXLINE( 314)										 ::Dynamic this1 = child->attr;
+HXDLIN( 314)										::String value = hash->toUri();
+HXDLIN( 314)										::Reflect_obj::setField(this1,HX_("src",e4,a6,57,00),value);
             									}
             								}
-HXLINE( 298)								return true;
+HXLINE( 317)								return true;
             							}
-HXLINE( 300)							return false;
+HXLINE( 319)							return false;
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 289)						::String inValue = ::snikket::_Stanza::NodeInterface_obj::serialize(::snikket::_Stanza::NodeInterface_obj::traverse(_hx_array_unsafe_get(_this,i), ::Dynamic(new _hx_Closure_1())));
-HXDLIN( 289)						result->__unsafe_set(i,inValue);
+HXLINE( 308)						::String inValue = ::snikket::_Stanza::NodeInterface_obj::serialize(::snikket::_Stanza::NodeInterface_obj::traverse(_hx_array_unsafe_get(_this,i), ::Dynamic(new _hx_Closure_1())));
+HXDLIN( 308)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 289)			return result->join(HX_("",00,00,00,00));
+HXDLIN( 308)			return result->join(HX_("",00,00,00,00));
             		}
-HXLINE( 304)		::String tmp1 = this->text;
-HXDLIN( 304)		::String codepoints;
-HXDLIN( 304)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 304)			codepoints = tmp1;
+HXLINE( 323)		::String tmp1 = this->text;
+HXDLIN( 323)		::String codepoints;
+HXDLIN( 323)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 323)			codepoints = tmp1;
             		}
             		else {
-HXLINE( 304)			codepoints = HX_("",00,00,00,00);
-            		}
-HXDLIN( 304)		::Array< ::String > codepoints1 = ::snikket::StringUtil_obj::codepointArray(codepoints);
-HXLINE( 306)		::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 306)		{
-HXLINE( 306)			int _g3 = 0;
-HXDLIN( 306)			::Array< ::Dynamic> _g4 = this->payloads;
-HXDLIN( 306)			while((_g3 < _g4->length)){
-HXLINE( 306)				 ::snikket::Stanza v = _g4->__get(_g3).StaticCast<  ::snikket::Stanza >();
-HXDLIN( 306)				_g3 = (_g3 + 1);
-HXLINE( 307)				bool fallbacks;
-HXDLIN( 307)				if ((( (::String)(::Reflect_obj::field(v->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:fallback:0",74,aa,56,9b))) {
-HXLINE( 308)					bool fallbacks1;
-HXDLIN( 308)					bool fallbacks2;
-HXDLIN( 308)					bool fallbacks3;
-HXDLIN( 308)					if ((( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) != HX_("jabber:x:oob",aa,8a,5f,ef))) {
-HXLINE( 308)						fallbacks3 = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("urn:xmpp:sims:1",4f,1c,49,62));
+HXLINE( 323)			codepoints = HX_("",00,00,00,00);
+            		}
+HXDLIN( 323)		::Array< ::String > codepoints1 = ::snikket::StringUtil_obj::codepointArray(codepoints);
+HXLINE( 325)		::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 325)		{
+HXLINE( 325)			int _g3 = 0;
+HXDLIN( 325)			::Array< ::Dynamic> _g4 = this->payloads;
+HXDLIN( 325)			while((_g3 < _g4->length)){
+HXLINE( 325)				 ::snikket::Stanza v = _g4->__get(_g3).StaticCast<  ::snikket::Stanza >();
+HXDLIN( 325)				_g3 = (_g3 + 1);
+HXLINE( 326)				bool fallbacks;
+HXDLIN( 326)				if ((( (::String)(::Reflect_obj::field(v->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:fallback:0",74,aa,56,9b))) {
+HXLINE( 327)					bool fallbacks1;
+HXDLIN( 327)					bool fallbacks2;
+HXDLIN( 327)					bool fallbacks3;
+HXDLIN( 327)					if ((( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) != HX_("jabber:x:oob",aa,8a,5f,ef))) {
+HXLINE( 327)						fallbacks3 = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("urn:xmpp:sims:1",4f,1c,49,62));
             					}
             					else {
-HXLINE( 308)						fallbacks3 = true;
+HXLINE( 327)						fallbacks3 = true;
             					}
-HXDLIN( 308)					if (fallbacks3) {
-HXLINE( 308)						fallbacks2 = (_gthis->attachments->length > 0);
+HXDLIN( 327)					if (fallbacks3) {
+HXLINE( 327)						fallbacks2 = (_gthis->attachments->length > 0);
             					}
             					else {
-HXLINE( 308)						fallbacks2 = false;
+HXLINE( 327)						fallbacks2 = false;
             					}
-HXDLIN( 308)					if (!(fallbacks2)) {
-HXLINE( 309)						if (::hx::IsNotNull( _gthis->replyToMessage )) {
-HXLINE( 308)							fallbacks1 = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("urn:xmpp:reply:0",c4,d5,6f,90));
+HXDLIN( 327)					if (!(fallbacks2)) {
+HXLINE( 328)						if (::hx::IsNotNull( _gthis->replyToMessage )) {
+HXLINE( 327)							fallbacks1 = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("urn:xmpp:reply:0",c4,d5,6f,90));
             						}
             						else {
-HXLINE( 308)							fallbacks1 = false;
+HXLINE( 327)							fallbacks1 = false;
             						}
             					}
             					else {
-HXLINE( 308)						fallbacks1 = true;
+HXLINE( 327)						fallbacks1 = true;
             					}
-HXDLIN( 308)					if (!(fallbacks1)) {
-HXLINE( 307)						fallbacks = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("http://jabber.org/protocol/address",c0,fd,09,ed));
+HXDLIN( 327)					if (!(fallbacks1)) {
+HXLINE( 326)						fallbacks = (( (::String)(::Reflect_obj::field(v->attr,HX_("for",09,c7,4d,00))) ) == HX_("http://jabber.org/protocol/address",c0,fd,09,ed));
             					}
             					else {
-HXLINE( 307)						fallbacks = true;
+HXLINE( 326)						fallbacks = true;
             					}
             				}
             				else {
-HXLINE( 307)					fallbacks = false;
+HXLINE( 326)					fallbacks = false;
             				}
-HXLINE( 306)				if (fallbacks) {
-HXLINE( 306)					_g2->push(v);
+HXLINE( 325)				if (fallbacks) {
+HXLINE( 325)					_g2->push(v);
             				}
             			}
             		}
-HXDLIN( 306)		::Array< ::Dynamic> _this1 = _g2;
-HXDLIN( 306)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
-HXDLIN( 306)		{
-HXLINE( 306)			int _g5 = 0;
-HXDLIN( 306)			int _g6 = _this1->length;
-HXDLIN( 306)			while((_g5 < _g6)){
-HXLINE( 306)				_g5 = (_g5 + 1);
-HXDLIN( 306)				int i1 = (_g5 - 1);
-HXDLIN( 306)				{
-HXLINE( 306)					 ::snikket::Stanza inValue1 = ( ( ::snikket::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->getChild(HX_("body",a2,7a,1b,41),null());
-HXDLIN( 306)					result1->__unsafe_set(i1,inValue1);
+HXDLIN( 325)		::Array< ::Dynamic> _this1 = _g2;
+HXDLIN( 325)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
+HXDLIN( 325)		{
+HXLINE( 325)			int _g5 = 0;
+HXDLIN( 325)			int _g6 = _this1->length;
+HXDLIN( 325)			while((_g5 < _g6)){
+HXLINE( 325)				_g5 = (_g5 + 1);
+HXDLIN( 325)				int i1 = (_g5 - 1);
+HXDLIN( 325)				{
+HXLINE( 325)					 ::snikket::Stanza inValue1 = ( ( ::snikket::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->getChild(HX_("body",a2,7a,1b,41),null());
+HXDLIN( 325)					result1->__unsafe_set(i1,inValue1);
             				}
             			}
             		}
-HXDLIN( 306)		::Array< ::Dynamic> _this2 = result1;
-HXDLIN( 306)		::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(_this2->length);
-HXDLIN( 306)		{
-HXLINE( 306)			int _g7 = 0;
-HXDLIN( 306)			int _g8 = _this2->length;
-HXDLIN( 306)			while((_g7 < _g8)){
-HXLINE( 306)				_g7 = (_g7 + 1);
-HXDLIN( 306)				int i2 = (_g7 - 1);
-HXDLIN( 306)				{
-HXLINE( 311)					 ::snikket::Stanza b = ( ( ::snikket::Stanza)(_hx_array_unsafe_get(_this2,i2)) );
-HXLINE( 306)					 ::Dynamic inValue2;
-HXLINE( 311)					if (::hx::IsNull( b )) {
-HXLINE( 306)						inValue2 = null();
+HXDLIN( 325)		::Array< ::Dynamic> _this2 = result1;
+HXDLIN( 325)		::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(_this2->length);
+HXDLIN( 325)		{
+HXLINE( 325)			int _g7 = 0;
+HXDLIN( 325)			int _g8 = _this2->length;
+HXDLIN( 325)			while((_g7 < _g8)){
+HXLINE( 325)				_g7 = (_g7 + 1);
+HXDLIN( 325)				int i2 = (_g7 - 1);
+HXDLIN( 325)				{
+HXLINE( 330)					 ::snikket::Stanza b = ( ( ::snikket::Stanza)(_hx_array_unsafe_get(_this2,i2)) );
+HXLINE( 325)					 ::Dynamic inValue2;
+HXLINE( 330)					if (::hx::IsNull( b )) {
+HXLINE( 325)						inValue2 = null();
             					}
             					else {
-HXLINE( 311)						int inValue3;
-HXDLIN( 311)						::String tmp2 = ( (::String)(::Reflect_obj::field(b->attr,HX_("start",62,74,0b,84))) );
-HXDLIN( 311)						::String tmp3;
-HXDLIN( 311)						if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 311)							tmp3 = tmp2;
+HXLINE( 330)						int inValue3;
+HXDLIN( 330)						::String tmp2 = ( (::String)(::Reflect_obj::field(b->attr,HX_("start",62,74,0b,84))) );
+HXDLIN( 330)						::String tmp3;
+HXDLIN( 330)						if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 330)							tmp3 = tmp2;
             						}
             						else {
-HXLINE( 311)							tmp3 = HX_("0",30,00,00,00);
+HXLINE( 330)							tmp3 = HX_("0",30,00,00,00);
             						}
-HXDLIN( 311)						 ::Dynamic tmp4 = ::Std_obj::parseInt(tmp3);
-HXDLIN( 311)						if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 311)							inValue3 = ( (int)(tmp4) );
+HXDLIN( 330)						 ::Dynamic tmp4 = ::Std_obj::parseInt(tmp3);
+HXDLIN( 330)						if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 330)							inValue3 = ( (int)(tmp4) );
             						}
             						else {
-HXLINE( 311)							inValue3 = 0;
+HXLINE( 330)							inValue3 = 0;
             						}
-HXDLIN( 311)						::String tmp5 = ( (::String)(::Reflect_obj::field(b->attr,HX_("end",db,03,4d,00))) );
-HXDLIN( 311)						::String tmp6;
-HXDLIN( 311)						if (::hx::IsNotNull( tmp5 )) {
-HXLINE( 311)							tmp6 = tmp5;
+HXDLIN( 330)						::String tmp5 = ( (::String)(::Reflect_obj::field(b->attr,HX_("end",db,03,4d,00))) );
+HXDLIN( 330)						::String tmp6;
+HXDLIN( 330)						if (::hx::IsNotNull( tmp5 )) {
+HXLINE( 330)							tmp6 = tmp5;
             						}
             						else {
-HXLINE( 311)							tmp6 = ::Std_obj::string(codepoints1->length);
+HXLINE( 330)							tmp6 = ::Std_obj::string(codepoints1->length);
             						}
-HXDLIN( 311)						 ::Dynamic tmp7 = ::Std_obj::parseInt(tmp6);
-HXDLIN( 311)						int inValue4;
-HXDLIN( 311)						if (::hx::IsNotNull( tmp7 )) {
-HXLINE( 311)							inValue4 = ( (int)(tmp7) );
+HXDLIN( 330)						 ::Dynamic tmp7 = ::Std_obj::parseInt(tmp6);
+HXDLIN( 330)						int inValue4;
+HXDLIN( 330)						if (::hx::IsNotNull( tmp7 )) {
+HXLINE( 330)							inValue4 = ( (int)(tmp7) );
             						}
             						else {
-HXLINE( 311)							inValue4 = codepoints1->length;
+HXLINE( 330)							inValue4 = codepoints1->length;
             						}
-HXLINE( 306)						inValue2 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 325)						inValue2 =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("start",62,74,0b,84),inValue3)
             							->setFixed(1,HX_("end",db,03,4d,00),inValue4));
             					}
-HXDLIN( 306)					result2->__unsafe_set(i2,inValue2);
+HXDLIN( 325)					result2->__unsafe_set(i2,inValue2);
             				}
             			}
             		}
-HXDLIN( 306)		::Array< ::Dynamic> _g9 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 306)		{
-HXLINE( 306)			int _g10 = 0;
-HXDLIN( 306)			::Array< ::Dynamic> _g11 = result2;
-HXDLIN( 306)			while((_g10 < _g11->length)){
-HXLINE( 306)				 ::Dynamic v1 = _g11->__get(_g10);
-HXDLIN( 306)				_g10 = (_g10 + 1);
-HXDLIN( 306)				if (::hx::IsNotNull( v1 )) {
-HXLINE( 306)					_g9->push(v1);
+HXDLIN( 325)		::Array< ::Dynamic> _g9 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 325)		{
+HXLINE( 325)			int _g10 = 0;
+HXDLIN( 325)			::Array< ::Dynamic> _g11 = result2;
+HXDLIN( 325)			while((_g10 < _g11->length)){
+HXLINE( 325)				 ::Dynamic v1 = _g11->__get(_g10);
+HXDLIN( 325)				_g10 = (_g10 + 1);
+HXDLIN( 325)				if (::hx::IsNotNull( v1 )) {
+HXLINE( 325)					_g9->push(v1);
             				}
             			}
             		}
-HXDLIN( 306)		::Array< ::Dynamic> fallbacks4 = _g9;
-HXLINE( 312)		fallbacks4->sort( ::Dynamic(new _hx_Closure_2()));
-HXLINE( 313)		{
-HXLINE( 313)			int _g12 = 0;
-HXDLIN( 313)			while((_g12 < fallbacks4->length)){
-HXLINE( 313)				 ::Dynamic fallback = fallbacks4->__get(_g12);
-HXDLIN( 313)				_g12 = (_g12 + 1);
-HXLINE( 314)				codepoints1->removeRange( ::Dynamic(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)),(( (int)(fallback->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) ) - ( (int)(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) )));
+HXDLIN( 325)		::Array< ::Dynamic> fallbacks4 = _g9;
+HXLINE( 331)		fallbacks4->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE( 332)		{
+HXLINE( 332)			int _g12 = 0;
+HXDLIN( 332)			while((_g12 < fallbacks4->length)){
+HXLINE( 332)				 ::Dynamic fallback = fallbacks4->__get(_g12);
+HXDLIN( 332)				_g12 = (_g12 + 1);
+HXLINE( 333)				codepoints1->removeRange( ::Dynamic(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)),(( (int)(fallback->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) ) - ( (int)(fallback->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic)) )));
             			}
             		}
-HXLINE( 316)		::String body = codepoints1->join(HX_("",00,00,00,00));
-HXLINE( 317)		if (::hx::IsNull( ::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_3())) )) {
-HXLINE( 317)			::Array< ::String > _g13 = ::Array_obj< ::String >::__new(0);
-HXDLIN( 317)			{
-HXLINE( 317)				 ::Dynamic x = ::snikket::XEP0393_obj::parse(body)->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 317)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 317)					 ::snikket::Stanza x1 = ( ( ::snikket::Stanza)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 317)					_g13->push(x1->toString());
+HXLINE( 335)		::String body = codepoints1->join(HX_("",00,00,00,00));
+HXLINE( 336)		if (::hx::IsNull( ::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_3())) )) {
+HXLINE( 336)			::Array< ::String > _g13 = ::Array_obj< ::String >::__new(0);
+HXDLIN( 336)			{
+HXLINE( 336)				 ::Dynamic x = ::snikket::XEP0393_obj::parse(body)->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 336)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 336)					 ::snikket::Stanza x1 = ( ( ::snikket::Stanza)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 336)					_g13->push(x1->toString());
             				}
             			}
-HXDLIN( 317)			return _g13->join(HX_("",00,00,00,00));
+HXDLIN( 336)			return _g13->join(HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 317)			return ::StringTools_obj::htmlEscape(body,null());
+HXLINE( 336)			return ::StringTools_obj::htmlEscape(body,null());
             		}
-HXDLIN( 317)		return null();
+HXDLIN( 336)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,html,return )
 
 ::String ChatMessage_obj::chatId(){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_324_chatId)
-HXDLIN( 324)		if (this->isIncoming()) {
-HXLINE( 325)			::Array< ::Dynamic> _this = this->replyTo;
-HXDLIN( 325)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 325)			{
-HXLINE( 325)				int _g = 0;
-HXDLIN( 325)				int _g1 = _this->length;
-HXDLIN( 325)				while((_g < _g1)){
-HXLINE( 325)					_g = (_g + 1);
-HXDLIN( 325)					int i = (_g - 1);
-HXDLIN( 325)					{
-HXLINE( 325)						::String inValue = ( ( ::snikket::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
-HXDLIN( 325)						result->__unsafe_set(i,inValue);
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_343_chatId)
+HXDLIN( 343)		if (this->isIncoming()) {
+HXLINE( 344)			::Array< ::Dynamic> _this = this->replyTo;
+HXDLIN( 344)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 344)			{
+HXLINE( 344)				int _g = 0;
+HXDLIN( 344)				int _g1 = _this->length;
+HXDLIN( 344)				while((_g < _g1)){
+HXLINE( 344)					_g = (_g + 1);
+HXDLIN( 344)					int i = (_g - 1);
+HXDLIN( 344)					{
+HXLINE( 344)						::String inValue = ( ( ::snikket::JID)(_hx_array_unsafe_get(_this,i)) )->asBare()->asString();
+HXDLIN( 344)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 325)			return result->join(HX_("\n",0a,00,00,00));
+HXDLIN( 344)			return result->join(HX_("\n",0a,00,00,00));
             		}
             		else {
-HXLINE( 327)			::Array< ::Dynamic> _this1 = this->recipients;
-HXDLIN( 327)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN( 327)			{
-HXLINE( 327)				int _g2 = 0;
-HXDLIN( 327)				int _g3 = _this1->length;
-HXDLIN( 327)				while((_g2 < _g3)){
-HXLINE( 327)					_g2 = (_g2 + 1);
-HXDLIN( 327)					int i1 = (_g2 - 1);
-HXDLIN( 327)					{
-HXLINE( 327)						::String inValue1 = ( ( ::snikket::JID)(_hx_array_unsafe_get(_this1,i1)) )->asString();
-HXDLIN( 327)						result1->__unsafe_set(i1,inValue1);
+HXLINE( 346)			::Array< ::Dynamic> _this1 = this->recipients;
+HXDLIN( 346)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
+HXDLIN( 346)			{
+HXLINE( 346)				int _g2 = 0;
+HXDLIN( 346)				int _g3 = _this1->length;
+HXDLIN( 346)				while((_g2 < _g3)){
+HXLINE( 346)					_g2 = (_g2 + 1);
+HXDLIN( 346)					int i1 = (_g2 - 1);
+HXDLIN( 346)					{
+HXLINE( 346)						::String inValue1 = ( ( ::snikket::JID)(_hx_array_unsafe_get(_this1,i1)) )->asString();
+HXDLIN( 346)						result1->__unsafe_set(i1,inValue1);
             					}
             				}
             			}
-HXDLIN( 327)			return result1->join(HX_("\n",0a,00,00,00));
+HXDLIN( 346)			return result1->join(HX_("\n",0a,00,00,00));
             		}
-HXLINE( 324)		return null();
+HXLINE( 343)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,chatId,return )
 
 ::String ChatMessage_obj::account(){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_335_account)
-HXDLIN( 335)		::String tmp;
-HXDLIN( 335)		if (!(this->isIncoming())) {
-HXDLIN( 335)			 ::snikket::JID tmp1 = this->from;
-HXDLIN( 335)			 ::snikket::JID tmp2;
-HXDLIN( 335)			if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 335)				tmp2 = tmp1->asBare();
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_354_account)
+HXDLIN( 354)		::String tmp;
+HXDLIN( 354)		if (!(this->isIncoming())) {
+HXDLIN( 354)			 ::snikket::JID tmp1 = this->from;
+HXDLIN( 354)			 ::snikket::JID tmp2;
+HXDLIN( 354)			if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 354)				tmp2 = tmp1->asBare();
             			}
             			else {
-HXDLIN( 335)				tmp2 = null();
+HXDLIN( 354)				tmp2 = null();
             			}
-HXDLIN( 335)			if (::hx::IsNotNull( tmp2 )) {
-HXDLIN( 335)				tmp = tmp2->asString();
+HXDLIN( 354)			if (::hx::IsNotNull( tmp2 )) {
+HXDLIN( 354)				tmp = tmp2->asString();
             			}
             			else {
-HXDLIN( 335)				tmp = null();
+HXDLIN( 354)				tmp = null();
             			}
             		}
             		else {
-HXDLIN( 335)			 ::snikket::JID tmp3 = this->to;
-HXDLIN( 335)			 ::snikket::JID tmp4;
-HXDLIN( 335)			if (::hx::IsNotNull( tmp3 )) {
-HXDLIN( 335)				tmp4 = tmp3->asBare();
+HXDLIN( 354)			 ::snikket::JID tmp3 = this->to;
+HXDLIN( 354)			 ::snikket::JID tmp4;
+HXDLIN( 354)			if (::hx::IsNotNull( tmp3 )) {
+HXDLIN( 354)				tmp4 = tmp3->asBare();
             			}
             			else {
-HXDLIN( 335)				tmp4 = null();
+HXDLIN( 354)				tmp4 = null();
             			}
-HXDLIN( 335)			if (::hx::IsNotNull( tmp4 )) {
-HXDLIN( 335)				tmp = tmp4->asString();
+HXDLIN( 354)			if (::hx::IsNotNull( tmp4 )) {
+HXDLIN( 354)				tmp = tmp4->asString();
             			}
             			else {
-HXDLIN( 335)				tmp = null();
+HXDLIN( 354)				tmp = null();
             			}
             		}
-HXDLIN( 335)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 335)			return tmp;
+HXDLIN( 354)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 354)			return tmp;
             		}
             		else {
-HXDLIN( 335)			HX_STACK_DO_THROW(HX_("from or to is null",7f,19,89,e6));
+HXDLIN( 354)			HX_STACK_DO_THROW(HX_("from or to is null",7f,19,89,e6));
             		}
-HXDLIN( 335)		return null();
+HXDLIN( 354)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,account,return )
 
 bool ChatMessage_obj::isIncoming(){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_342_isIncoming)
-HXDLIN( 342)		return (this->direction == 0);
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_361_isIncoming)
+HXDLIN( 361)		return (this->direction == 0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,isIncoming,return )
 
 ::String ChatMessage_obj::threadIcon(){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_349_threadIcon)
-HXDLIN( 349)		if (::hx::IsNull( this->threadId )) {
-HXDLIN( 349)			return null();
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_368_threadIcon)
+HXDLIN( 368)		if (::hx::IsNull( this->threadId )) {
+HXDLIN( 368)			return null();
             		}
             		else {
-HXDLIN( 349)			return ::snikket::Identicon_obj::svg(this->threadId);
+HXDLIN( 368)			return ::snikket::Identicon_obj::svg(this->threadId);
             		}
-HXDLIN( 349)		return null();
+HXDLIN( 368)		return null();
             	}
 
 
@@ -978,20 +1114,20 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,threadIcon,return )
 ::String ChatMessage_obj::callStatus(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::snikket::Stanza el){
-            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_356_callStatus)
-HXDLIN( 356)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_375_callStatus)
+HXDLIN( 375)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_356_callStatus)
-HXDLIN( 356)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 356)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 356)			return tmp->name;
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_375_callStatus)
+HXDLIN( 375)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 375)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 375)			return tmp->name;
             		}
             		else {
-HXDLIN( 356)			return null();
+HXDLIN( 375)			return null();
             		}
-HXDLIN( 356)		return null();
+HXDLIN( 375)		return null();
             	}
 
 
@@ -1000,374 +1136,374 @@ HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,callStatus,return )
 ::String ChatMessage_obj::callSid(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::snikket::Stanza el){
-            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_363_callSid)
-HXDLIN( 363)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+            			HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_382_callSid)
+HXDLIN( 382)			return (( (::String)(::Reflect_obj::field(el->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_363_callSid)
-HXDLIN( 363)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 363)		 ::Dynamic tmp1;
-HXDLIN( 363)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 363)			tmp1 = tmp->attr;
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_382_callSid)
+HXDLIN( 382)		 ::snikket::Stanza tmp = ( ( ::snikket::Stanza)(::Lambda_obj::find(this->payloads, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 382)		 ::Dynamic tmp1;
+HXDLIN( 382)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 382)			tmp1 = tmp->attr;
             		}
             		else {
-HXDLIN( 363)			tmp1 = null();
+HXDLIN( 382)			tmp1 = null();
             		}
-HXDLIN( 363)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 363)			return ( (::String)(::Reflect_obj::field(tmp1,HX_("id",db,5b,00,00))) );
+HXDLIN( 382)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 382)			return ( (::String)(::Reflect_obj::field(tmp1,HX_("id",db,5b,00,00))) );
             		}
             		else {
-HXDLIN( 363)			return null();
+HXDLIN( 382)			return null();
             		}
-HXDLIN( 363)		return null();
+HXDLIN( 382)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,callSid,return )
 
 ::String ChatMessage_obj::callDuration(){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_369_callDuration)
-HXLINE( 370)		if ((this->versions->length < 2)) {
-HXLINE( 370)			return null();
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_388_callDuration)
+HXLINE( 389)		if ((this->versions->length < 2)) {
+HXLINE( 389)			return null();
             		}
-HXLINE( 371)		::String startedStr = this->versions->__get((this->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >()->timestamp;
-HXLINE( 373)		::String _g = this->callStatus();
-HXDLIN( 373)		if (::hx::IsNull( _g )) {
-HXLINE( 388)			return null();
+HXLINE( 390)		::String startedStr = this->versions->__get((this->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >()->timestamp;
+HXLINE( 392)		::String _g = this->callStatus();
+HXDLIN( 392)		if (::hx::IsNull( _g )) {
+HXLINE( 407)			return null();
             		}
             		else {
-HXLINE( 373)			::String _hx_switch_0 = _g;
+HXLINE( 392)			::String _hx_switch_0 = _g;
             			if (  (_hx_switch_0==HX_("finish",53,40,7f,86)) ){
-HXLINE( 375)				::String endedStr = this->versions->__get(0).StaticCast<  ::snikket::ChatMessage >()->timestamp;
-HXLINE( 376)				bool _hx_tmp;
-HXDLIN( 376)				if (::hx::IsNotNull( startedStr )) {
-HXLINE( 376)					_hx_tmp = ::hx::IsNull( endedStr );
+HXLINE( 394)				::String endedStr = this->versions->__get(0).StaticCast<  ::snikket::ChatMessage >()->timestamp;
+HXLINE( 395)				bool _hx_tmp;
+HXDLIN( 395)				if (::hx::IsNotNull( startedStr )) {
+HXLINE( 395)					_hx_tmp = ::hx::IsNull( endedStr );
             				}
             				else {
-HXLINE( 376)					_hx_tmp = true;
+HXLINE( 395)					_hx_tmp = true;
             				}
-HXDLIN( 376)				if (_hx_tmp) {
-HXLINE( 376)					return null();
+HXDLIN( 395)				if (_hx_tmp) {
+HXLINE( 395)					return null();
             				}
-HXLINE( 377)				Float started = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
-HXLINE( 378)				Float ended = ::datetime::utils::DateTimeUtils_obj::fromString(endedStr);
-HXLINE( 379)				 ::datetime::cores::DateTimeIntervalCore duration = ::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started,((ended - ((Float)62135596800.0)) + ((Float)62135596800.0)));
-HXLINE( 380)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(duration,HX_("%I:%S",44,2d,40,7e));
-HXLINE( 374)				goto _hx_goto_48;
+HXLINE( 396)				Float started = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
+HXLINE( 397)				Float ended = ::datetime::utils::DateTimeUtils_obj::fromString(endedStr);
+HXLINE( 398)				 ::datetime::cores::DateTimeIntervalCore duration = ::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started,((ended - ((Float)62135596800.0)) + ((Float)62135596800.0)));
+HXLINE( 399)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(duration,HX_("%I:%S",44,2d,40,7e));
+HXLINE( 393)				goto _hx_goto_55;
             			}
             			if (  (_hx_switch_0==HX_("proceed",2e,96,4a,f1)) ){
-HXLINE( 382)				if (::hx::IsNull( startedStr )) {
-HXLINE( 382)					return null();
+HXLINE( 401)				if (::hx::IsNull( startedStr )) {
+HXLINE( 401)					return null();
             				}
-HXLINE( 383)				Float started1 = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
-HXLINE( 384)				Float ended1 = ( ::__hxcpp_date_now() + ((Float)62135596800.0));
-HXLINE( 385)				 ::datetime::cores::DateTimeIntervalCore duration1 = ::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started1,((ended1 - ((Float)62135596800.0)) + ((Float)62135596800.0)));
-HXLINE( 386)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(duration1,HX_("%I:%S",44,2d,40,7e));
-HXLINE( 381)				goto _hx_goto_48;
+HXLINE( 402)				Float started1 = ::datetime::utils::DateTimeUtils_obj::fromString(startedStr);
+HXLINE( 403)				Float ended1 = ( ::__hxcpp_date_now() + ((Float)62135596800.0));
+HXLINE( 404)				 ::datetime::cores::DateTimeIntervalCore duration1 = ::datetime::_DateTimeInterval::DateTimeInterval_Impl__obj::create(started1,((ended1 - ((Float)62135596800.0)) + ((Float)62135596800.0)));
+HXLINE( 405)				return ::datetime::utils::DateTimeIntervalUtils_obj::strftime(duration1,HX_("%I:%S",44,2d,40,7e));
+HXLINE( 400)				goto _hx_goto_55;
             			}
             			/* default */{
-HXLINE( 388)				return null();
+HXLINE( 407)				return null();
             			}
-            			_hx_goto_48:;
+            			_hx_goto_55:;
             		}
-HXLINE( 373)		return null();
+HXLINE( 392)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,callDuration,return )
 
  ::snikket::Stanza ChatMessage_obj::asStanza(){
-            	HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_393_asStanza)
-HXDLIN( 393)		 ::snikket::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 394)		if (::hx::IsNotNull( this->stanza )) {
-HXLINE( 394)			return this->stanza;
+            	HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_412_asStanza)
+HXDLIN( 412)		 ::snikket::ChatMessage _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 413)		if (::hx::IsNotNull( this->stanza )) {
+HXLINE( 413)			return this->stanza;
             		}
-HXLINE( 396)		::String body = this->text;
-HXLINE( 397)		::String attrs;
-HXDLIN( 397)		if ((this->type == 2)) {
-HXLINE( 397)			attrs = HX_("groupchat",97,1d,c8,e5);
+HXLINE( 415)		::String body = this->text;
+HXLINE( 416)		::String attrs;
+HXDLIN( 416)		if ((this->type == 2)) {
+HXLINE( 416)			attrs = HX_("groupchat",97,1d,c8,e5);
             		}
             		else {
-HXLINE( 397)			attrs = HX_("chat",d8,5e,bf,41);
+HXLINE( 416)			attrs = HX_("chat",d8,5e,bf,41);
             		}
-HXDLIN( 397)		 ::Dynamic attrs1 =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN( 416)		 ::Dynamic attrs1 =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),attrs));
-HXLINE( 398)		if (::hx::IsNotNull( this->from )) {
-HXLINE( 398)			::String value = this->from->asString();
-HXDLIN( 398)			::Reflect_obj::setField(attrs1,HX_("from",6a,a5,c2,43),value);
+HXLINE( 417)		if (::hx::IsNotNull( this->from )) {
+HXLINE( 417)			::String value = this->from->asString();
+HXDLIN( 417)			::Reflect_obj::setField(attrs1,HX_("from",6a,a5,c2,43),value);
             		}
-HXLINE( 399)		if (::hx::IsNotNull( this->to )) {
-HXLINE( 399)			::String value1 = this->to->asString();
-HXDLIN( 399)			::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),value1);
+HXLINE( 418)		if (::hx::IsNotNull( this->to )) {
+HXLINE( 418)			::String value1 = this->to->asString();
+HXDLIN( 418)			::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),value1);
             		}
-HXLINE( 400)		if (::hx::IsNotNull( this->localId )) {
-HXLINE( 400)			::String value2 = this->localId;
-HXDLIN( 400)			::Reflect_obj::setField(attrs1,HX_("id",db,5b,00,00),value2);
+HXLINE( 419)		if (::hx::IsNotNull( this->localId )) {
+HXLINE( 419)			::String value2 = this->localId;
+HXDLIN( 419)			::Reflect_obj::setField(attrs1,HX_("id",db,5b,00,00),value2);
             		}
-HXLINE( 401)		 ::snikket::Stanza stanza =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),attrs1);
-HXLINE( 402)		bool _hx_tmp;
-HXDLIN( 402)		if ((this->versions->length > 0)) {
-HXLINE( 402)			_hx_tmp = ::hx::IsNotNull( this->versions->__get((this->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >()->localId );
+HXLINE( 420)		 ::snikket::Stanza stanza =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),attrs1);
+HXLINE( 421)		bool _hx_tmp;
+HXDLIN( 421)		if ((this->versions->length > 0)) {
+HXLINE( 421)			_hx_tmp = ::hx::IsNotNull( this->versions->__get((this->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >()->localId );
             		}
             		else {
-HXLINE( 402)			_hx_tmp = false;
+HXLINE( 421)			_hx_tmp = false;
             		}
-HXDLIN( 402)		if (_hx_tmp) {
-HXLINE( 402)			stanza->tag(HX_("replace",34,48,28,ab), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 421)		if (_hx_tmp) {
+HXLINE( 421)			stanza->tag(HX_("replace",34,48,28,ab), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),this->versions->__get((this->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >()->localId)
             				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:message-correct:0",be,10,1b,b0))))->up();
             		}
-HXLINE( 403)		if (::hx::IsNotNull( this->threadId )) {
-HXLINE( 403)			stanza->textTag(HX_("thread",ca,7a,b9,8e),this->threadId,null());
+HXLINE( 422)		if (::hx::IsNotNull( this->threadId )) {
+HXLINE( 422)			stanza->textTag(HX_("thread",ca,7a,b9,8e),this->threadId,null());
             		}
-HXLINE( 404)		if ((this->recipients->length > 1)) {
-HXLINE( 405)			 ::snikket::Stanza addresses = stanza->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 423)		if ((this->recipients->length > 1)) {
+HXLINE( 424)			 ::snikket::Stanza addresses = stanza->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/address",c0,fd,09,ed))));
-HXLINE( 406)			{
-HXLINE( 406)				int _g = 0;
-HXDLIN( 406)				::Array< ::Dynamic> _g1 = this->recipients;
-HXDLIN( 406)				while((_g < _g1->length)){
-HXLINE( 406)					 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
-HXDLIN( 406)					_g = (_g + 1);
-HXLINE( 407)					addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 425)			{
+HXLINE( 425)				int _g = 0;
+HXDLIN( 425)				::Array< ::Dynamic> _g1 = this->recipients;
+HXDLIN( 425)				while((_g < _g1->length)){
+HXLINE( 425)					 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
+HXDLIN( 425)					_g = (_g + 1);
+HXLINE( 426)					addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("delivered",84,e0,1c,b2),HX_("true",4e,a7,03,4d))
             						->setFixed(1,HX_("jid",c5,ca,50,00),recipient->asString())
             						->setFixed(2,HX_("type",ba,f2,08,4d),HX_("to",7b,65,00,00))))->up();
             				}
             			}
-HXLINE( 409)			addresses->up();
+HXLINE( 428)			addresses->up();
             		}
             		else {
-HXLINE( 410)			bool _hx_tmp1;
-HXDLIN( 410)			if ((this->recipients->length == 1)) {
-HXLINE( 410)				_hx_tmp1 = ::hx::IsNull( this->to );
+HXLINE( 429)			bool _hx_tmp1;
+HXDLIN( 429)			if ((this->recipients->length == 1)) {
+HXLINE( 429)				_hx_tmp1 = ::hx::IsNull( this->to );
             			}
             			else {
-HXLINE( 410)				_hx_tmp1 = false;
+HXLINE( 429)				_hx_tmp1 = false;
             			}
-HXDLIN( 410)			if (_hx_tmp1) {
-HXLINE( 411)				::String value3 = this->recipients->__get(0).StaticCast<  ::snikket::JID >()->asString();
-HXDLIN( 411)				::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),value3);
+HXDLIN( 429)			if (_hx_tmp1) {
+HXLINE( 430)				::String value3 = this->recipients->__get(0).StaticCast<  ::snikket::JID >()->asString();
+HXDLIN( 430)				::Reflect_obj::setField(attrs1,HX_("to",7b,65,00,00),value3);
             			}
             		}
-HXLINE( 414)		 ::snikket::ChatMessage replyToM = this->replyToMessage;
-HXLINE( 415)		if (::hx::IsNotNull( replyToM )) {
-HXLINE( 416)			::String replyId = replyToM->getReplyId();
-HXLINE( 417)			if (::hx::IsNotNull( body )) {
-HXLINE( 418)				::Array< ::String > lines;
-HXDLIN( 418)				::String tmp = replyToM->text;
-HXDLIN( 418)				::Array< ::String > tmp1;
-HXDLIN( 418)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 418)					tmp1 = tmp.split(HX_("\n",0a,00,00,00));
+HXLINE( 433)		 ::snikket::ChatMessage replyToM = this->replyToMessage;
+HXLINE( 434)		if (::hx::IsNotNull( replyToM )) {
+HXLINE( 435)			::String replyId = replyToM->getReplyId();
+HXLINE( 436)			if (::hx::IsNotNull( body )) {
+HXLINE( 437)				::Array< ::String > lines;
+HXDLIN( 437)				::String tmp = replyToM->text;
+HXDLIN( 437)				::Array< ::String > tmp1;
+HXDLIN( 437)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 437)					tmp1 = tmp.split(HX_("\n",0a,00,00,00));
             				}
             				else {
-HXLINE( 418)					tmp1 = null();
+HXLINE( 437)					tmp1 = null();
             				}
-HXDLIN( 418)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 418)					lines = tmp1;
+HXDLIN( 437)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 437)					lines = tmp1;
             				}
             				else {
-HXLINE( 418)					lines = ::Array_obj< ::String >::__new(0);
+HXLINE( 437)					lines = ::Array_obj< ::String >::__new(0);
             				}
-HXLINE( 419)				::String quoteText = HX_("",00,00,00,00);
-HXLINE( 420)				{
-HXLINE( 420)					int _g2 = 0;
-HXDLIN( 420)					while((_g2 < lines->length)){
-HXLINE( 420)						::String line = lines->__get(_g2);
-HXDLIN( 420)						_g2 = (_g2 + 1);
-HXLINE( 421)						if (!( ::EReg_obj::__alloc( HX_CTX ,HX_("^(?:> ?){3,}",7a,64,54,8e),HX_("",00,00,00,00))->match(line))) {
-HXLINE( 422)							if ((line.charAt(0) == HX_(">",3e,00,00,00))) {
-HXLINE( 423)								quoteText = (quoteText + ((HX_(">",3e,00,00,00) + line) + HX_("\n",0a,00,00,00)));
+HXLINE( 438)				::String quoteText = HX_("",00,00,00,00);
+HXLINE( 439)				{
+HXLINE( 439)					int _g2 = 0;
+HXDLIN( 439)					while((_g2 < lines->length)){
+HXLINE( 439)						::String line = lines->__get(_g2);
+HXDLIN( 439)						_g2 = (_g2 + 1);
+HXLINE( 440)						if (!( ::EReg_obj::__alloc( HX_CTX ,HX_("^(?:> ?){3,}",7a,64,54,8e),HX_("",00,00,00,00))->match(line))) {
+HXLINE( 441)							if ((line.charAt(0) == HX_(">",3e,00,00,00))) {
+HXLINE( 442)								quoteText = (quoteText + ((HX_(">",3e,00,00,00) + line) + HX_("\n",0a,00,00,00)));
             							}
             							else {
-HXLINE( 425)								quoteText = (quoteText + ((HX_("> ",22,36,00,00) + line) + HX_("\n",0a,00,00,00)));
+HXLINE( 444)								quoteText = (quoteText + ((HX_("> ",22,36,00,00) + line) + HX_("\n",0a,00,00,00)));
             							}
             						}
             					}
             				}
-HXLINE( 429)				::String reaction;
-HXDLIN( 429)				if (::snikket::EmojiUtil_obj::isEmoji(::StringTools_obj::trim(body))) {
-HXLINE( 429)					reaction = ::StringTools_obj::trim(body);
+HXLINE( 448)				::String reaction;
+HXDLIN( 448)				if (::snikket::EmojiUtil_obj::isEmoji(::StringTools_obj::trim(body))) {
+HXLINE( 448)					reaction = ::StringTools_obj::trim(body);
             				}
             				else {
-HXLINE( 429)					reaction = null();
+HXLINE( 448)					reaction = null();
             				}
-HXLINE( 430)				body = (quoteText + body);
-HXLINE( 431)				if (::hx::IsNotNull( replyId )) {
-HXLINE( 432)					::Array< ::String > codepoints = ::snikket::StringUtil_obj::codepointArray(quoteText);
-HXLINE( 433)					if (::hx::IsNotNull( reaction )) {
-HXLINE( 434)						 ::haxe::ds::StringMap addedReactions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 435)						stanza->tag(HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 449)				body = (quoteText + body);
+HXLINE( 450)				if (::hx::IsNotNull( replyId )) {
+HXLINE( 451)					::Array< ::String > codepoints = ::snikket::StringUtil_obj::codepointArray(quoteText);
+HXLINE( 452)					if (::hx::IsNotNull( reaction )) {
+HXLINE( 453)						 ::haxe::ds::StringMap addedReactions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 454)						stanza->tag(HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("id",db,5b,00,00),replyId)
             							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reactions:0",44,fb,42,53))));
-HXLINE( 436)						stanza->textTag(HX_("reaction",a9,e7,b4,f6),reaction,null());
-HXLINE( 437)						addedReactions->set(reaction,true);
-HXLINE( 439)						{
-HXLINE( 439)							::Dynamic map = replyToM->reactions;
-HXDLIN( 439)							::Dynamic _g_map = map;
-HXDLIN( 439)							 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 439)							while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 439)								::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 439)								::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 439)								::String _g_key = key;
-HXDLIN( 439)								::String areaction = _g_key;
-HXDLIN( 439)								::Array< ::Dynamic> reactions = _g_value;
-HXLINE( 440)								bool _hx_tmp2;
-HXDLIN( 440)								 ::Dynamic tmp2 = addedReactions->get(areaction);
-HXDLIN( 440)								bool _hx_tmp3;
-HXDLIN( 440)								if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 440)									_hx_tmp3 = ( (bool)(tmp2) );
+HXLINE( 455)						stanza->textTag(HX_("reaction",a9,e7,b4,f6),reaction,null());
+HXLINE( 456)						addedReactions->set(reaction,true);
+HXLINE( 458)						{
+HXLINE( 458)							::Dynamic map = replyToM->reactions;
+HXDLIN( 458)							::Dynamic _g_map = map;
+HXDLIN( 458)							 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 458)							while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 458)								::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 458)								::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 458)								::String _g_key = key;
+HXDLIN( 458)								::String areaction = _g_key;
+HXDLIN( 458)								::Array< ::Dynamic> reactions = _g_value;
+HXLINE( 459)								bool _hx_tmp2;
+HXDLIN( 459)								 ::Dynamic tmp2 = addedReactions->get(areaction);
+HXDLIN( 459)								bool _hx_tmp3;
+HXDLIN( 459)								if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 459)									_hx_tmp3 = ( (bool)(tmp2) );
             								}
             								else {
-HXLINE( 440)									_hx_tmp3 = false;
+HXLINE( 459)									_hx_tmp3 = false;
             								}
-HXDLIN( 440)								if (!(_hx_tmp3)) {
+HXDLIN( 459)								if (!(_hx_tmp3)) {
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::ChatMessage,_gthis) HXARGC(1)
             									bool _hx_run( ::snikket::Reaction r){
-            										HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_440_asStanza)
-HXLINE( 440)										return (r->senderId == _gthis->senderId);
+            										HX_GC_STACKFRAME(&_hx_pos_b3673a050e0c4d12_459_asStanza)
+HXLINE( 459)										return (r->senderId == _gthis->senderId);
             									}
             									HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 440)									_hx_tmp2 = ::hx::IsNotNull( ::Lambda_obj::find(reactions, ::Dynamic(new _hx_Closure_0(_gthis))) );
+HXLINE( 459)									_hx_tmp2 = ::hx::IsNotNull( ::Lambda_obj::find(reactions, ::Dynamic(new _hx_Closure_0(_gthis))) );
             								}
             								else {
-HXLINE( 440)									_hx_tmp2 = false;
+HXLINE( 459)									_hx_tmp2 = false;
             								}
-HXDLIN( 440)								if (_hx_tmp2) {
-HXLINE( 441)									addedReactions->set(areaction,true);
-HXLINE( 442)									stanza->textTag(HX_("reaction",a9,e7,b4,f6),areaction,null());
+HXDLIN( 459)								if (_hx_tmp2) {
+HXLINE( 460)									addedReactions->set(areaction,true);
+HXLINE( 461)									stanza->textTag(HX_("reaction",a9,e7,b4,f6),areaction,null());
             								}
             							}
             						}
-HXLINE( 445)						stanza->up();
-HXLINE( 446)						stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 464)						stanza->up();
+HXLINE( 465)						stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("for",09,c7,4d,00),HX_("urn:xmpp:reactions:0",44,fb,42,53))
             							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))))->tag(HX_("body",a2,7a,1b,41),null())->up()->up();
             					}
-HXLINE( 449)					 ::snikket::Stanza _hx_tmp4 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 468)					 ::snikket::Stanza _hx_tmp4 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("for",09,c7,4d,00),HX_("urn:xmpp:reply:0",c4,d5,6f,90))
             						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))));
-HXDLIN( 449)					_hx_tmp4->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 468)					_hx_tmp4->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("start",62,74,0b,84),HX_("0",30,00,00,00))
             						->setFixed(1,HX_("end",db,03,4d,00),::Std_obj::string(codepoints->length))))->up()->up();
             				}
             			}
-HXLINE( 453)			if (::hx::IsNotNull( replyId )) {
-HXLINE( 453)				 ::snikket::JID tmp3 = replyToM->from;
-HXDLIN( 453)				::String _hx_tmp5;
-HXDLIN( 453)				if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 453)					_hx_tmp5 = tmp3->asString();
+HXLINE( 472)			if (::hx::IsNotNull( replyId )) {
+HXLINE( 472)				 ::snikket::JID tmp3 = replyToM->from;
+HXDLIN( 472)				::String _hx_tmp5;
+HXDLIN( 472)				if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 472)					_hx_tmp5 = tmp3->asString();
             				}
             				else {
-HXLINE( 453)					_hx_tmp5 = null();
+HXLINE( 472)					_hx_tmp5 = null();
             				}
-HXDLIN( 453)				stanza->tag(HX_("reply",2a,09,c6,e6), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 472)				stanza->tag(HX_("reply",2a,09,c6,e6), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),replyId)
             					->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp5)
             					->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reply:0",c4,d5,6f,90))))->up();
             			}
             		}
-HXLINE( 456)		{
-HXLINE( 456)			int _g3 = 0;
-HXDLIN( 456)			::Array< ::Dynamic> _g4 = this->attachments;
-HXDLIN( 456)			while((_g3 < _g4->length)){
-HXLINE( 456)				 ::snikket::ChatAttachment attachment = _g4->__get(_g3).StaticCast<  ::snikket::ChatAttachment >();
-HXDLIN( 456)				_g3 = (_g3 + 1);
-HXLINE( 457)				stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 475)		{
+HXLINE( 475)			int _g3 = 0;
+HXDLIN( 475)			::Array< ::Dynamic> _g4 = this->attachments;
+HXDLIN( 475)			while((_g3 < _g4->length)){
+HXLINE( 475)				 ::snikket::ChatAttachment attachment = _g4->__get(_g3).StaticCast<  ::snikket::ChatAttachment >();
+HXDLIN( 475)				_g3 = (_g3 + 1);
+HXLINE( 476)				stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("data",2a,56,63,42))
             					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reference:0",a5,00,10,5d))))->tag(HX_("media-sharing",33,1c,0a,3d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sims:1",4f,1c,49,62))));
-HXLINE( 461)				stanza->tag(HX_("file",7c,ce,bb,43), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 480)				stanza->tag(HX_("file",7c,ce,bb,43), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:file-transfer:5",9c,81,0d,37))));
-HXLINE( 462)				if (::hx::IsNotNull( attachment->name )) {
-HXLINE( 462)					stanza->textTag(HX_("name",4b,72,ff,48),attachment->name,null());
+HXLINE( 481)				if (::hx::IsNotNull( attachment->name )) {
+HXLINE( 481)					stanza->textTag(HX_("name",4b,72,ff,48),attachment->name,null());
             				}
-HXLINE( 463)				stanza->textTag(HX_("media-type",03,ce,a4,7d),attachment->mime,null());
-HXLINE( 464)				if (::hx::IsNotNull( attachment->size )) {
-HXLINE( 464)					stanza->textTag(HX_("size",c1,a0,53,4c),::Std_obj::string(attachment->size),null());
+HXLINE( 482)				stanza->textTag(HX_("media-type",03,ce,a4,7d),attachment->mime,null());
+HXLINE( 483)				if (::hx::IsNotNull( attachment->size )) {
+HXLINE( 483)					stanza->textTag(HX_("size",c1,a0,53,4c),::Std_obj::string(attachment->size),null());
             				}
-HXLINE( 465)				{
-HXLINE( 465)					int _g5 = 0;
-HXDLIN( 465)					::Array< ::Dynamic> _g6 = attachment->hashes;
-HXDLIN( 465)					while((_g5 < _g6->length)){
-HXLINE( 465)						 ::snikket::Hash hash = _g6->__get(_g5).StaticCast<  ::snikket::Hash >();
-HXDLIN( 465)						_g5 = (_g5 + 1);
-HXLINE( 466)						::String _hx_tmp6 = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(hash->hash),null());
-HXDLIN( 466)						stanza->textTag(HX_("hash",ce,2f,08,45),_hx_tmp6, ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 484)				{
+HXLINE( 484)					int _g5 = 0;
+HXDLIN( 484)					::Array< ::Dynamic> _g6 = attachment->hashes;
+HXDLIN( 484)					while((_g5 < _g6->length)){
+HXLINE( 484)						 ::snikket::Hash hash = _g6->__get(_g5).StaticCast<  ::snikket::Hash >();
+HXDLIN( 484)						_g5 = (_g5 + 1);
+HXLINE( 485)						::String _hx_tmp6 = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(hash->hash),null());
+HXDLIN( 485)						stanza->textTag(HX_("hash",ce,2f,08,45),_hx_tmp6, ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("algo",d3,ff,6f,40),hash->algorithm)
             							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hashes:2",90,ad,87,c7))));
             					}
             				}
-HXLINE( 468)				stanza->up();
-HXLINE( 470)				stanza->tag(HX_("sources",38,0f,49,b9),null());
-HXLINE( 471)				{
-HXLINE( 471)					int _g7 = 0;
-HXDLIN( 471)					::Array< ::String > _g8 = attachment->uris;
-HXDLIN( 471)					while((_g7 < _g8->length)){
-HXLINE( 471)						::String uri = _g8->__get(_g7);
-HXDLIN( 471)						_g7 = (_g7 + 1);
-HXLINE( 472)						stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 487)				stanza->up();
+HXLINE( 489)				stanza->tag(HX_("sources",38,0f,49,b9),null());
+HXLINE( 490)				{
+HXLINE( 490)					int _g7 = 0;
+HXDLIN( 490)					::Array< ::String > _g8 = attachment->uris;
+HXDLIN( 490)					while((_g7 < _g8->length)){
+HXLINE( 490)						::String uri = _g8->__get(_g7);
+HXDLIN( 490)						_g7 = (_g7 + 1);
+HXLINE( 491)						stanza->tag(HX_("reference",cb,07,c5,5a), ::Dynamic(::hx::Anon_obj::Create(3)
             							->setFixed(0,HX_("uri",6c,2b,59,00),uri)
             							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("data",2a,56,63,42))
             							->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reference:0",a5,00,10,5d))))->up();
             					}
             				}
-HXLINE( 475)				stanza->up()->up()->up();
-HXLINE( 477)				if ((attachment->uris->length > 0)) {
-HXLINE( 478)					stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 494)				stanza->up()->up()->up();
+HXLINE( 496)				if ((attachment->uris->length > 0)) {
+HXLINE( 497)					stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:x:oob",aa,8a,5f,ef))))->textTag(HX_("url",6f,2b,59,00),attachment->uris->__get(0),null())->up();
-HXLINE( 479)					if (::hx::IsNull( body )) {
-HXLINE( 479)						body = HX_("",00,00,00,00);
+HXLINE( 498)					if (::hx::IsNull( body )) {
+HXLINE( 498)						body = HX_("",00,00,00,00);
             					}
-HXLINE( 480)					::Array< ::String > codepoints1 = ::snikket::StringUtil_obj::codepointArray(body);
-HXLINE( 481)					int start = codepoints1->length;
-HXLINE( 482)					int end = (start + attachment->uris->__get(0).length);
-HXLINE( 483)					if ((body != HX_("",00,00,00,00))) {
-HXLINE( 484)						body = (body + HX_("\n",0a,00,00,00));
-HXLINE( 485)						end = (end + 1);
+HXLINE( 499)					::Array< ::String > codepoints1 = ::snikket::StringUtil_obj::codepointArray(body);
+HXLINE( 500)					int start = codepoints1->length;
+HXLINE( 501)					int end = (start + attachment->uris->__get(0).length);
+HXLINE( 502)					if ((body != HX_("",00,00,00,00))) {
+HXLINE( 503)						body = (body + HX_("\n",0a,00,00,00));
+HXLINE( 504)						end = (end + 1);
             					}
-HXLINE( 487)					body = (body + attachment->uris->__get(0));
-HXLINE( 488)					 ::snikket::Stanza _hx_tmp7 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 506)					body = (body + attachment->uris->__get(0));
+HXLINE( 507)					 ::snikket::Stanza _hx_tmp7 = stanza->tag(HX_("fallback",22,f0,9d,2a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("for",09,c7,4d,00),HX_("jabber:x:oob",aa,8a,5f,ef))
             						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:fallback:0",74,aa,56,9b))));
-HXLINE( 490)					::String _hx_tmp8 = ::Std_obj::string(start);
-HXLINE( 488)					_hx_tmp7->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 509)					::String _hx_tmp8 = ::Std_obj::string(start);
+HXLINE( 507)					_hx_tmp7->tag(HX_("body",a2,7a,1b,41), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("start",62,74,0b,84),_hx_tmp8)
             						->setFixed(1,HX_("end",db,03,4d,00),::Std_obj::string(end))))->up()->up();
             				}
             			}
             		}
-HXLINE( 493)		if (::hx::IsNotNull( body )) {
-HXLINE( 493)			stanza->textTag(HX_("body",a2,7a,1b,41),body,null());
+HXLINE( 512)		if (::hx::IsNotNull( body )) {
+HXLINE( 512)			stanza->textTag(HX_("body",a2,7a,1b,41),body,null());
             		}
-HXLINE( 494)		{
-HXLINE( 494)			int _g9 = 0;
-HXDLIN( 494)			::Array< ::Dynamic> _g10 = this->payloads;
-HXDLIN( 494)			while((_g9 < _g10->length)){
-HXLINE( 494)				 ::snikket::Stanza payload = _g10->__get(_g9).StaticCast<  ::snikket::Stanza >();
-HXDLIN( 494)				_g9 = (_g9 + 1);
-HXLINE( 495)				stanza->addDirectChild(::snikket::Node_obj::Element(payload));
+HXLINE( 513)		{
+HXLINE( 513)			int _g9 = 0;
+HXDLIN( 513)			::Array< ::Dynamic> _g10 = this->payloads;
+HXDLIN( 513)			while((_g9 < _g10->length)){
+HXLINE( 513)				 ::snikket::Stanza payload = _g10->__get(_g9).StaticCast<  ::snikket::Stanza >();
+HXDLIN( 513)				_g9 = (_g9 + 1);
+HXLINE( 514)				stanza->addDirectChild(::snikket::Node_obj::Element(payload));
             			}
             		}
-HXLINE( 497)		return stanza;
+HXLINE( 516)		return stanza;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,asStanza,return )
 
  ::snikket::ChatMessage ChatMessage_obj::fromStanza( ::snikket::Stanza stanza, ::snikket::JID localJid, ::Dynamic addContext){
-            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_218_fromStanza)
-HXDLIN( 218)		 ::snikket::MessageStanza _g = ::snikket::Message_obj::fromStanza(stanza,localJid,addContext)->parsed;
-HXDLIN( 218)		if ((_g->_hx_getIndex() == 1)) {
-HXLINE( 219)			 ::snikket::ChatMessage message = _g->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
-HXLINE( 220)			return message;
+            	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_237_fromStanza)
+HXDLIN( 237)		 ::snikket::MessageStanza _g = ::snikket::Message_obj::fromStanza(stanza,localJid,addContext)->parsed;
+HXDLIN( 237)		if ((_g->_hx_getIndex() == 1)) {
+HXLINE( 238)			 ::snikket::ChatMessage message = _g->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
+HXLINE( 239)			return message;
             		}
             		else {
-HXLINE( 222)			return null();
+HXLINE( 241)			return null();
             		}
-HXLINE( 218)		return null();
+HXLINE( 237)		return null();
             	}
 
 
@@ -1504,6 +1640,7 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"lang__fromC") ) { return ::hx::Val( lang__fromC_dyn() ); }
 		break;
 	case 12:
+		if (HX_FIELD_EQ(inName,"reactionKeys") ) { if (inCallProp == ::hx::paccAlways) return ::hx::Val( get_reactionKeys() ); }
 		if (HX_FIELD_EQ(inName,"callDuration") ) { return ::hx::Val( callDuration_dyn() ); }
 		break;
 	case 13:
@@ -1518,9 +1655,11 @@ void ChatMessage_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"serverId__fromC") ) { return ::hx::Val( serverId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"senderId__fromC") ) { return ::hx::Val( senderId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"threadId__fromC") ) { return ::hx::Val( threadId__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"reactionDetails") ) { return ::hx::Val( reactionDetails_dyn() ); }
 		break;
 	case 16:
 		if (HX_FIELD_EQ(inName,"timestamp__fromC") ) { return ::hx::Val( timestamp__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"get_reactionKeys") ) { return ::hx::Val( get_reactionKeys_dyn() ); }
 		if (HX_FIELD_EQ(inName,"direction__fromC") ) { return ::hx::Val( direction__fromC_dyn() ); }
 		break;
 	case 17:
@@ -1613,6 +1752,7 @@ void ChatMessage_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("threadId",45,81,25,cc));
 	outFields->push(HX_("attachments",30,df,33,e7));
 	outFields->push(HX_("reactions",aa,cc,95,e7));
+	outFields->push(HX_("reactionKeys",3d,7e,4c,71));
 	outFields->push(HX_("text",ad,cc,f9,4c));
 	outFields->push(HX_("lang",ee,05,ad,47));
 	outFields->push(HX_("direction",3f,62,40,10));
@@ -1678,6 +1818,8 @@ static ::String ChatMessage_obj_sMemberFields[] = {
 	HX_("threadId__fromC",d4,d1,81,79),
 	HX_("attachments",30,df,33,e7),
 	HX_("reactions",aa,cc,95,e7),
+	HX_("get_reactionKeys",c6,6a,eb,75),
+	HX_("reactionDetails",19,54,bb,c7),
 	HX_("text",ad,cc,f9,4c),
 	HX_("text__fromC",6c,43,1b,7f),
 	HX_("lang",ee,05,ad,47),
@@ -1741,7 +1883,7 @@ void ChatMessage_obj::__boot()
 {
             	HX_STACKFRAME(&_hx_pos_b3673a050e0c4d12_66_boot)
 HXDLIN(  66)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(16)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(20)
             				->setFixed(0,HX_("serverId__fromC",bb,ba,c0,81), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("replyToMessage__fromC",b7,65,38,93), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -1752,27 +1894,35 @@ HXDLIN(  66)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(4,HX_("localId__fromC",13,27,c6,af), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(5,HX_("set_status__fromC",ea,96,03,cb), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(5,HX_("reactionDetails",19,54,bb,c7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(6,HX_("set_status__fromC",ea,96,03,cb), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(6,HX_("senderId__fromC",89,0f,49,cb), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(7,HX_("senderId__fromC",89,0f,49,cb), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(7,HX_("attachments__fromC",49,d7,f7,d0), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(8,HX_("attachments__fromC",49,d7,f7,d0), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(8,HX_("timestamp__fromC",63,82,8b,d7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(9,HX_("timestamp__fromC",63,82,8b,d7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(9,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(10,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(10,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(11,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(11,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("reactionDetails__fromC",80,c1,f0,09), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(12,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(13,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(13,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(15,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(16,HX_("get_reactionKeys",c6,6a,eb,75), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(17,HX_("reactionKeys__fromC",dc,e3,50,76), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(14,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(15,HX_("text__fromC",6c,43,1b,7f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("text__fromC",6c,43,1b,7f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_snikket/src/snikket/ChatMessageBuilder.cpp b/Sources/c_snikket/src/snikket/ChatMessageBuilder.cpp
index 3fa841a..47e6556 100644
--- a/Sources/c_snikket/src/snikket/ChatMessageBuilder.cpp
+++ b/Sources/c_snikket/src/snikket/ChatMessageBuilder.cpp
@@ -84,32 +84,33 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_cb10733abcc4a57a_32_new,"snikket.ChatMessageBuilder","new",0x9b235def,"snikket.ChatMessageBuilder.new","snikket/ChatMessageBuilder.hx",32,0x01453ec0)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_localId__fromC,"snikket.ChatMessageBuilder","localId__fromC",0x22a5f5e4,"snikket.ChatMessageBuilder.localId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_localId__fromC,"snikket.ChatMessageBuilder","set_localId__fromC",0xd8ad45a1,"snikket.ChatMessageBuilder.set_localId__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_serverId__fromC,"snikket.ChatMessageBuilder","serverId__fromC",0x92b5e2ca,"snikket.ChatMessageBuilder.serverId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_serverId__fromC,"snikket.ChatMessageBuilder","set_serverId__fromC",0x2314586d,"snikket.ChatMessageBuilder.set_serverId__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_serverIdBy__fromC,"snikket.ChatMessageBuilder","serverIdBy__fromC",0x18c8dbf3,"snikket.ChatMessageBuilder.serverIdBy__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_serverIdBy__fromC,"snikket.ChatMessageBuilder","set_serverIdBy__fromC",0x55ea4056,"snikket.ChatMessageBuilder.set_serverIdBy__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_type__fromC,"snikket.ChatMessageBuilder","type__fromC",0xe0eadd8e,"snikket.ChatMessageBuilder.type__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_type__fromC,"snikket.ChatMessageBuilder","set_type__fromC",0x610f05b1,"snikket.ChatMessageBuilder.set_type__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_timestamp__fromC,"snikket.ChatMessageBuilder","timestamp__fromC",0x9d196774,"snikket.ChatMessageBuilder.timestamp__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_timestamp__fromC,"snikket.ChatMessageBuilder","set_timestamp__fromC",0x5f61e071,"snikket.ChatMessageBuilder.set_timestamp__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_271_senderId__fromC,"snikket.ChatMessageBuilder","senderId__fromC",0xdc3e3798,"snikket.ChatMessageBuilder.senderId__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_282_set_senderId__fromC,"snikket.ChatMessageBuilder","set_senderId__fromC",0x6c9cad3b,"snikket.ChatMessageBuilder.set_senderId__fromC","HaxeCBridge.hx",282,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_replyToMessage__fromC,"snikket.ChatMessageBuilder","replyToMessage__fromC",0x143d8306,"snikket.ChatMessageBuilder.replyToMessage__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_replyToMessage__fromC,"snikket.ChatMessageBuilder","set_replyToMessage__fromC",0x088c54e9,"snikket.ChatMessageBuilder.set_replyToMessage__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_threadId__fromC,"snikket.ChatMessageBuilder","threadId__fromC",0x8a76f9e3,"snikket.ChatMessageBuilder.threadId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_threadId__fromC,"snikket.ChatMessageBuilder","set_threadId__fromC",0x1ad56f86,"snikket.ChatMessageBuilder.set_threadId__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_260_attachments__fromC,"snikket.ChatMessageBuilder","attachments__fromC",0x8195e29a,"snikket.ChatMessageBuilder.attachments__fromC","HaxeCBridge.hx",260,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_text__fromC,"snikket.ChatMessageBuilder","text__fromC",0xcc9977fb,"snikket.ChatMessageBuilder.text__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_text__fromC,"snikket.ChatMessageBuilder","set_text__fromC",0x4cbda01e,"snikket.ChatMessageBuilder.set_text__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_lang__fromC,"snikket.ChatMessageBuilder","lang__fromC",0x9f7e58da,"snikket.ChatMessageBuilder.lang__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_lang__fromC,"snikket.ChatMessageBuilder","set_lang__fromC",0x1fa280fd,"snikket.ChatMessageBuilder.set_lang__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_direction__fromC,"snikket.ChatMessageBuilder","direction__fromC",0x1154492b,"snikket.ChatMessageBuilder.direction__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_direction__fromC,"snikket.ChatMessageBuilder","set_direction__fromC",0xd39cc228,"snikket.ChatMessageBuilder.set_direction__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_307_status__fromC,"snikket.ChatMessageBuilder","status__fromC",0xf20569d6,"snikket.ChatMessageBuilder.status__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_318_set_status__fromC,"snikket.ChatMessageBuilder","set_status__fromC",0xe19e20b9,"snikket.ChatMessageBuilder.set_status__fromC","HaxeCBridge.hx",318,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_297_versions__fromC,"snikket.ChatMessageBuilder","versions__fromC",0x25dd9b8d,"snikket.ChatMessageBuilder.versions__fromC","HaxeCBridge.hx",297,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_localId__fromC,"snikket.ChatMessageBuilder","localId__fromC",0x22a5f5e4,"snikket.ChatMessageBuilder.localId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_localId__fromC,"snikket.ChatMessageBuilder","set_localId__fromC",0xd8ad45a1,"snikket.ChatMessageBuilder.set_localId__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_serverId__fromC,"snikket.ChatMessageBuilder","serverId__fromC",0x92b5e2ca,"snikket.ChatMessageBuilder.serverId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_serverId__fromC,"snikket.ChatMessageBuilder","set_serverId__fromC",0x2314586d,"snikket.ChatMessageBuilder.set_serverId__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_serverIdBy__fromC,"snikket.ChatMessageBuilder","serverIdBy__fromC",0x18c8dbf3,"snikket.ChatMessageBuilder.serverIdBy__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_serverIdBy__fromC,"snikket.ChatMessageBuilder","set_serverIdBy__fromC",0x55ea4056,"snikket.ChatMessageBuilder.set_serverIdBy__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_type__fromC,"snikket.ChatMessageBuilder","type__fromC",0xe0eadd8e,"snikket.ChatMessageBuilder.type__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_type__fromC,"snikket.ChatMessageBuilder","set_type__fromC",0x610f05b1,"snikket.ChatMessageBuilder.set_type__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_timestamp__fromC,"snikket.ChatMessageBuilder","timestamp__fromC",0x9d196774,"snikket.ChatMessageBuilder.timestamp__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_timestamp__fromC,"snikket.ChatMessageBuilder","set_timestamp__fromC",0x5f61e071,"snikket.ChatMessageBuilder.set_timestamp__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_308_senderId__fromC,"snikket.ChatMessageBuilder","senderId__fromC",0xdc3e3798,"snikket.ChatMessageBuilder.senderId__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_319_set_senderId__fromC,"snikket.ChatMessageBuilder","set_senderId__fromC",0x6c9cad3b,"snikket.ChatMessageBuilder.set_senderId__fromC","HaxeCBridge.hx",319,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_replyToMessage__fromC,"snikket.ChatMessageBuilder","replyToMessage__fromC",0x143d8306,"snikket.ChatMessageBuilder.replyToMessage__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_replyToMessage__fromC,"snikket.ChatMessageBuilder","set_replyToMessage__fromC",0x088c54e9,"snikket.ChatMessageBuilder.set_replyToMessage__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_threadId__fromC,"snikket.ChatMessageBuilder","threadId__fromC",0x8a76f9e3,"snikket.ChatMessageBuilder.threadId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_threadId__fromC,"snikket.ChatMessageBuilder","set_threadId__fromC",0x1ad56f86,"snikket.ChatMessageBuilder.set_threadId__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_297_attachments__fromC,"snikket.ChatMessageBuilder","attachments__fromC",0x8195e29a,"snikket.ChatMessageBuilder.attachments__fromC","HaxeCBridge.hx",297,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_text__fromC,"snikket.ChatMessageBuilder","text__fromC",0xcc9977fb,"snikket.ChatMessageBuilder.text__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_text__fromC,"snikket.ChatMessageBuilder","set_text__fromC",0x4cbda01e,"snikket.ChatMessageBuilder.set_text__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_lang__fromC,"snikket.ChatMessageBuilder","lang__fromC",0x9f7e58da,"snikket.ChatMessageBuilder.lang__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_lang__fromC,"snikket.ChatMessageBuilder","set_lang__fromC",0x1fa280fd,"snikket.ChatMessageBuilder.set_lang__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_direction__fromC,"snikket.ChatMessageBuilder","direction__fromC",0x1154492b,"snikket.ChatMessageBuilder.direction__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_direction__fromC,"snikket.ChatMessageBuilder","set_direction__fromC",0xd39cc228,"snikket.ChatMessageBuilder.set_direction__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_355_status__fromC,"snikket.ChatMessageBuilder","status__fromC",0xf20569d6,"snikket.ChatMessageBuilder.status__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_366_set_status__fromC,"snikket.ChatMessageBuilder","set_status__fromC",0xe19e20b9,"snikket.ChatMessageBuilder.set_status__fromC","HaxeCBridge.hx",366,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_344_set_versions__fromC,"snikket.ChatMessageBuilder","set_versions__fromC",0xb63c1130,"snikket.ChatMessageBuilder.set_versions__fromC","HaxeCBridge.hx",344,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1cce69560351f400_334_versions__fromC,"snikket.ChatMessageBuilder","versions__fromC",0x25dd9b8d,"snikket.ChatMessageBuilder.versions__fromC","HaxeCBridge.hx",334,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_cb10733abcc4a57a_214_attachSims,"snikket.ChatMessageBuilder","attachSims",0x75605632,"snikket.ChatMessageBuilder.attachSims","snikket/ChatMessageBuilder.hx",214,0x01453ec0)
 HX_LOCAL_STACK_FRAME(_hx_pos_cb10733abcc4a57a_230_addAttachment,"snikket.ChatMessageBuilder","addAttachment",0x989c07b3,"snikket.ChatMessageBuilder.addAttachment","snikket/ChatMessageBuilder.hx",230,0x01453ec0)
 HX_LOCAL_STACK_FRAME(_hx_pos_cb10733abcc4a57a_252_setHtml,"snikket.ChatMessageBuilder","setHtml",0x8f01d73c,"snikket.ChatMessageBuilder.setHtml","snikket/ChatMessageBuilder.hx",252,0x01453ec0)
@@ -167,288 +168,300 @@ bool ChatMessageBuilder_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ChatMessageBuilder_obj::localId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_localId__fromC)
-HXDLIN( 307)		return this->localId;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_localId__fromC)
+HXDLIN( 355)		return this->localId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,localId__fromC,return )
 
 void ChatMessageBuilder_obj::set_localId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_localId__fromC)
-HXDLIN( 318)		this->localId = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_localId__fromC)
+HXDLIN( 366)		this->localId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_localId__fromC,(void))
 
 ::String ChatMessageBuilder_obj::serverId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_serverId__fromC)
-HXDLIN( 307)		return this->serverId;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_serverId__fromC)
+HXDLIN( 355)		return this->serverId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,serverId__fromC,return )
 
 void ChatMessageBuilder_obj::set_serverId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_serverId__fromC)
-HXDLIN( 318)		this->serverId = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_serverId__fromC)
+HXDLIN( 366)		this->serverId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_serverId__fromC,(void))
 
 ::String ChatMessageBuilder_obj::serverIdBy__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_serverIdBy__fromC)
-HXDLIN( 307)		return this->serverIdBy;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_serverIdBy__fromC)
+HXDLIN( 355)		return this->serverIdBy;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,serverIdBy__fromC,return )
 
 void ChatMessageBuilder_obj::set_serverIdBy__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_serverIdBy__fromC)
-HXDLIN( 318)		this->serverIdBy = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_serverIdBy__fromC)
+HXDLIN( 366)		this->serverIdBy = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_serverIdBy__fromC,(void))
 
 int ChatMessageBuilder_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_type__fromC)
-HXDLIN( 307)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_type__fromC)
+HXDLIN( 355)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,type__fromC,return )
 
 void ChatMessageBuilder_obj::set_type__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_type__fromC)
-HXDLIN( 318)		this->type = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_type__fromC)
+HXDLIN( 366)		this->type = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_type__fromC,(void))
 
 ::String ChatMessageBuilder_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_timestamp__fromC)
-HXDLIN( 307)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_timestamp__fromC)
+HXDLIN( 355)		return this->timestamp;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,timestamp__fromC,return )
 
 void ChatMessageBuilder_obj::set_timestamp__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_timestamp__fromC)
-HXDLIN( 318)		this->timestamp = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_timestamp__fromC)
+HXDLIN( 366)		this->timestamp = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_timestamp__fromC,(void))
 
 ::String ChatMessageBuilder_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_271_senderId__fromC)
-HXDLIN( 271)		return this->get_senderId();
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_308_senderId__fromC)
+HXDLIN( 308)		return this->get_senderId();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,senderId__fromC,return )
 
 void ChatMessageBuilder_obj::set_senderId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_282_set_senderId__fromC)
-HXDLIN( 282)		this->senderId = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_319_set_senderId__fromC)
+HXDLIN( 319)		this->senderId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_senderId__fromC,(void))
 
  ::snikket::ChatMessage ChatMessageBuilder_obj::replyToMessage__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_replyToMessage__fromC)
-HXDLIN( 307)		return this->replyToMessage;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_replyToMessage__fromC)
+HXDLIN( 355)		return this->replyToMessage;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,replyToMessage__fromC,return )
 
 void ChatMessageBuilder_obj::set_replyToMessage__fromC( ::snikket::ChatMessage value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_replyToMessage__fromC)
-HXDLIN( 318)		this->replyToMessage = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_replyToMessage__fromC)
+HXDLIN( 366)		this->replyToMessage = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_replyToMessage__fromC,(void))
 
 ::String ChatMessageBuilder_obj::threadId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_threadId__fromC)
-HXDLIN( 307)		return this->threadId;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_threadId__fromC)
+HXDLIN( 355)		return this->threadId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,threadId__fromC,return )
 
 void ChatMessageBuilder_obj::set_threadId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_threadId__fromC)
-HXDLIN( 318)		this->threadId = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_threadId__fromC)
+HXDLIN( 366)		this->threadId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_threadId__fromC,(void))
 
 size_t ChatMessageBuilder_obj::attachments__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_1cce69560351f400_260_attachments__fromC)
-HXDLIN( 260)		::Array< ::Dynamic> x = this->attachments;
-HXDLIN( 260)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 260)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 260)			{
-HXDLIN( 260)				int _g = 0;
-HXDLIN( 260)				while((_g < x->length)){
-HXDLIN( 260)					 ::snikket::ChatAttachment el = x->__get(_g).StaticCast<  ::snikket::ChatAttachment >();
-HXDLIN( 260)					_g = (_g + 1);
-HXDLIN( 260)					{
-HXDLIN( 260)						 ::Dynamic haxeObject = el;
-HXDLIN( 260)						void* ptr = haxeObject.mPtr;
-HXDLIN( 260)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 260)						{
-HXDLIN( 260)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 260)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 260)							int high = ptrInt64 >> 32;
-HXDLIN( 260)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 260)							if (::hx::IsNull( highMap )) {
-HXDLIN( 260)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 260)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_1cce69560351f400_297_attachments__fromC)
+HXDLIN( 297)		::Array< ::Dynamic> x = this->attachments;
+HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 297)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 297)			{
+HXDLIN( 297)				int _g = 0;
+HXDLIN( 297)				while((_g < x->length)){
+HXDLIN( 297)					 ::snikket::ChatAttachment el = x->__get(_g).StaticCast<  ::snikket::ChatAttachment >();
+HXDLIN( 297)					_g = (_g + 1);
+HXDLIN( 297)					{
+HXDLIN( 297)						 ::Dynamic haxeObject = el;
+HXDLIN( 297)						void* ptr = haxeObject.mPtr;
+HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 297)						{
+HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 297)							int high = ptrInt64 >> 32;
+HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 297)							if (::hx::IsNull( highMap )) {
+HXDLIN( 297)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 297)								this1->set(low,highMap);
             							}
-HXDLIN( 260)							highMap->set(high,haxeObject);
+HXDLIN( 297)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 260)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 260)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 260)			{
-HXDLIN( 260)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 260)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 260)				int high1 = ptrInt641 >> 32;
-HXDLIN( 260)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 260)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 260)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 260)					this2->set(low1,highMap1);
+HXDLIN( 297)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 297)			{
+HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 297)				int high1 = ptrInt641 >> 32;
+HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 297)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 297)					this2->set(low1,highMap1);
             				}
-HXDLIN( 260)				highMap1->set(high1,x);
+HXDLIN( 297)				highMap1->set(high1,x);
             			}
-HXDLIN( 260)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 297)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 260)		return ( (size_t)(x->length) );
+HXDLIN( 297)		return ( (size_t)(x->length) );
             	}
 
 
 ::String ChatMessageBuilder_obj::text__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_text__fromC)
-HXDLIN( 307)		return this->text;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_text__fromC)
+HXDLIN( 355)		return this->text;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,text__fromC,return )
 
 void ChatMessageBuilder_obj::set_text__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_text__fromC)
-HXDLIN( 318)		this->text = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_text__fromC)
+HXDLIN( 366)		this->text = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_text__fromC,(void))
 
 ::String ChatMessageBuilder_obj::lang__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_lang__fromC)
-HXDLIN( 307)		return this->lang;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_lang__fromC)
+HXDLIN( 355)		return this->lang;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,lang__fromC,return )
 
 void ChatMessageBuilder_obj::set_lang__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_lang__fromC)
-HXDLIN( 318)		this->lang = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_lang__fromC)
+HXDLIN( 366)		this->lang = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_lang__fromC,(void))
 
 int ChatMessageBuilder_obj::direction__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_direction__fromC)
-HXDLIN( 307)		return this->direction;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_direction__fromC)
+HXDLIN( 355)		return this->direction;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,direction__fromC,return )
 
 void ChatMessageBuilder_obj::set_direction__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_direction__fromC)
-HXDLIN( 318)		this->direction = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_direction__fromC)
+HXDLIN( 366)		this->direction = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_direction__fromC,(void))
 
 int ChatMessageBuilder_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_307_status__fromC)
-HXDLIN( 307)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_355_status__fromC)
+HXDLIN( 355)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,status__fromC,return )
 
 void ChatMessageBuilder_obj::set_status__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_318_set_status__fromC)
-HXDLIN( 318)		this->status = value;
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_366_set_status__fromC)
+HXDLIN( 366)		this->status = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_status__fromC,(void))
 
+void ChatMessageBuilder_obj::set_versions__fromC(::cpp::Pointer< void* > inPtr,size_t count){
+            	HX_STACKFRAME(&_hx_pos_1cce69560351f400_344_set_versions__fromC)
+HXDLIN( 344)		::cpp::Pointer<  ::snikket::ChatMessage > _this = inPtr->reinterpret();
+HXDLIN( 344)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 344)		::cpp::Pointer<  ::snikket::ChatMessage > tmp = _this;
+HXDLIN( 344)		result->setUnmanagedData(tmp,( (int)(count) ));
+HXDLIN( 344)		this->versions = result->copy();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(ChatMessageBuilder_obj,set_versions__fromC,(void))
+
 size_t ChatMessageBuilder_obj::versions__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_1cce69560351f400_297_versions__fromC)
-HXDLIN( 297)		::Array< ::Dynamic> x = this->versions;
-HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 297)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 297)			{
-HXDLIN( 297)				int _g = 0;
-HXDLIN( 297)				while((_g < x->length)){
-HXDLIN( 297)					 ::snikket::ChatMessage el = x->__get(_g).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 297)					_g = (_g + 1);
-HXDLIN( 297)					{
-HXDLIN( 297)						 ::Dynamic haxeObject = el;
-HXDLIN( 297)						void* ptr = haxeObject.mPtr;
-HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)						{
-HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 297)							int high = ptrInt64 >> 32;
-HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 297)							if (::hx::IsNull( highMap )) {
-HXDLIN( 297)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_1cce69560351f400_334_versions__fromC)
+HXDLIN( 334)		::Array< ::Dynamic> x = this->versions;
+HXDLIN( 334)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 334)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 334)			{
+HXDLIN( 334)				int _g = 0;
+HXDLIN( 334)				while((_g < x->length)){
+HXDLIN( 334)					 ::snikket::ChatMessage el = x->__get(_g).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 334)					_g = (_g + 1);
+HXDLIN( 334)					{
+HXDLIN( 334)						 ::Dynamic haxeObject = el;
+HXDLIN( 334)						void* ptr = haxeObject.mPtr;
+HXDLIN( 334)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 334)						{
+HXDLIN( 334)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 334)							int high = ptrInt64 >> 32;
+HXDLIN( 334)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 334)							if (::hx::IsNull( highMap )) {
+HXDLIN( 334)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)								this1->set(low,highMap);
             							}
-HXDLIN( 297)							highMap->set(high,haxeObject);
+HXDLIN( 334)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 297)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 297)			{
-HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 297)				int high1 = ptrInt641 >> 32;
-HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 297)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 297)					this2->set(low1,highMap1);
+HXDLIN( 334)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 334)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 334)			{
+HXDLIN( 334)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 334)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 334)				int high1 = ptrInt641 >> 32;
+HXDLIN( 334)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 334)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 334)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 334)					this2->set(low1,highMap1);
             				}
-HXDLIN( 297)				highMap1->set(high1,x);
+HXDLIN( 334)				highMap1->set(high1,x);
             			}
-HXDLIN( 297)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 334)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 297)		return ( (size_t)(x->length) );
+HXDLIN( 334)		return ( (size_t)(x->length) );
             	}
 
 
@@ -1041,6 +1054,7 @@ void ChatMessageBuilder_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"set_serverId__fromC") ) { return ::hx::Val( set_serverId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_senderId__fromC") ) { return ::hx::Val( set_senderId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"set_threadId__fromC") ) { return ::hx::Val( set_threadId__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"set_versions__fromC") ) { return ::hx::Val( set_versions__fromC_dyn() ); }
 		break;
 	case 20:
 		if (HX_FIELD_EQ(inName,"set_timestamp__fromC") ) { return ::hx::Val( set_timestamp__fromC_dyn() ); }
@@ -1220,6 +1234,7 @@ static ::String ChatMessageBuilder_obj_sMemberFields[] = {
 	HX_("status__fromC",87,b3,25,a1),
 	HX_("set_status__fromC",ea,96,03,cb),
 	HX_("versions",5b,4e,b8,d6),
+	HX_("set_versions__fromC",a1,35,90,dc),
 	HX_("payloads",25,dd,d1,a1),
 	HX_("stanza",f5,5d,f7,05),
 	HX_("attachSims",e1,83,46,cc),
@@ -1267,7 +1282,7 @@ void ChatMessageBuilder_obj::__boot()
 {
             	HX_STACKFRAME(&_hx_pos_cb10733abcc4a57a_32_boot)
 HXDLIN(  32)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(27)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(28)
             				->setFixed(0,HX_("serverId__fromC",bb,ba,c0,81), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("set_senderId__fromC",ac,d1,f0,92), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -1292,35 +1307,37 @@ HXDLIN(  32)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(11,HX_("timestamp__fromC",63,82,8b,d7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(12,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("set_versions__fromC",a1,35,90,dc), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(13,HX_("reactions",aa,cc,95,e7), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(13,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("serverIdBy__fromC",24,52,2e,02), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(14,HX_("set_replyToMessage__fromC",1a,e4,8c,05), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(15,HX_("set_replyToMessage__fromC",1a,e4,8c,05), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(15,HX_("set_lang__fromC",ee,58,ad,0e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(16,HX_("set_lang__fromC",ee,58,ad,0e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(16,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("versions__fromC",7e,73,e8,14), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(17,HX_("set_localId__fromC",50,3a,0f,28), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("set_localId__fromC",50,3a,0f,28), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(18,HX_("set_direction__fromC",97,80,e8,36), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("set_direction__fromC",97,80,e8,36), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(19,HX_("set_text__fromC",0f,78,c8,3b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("set_text__fromC",0f,78,c8,3b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(20,HX_("set_threadId__fromC",f7,93,29,41), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("set_threadId__fromC",f7,93,29,41), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(21,HX_("set_serverId__fromC",de,7c,68,49), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("set_serverId__fromC",de,7c,68,49), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(22,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(23,HX_("direction__fromC",1a,64,c6,4b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(23,HX_("set_type__fromC",a2,dd,19,50), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("set_type__fromC",a2,dd,19,50), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(24,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(25,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("threadId__fromC",d4,d1,81,79), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(26,HX_("text__fromC",6c,43,1b,7f), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("text__fromC",6c,43,1b,7f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_snikket/src/snikket/Client.cpp b/Sources/c_snikket/src/snikket/Client.cpp
index d42290f..4e215a1 100644
--- a/Sources/c_snikket/src/snikket/Client.cpp
+++ b/Sources/c_snikket/src/snikket/Client.cpp
@@ -19,6 +19,9 @@
 #ifndef INCLUDED__HaxeCBridge_Internal
 #include <_HaxeCBridge/Internal.h>
 #endif
+#ifndef INCLUDED_cpp__NativeString_NativeString_Impl_
+#include <cpp/_NativeString/NativeString_Impl_.h>
+#endif
 #ifndef INCLUDED_haxe_Exception
 #include <haxe/Exception.h>
 #endif
@@ -205,6 +208,9 @@
 #ifndef INCLUDED_snikket_queries_Push2Disable
 #include <snikket/queries/Push2Disable.h>
 #endif
+#ifndef INCLUDED_snikket_queries_Push2Enable
+#include <snikket/queries/Push2Enable.h>
+#endif
 #ifndef INCLUDED_snikket_queries_RosterGet
 #include <snikket/queries/RosterGet.h>
 #endif
@@ -311,216 +317,222 @@
 #include <tink/streams/_Stream/Handler_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_105_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",105,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_109_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",109,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_106_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",106,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_110_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",110,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_117_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",117,0x180249e1)
 HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_116_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",116,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_115_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",115,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_126_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",126,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_121_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",121,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_136_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",136,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_131_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",131,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_166_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",166,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_141_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",141,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_179_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",179,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_190_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",190,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_199_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",199,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_197_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",197,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_127_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",127,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_122_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",122,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_137_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",137,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_132_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",132,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_167_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",167,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_142_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",142,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_180_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",180,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_191_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",191,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_200_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",200,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_198_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",198,0x180249e1)
 static const ::String _hx_array_data_7c06fe3c_24[] = {
 	HX_("image/png",b5,cc,c1,16),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_297_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",297,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_310_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",310,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_301_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",301,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_330_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",330,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_332_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",332,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_344_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",344,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_298_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",298,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_308_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",308,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_302_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",302,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_327_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",327,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_329_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",329,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_341_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",341,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_393_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",393,0x180249e1)
 HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_396_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",396,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_399_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",399,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_426_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",426,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_441_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",441,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_464_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",464,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_480_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",480,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_487_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",487,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_501_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",501,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_492_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",492,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_519_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",519,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_527_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",527,0x180249e1)
-HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_523_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",523,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_423_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",423,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_438_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",438,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_461_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",461,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_477_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",477,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_484_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",484,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_498_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",498,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_489_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",489,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_516_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",516,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_524_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",524,0x180249e1)
+HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_520_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",520,0x180249e1)
 HX_DEFINE_STACK_FRAME(_hx_pos_ead56881d4bbcaca_51_new,"snikket.Client","new",0x69246d2e,"snikket.Client.new","snikket/Client.hx",51,0x180249e1)
 static const ::String _hx_array_data_7c06fe3c_45[] = {
 	HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b),HX_("http://jabber.org/protocol/caps",95,d0,90,e2),HX_("urn:xmpp:avatar:metadata+notify",e0,89,c6,db),HX_("http://jabber.org/protocol/nick+notify",fd,dd,65,10),HX_("urn:xmpp:bookmarks:1+notify",dc,4b,f7,cc),HX_("urn:xmpp:mds:displayed:0+notify",17,ae,91,a8),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07),HX_("urn:xmpp:jingle:1",44,c4,fe,f7),HX_("urn:xmpp:jingle:apps:dtls:0",a8,cb,02,66),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c),HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c),HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_282_set_sendAvailable__fromC,"snikket.Client","set_sendAvailable__fromC",0xde92a6a7,"snikket.Client.set_sendAvailable__fromC","HaxeCBridge.hx",282,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_586_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",586,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_587_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",587,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_594_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",594,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_574_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",574,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_569_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",569,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_561_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",561,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_558_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",558,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_319_set_sendAvailable__fromC,"snikket.Client","set_sendAvailable__fromC",0xde92a6a7,"snikket.Client.set_sendAvailable__fromC","HaxeCBridge.hx",319,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_557_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",557,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_620_logout,"snikket.Client","logout",0xfb11ce7c,"snikket.Client.logout","snikket/Client.hx",620,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_616_logout,"snikket.Client","logout",0xfb11ce7c,"snikket.Client.logout","snikket/Client.hx",616,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_632_usePassword,"snikket.Client","usePassword",0x35ea4550,"snikket.Client.usePassword","snikket/Client.hx",632,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_641_accountId,"snikket.Client","accountId",0x98c7ad36,"snikket.Client.accountId","snikket/Client.hx",641,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_650_displayName,"snikket.Client","displayName",0xc4012c7b,"snikket.Client.displayName","snikket/Client.hx",650,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_668_setDisplayName,"snikket.Client","setDisplayName",0x10b7671d,"snikket.Client.setDisplayName","snikket/Client.hx",668,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_658_setDisplayName,"snikket.Client","setDisplayName",0x10b7671d,"snikket.Client.setDisplayName","snikket/Client.hx",658,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_672_updateDisplayName,"snikket.Client","updateDisplayName",0x01ffe772,"snikket.Client.updateDisplayName","snikket/Client.hx",672,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_694_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",694,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_711_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",711,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_558_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",558,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_565_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",565,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_556_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",556,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_554_start,"snikket.Client","start",0x37d760b0,"snikket.Client.start","snikket/Client.hx",554,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_597_startOffline,"snikket.Client","startOffline",0x5e9bcc13,"snikket.Client.startOffline","snikket/Client.hx",597,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_592_startOffline,"snikket.Client","startOffline",0x5e9bcc13,"snikket.Client.startOffline","snikket/Client.hx",592,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_583_startOffline,"snikket.Client","startOffline",0x5e9bcc13,"snikket.Client.startOffline","snikket/Client.hx",583,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_582_startOffline,"snikket.Client","startOffline",0x5e9bcc13,"snikket.Client.startOffline","snikket/Client.hx",582,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_startOffline__fromC,"snikket.Client","startOffline__fromC",0x5d609cc6,"snikket.Client.startOffline__fromC","HaxeCBridge.hx",221,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_startOffline__fromC,"snikket.Client","startOffline__fromC",0x5d609cc6,"snikket.Client.startOffline__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_622_logout,"snikket.Client","logout",0xfb11ce7c,"snikket.Client.logout","snikket/Client.hx",622,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_618_logout,"snikket.Client","logout",0xfb11ce7c,"snikket.Client.logout","snikket/Client.hx",618,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_634_usePassword,"snikket.Client","usePassword",0x35ea4550,"snikket.Client.usePassword","snikket/Client.hx",634,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_643_accountId,"snikket.Client","accountId",0x98c7ad36,"snikket.Client.accountId","snikket/Client.hx",643,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_652_displayName,"snikket.Client","displayName",0xc4012c7b,"snikket.Client.displayName","snikket/Client.hx",652,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_670_setDisplayName,"snikket.Client","setDisplayName",0x10b7671d,"snikket.Client.setDisplayName","snikket/Client.hx",670,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_660_setDisplayName,"snikket.Client","setDisplayName",0x10b7671d,"snikket.Client.setDisplayName","snikket/Client.hx",660,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_674_updateDisplayName,"snikket.Client","updateDisplayName",0x01ffe772,"snikket.Client.updateDisplayName","snikket/Client.hx",674,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_696_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",696,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_713_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",713,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_702_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",702,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_700_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",700,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_698_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",698,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_680_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",680,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_749_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",749,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_682_onConnected,"snikket.Client","onConnected",0x5848e078,"snikket.Client.onConnected","snikket/Client.hx",682,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_751_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",751,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_754_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",754,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_748_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",748,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_753_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",753,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_756_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",756,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_750_prepareAttachment,"snikket.Client","prepareAttachment",0xbeef9598,"snikket.Client.prepareAttachment","snikket/Client.hx",750,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_prepareAttachment__fromC,"snikket.Client","prepareAttachment__fromC",0x503d3de1,"snikket.Client.prepareAttachment__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_prepareAttachment__fromC,"snikket.Client","prepareAttachment__fromC",0x503d3de1,"snikket.Client.prepareAttachment__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_771_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",771,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_776_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",776,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_777_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",777,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_764_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",764,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_796_getChats,"snikket.Client","getChats",0x5488e697,"snikket.Client.getChats","snikket/Client.hx",796,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_242_getChats__fromC,"snikket.Client","getChats__fromC",0x4cad9ac2,"snikket.Client.getChats__fromC","HaxeCBridge.hx",242,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_prepareAttachment__fromC,"snikket.Client","prepareAttachment__fromC",0x503d3de1,"snikket.Client.prepareAttachment__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_773_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",773,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_778_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",778,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_779_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",779,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_766_prepareAttachmentFor,"snikket.Client","prepareAttachmentFor",0xe1e97851,"snikket.Client.prepareAttachmentFor","snikket/Client.hx",766,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_794_getChats,"snikket.Client","getChats",0x5488e697,"snikket.Client.getChats","snikket/Client.hx",794,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_250_getChats__fromC,"snikket.Client","getChats__fromC",0x4cad9ac2,"snikket.Client.getChats__fromC","HaxeCBridge.hx",250,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_807_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",807,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_809_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",809,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_811_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",811,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_808_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",808,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_805_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",805,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_860_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",860,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_806_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",806,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_803_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",803,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_858_findAvailableChats,"snikket.Client","findAvailableChats",0x877a8d1d,"snikket.Client.findAvailableChats","snikket/Client.hx",858,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_findAvailableChats__fromC,"snikket.Client","findAvailableChats__fromC",0x704470fc,"snikket.Client.findAvailableChats__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_findAvailableChats__fromC,"snikket.Client","findAvailableChats__fromC",0x704470fc,"snikket.Client.findAvailableChats__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_889_startChat,"snikket.Client","startChat",0x6a2603a8,"snikket.Client.startChat","snikket/Client.hx",889,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_923_getChat,"snikket.Client","getChat",0x441c2a5c,"snikket.Client.getChat","snikket/Client.hx",923,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_929_moderateMessage,"snikket.Client","moderateMessage",0xa3213212,"snikket.Client.moderateMessage","snikket/Client.hx",929,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_findAvailableChats__fromC,"snikket.Client","findAvailableChats__fromC",0x704470fc,"snikket.Client.findAvailableChats__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_887_startChat,"snikket.Client","startChat",0x6a2603a8,"snikket.Client.startChat","snikket/Client.hx",887,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_921_getChat,"snikket.Client","getChat",0x441c2a5c,"snikket.Client.getChat","snikket/Client.hx",921,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_927_moderateMessage,"snikket.Client","moderateMessage",0xa3213212,"snikket.Client.moderateMessage","snikket/Client.hx",927,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_944_getDirectChat,"snikket.Client","getDirectChat",0x348a6525,"snikket.Client.getDirectChat","snikket/Client.hx",944,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1020_addPasswordNeededListener,"snikket.Client","addPasswordNeededListener",0x82818693,"snikket.Client.addPasswordNeededListener","snikket/Client.hx",1020,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1019_addPasswordNeededListener,"snikket.Client","addPasswordNeededListener",0x82818693,"snikket.Client.addPasswordNeededListener","snikket/Client.hx",1019,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_925_moderateMessage,"snikket.Client","moderateMessage",0xa3213212,"snikket.Client.moderateMessage","snikket/Client.hx",925,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_942_getDirectChat,"snikket.Client","getDirectChat",0x348a6525,"snikket.Client.getDirectChat","snikket/Client.hx",942,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_995_enablePush,"snikket.Client","enablePush",0xb901a2ef,"snikket.Client.enablePush","snikket/Client.hx",995,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_enablePush__fromC,"snikket.Client","enablePush__fromC",0x9c5b996a,"snikket.Client.enablePush__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1027_updatePushIfEnabled,"snikket.Client","updatePushIfEnabled",0x5fd409ef,"snikket.Client.updatePushIfEnabled","snikket/Client.hx",1027,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1038_addPasswordNeededListener,"snikket.Client","addPasswordNeededListener",0x82818693,"snikket.Client.addPasswordNeededListener","snikket/Client.hx",1038,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1037_addPasswordNeededListener,"snikket.Client","addPasswordNeededListener",0x82818693,"snikket.Client.addPasswordNeededListener","snikket/Client.hx",1037,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addPasswordNeededListener__fromC,"snikket.Client","addPasswordNeededListener__fromC",0xf03f3246,"snikket.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addPasswordNeededListener__fromC,"snikket.Client","addPasswordNeededListener__fromC",0xf03f3246,"snikket.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1032_addStatusOnlineListener,"snikket.Client","addStatusOnlineListener",0x143d9788,"snikket.Client.addStatusOnlineListener","snikket/Client.hx",1032,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addPasswordNeededListener__fromC,"snikket.Client","addPasswordNeededListener__fromC",0xf03f3246,"snikket.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1050_addStatusOnlineListener,"snikket.Client","addStatusOnlineListener",0x143d9788,"snikket.Client.addStatusOnlineListener","snikket/Client.hx",1050,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addStatusOnlineListener__fromC,"snikket.Client","addStatusOnlineListener__fromC",0x326c59f1,"snikket.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addStatusOnlineListener__fromC,"snikket.Client","addStatusOnlineListener__fromC",0x326c59f1,"snikket.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1044_addStatusOfflineListener,"snikket.Client","addStatusOfflineListener",0xa2febff6,"snikket.Client.addStatusOfflineListener","snikket/Client.hx",1044,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addStatusOnlineListener__fromC,"snikket.Client","addStatusOnlineListener__fromC",0x326c59f1,"snikket.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1062_addStatusOfflineListener,"snikket.Client","addStatusOfflineListener",0xa2febff6,"snikket.Client.addStatusOfflineListener","snikket/Client.hx",1062,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addStatusOfflineListener__fromC,"snikket.Client","addStatusOfflineListener__fromC",0xe34d3b43,"snikket.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addStatusOfflineListener__fromC,"snikket.Client","addStatusOfflineListener__fromC",0xe34d3b43,"snikket.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1056_addConnectionFailedListener,"snikket.Client","addConnectionFailedListener",0x4e1f941e,"snikket.Client.addConnectionFailedListener","snikket/Client.hx",1056,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addStatusOfflineListener__fromC,"snikket.Client","addStatusOfflineListener__fromC",0xe34d3b43,"snikket.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1074_addConnectionFailedListener,"snikket.Client","addConnectionFailedListener",0x4e1f941e,"snikket.Client.addConnectionFailedListener","snikket/Client.hx",1074,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addConnectionFailedListener__fromC,"snikket.Client","addConnectionFailedListener__fromC",0x9290bc1b,"snikket.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addConnectionFailedListener__fromC,"snikket.Client","addConnectionFailedListener__fromC",0x9290bc1b,"snikket.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1081_addChatMessageListener,"snikket.Client","addChatMessageListener",0xff8d07b4,"snikket.Client.addChatMessageListener","snikket/Client.hx",1081,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addConnectionFailedListener__fromC,"snikket.Client","addConnectionFailedListener__fromC",0x9290bc1b,"snikket.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1099_addChatMessageListener,"snikket.Client","addChatMessageListener",0xff8d07b4,"snikket.Client.addChatMessageListener","snikket/Client.hx",1099,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addChatMessageListener__fromC,"snikket.Client","addChatMessageListener__fromC",0xc5968745,"snikket.Client.addChatMessageListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addChatMessageListener__fromC,"snikket.Client","addChatMessageListener__fromC",0xc5968745,"snikket.Client.addChatMessageListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1095_addSyncMessageListener,"snikket.Client","addSyncMessageListener",0xf5301791,"snikket.Client.addSyncMessageListener","snikket/Client.hx",1095,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addChatMessageListener__fromC,"snikket.Client","addChatMessageListener__fromC",0xc5968745,"snikket.Client.addChatMessageListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1113_addSyncMessageListener,"snikket.Client","addSyncMessageListener",0xf5301791,"snikket.Client.addSyncMessageListener","snikket/Client.hx",1113,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addSyncMessageListener__fromC,"snikket.Client","addSyncMessageListener__fromC",0x6f8fdd08,"snikket.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addSyncMessageListener__fromC,"snikket.Client","addSyncMessageListener__fromC",0x6f8fdd08,"snikket.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1104_addChatsUpdatedListener,"snikket.Client","addChatsUpdatedListener",0xed116e03,"snikket.Client.addChatsUpdatedListener","snikket/Client.hx",1104,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addSyncMessageListener__fromC,"snikket.Client","addSyncMessageListener__fromC",0x6f8fdd08,"snikket.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1122_addChatsUpdatedListener,"snikket.Client","addChatsUpdatedListener",0xed116e03,"snikket.Client.addChatsUpdatedListener","snikket/Client.hx",1122,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addChatsUpdatedListener__fromC,"snikket.Client","addChatsUpdatedListener__fromC",0x109c18d6,"snikket.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addChatsUpdatedListener__fromC,"snikket.Client","addChatsUpdatedListener__fromC",0x109c18d6,"snikket.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1116_addCallRingListener,"snikket.Client","addCallRingListener",0xdc0d9f11,"snikket.Client.addCallRingListener","snikket/Client.hx",1116,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addChatsUpdatedListener__fromC,"snikket.Client","addChatsUpdatedListener__fromC",0x109c18d6,"snikket.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1134_addCallRingListener,"snikket.Client","addCallRingListener",0xdc0d9f11,"snikket.Client.addCallRingListener","snikket/Client.hx",1134,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addCallRingListener__fromC,"snikket.Client","addCallRingListener__fromC",0x01ba4588,"snikket.Client.addCallRingListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addCallRingListener__fromC,"snikket.Client","addCallRingListener__fromC",0x01ba4588,"snikket.Client.addCallRingListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1128_addCallRetractListener,"snikket.Client","addCallRetractListener",0x2db0b2e8,"snikket.Client.addCallRetractListener","snikket/Client.hx",1128,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addCallRingListener__fromC,"snikket.Client","addCallRingListener__fromC",0x01ba4588,"snikket.Client.addCallRingListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1146_addCallRetractListener,"snikket.Client","addCallRetractListener",0x2db0b2e8,"snikket.Client.addCallRetractListener","snikket/Client.hx",1146,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addCallRetractListener__fromC,"snikket.Client","addCallRetractListener__fromC",0x424d6a91,"snikket.Client.addCallRetractListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addCallRetractListener__fromC,"snikket.Client","addCallRetractListener__fromC",0x424d6a91,"snikket.Client.addCallRetractListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1140_addCallRingingListener,"snikket.Client","addCallRingingListener",0x568d8519,"snikket.Client.addCallRingingListener","snikket/Client.hx",1140,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addCallRetractListener__fromC,"snikket.Client","addCallRetractListener__fromC",0x424d6a91,"snikket.Client.addCallRetractListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1158_addCallRingingListener,"snikket.Client","addCallRingingListener",0x568d8519,"snikket.Client.addCallRingingListener","snikket/Client.hx",1158,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addCallRingingListener__fromC,"snikket.Client","addCallRingingListener__fromC",0x8136b080,"snikket.Client.addCallRingingListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addCallRingingListener__fromC,"snikket.Client","addCallRingingListener__fromC",0x8136b080,"snikket.Client.addCallRingingListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1154_addCallMediaListener,"snikket.Client","addCallMediaListener",0x2dfd660b,"snikket.Client.addCallMediaListener","snikket/Client.hx",1154,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addCallRingingListener__fromC,"snikket.Client","addCallRingingListener__fromC",0x8136b080,"snikket.Client.addCallRingingListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1172_addCallMediaListener,"snikket.Client","addCallMediaListener",0x2dfd660b,"snikket.Client.addCallMediaListener","snikket/Client.hx",1172,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addCallMediaListener__fromC,"snikket.Client","addCallMediaListener__fromC",0x3b32b1ce,"snikket.Client.addCallMediaListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addCallMediaListener__fromC,"snikket.Client","addCallMediaListener__fromC",0x3b32b1ce,"snikket.Client.addCallMediaListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1167_addCallTrackListener,"snikket.Client","addCallTrackListener",0xa60d6eb2,"snikket.Client.addCallTrackListener","snikket/Client.hx",1167,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addCallMediaListener__fromC,"snikket.Client","addCallMediaListener__fromC",0x3b32b1ce,"snikket.Client.addCallMediaListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1185_addCallTrackListener,"snikket.Client","addCallTrackListener",0xa60d6eb2,"snikket.Client.addCallTrackListener","snikket/Client.hx",1185,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_221_addCallTrackListener__fromC,"snikket.Client","addCallTrackListener__fromC",0xc89c1c07,"snikket.Client.addCallTrackListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_244_addCallTrackListener__fromC,"snikket.Client","addCallTrackListener__fromC",0xc89c1c07,"snikket.Client.addCallTrackListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1176_setInForeground,"snikket.Client","setInForeground",0x4b9b9598,"snikket.Client.setInForeground","snikket/Client.hx",1176,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1184_setNotInForeground,"snikket.Client","setNotInForeground",0x61bbec2b,"snikket.Client.setNotInForeground","snikket/Client.hx",1184,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1194_fetchMediaByHash,"snikket.Client","fetchMediaByHash",0x227ef9a1,"snikket.Client.fetchMediaByHash","snikket/Client.hx",1194,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1190_fetchMediaByHash,"snikket.Client","fetchMediaByHash",0x227ef9a1,"snikket.Client.fetchMediaByHash","snikket/Client.hx",1190,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1201_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1201,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1207_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1207,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1212_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1212,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1205_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1205,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1216_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1216,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1202_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1202,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1197_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1197,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1221_chatActivity,"snikket.Client","chatActivity",0x128a3a39,"snikket.Client.chatActivity","snikket/Client.hx",1221,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1227_chatActivity,"snikket.Client","chatActivity",0x128a3a39,"snikket.Client.chatActivity","snikket/Client.hx",1227,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1238_sortChats,"snikket.Client","sortChats",0xbd9a9dab,"snikket.Client.sortChats","snikket/Client.hx",1238,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1247_storeMessages,"snikket.Client","storeMessages",0xb2e3dc1b,"snikket.Client.storeMessages","snikket/Client.hx",1247,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1252_sendQuery,"snikket.Client","sendQuery",0x8dcd73ee,"snikket.Client.sendQuery","snikket/Client.hx",1252,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1256_sendStanza,"snikket.Client","sendStanza",0xbca03e4f,"snikket.Client.sendStanza","snikket/Client.hx",1256,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1263_sendPresence,"snikket.Client","sendPresence",0xc1bc7d15,"snikket.Client.sendPresence","snikket/Client.hx",1263,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1264_sendPresence,"snikket.Client","sendPresence",0xc1bc7d15,"snikket.Client.sendPresence","snikket/Client.hx",1264,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1274_getIceServers,"snikket.Client","getIceServers",0xf7e15ac9,"snikket.Client.getIceServers","snikket/Client.hx",1274,0x180249e1)
-static const ::String _hx_array_data_7c06fe3c_182[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_e44af0c967c6b6e2_252_addCallTrackListener__fromC,"snikket.Client","addCallTrackListener__fromC",0xc89c1c07,"snikket.Client.addCallTrackListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1194_setInForeground,"snikket.Client","setInForeground",0x4b9b9598,"snikket.Client.setInForeground","snikket/Client.hx",1194,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1202_setNotInForeground,"snikket.Client","setNotInForeground",0x61bbec2b,"snikket.Client.setNotInForeground","snikket/Client.hx",1202,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1212_fetchMediaByHash,"snikket.Client","fetchMediaByHash",0x227ef9a1,"snikket.Client.fetchMediaByHash","snikket/Client.hx",1212,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1208_fetchMediaByHash,"snikket.Client","fetchMediaByHash",0x227ef9a1,"snikket.Client.fetchMediaByHash","snikket/Client.hx",1208,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1219_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1219,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1225_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1225,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1230_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1230,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1223_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1223,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1234_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1234,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1220_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1220,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1215_fetchMediaByHashOneCounterpart,"snikket.Client","fetchMediaByHashOneCounterpart",0xeea071aa,"snikket.Client.fetchMediaByHashOneCounterpart","snikket/Client.hx",1215,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1239_chatActivity,"snikket.Client","chatActivity",0x128a3a39,"snikket.Client.chatActivity","snikket/Client.hx",1239,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1245_chatActivity,"snikket.Client","chatActivity",0x128a3a39,"snikket.Client.chatActivity","snikket/Client.hx",1245,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1256_sortChats,"snikket.Client","sortChats",0xbd9a9dab,"snikket.Client.sortChats","snikket/Client.hx",1256,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1265_storeMessages,"snikket.Client","storeMessages",0xb2e3dc1b,"snikket.Client.storeMessages","snikket/Client.hx",1265,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1270_sendQuery,"snikket.Client","sendQuery",0x8dcd73ee,"snikket.Client.sendQuery","snikket/Client.hx",1270,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1274_sendStanza,"snikket.Client","sendStanza",0xbca03e4f,"snikket.Client.sendStanza","snikket/Client.hx",1274,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1281_sendPresence,"snikket.Client","sendPresence",0xc1bc7d15,"snikket.Client.sendPresence","snikket/Client.hx",1281,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1282_sendPresence,"snikket.Client","sendPresence",0xc1bc7d15,"snikket.Client.sendPresence","snikket/Client.hx",1282,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1292_getIceServers,"snikket.Client","getIceServers",0xf7e15ac9,"snikket.Client.getIceServers","snikket/Client.hx",1292,0x180249e1)
+static const ::String _hx_array_data_7c06fe3c_192[] = {
 	HX_("stun",3a,f5,5b,4c),HX_("stuns",f9,9d,1a,84),HX_("turn",7d,eb,05,4d),HX_("turns",56,22,28,18),
 };
-static const ::String _hx_array_data_7c06fe3c_183[] = {
+static const ::String _hx_array_data_7c06fe3c_193[] = {
 	HX_("turn",7d,eb,05,4d),HX_("turns",56,22,28,18),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1272_getIceServers,"snikket.Client","getIceServers",0xf7e15ac9,"snikket.Client.getIceServers","snikket/Client.hx",1272,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1303_discoverServices,"snikket.Client","discoverServices",0x672de159,"snikket.Client.discoverServices","snikket/Client.hx",1303,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1306_discoverServices,"snikket.Client","discoverServices",0x672de159,"snikket.Client.discoverServices","snikket/Client.hx",1306,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1300_discoverServices,"snikket.Client","discoverServices",0x672de159,"snikket.Client.discoverServices","snikket/Client.hx",1300,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1315_notifyMessageHandlers,"snikket.Client","notifyMessageHandlers",0x61a351d5,"snikket.Client.notifyMessageHandlers","snikket/Client.hx",1315,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1324_notifySyncMessageHandlers,"snikket.Client","notifySyncMessageHandlers",0xb236243a,"snikket.Client.notifySyncMessageHandlers","snikket/Client.hx",1324,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1335_rosterGet,"snikket.Client","rosterGet",0xae66bf19,"snikket.Client.rosterGet","snikket/Client.hx",1335,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1333_rosterGet,"snikket.Client","rosterGet",0xae66bf19,"snikket.Client.rosterGet","snikket/Client.hx",1333,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1350_startChatWith,"snikket.Client","startChatWith",0x9e0699ce,"snikket.Client.startChatWith","snikket/Client.hx",1350,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1348_startChatWith,"snikket.Client","startChatWith",0x9e0699ce,"snikket.Client.startChatWith","snikket/Client.hx",1348,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1377_serverBlocked,"snikket.Client","serverBlocked",0xd88870b7,"snikket.Client.serverBlocked","snikket/Client.hx",1377,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1386_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1386,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1393_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1393,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1400_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1400,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1412_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1412,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1420_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1420,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1429_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1429,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1383_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1383,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1444_sync,"snikket.Client","sync",0x9a1851cd,"snikket.Client.sync","snikket/Client.hx",1444,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1448_sync,"snikket.Client","sync",0x9a1851cd,"snikket.Client.sync","snikket/Client.hx",1448,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1452_onMAMJMI,"snikket.Client","onMAMJMI",0xc3bb101e,"snikket.Client.onMAMJMI","snikket/Client.hx",1452,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1475_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1475,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1501_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1501,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1504_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1504,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1529_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1529,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1480_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1480,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1494_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1494,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1490_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1490,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1535_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1535,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1465_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1465,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1547_pingAllChannels,"snikket.Client","pingAllChannels",0x5c74390d,"snikket.Client.pingAllChannels","snikket/Client.hx",1547,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1554_joinAllChannels,"snikket.Client","joinAllChannels",0xde17fa95,"snikket.Client.joinAllChannels","snikket/Client.hx",1554,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1559_joinAllChannels,"snikket.Client","joinAllChannels",0xde17fa95,"snikket.Client.joinAllChannels","snikket/Client.hx",1559,0x180249e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1563_joinAllChannels,"snikket.Client","joinAllChannels",0xde17fa95,"snikket.Client.joinAllChannels","snikket/Client.hx",1563,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1290_getIceServers,"snikket.Client","getIceServers",0xf7e15ac9,"snikket.Client.getIceServers","snikket/Client.hx",1290,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1321_discoverServices,"snikket.Client","discoverServices",0x672de159,"snikket.Client.discoverServices","snikket/Client.hx",1321,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1324_discoverServices,"snikket.Client","discoverServices",0x672de159,"snikket.Client.discoverServices","snikket/Client.hx",1324,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1318_discoverServices,"snikket.Client","discoverServices",0x672de159,"snikket.Client.discoverServices","snikket/Client.hx",1318,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1333_notifyMessageHandlers,"snikket.Client","notifyMessageHandlers",0x61a351d5,"snikket.Client.notifyMessageHandlers","snikket/Client.hx",1333,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1342_notifySyncMessageHandlers,"snikket.Client","notifySyncMessageHandlers",0xb236243a,"snikket.Client.notifySyncMessageHandlers","snikket/Client.hx",1342,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1353_rosterGet,"snikket.Client","rosterGet",0xae66bf19,"snikket.Client.rosterGet","snikket/Client.hx",1353,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1351_rosterGet,"snikket.Client","rosterGet",0xae66bf19,"snikket.Client.rosterGet","snikket/Client.hx",1351,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1368_startChatWith,"snikket.Client","startChatWith",0x9e0699ce,"snikket.Client.startChatWith","snikket/Client.hx",1368,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1366_startChatWith,"snikket.Client","startChatWith",0x9e0699ce,"snikket.Client.startChatWith","snikket/Client.hx",1366,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1395_serverBlocked,"snikket.Client","serverBlocked",0xd88870b7,"snikket.Client.serverBlocked","snikket/Client.hx",1395,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1404_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1404,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1411_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1411,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1418_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1418,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1430_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1430,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1438_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1438,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1447_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1447,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1401_bookmarksGet,"snikket.Client","bookmarksGet",0x49f73b0b,"snikket.Client.bookmarksGet","snikket/Client.hx",1401,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1462_sync,"snikket.Client","sync",0x9a1851cd,"snikket.Client.sync","snikket/Client.hx",1462,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1466_sync,"snikket.Client","sync",0x9a1851cd,"snikket.Client.sync","snikket/Client.hx",1466,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1470_onMAMJMI,"snikket.Client","onMAMJMI",0xc3bb101e,"snikket.Client.onMAMJMI","snikket/Client.hx",1470,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1493_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1493,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1519_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1519,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1522_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1522,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1547_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1547,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1498_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1498,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1512_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1512,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1508_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1508,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1553_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1553,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1483_doSync,"snikket.Client","doSync",0xbb063778,"snikket.Client.doSync","snikket/Client.hx",1483,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1565_pingAllChannels,"snikket.Client","pingAllChannels",0x5c74390d,"snikket.Client.pingAllChannels","snikket/Client.hx",1565,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1572_joinAllChannels,"snikket.Client","joinAllChannels",0xde17fa95,"snikket.Client.joinAllChannels","snikket/Client.hx",1572,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1577_joinAllChannels,"snikket.Client","joinAllChannels",0xde17fa95,"snikket.Client.joinAllChannels","snikket/Client.hx",1577,0x180249e1)
+HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_1581_joinAllChannels,"snikket.Client","joinAllChannels",0xde17fa95,"snikket.Client.joinAllChannels","snikket/Client.hx",1581,0x180249e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_ead56881d4bbcaca_51_boot,"snikket.Client","boot",0x8ed41ba4,"snikket.Client.boot","snikket/Client.hx",51,0x180249e1)
 namespace snikket{
 
 void Client_obj::__construct(::String address,::Dynamic persistence){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_105_new)
-HXLINE( 105)			return _gthis->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_106_new)
+HXLINE( 106)			return _gthis->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_109_new)
-HXLINE( 110)			_gthis->token = ( (::String)(data->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
-HXLINE( 111)			::Dynamic persistence1 = persistence;
-HXDLIN( 111)			::String _hx_tmp = _gthis->jid->asBare()->asString();
-HXDLIN( 111)			::String _hx_tmp1;
-HXDLIN( 111)			::String tmp = _gthis->stream->clientId;
-HXDLIN( 111)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 111)				_hx_tmp1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_110_new)
+HXLINE( 111)			_gthis->token = ( (::String)(data->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
+HXLINE( 112)			::Dynamic persistence1 = persistence;
+HXDLIN( 112)			::String _hx_tmp = _gthis->jid->asBare()->asString();
+HXDLIN( 112)			::String _hx_tmp1;
+HXDLIN( 112)			::String tmp = _gthis->stream->clientId;
+HXDLIN( 112)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 112)				_hx_tmp1 = tmp;
             			}
             			else {
-HXLINE( 111)				_hx_tmp1 = _gthis->jid->resource;
+HXLINE( 112)				_hx_tmp1 = _gthis->jid->resource;
             			}
-HXDLIN( 111)			::String _hx_tmp2 = _gthis->displayName();
-HXDLIN( 111)			::snikket::Persistence_obj::storeLogin(persistence1,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->token);
-HXLINE( 112)			return ::snikket::EventResult_obj::EventHandled_dyn();
+HXDLIN( 112)			::String _hx_tmp2 = _gthis->displayName();
+HXDLIN( 112)			::snikket::Persistence_obj::storeLogin(persistence1,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->token);
+HXLINE( 113)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -528,29 +540,29 @@ HXLINE( 112)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::snikket::Chat chat){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_116_new)
-HXLINE( 116)				if ((chat->uiState != 2)) {
-HXLINE( 116)					return chat->syncing();
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_117_new)
+HXLINE( 117)				if ((chat->uiState != 2)) {
+HXLINE( 117)					return chat->syncing();
             				}
             				else {
-HXLINE( 116)					return false;
+HXLINE( 117)					return false;
             				}
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_115_new)
-HXLINE( 116)			bool anySyncHappening = ::Lambda_obj::exists(_gthis->chats, ::Dynamic(new _hx_Closure_2()));
-HXLINE( 117)			::Dynamic persistence1 = persistence;
-HXDLIN( 117)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 117)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 117)			if (anySyncHappening) {
-HXLINE( 117)				_hx_tmp1 = null();
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_116_new)
+HXLINE( 117)			bool anySyncHappening = ::Lambda_obj::exists(_gthis->chats, ::Dynamic(new _hx_Closure_2()));
+HXLINE( 118)			::Dynamic persistence1 = persistence;
+HXDLIN( 118)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 118)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 118)			if (anySyncHappening) {
+HXLINE( 118)				_hx_tmp1 = null();
             			}
             			else {
-HXLINE( 117)				_hx_tmp1 = ( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) );
+HXLINE( 118)				_hx_tmp1 = ( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) );
             			}
-HXDLIN( 117)			::snikket::Persistence_obj::storeStreamManagement(persistence1,_hx_tmp,_hx_tmp1);
-HXLINE( 118)			return ::snikket::EventResult_obj::EventHandled_dyn();
+HXDLIN( 118)			::snikket::Persistence_obj::storeStreamManagement(persistence1,_hx_tmp,_hx_tmp1);
+HXLINE( 119)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -558,16 +570,16 @@ HXLINE( 118)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::snikket::Client,_gthis) HXARGC(1)
             			void _hx_run( ::snikket::ChatMessage m){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_126_new)
-HXLINE( 126)				_gthis->notifyMessageHandlers(m,3);
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_127_new)
+HXLINE( 127)				_gthis->notifyMessageHandlers(m,3);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_121_new)
-HXLINE( 122)			::Dynamic persistence1 = persistence;
-HXLINE( 123)			::String _hx_tmp = _gthis->accountId();
-HXLINE( 122)			::snikket::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),1, ::Dynamic(new _hx_Closure_4(_gthis)));
-HXLINE( 128)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_122_new)
+HXLINE( 123)			::Dynamic persistence1 = persistence;
+HXLINE( 124)			::String _hx_tmp = _gthis->accountId();
+HXLINE( 123)			::snikket::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),1, ::Dynamic(new _hx_Closure_4(_gthis)));
+HXLINE( 129)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -575,16 +587,16 @@ HXLINE( 128)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::snikket::Client,_gthis) HXARGC(1)
             			void _hx_run( ::snikket::ChatMessage m){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_136_new)
-HXLINE( 136)				_gthis->notifyMessageHandlers(m,3);
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_137_new)
+HXLINE( 137)				_gthis->notifyMessageHandlers(m,3);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_131_new)
-HXLINE( 132)			::Dynamic persistence1 = persistence;
-HXLINE( 133)			::String _hx_tmp = _gthis->accountId();
-HXLINE( 132)			::snikket::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),3, ::Dynamic(new _hx_Closure_6(_gthis)));
-HXLINE( 138)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_132_new)
+HXLINE( 133)			::Dynamic persistence1 = persistence;
+HXLINE( 134)			::String _hx_tmp = _gthis->accountId();
+HXLINE( 133)			::snikket::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),3, ::Dynamic(new _hx_Closure_6(_gthis)));
+HXLINE( 139)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -592,155 +604,155 @@ HXLINE( 138)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		 ::snikket::EventResult _hx_run( ::Dynamic event){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_8, ::snikket::Client,_gthis) HXARGC(2)
             			 ::snikket::ChatMessageBuilder _hx_run( ::snikket::ChatMessageBuilder builder, ::snikket::Stanza stanza){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_166_new)
-HXLINE( 167)				 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 167)				 ::snikket::Chat chat = _gthis1->getChat(builder->chatId());
-HXLINE( 168)				bool message;
-HXDLIN( 168)				if (::hx::IsNull( chat )) {
-HXLINE( 168)					message = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("groupchat",97,1d,c8,e5));
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_167_new)
+HXLINE( 168)				 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 168)				 ::snikket::Chat chat = _gthis1->getChat(builder->chatId());
+HXLINE( 169)				bool message;
+HXDLIN( 169)				if (::hx::IsNull( chat )) {
+HXLINE( 169)					message = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("groupchat",97,1d,c8,e5));
             				}
             				else {
-HXLINE( 168)					message = false;
+HXLINE( 169)					message = false;
             				}
-HXDLIN( 168)				if (message) {
-HXLINE( 168)					 ::snikket::Client _gthis2 = _gthis;
-HXDLIN( 168)					chat = _gthis2->getDirectChat(builder->chatId(),null());
+HXDLIN( 169)				if (message) {
+HXLINE( 169)					 ::snikket::Client _gthis2 = _gthis;
+HXDLIN( 169)					chat = _gthis2->getDirectChat(builder->chatId(),null());
             				}
-HXLINE( 169)				if (::hx::IsNull( chat )) {
-HXLINE( 169)					return builder;
+HXLINE( 170)				if (::hx::IsNull( chat )) {
+HXLINE( 170)					return builder;
             				}
-HXLINE( 170)				return chat->prepareIncomingMessage(builder,stanza);
+HXLINE( 171)				return chat->prepareIncomingMessage(builder,stanza);
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_141_new)
-HXLINE( 142)			 ::snikket::Stanza stanza = ( ( ::snikket::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE( 144)			if (::hx::IsNotNull( stanza->getChild(HX_("result",dd,68,84,08),HX_("urn:xmpp:mam:2",f5,ef,8c,da)) )) {
-HXLINE( 146)				return ::snikket::EventResult_obj::EventUnhandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_142_new)
+HXLINE( 143)			 ::snikket::Stanza stanza = ( ( ::snikket::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE( 145)			if (::hx::IsNotNull( stanza->getChild(HX_("result",dd,68,84,08),HX_("urn:xmpp:mam:2",f5,ef,8c,da)) )) {
+HXLINE( 147)				return ::snikket::EventResult_obj::EventUnhandled_dyn();
             			}
-HXLINE( 149)			 ::snikket::JID from;
-HXDLIN( 149)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 149)				from = null();
+HXLINE( 150)			 ::snikket::JID from;
+HXDLIN( 150)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 150)				from = null();
             			}
             			else {
-HXLINE( 149)				from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 150)				from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
             			}
-HXLINE( 151)			bool _hx_tmp;
-HXDLIN( 151)			if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 151)				_hx_tmp = ::hx::IsNotNull( from );
+HXLINE( 152)			bool _hx_tmp;
+HXDLIN( 152)			if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE( 152)				_hx_tmp = ::hx::IsNotNull( from );
             			}
             			else {
-HXLINE( 151)				_hx_tmp = false;
+HXLINE( 152)				_hx_tmp = false;
             			}
-HXDLIN( 151)			if (_hx_tmp) {
-HXLINE( 152)				 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 152)				 ::snikket::Chat chat = _gthis1->getChat(from->asBare()->asString());
-HXLINE( 153)				 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
-HXLINE( 154)				if (::hx::IsNotNull( channel )) {
-HXLINE( 154)					channel->selfPing(true);
+HXDLIN( 152)			if (_hx_tmp) {
+HXLINE( 153)				 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 153)				 ::snikket::Chat chat = _gthis1->getChat(from->asBare()->asString());
+HXLINE( 154)				 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
+HXLINE( 155)				if (::hx::IsNotNull( channel )) {
+HXLINE( 155)					channel->selfPing(true);
             				}
             			}
-HXLINE( 157)			 ::snikket::Stanza fwd = null();
-HXLINE( 158)			bool _hx_tmp1;
-HXDLIN( 158)			if (::hx::IsNotNull( from )) {
-HXLINE( 158)				::String _hx_tmp2 = from->asBare()->asString();
-HXDLIN( 158)				_hx_tmp1 = (_hx_tmp2 == _gthis->accountId());
+HXLINE( 158)			 ::snikket::Stanza fwd = null();
+HXLINE( 159)			bool _hx_tmp1;
+HXDLIN( 159)			if (::hx::IsNotNull( from )) {
+HXLINE( 159)				::String _hx_tmp2 = from->asBare()->asString();
+HXDLIN( 159)				_hx_tmp1 = (_hx_tmp2 == _gthis->accountId());
             			}
             			else {
-HXLINE( 158)				_hx_tmp1 = false;
+HXLINE( 159)				_hx_tmp1 = false;
             			}
-HXDLIN( 158)			if (_hx_tmp1) {
-HXLINE( 159)				 ::snikket::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
-HXLINE( 160)				if (::hx::IsNull( carbon )) {
-HXLINE( 160)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXDLIN( 159)			if (_hx_tmp1) {
+HXLINE( 160)				 ::snikket::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXLINE( 161)				if (::hx::IsNull( carbon )) {
+HXLINE( 161)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
             				}
-HXLINE( 161)				if (::hx::IsNotNull( carbon )) {
-HXLINE( 162)					 ::snikket::Stanza tmp = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
-HXDLIN( 162)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 162)						fwd = tmp->getFirstChild();
+HXLINE( 162)				if (::hx::IsNotNull( carbon )) {
+HXLINE( 163)					 ::snikket::Stanza tmp = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+HXDLIN( 163)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 163)						fwd = tmp->getFirstChild();
             					}
             					else {
-HXLINE( 162)						fwd = null();
+HXLINE( 163)						fwd = null();
             					}
             				}
             			}
-HXLINE( 166)			 ::snikket::Message message = ::snikket::Message_obj::fromStanza(stanza,_gthis->jid, ::Dynamic(new _hx_Closure_8(_gthis)));
-HXLINE( 172)			{
-HXLINE( 172)				 ::snikket::MessageStanza _g = message->parsed;
-HXDLIN( 172)				switch((int)(_g->_hx_getIndex())){
+HXLINE( 167)			 ::snikket::Message message = ::snikket::Message_obj::fromStanza(stanza,_gthis->jid, ::Dynamic(new _hx_Closure_8(_gthis)));
+HXLINE( 173)			{
+HXLINE( 173)				 ::snikket::MessageStanza _g = message->parsed;
+HXDLIN( 173)				switch((int)(_g->_hx_getIndex())){
             					case (int)1: {
-HXLINE( 173)						 ::snikket::ChatMessage chatMessage = _g->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 173)						{
-HXLINE( 174)							{
-HXLINE( 174)								int _g1 = 0;
-HXDLIN( 174)								::Array< ::Dynamic> _g2 = chatMessage->inlineHashReferences();
-HXDLIN( 174)								while((_g1 < _g2->length)){
-HXLINE( 174)									 ::snikket::Hash hash = _g2->__get(_g1).StaticCast<  ::snikket::Hash >();
-HXDLIN( 174)									_g1 = (_g1 + 1);
-HXLINE( 175)									_gthis->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,chatMessage->from));
+HXLINE( 174)						 ::snikket::ChatMessage chatMessage = _g->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 174)						{
+HXLINE( 175)							{
+HXLINE( 175)								int _g1 = 0;
+HXDLIN( 175)								::Array< ::Dynamic> _g2 = chatMessage->inlineHashReferences();
+HXDLIN( 175)								while((_g1 < _g2->length)){
+HXLINE( 175)									 ::snikket::Hash hash = _g2->__get(_g1).StaticCast<  ::snikket::Hash >();
+HXDLIN( 175)									_g1 = (_g1 + 1);
+HXLINE( 176)									_gthis->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,chatMessage->from));
             								}
             							}
-HXLINE( 177)							 ::snikket::Client _gthis2 = _gthis;
-HXDLIN( 177)							 ::snikket::Chat chat1 = _gthis2->getChat(chatMessage->chatId());
-HXLINE( 178)							if (::hx::IsNotNull( chat1 )) {
+HXLINE( 178)							 ::snikket::Client _gthis2 = _gthis;
+HXDLIN( 178)							 ::snikket::Chat chat1 = _gthis2->getChat(chatMessage->chatId());
+HXLINE( 179)							if (::hx::IsNotNull( chat1 )) {
             								HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_9, ::snikket::Client,_gthis, ::snikket::Chat,chat1) HXARGC(1)
             								void _hx_run( ::snikket::ChatMessage chatMessage){
-            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_179_new)
-HXLINE( 180)									int updateChat;
-HXDLIN( 180)									if ((chatMessage->versions->length > 1)) {
-HXLINE( 180)										updateChat = 1;
+            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_180_new)
+HXLINE( 181)									int updateChat;
+HXDLIN( 181)									if ((chatMessage->versions->length > 1)) {
+HXLINE( 181)										updateChat = 1;
             									}
             									else {
-HXLINE( 180)										updateChat = 0;
+HXLINE( 181)										updateChat = 0;
             									}
-HXDLIN( 180)									_gthis->notifyMessageHandlers(chatMessage,updateChat);
-HXLINE( 181)									bool updateChat1;
-HXDLIN( 181)									bool updateChat2;
-HXDLIN( 181)									if ((chatMessage->versions->length >= 1)) {
-HXLINE( 181)										::String updateChat3 = chat1->lastMessageId();
-HXDLIN( 181)										updateChat2 = (updateChat3 == chatMessage->serverId);
+HXDLIN( 181)									_gthis->notifyMessageHandlers(chatMessage,updateChat);
+HXLINE( 182)									bool updateChat1;
+HXDLIN( 182)									bool updateChat2;
+HXDLIN( 182)									if ((chatMessage->versions->length >= 1)) {
+HXLINE( 182)										::String updateChat3 = chat1->lastMessageId();
+HXDLIN( 182)										updateChat2 = (updateChat3 == chatMessage->serverId);
             									}
             									else {
-HXLINE( 181)										updateChat2 = true;
+HXLINE( 182)										updateChat2 = true;
             									}
-HXDLIN( 181)									if (!(updateChat2)) {
-HXLINE( 181)										::String updateChat4 = chat1->lastMessageId();
-HXDLIN( 181)										updateChat1 = (updateChat4 == chatMessage->localId);
+HXDLIN( 182)									if (!(updateChat2)) {
+HXLINE( 182)										::String updateChat4 = chat1->lastMessageId();
+HXDLIN( 182)										updateChat1 = (updateChat4 == chatMessage->localId);
             									}
             									else {
-HXLINE( 181)										updateChat1 = true;
+HXLINE( 182)										updateChat1 = true;
             									}
-HXDLIN( 181)									if (updateChat1) {
-HXLINE( 182)										chat1->setLastMessage(chatMessage);
-HXLINE( 183)										if ((chatMessage->versions->length < 1)) {
-HXLINE( 183)											 ::snikket::Chat chat = chat1;
-HXDLIN( 183)											int updateChat5;
-HXDLIN( 183)											if (chatMessage->isIncoming()) {
-HXLINE( 183)												updateChat5 = (chat1->unreadCount() + 1);
+HXDLIN( 182)									if (updateChat1) {
+HXLINE( 183)										chat1->setLastMessage(chatMessage);
+HXLINE( 184)										if ((chatMessage->versions->length < 1)) {
+HXLINE( 184)											 ::snikket::Chat chat = chat1;
+HXDLIN( 184)											int updateChat5;
+HXDLIN( 184)											if (chatMessage->isIncoming()) {
+HXLINE( 184)												updateChat5 = (chat1->unreadCount() + 1);
             											}
             											else {
-HXLINE( 183)												updateChat5 = 0;
+HXLINE( 184)												updateChat5 = 0;
             											}
-HXDLIN( 183)											chat->setUnreadCount(updateChat5);
+HXDLIN( 184)											chat->setUnreadCount(updateChat5);
             										}
-HXLINE( 184)										_gthis->chatActivity(chat1,null());
+HXLINE( 185)										_gthis->chatActivity(chat1,null());
             									}
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 179)								 ::Dynamic updateChat =  ::Dynamic(new _hx_Closure_9(_gthis,chat1));
-HXLINE( 187)								if (::hx::IsNull( chatMessage->serverId )) {
-HXLINE( 188)									updateChat(chatMessage);
+HXLINE( 180)								 ::Dynamic updateChat =  ::Dynamic(new _hx_Closure_9(_gthis,chat1));
+HXLINE( 188)								if (::hx::IsNull( chatMessage->serverId )) {
+HXLINE( 189)									updateChat(chatMessage);
             								}
             								else {
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_10, ::Dynamic,updateChat) HXARGC(1)
             									void _hx_run(::Array< ::Dynamic> stored){
-            										HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_190_new)
-HXLINE( 190)										updateChat(stored->__get(0).StaticCast<  ::snikket::ChatMessage >());
+            										HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_191_new)
+HXLINE( 191)										updateChat(stored->__get(0).StaticCast<  ::snikket::ChatMessage >());
             									}
             									HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 190)									_gthis->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,chatMessage), ::Dynamic(new _hx_Closure_10(updateChat)));
+HXLINE( 191)									_gthis->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,chatMessage), ::Dynamic(new _hx_Closure_10(updateChat)));
             								}
             							}
             						}
@@ -749,40 +761,40 @@ HXLINE( 190)									_gthis->storeMessages(::Array_obj< ::Dynamic>::__new(1)->in
             					case (int)2: {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_11, ::snikket::Client,_gthis) HXARGC(1)
             						void _hx_run( ::snikket::ChatMessage stored){
-            							HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_199_new)
-HXLINE( 199)							if (::hx::IsNotNull( stored )) {
-HXLINE( 199)								_gthis->notifyMessageHandlers(stored,1);
+            							HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_200_new)
+HXLINE( 200)							if (::hx::IsNotNull( stored )) {
+HXLINE( 200)								_gthis->notifyMessageHandlers(stored,1);
             							}
             						}
             						HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 198)						 ::snikket::ModerationAction action = _g->_hx_getObject(0).StaticCast<  ::snikket::ModerationAction >();
-HXLINE( 199)						::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_11(_gthis)),null());
+HXLINE( 199)						 ::snikket::ModerationAction action = _g->_hx_getObject(0).StaticCast<  ::snikket::ModerationAction >();
+HXLINE( 200)						::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_11(_gthis)),null());
             					}
             					break;
             					case (int)3: {
-HXLINE( 193)						 ::snikket::ReactionUpdate update = _g->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
-HXDLIN( 193)						{
+HXLINE( 194)						 ::snikket::ReactionUpdate update = _g->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
+HXDLIN( 194)						{
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_12, ::snikket::Client,_gthis) HXARGC(1)
             							void _hx_run( ::snikket::ChatMessage stored){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_197_new)
-HXLINE( 197)								if (::hx::IsNotNull( stored )) {
-HXLINE( 197)									_gthis->notifyMessageHandlers(stored,2);
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_198_new)
+HXLINE( 198)								if (::hx::IsNotNull( stored )) {
+HXLINE( 198)									_gthis->notifyMessageHandlers(stored,2);
             								}
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 194)							{
-HXLINE( 194)								int _g3 = 0;
-HXDLIN( 194)								::Array< ::Dynamic> _g4 = update->inlineHashReferences();
-HXDLIN( 194)								while((_g3 < _g4->length)){
-HXLINE( 194)									 ::snikket::Hash hash1 = _g4->__get(_g3).StaticCast<  ::snikket::Hash >();
-HXDLIN( 194)									_g3 = (_g3 + 1);
-HXLINE( 195)									_gthis->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash1),::Array_obj< ::Dynamic>::__new(1)->init(0,from));
+HXLINE( 195)							{
+HXLINE( 195)								int _g3 = 0;
+HXDLIN( 195)								::Array< ::Dynamic> _g4 = update->inlineHashReferences();
+HXDLIN( 195)								while((_g3 < _g4->length)){
+HXLINE( 195)									 ::snikket::Hash hash1 = _g4->__get(_g3).StaticCast<  ::snikket::Hash >();
+HXDLIN( 195)									_g3 = (_g3 + 1);
+HXLINE( 196)									_gthis->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash1),::Array_obj< ::Dynamic>::__new(1)->init(0,from));
             								}
             							}
-HXLINE( 197)							::Dynamic persistence1 = persistence;
-HXDLIN( 197)							::snikket::Persistence_obj::storeReaction(persistence1,_gthis->accountId(),update, ::Dynamic(new _hx_Closure_12(_gthis)));
+HXLINE( 198)							::Dynamic persistence1 = persistence;
+HXDLIN( 198)							::snikket::Persistence_obj::storeReaction(persistence1,_gthis->accountId(),update, ::Dynamic(new _hx_Closure_12(_gthis)));
             						}
             					}
             					break;
@@ -790,107 +802,107 @@ HXDLIN( 197)							::snikket::Persistence_obj::storeReaction(persistence1,_gthis
             					}
             				}
             			}
-HXLINE( 204)			 ::snikket::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 205)			bool _hx_tmp3;
-HXDLIN( 205)			if (::hx::IsNotNull( jmiP )) {
-HXLINE( 205)				_hx_tmp3 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 205)			 ::snikket::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 206)			bool _hx_tmp3;
+HXDLIN( 206)			if (::hx::IsNotNull( jmiP )) {
+HXLINE( 206)				_hx_tmp3 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ) );
             			}
             			else {
-HXLINE( 205)				_hx_tmp3 = false;
-            			}
-HXDLIN( 205)			if (_hx_tmp3) {
-HXLINE( 206)				 ::snikket::Client _gthis3 = _gthis;
-HXDLIN( 206)				 ::snikket::jingle::IncomingProposedSession session =  ::snikket::jingle::IncomingProposedSession_obj::__alloc( HX_CTX ,_gthis3,from,( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 207)				 ::snikket::Client _gthis4 = _gthis;
-HXDLIN( 207)				 ::snikket::DirectChat chat2 = _gthis4->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 208)				::Dynamic this1 = chat2->jingleSessions;
-HXDLIN( 208)				if (!(( ( ::haxe::ds::StringMap)(this1) )->exists(session->get_sid()))) {
-HXLINE( 209)					{
-HXLINE( 209)						::Dynamic this2 = chat2->jingleSessions;
-HXDLIN( 209)						( ( ::haxe::ds::StringMap)(this2) )->set(session->get_sid(),session);
+HXLINE( 206)				_hx_tmp3 = false;
+            			}
+HXDLIN( 206)			if (_hx_tmp3) {
+HXLINE( 207)				 ::snikket::Client _gthis3 = _gthis;
+HXDLIN( 207)				 ::snikket::jingle::IncomingProposedSession session =  ::snikket::jingle::IncomingProposedSession_obj::__alloc( HX_CTX ,_gthis3,from,( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 208)				 ::snikket::Client _gthis4 = _gthis;
+HXDLIN( 208)				 ::snikket::DirectChat chat2 = _gthis4->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 209)				::Dynamic this1 = chat2->jingleSessions;
+HXDLIN( 209)				if (!(( ( ::haxe::ds::StringMap)(this1) )->exists(session->get_sid()))) {
+HXLINE( 210)					{
+HXLINE( 210)						::Dynamic this2 = chat2->jingleSessions;
+HXDLIN( 210)						( ( ::haxe::ds::StringMap)(this2) )->set(session->get_sid(),session);
             					}
-HXLINE( 210)					_gthis->chatActivity(chat2,null());
-HXLINE( 211)					session->ring();
+HXLINE( 211)					_gthis->chatActivity(chat2,null());
+HXLINE( 212)					session->ring();
             				}
             			}
-HXLINE( 215)			 ::snikket::Stanza jmiR = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 216)			bool _hx_tmp4;
-HXDLIN( 216)			if (::hx::IsNotNull( jmiR )) {
-HXLINE( 216)				_hx_tmp4 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 216)			 ::snikket::Stanza jmiR = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 217)			bool _hx_tmp4;
+HXDLIN( 217)			if (::hx::IsNotNull( jmiR )) {
+HXLINE( 217)				_hx_tmp4 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ) );
             			}
             			else {
-HXLINE( 216)				_hx_tmp4 = false;
-            			}
-HXDLIN( 216)			if (_hx_tmp4) {
-HXLINE( 217)				 ::snikket::Client _gthis5 = _gthis;
-HXDLIN( 217)				 ::snikket::DirectChat chat3 = _gthis5->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 218)				::Dynamic this3 = chat3->jingleSessions;
-HXDLIN( 218)				::Dynamic session1 = ( ( ::haxe::ds::StringMap)(this3) )->get(( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 219)				if (::hx::IsNotNull( session1 )) {
-HXLINE( 220)					::snikket::jingle::Session_obj::retract(session1);
-HXLINE( 221)					{
-HXLINE( 221)						::Dynamic this4 = chat3->jingleSessions;
-HXDLIN( 221)						( ( ::haxe::ds::StringMap)(this4) )->remove(::snikket::jingle::Session_obj::get_sid(session1));
+HXLINE( 217)				_hx_tmp4 = false;
+            			}
+HXDLIN( 217)			if (_hx_tmp4) {
+HXLINE( 218)				 ::snikket::Client _gthis5 = _gthis;
+HXDLIN( 218)				 ::snikket::DirectChat chat3 = _gthis5->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 219)				::Dynamic this3 = chat3->jingleSessions;
+HXDLIN( 219)				::Dynamic session1 = ( ( ::haxe::ds::StringMap)(this3) )->get(( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 220)				if (::hx::IsNotNull( session1 )) {
+HXLINE( 221)					::snikket::jingle::Session_obj::retract(session1);
+HXLINE( 222)					{
+HXLINE( 222)						::Dynamic this4 = chat3->jingleSessions;
+HXDLIN( 222)						( ( ::haxe::ds::StringMap)(this4) )->remove(::snikket::jingle::Session_obj::get_sid(session1));
             					}
             				}
             			}
-HXLINE( 226)			 ::snikket::Stanza jmiProFwd;
-HXDLIN( 226)			if (::hx::IsNotNull( fwd )) {
-HXLINE( 226)				jmiProFwd = fwd->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 227)			 ::snikket::Stanza jmiProFwd;
+HXDLIN( 227)			if (::hx::IsNotNull( fwd )) {
+HXLINE( 227)				jmiProFwd = fwd->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
             			}
             			else {
-HXLINE( 226)				jmiProFwd = null();
+HXLINE( 227)				jmiProFwd = null();
             			}
-HXLINE( 227)			bool _hx_tmp5;
-HXDLIN( 227)			if (::hx::IsNotNull( jmiProFwd )) {
-HXLINE( 227)				_hx_tmp5 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 228)			bool _hx_tmp5;
+HXDLIN( 228)			if (::hx::IsNotNull( jmiProFwd )) {
+HXLINE( 228)				_hx_tmp5 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ) );
             			}
             			else {
-HXLINE( 227)				_hx_tmp5 = false;
-            			}
-HXDLIN( 227)			if (_hx_tmp5) {
-HXLINE( 228)				 ::snikket::Client _gthis6 = _gthis;
-HXDLIN( 228)				 ::snikket::DirectChat chat4 = _gthis6->getDirectChat(::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(fwd->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString(),null());
-HXLINE( 229)				::Dynamic this5 = chat4->jingleSessions;
-HXDLIN( 229)				::Dynamic session2 = ( ( ::haxe::ds::StringMap)(this5) )->get(( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 230)				if (::hx::IsNotNull( session2 )) {
-HXLINE( 231)					::snikket::jingle::Session_obj::retract(session2);
-HXLINE( 232)					{
-HXLINE( 232)						::Dynamic this6 = chat4->jingleSessions;
-HXDLIN( 232)						( ( ::haxe::ds::StringMap)(this6) )->remove(::snikket::jingle::Session_obj::get_sid(session2));
+HXLINE( 228)				_hx_tmp5 = false;
+            			}
+HXDLIN( 228)			if (_hx_tmp5) {
+HXLINE( 229)				 ::snikket::Client _gthis6 = _gthis;
+HXDLIN( 229)				 ::snikket::DirectChat chat4 = _gthis6->getDirectChat(::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(fwd->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString(),null());
+HXLINE( 230)				::Dynamic this5 = chat4->jingleSessions;
+HXDLIN( 230)				::Dynamic session2 = ( ( ::haxe::ds::StringMap)(this5) )->get(( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 231)				if (::hx::IsNotNull( session2 )) {
+HXLINE( 232)					::snikket::jingle::Session_obj::retract(session2);
+HXLINE( 233)					{
+HXLINE( 233)						::Dynamic this6 = chat4->jingleSessions;
+HXDLIN( 233)						( ( ::haxe::ds::StringMap)(this6) )->remove(::snikket::jingle::Session_obj::get_sid(session2));
             					}
             				}
             			}
-HXLINE( 236)			 ::snikket::Stanza jmiPro = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 237)			bool _hx_tmp6;
-HXDLIN( 237)			if (::hx::IsNotNull( jmiPro )) {
-HXLINE( 237)				_hx_tmp6 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 237)			 ::snikket::Stanza jmiPro = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 238)			bool _hx_tmp6;
+HXDLIN( 238)			if (::hx::IsNotNull( jmiPro )) {
+HXLINE( 238)				_hx_tmp6 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ) );
             			}
             			else {
-HXLINE( 237)				_hx_tmp6 = false;
-            			}
-HXDLIN( 237)			if (_hx_tmp6) {
-HXLINE( 238)				 ::snikket::Client _gthis7 = _gthis;
-HXDLIN( 238)				 ::snikket::DirectChat chat5 = _gthis7->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 239)				::Dynamic this7 = chat5->jingleSessions;
-HXDLIN( 239)				::Dynamic session3 = ( ( ::haxe::ds::StringMap)(this7) )->get(( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 240)				if (::hx::IsNotNull( session3 )) {
-HXLINE( 241)					try {
+HXLINE( 238)				_hx_tmp6 = false;
+            			}
+HXDLIN( 238)			if (_hx_tmp6) {
+HXLINE( 239)				 ::snikket::Client _gthis7 = _gthis;
+HXDLIN( 239)				 ::snikket::DirectChat chat5 = _gthis7->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 240)				::Dynamic this7 = chat5->jingleSessions;
+HXDLIN( 240)				::Dynamic session3 = ( ( ::haxe::ds::StringMap)(this7) )->get(( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 241)				if (::hx::IsNotNull( session3 )) {
+HXLINE( 242)					try {
             						HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 242)						::Dynamic this8 = chat5->jingleSessions;
-HXDLIN( 242)						::String key = ::snikket::jingle::Session_obj::get_sid(session3);
-HXDLIN( 242)						( ( ::haxe::ds::StringMap)(this8) )->set(key,::snikket::jingle::Session_obj::initiate(session3,stanza));
+HXLINE( 243)						::Dynamic this8 = chat5->jingleSessions;
+HXDLIN( 243)						::String key = ::snikket::jingle::Session_obj::get_sid(session3);
+HXDLIN( 243)						( ( ::haxe::ds::StringMap)(this8) )->set(key,::snikket::jingle::Session_obj::initiate(session3,stanza));
             					} catch( ::Dynamic _hx_e) {
             						if (_hx_e.IsClass<  ::Dynamic >() ){
             							HX_STACK_BEGIN_CATCH
             							 ::Dynamic _g5 = _hx_e;
-HXLINE( 243)							 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g5);
-HXLINE( 244)							::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 244)							 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g5);
+HXLINE( 245)							::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c), ::Dynamic(::hx::Anon_obj::Create(5)
             								->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             								->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
             								->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             								->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            								->setFixed(4,HX_("lineNumber",dd,81,22,76),244)));
+            								->setFixed(4,HX_("lineNumber",dd,81,22,76),245)));
             						}
             						else {
             							HX_STACK_DO_THROW(_hx_e);
@@ -898,346 +910,342 @@ HXLINE( 244)							::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c),
             					}
             				}
             			}
-HXLINE( 249)			 ::snikket::Stanza jmiRej = stanza->getChild(HX_("reject",5f,51,85,02),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 250)			bool _hx_tmp7;
-HXDLIN( 250)			if (::hx::IsNotNull( jmiRej )) {
-HXLINE( 250)				_hx_tmp7 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 250)			 ::snikket::Stanza jmiRej = stanza->getChild(HX_("reject",5f,51,85,02),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 251)			bool _hx_tmp7;
+HXDLIN( 251)			if (::hx::IsNotNull( jmiRej )) {
+HXLINE( 251)				_hx_tmp7 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ) );
             			}
             			else {
-HXLINE( 250)				_hx_tmp7 = false;
-            			}
-HXDLIN( 250)			if (_hx_tmp7) {
-HXLINE( 251)				 ::snikket::Client _gthis8 = _gthis;
-HXDLIN( 251)				 ::snikket::DirectChat chat6 = _gthis8->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 252)				::Dynamic this9 = chat6->jingleSessions;
-HXDLIN( 252)				::Dynamic session4 = ( ( ::haxe::ds::StringMap)(this9) )->get(( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 253)				if (::hx::IsNotNull( session4 )) {
-HXLINE( 254)					::snikket::jingle::Session_obj::retract(session4);
-HXLINE( 255)					{
-HXLINE( 255)						::Dynamic this10 = chat6->jingleSessions;
-HXDLIN( 255)						( ( ::haxe::ds::StringMap)(this10) )->remove(::snikket::jingle::Session_obj::get_sid(session4));
+HXLINE( 251)				_hx_tmp7 = false;
+            			}
+HXDLIN( 251)			if (_hx_tmp7) {
+HXLINE( 252)				 ::snikket::Client _gthis8 = _gthis;
+HXDLIN( 252)				 ::snikket::DirectChat chat6 = _gthis8->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 253)				::Dynamic this9 = chat6->jingleSessions;
+HXDLIN( 253)				::Dynamic session4 = ( ( ::haxe::ds::StringMap)(this9) )->get(( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 254)				if (::hx::IsNotNull( session4 )) {
+HXLINE( 255)					::snikket::jingle::Session_obj::retract(session4);
+HXLINE( 256)					{
+HXLINE( 256)						::Dynamic this10 = chat6->jingleSessions;
+HXDLIN( 256)						( ( ::haxe::ds::StringMap)(this10) )->remove(::snikket::jingle::Session_obj::get_sid(session4));
             					}
             				}
             			}
-HXLINE( 259)			if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("error",c8,cb,29,73))) {
-HXLINE( 260)				 ::snikket::Stanza chatState = stanza->getChild(null(),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d));
-HXLINE( 261)				 ::Dynamic userState;
-HXDLIN( 261)				::String _g6;
-HXDLIN( 261)				if (::hx::IsNotNull( chatState )) {
-HXLINE( 261)					_g6 = chatState->name;
+HXLINE( 260)			if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("error",c8,cb,29,73))) {
+HXLINE( 261)				 ::snikket::Stanza chatState = stanza->getChild(null(),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d));
+HXLINE( 262)				 ::Dynamic userState;
+HXDLIN( 262)				::String _g6;
+HXDLIN( 262)				if (::hx::IsNotNull( chatState )) {
+HXLINE( 262)					_g6 = chatState->name;
             				}
             				else {
-HXLINE( 261)					_g6 = null();
+HXLINE( 262)					_g6 = null();
             				}
-HXDLIN( 261)				if (::hx::IsNull( _g6 )) {
-HXLINE( 261)					userState = null();
+HXDLIN( 262)				if (::hx::IsNull( _g6 )) {
+HXLINE( 262)					userState = null();
             				}
             				else {
-HXLINE( 261)					::String _hx_switch_0 = _g6;
+HXLINE( 262)					::String _hx_switch_0 = _g6;
             					if (  (_hx_switch_0==HX_("active",c6,41,46,16)) ){
-HXLINE( 261)						userState = 2;
-HXDLIN( 261)						goto _hx_goto_2;
+HXLINE( 262)						userState = 2;
+HXDLIN( 262)						goto _hx_goto_2;
             					}
             					if (  (_hx_switch_0==HX_("composing",cf,0a,a5,12)) ){
-HXLINE( 261)						userState = 3;
-HXDLIN( 261)						goto _hx_goto_2;
+HXLINE( 262)						userState = 3;
+HXDLIN( 262)						goto _hx_goto_2;
             					}
             					if (  (_hx_switch_0==HX_("gone",5f,94,69,44)) ){
-HXLINE( 261)						userState = 0;
-HXDLIN( 261)						goto _hx_goto_2;
+HXLINE( 262)						userState = 0;
+HXDLIN( 262)						goto _hx_goto_2;
             					}
             					if (  (_hx_switch_0==HX_("inactive",6b,17,30,6a)) ){
-HXLINE( 261)						userState = 1;
-HXDLIN( 261)						goto _hx_goto_2;
+HXLINE( 262)						userState = 1;
+HXDLIN( 262)						goto _hx_goto_2;
             					}
             					if (  (_hx_switch_0==HX_("paused",ae,40,84,ef)) ){
-HXLINE( 261)						userState = 4;
-HXDLIN( 261)						goto _hx_goto_2;
+HXLINE( 262)						userState = 4;
+HXDLIN( 262)						goto _hx_goto_2;
             					}
             					/* default */{
-HXLINE( 261)						userState = null();
+HXLINE( 262)						userState = null();
             					}
             					_hx_goto_2:;
             				}
-HXLINE( 269)				if (::hx::IsNotNull( userState )) {
-HXLINE( 270)					 ::snikket::Client _gthis9 = _gthis;
-HXDLIN( 270)					 ::snikket::Chat chat7 = _gthis9->getChat(from->asBare()->asString());
-HXLINE( 271)					bool _hx_tmp8;
-HXDLIN( 271)					if (::hx::IsNotNull( chat7 )) {
-HXLINE( 271)						_hx_tmp8 = !(chat7->getParticipantDetails(message->senderId)->isSelf);
+HXLINE( 270)				if (::hx::IsNotNull( userState )) {
+HXLINE( 271)					 ::snikket::Client _gthis9 = _gthis;
+HXDLIN( 271)					 ::snikket::Chat chat7 = _gthis9->getChat(from->asBare()->asString());
+HXLINE( 272)					bool _hx_tmp8;
+HXDLIN( 272)					if (::hx::IsNotNull( chat7 )) {
+HXLINE( 272)						_hx_tmp8 = !(chat7->getParticipantDetails(message->senderId)->isSelf);
             					}
             					else {
-HXLINE( 271)						_hx_tmp8 = true;
+HXLINE( 272)						_hx_tmp8 = true;
             					}
-HXDLIN( 271)					if (_hx_tmp8) {
-HXLINE( 272)						int _g7 = 0;
-HXDLIN( 272)						::Array< ::Dynamic> _g8 = _gthis->chatStateHandlers;
-HXDLIN( 272)						while((_g7 < _g8->length)){
-HXLINE( 272)							 ::Dynamic handler = _g8->__get(_g7);
-HXDLIN( 272)							_g7 = (_g7 + 1);
-HXLINE( 273)							handler(message->senderId,message->chatId,message->threadId,userState);
+HXDLIN( 272)					if (_hx_tmp8) {
+HXLINE( 273)						int _g7 = 0;
+HXDLIN( 273)						::Array< ::Dynamic> _g8 = _gthis->chatStateHandlers;
+HXDLIN( 273)						while((_g7 < _g8->length)){
+HXLINE( 273)							 ::Dynamic handler = _g8->__get(_g7);
+HXDLIN( 273)							_g7 = (_g7 + 1);
+HXLINE( 274)							handler(message->senderId,message->chatId,message->threadId,userState);
             						}
             					}
             				}
             			}
-HXLINE( 279)			 ::snikket::PubsubEvent pubsubEvent = ::snikket::PubsubEvent_obj::fromStanza(stanza);
-HXLINE( 280)			bool _hx_tmp9;
-HXDLIN( 280)			bool _hx_tmp10;
-HXDLIN( 280)			bool _hx_tmp11;
-HXDLIN( 280)			if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 280)				_hx_tmp11 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 280)			 ::snikket::PubsubEvent pubsubEvent = ::snikket::PubsubEvent_obj::fromStanza(stanza);
+HXLINE( 281)			bool _hx_tmp9;
+HXDLIN( 281)			bool _hx_tmp10;
+HXDLIN( 281)			bool _hx_tmp11;
+HXDLIN( 281)			if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 281)				_hx_tmp11 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             			}
             			else {
-HXLINE( 280)				_hx_tmp11 = false;
+HXLINE( 281)				_hx_tmp11 = false;
             			}
-HXDLIN( 280)			if (_hx_tmp11) {
-HXLINE( 280)				_hx_tmp10 = (pubsubEvent->getNode() == HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
+HXDLIN( 281)			if (_hx_tmp11) {
+HXLINE( 281)				_hx_tmp10 = (pubsubEvent->getNode() == HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
             			}
             			else {
-HXLINE( 280)				_hx_tmp10 = false;
+HXLINE( 281)				_hx_tmp10 = false;
             			}
-HXDLIN( 280)			if (_hx_tmp10) {
-HXLINE( 280)				_hx_tmp9 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 281)			if (_hx_tmp10) {
+HXLINE( 281)				_hx_tmp9 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 280)				_hx_tmp9 = false;
+HXLINE( 281)				_hx_tmp9 = false;
             			}
-HXDLIN( 280)			if (_hx_tmp9) {
-HXLINE( 281)				 ::snikket::Stanza item = pubsubEvent->getItems()->__get(0).StaticCast<  ::snikket::Stanza >();
-HXLINE( 282)				::String avatarSha1Hex = ( (::String)(::Reflect_obj::field(pubsubEvent->getItems()->__get(0).StaticCast<  ::snikket::Stanza >()->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 283)				 ::snikket::Hash tmp1 = ::snikket::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
-HXDLIN( 283)				::Array< unsigned char > avatarSha1;
-HXDLIN( 283)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 283)					avatarSha1 = tmp1->hash;
+HXDLIN( 281)			if (_hx_tmp9) {
+HXLINE( 282)				 ::snikket::Stanza item = pubsubEvent->getItems()->__get(0).StaticCast<  ::snikket::Stanza >();
+HXLINE( 283)				::String avatarSha1Hex = ( (::String)(::Reflect_obj::field(pubsubEvent->getItems()->__get(0).StaticCast<  ::snikket::Stanza >()->attr,HX_("id",db,5b,00,00))) );
+HXLINE( 284)				 ::snikket::Hash tmp1 = ::snikket::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXDLIN( 284)				::Array< unsigned char > avatarSha1;
+HXDLIN( 284)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 284)					avatarSha1 = tmp1->hash;
             				}
             				else {
-HXLINE( 283)					avatarSha1 = null();
-            				}
-HXLINE( 284)				 ::snikket::Stanza metadata = item->getChild(HX_("metadata",6f,e7,19,40),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
-HXLINE( 285)				::Array< ::String > mime = ::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_24,1);
-HXLINE( 286)				if (::hx::IsNotNull( metadata )) {
-HXLINE( 287)					 ::snikket::Stanza info = metadata->getChild(HX_("info",6e,38,bb,45),null());
-HXLINE( 288)					bool _hx_tmp12;
-HXDLIN( 288)					if (::hx::IsNotNull( info )) {
-HXLINE( 288)						_hx_tmp12 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) ) );
+HXLINE( 284)					avatarSha1 = null();
+            				}
+HXLINE( 285)				 ::snikket::Stanza metadata = item->getChild(HX_("metadata",6f,e7,19,40),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
+HXLINE( 286)				::Array< ::String > mime = ::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_24,1);
+HXLINE( 287)				if (::hx::IsNotNull( metadata )) {
+HXLINE( 288)					 ::snikket::Stanza info = metadata->getChild(HX_("info",6e,38,bb,45),null());
+HXLINE( 289)					bool _hx_tmp12;
+HXDLIN( 289)					if (::hx::IsNotNull( info )) {
+HXLINE( 289)						_hx_tmp12 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) ) );
             					}
             					else {
-HXLINE( 288)						_hx_tmp12 = false;
+HXLINE( 289)						_hx_tmp12 = false;
             					}
-HXDLIN( 288)					if (_hx_tmp12) {
-HXLINE( 289)						mime[0] = ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 289)					if (_hx_tmp12) {
+HXLINE( 290)						mime[0] = ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) );
             					}
             				}
-HXLINE( 292)				if (::hx::IsNotNull( avatarSha1 )) {
+HXLINE( 293)				if (::hx::IsNotNull( avatarSha1 )) {
             					HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_15, ::snikket::DirectChat,chat8, ::snikket::Client,_gthis,::Array< ::String >,mime,::String,avatarSha1Hex, ::snikket::PubsubEvent,pubsubEvent,::Dynamic,persistence) HXARGC(1)
             					void _hx_run(bool has){
-            						HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_297_new)
-HXLINE( 297)						if (has) {
-HXLINE( 298)							_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
+            						HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_298_new)
+HXLINE( 298)						if (has) {
+HXLINE( 299)							_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_14, ::snikket::Client,_gthis, ::snikket::DirectChat,chat8,::Array< ::String >,mime,::Dynamic,persistence, ::snikket::queries::PubsubGet,pubsubGet1) HXARGC(0)
             							void _hx_run(){
             								HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_13, ::snikket::DirectChat,chat8, ::snikket::Client,_gthis) HXARGC(0)
             								void _hx_run(){
-            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_310_new)
-HXLINE( 310)									_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
+            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_308_new)
+HXLINE( 308)									_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
             								}
             								HX_END_LOCAL_FUNC0((void))
 
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_301_new)
-HXLINE( 302)								::haxe::Log_obj::trace(HX_("got avatar",6d,d0,89,ec),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),302,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_302_new)
 HXLINE( 303)								 ::snikket::Stanza item = pubsubGet1->getResult()->__get(0).StaticCast<  ::snikket::Stanza >();
 HXLINE( 304)								if (::hx::IsNull( item )) {
 HXLINE( 304)									return;
             								}
-HXLINE( 305)								::haxe::Log_obj::trace(HX_("got avatar item",a6,d9,5c,85),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),305,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
-HXLINE( 306)								 ::snikket::Stanza dataNode = item->getChild(HX_("data",2a,56,63,42),HX_("urn:xmpp:avatar:data",0f,7e,01,4e));
-HXLINE( 307)								if (::hx::IsNull( dataNode )) {
-HXLINE( 307)									return;
+HXLINE( 305)								 ::snikket::Stanza dataNode = item->getChild(HX_("data",2a,56,63,42),HX_("urn:xmpp:avatar:data",0f,7e,01,4e));
+HXLINE( 306)								if (::hx::IsNull( dataNode )) {
+HXLINE( 306)									return;
             								}
-HXLINE( 308)								::haxe::Log_obj::trace(HX_("got avatar data, store media",94,6c,6a,1f),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),308,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
-HXLINE( 309)								::Dynamic persistence1 = persistence;
-HXDLIN( 309)								::String mime1 = mime->__get(0);
-HXDLIN( 309)								::snikket::Persistence_obj::storeMedia(persistence1,mime1,::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(dataNode->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null())->b, ::Dynamic(new _hx_Closure_13(chat8,_gthis)));
-HXLINE( 312)								::haxe::Log_obj::trace(HX_("got avatar data, store media was called",a0,ce,e4,70),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),312,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
+HXLINE( 307)								::Dynamic persistence1 = persistence;
+HXDLIN( 307)								::String mime1 = mime->__get(0);
+HXDLIN( 307)								::snikket::Persistence_obj::storeMedia(persistence1,mime1,::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(dataNode->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null())->b, ::Dynamic(new _hx_Closure_13(chat8,_gthis)));
             							}
             							HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 300)							::String pubsubGet = pubsubEvent->getFrom();
-HXDLIN( 300)							 ::snikket::queries::PubsubGet pubsubGet1 =  ::snikket::queries::PubsubGet_obj::__alloc( HX_CTX ,pubsubGet,HX_("urn:xmpp:avatar:data",0f,7e,01,4e),avatarSha1Hex);
-HXLINE( 301)							pubsubGet1->onFinished( ::Dynamic(new _hx_Closure_14(_gthis,chat8,mime,persistence,pubsubGet1)));
-HXLINE( 314)							_gthis->sendQuery(pubsubGet1);
+HXLINE( 301)							::String pubsubGet = pubsubEvent->getFrom();
+HXDLIN( 301)							 ::snikket::queries::PubsubGet pubsubGet1 =  ::snikket::queries::PubsubGet_obj::__alloc( HX_CTX ,pubsubGet,HX_("urn:xmpp:avatar:data",0f,7e,01,4e),avatarSha1Hex);
+HXLINE( 302)							pubsubGet1->onFinished( ::Dynamic(new _hx_Closure_14(_gthis,chat8,mime,persistence,pubsubGet1)));
+HXLINE( 311)							_gthis->sendQuery(pubsubGet1);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 293)					 ::snikket::Client _gthis10 = _gthis;
-HXDLIN( 293)					 ::snikket::DirectChat chat8 = _gthis10->getDirectChat(::snikket::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString(),false);
-HXLINE( 294)					chat8->setAvatarSha1(avatarSha1);
-HXLINE( 295)					::Dynamic persistence2 = persistence;
-HXDLIN( 295)					::String _hx_tmp13 = _gthis->accountId();
-HXDLIN( 295)					::snikket::Persistence_obj::storeChats(persistence2,_hx_tmp13,::Array_obj< ::Dynamic>::__new(1)->init(0,chat8));
-HXLINE( 296)					::snikket::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1, ::Dynamic(new _hx_Closure_15(chat8,_gthis,mime,avatarSha1Hex,pubsubEvent,persistence)));
+HXLINE( 294)					 ::snikket::Client _gthis10 = _gthis;
+HXDLIN( 294)					 ::snikket::DirectChat chat8 = _gthis10->getDirectChat(::snikket::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString(),false);
+HXLINE( 295)					chat8->setAvatarSha1(avatarSha1);
+HXLINE( 296)					::Dynamic persistence2 = persistence;
+HXDLIN( 296)					::String _hx_tmp13 = _gthis->accountId();
+HXDLIN( 296)					::snikket::Persistence_obj::storeChats(persistence2,_hx_tmp13,::Array_obj< ::Dynamic>::__new(1)->init(0,chat8));
+HXLINE( 297)					::snikket::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1, ::Dynamic(new _hx_Closure_15(chat8,_gthis,mime,avatarSha1Hex,pubsubEvent,persistence)));
             				}
             			}
-HXLINE( 320)			bool _hx_tmp14;
-HXDLIN( 320)			bool _hx_tmp15;
-HXDLIN( 320)			bool _hx_tmp16;
-HXDLIN( 320)			bool _hx_tmp17;
-HXDLIN( 320)			if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 320)				_hx_tmp17 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 317)			bool _hx_tmp14;
+HXDLIN( 317)			bool _hx_tmp15;
+HXDLIN( 317)			bool _hx_tmp16;
+HXDLIN( 317)			bool _hx_tmp17;
+HXDLIN( 317)			if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 317)				_hx_tmp17 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             			}
             			else {
-HXLINE( 320)				_hx_tmp17 = false;
+HXLINE( 317)				_hx_tmp17 = false;
             			}
-HXDLIN( 320)			if (_hx_tmp17) {
-HXLINE( 320)				::String _hx_tmp18 = ::snikket::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString();
-HXDLIN( 320)				_hx_tmp16 = (_hx_tmp18 == _gthis->accountId());
+HXDLIN( 317)			if (_hx_tmp17) {
+HXLINE( 317)				::String _hx_tmp18 = ::snikket::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString();
+HXDLIN( 317)				_hx_tmp16 = (_hx_tmp18 == _gthis->accountId());
             			}
             			else {
-HXLINE( 320)				_hx_tmp16 = false;
+HXLINE( 317)				_hx_tmp16 = false;
             			}
-HXDLIN( 320)			if (_hx_tmp16) {
-HXLINE( 320)				_hx_tmp15 = (pubsubEvent->getNode() == HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
+HXDLIN( 317)			if (_hx_tmp16) {
+HXLINE( 317)				_hx_tmp15 = (pubsubEvent->getNode() == HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
             			}
             			else {
-HXLINE( 320)				_hx_tmp15 = false;
+HXLINE( 317)				_hx_tmp15 = false;
             			}
-HXDLIN( 320)			if (_hx_tmp15) {
-HXLINE( 320)				_hx_tmp14 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 317)			if (_hx_tmp15) {
+HXLINE( 317)				_hx_tmp14 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 320)				_hx_tmp14 = false;
+HXLINE( 317)				_hx_tmp14 = false;
             			}
-HXDLIN( 320)			if (_hx_tmp14) {
-HXLINE( 321)				 ::snikket::Client _gthis11 = _gthis;
-HXDLIN( 321)				_gthis11->updateDisplayName(pubsubEvent->getItems()->__get(0).StaticCast<  ::snikket::Stanza >()->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)));
+HXDLIN( 317)			if (_hx_tmp14) {
+HXLINE( 318)				 ::snikket::Client _gthis11 = _gthis;
+HXDLIN( 318)				_gthis11->updateDisplayName(pubsubEvent->getItems()->__get(0).StaticCast<  ::snikket::Stanza >()->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)));
             			}
-HXLINE( 324)			bool _hx_tmp19;
-HXDLIN( 324)			bool _hx_tmp20;
-HXDLIN( 324)			bool _hx_tmp21;
-HXDLIN( 324)			bool _hx_tmp22;
-HXDLIN( 324)			if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 324)				_hx_tmp22 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 321)			bool _hx_tmp19;
+HXDLIN( 321)			bool _hx_tmp20;
+HXDLIN( 321)			bool _hx_tmp21;
+HXDLIN( 321)			bool _hx_tmp22;
+HXDLIN( 321)			if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 321)				_hx_tmp22 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             			}
             			else {
-HXLINE( 324)				_hx_tmp22 = false;
+HXLINE( 321)				_hx_tmp22 = false;
             			}
-HXDLIN( 324)			if (_hx_tmp22) {
-HXLINE( 324)				::String _hx_tmp23 = ::snikket::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString();
-HXDLIN( 324)				_hx_tmp21 = (_hx_tmp23 == _gthis->accountId());
+HXDLIN( 321)			if (_hx_tmp22) {
+HXLINE( 321)				::String _hx_tmp23 = ::snikket::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString();
+HXDLIN( 321)				_hx_tmp21 = (_hx_tmp23 == _gthis->accountId());
             			}
             			else {
-HXLINE( 324)				_hx_tmp21 = false;
+HXLINE( 321)				_hx_tmp21 = false;
             			}
-HXDLIN( 324)			if (_hx_tmp21) {
-HXLINE( 324)				_hx_tmp20 = (pubsubEvent->getNode() == HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN( 321)			if (_hx_tmp21) {
+HXLINE( 321)				_hx_tmp20 = (pubsubEvent->getNode() == HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
             			}
             			else {
-HXLINE( 324)				_hx_tmp20 = false;
+HXLINE( 321)				_hx_tmp20 = false;
             			}
-HXDLIN( 324)			if (_hx_tmp20) {
-HXLINE( 324)				_hx_tmp19 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 321)			if (_hx_tmp20) {
+HXLINE( 321)				_hx_tmp19 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 324)				_hx_tmp19 = false;
-            			}
-HXDLIN( 324)			if (_hx_tmp19) {
-HXLINE( 325)				int _g9 = 0;
-HXDLIN( 325)				::Array< ::Dynamic> _g10 = pubsubEvent->getItems();
-HXDLIN( 325)				while((_g9 < _g10->length)){
-HXLINE( 325)					 ::snikket::Stanza item1 = _g10->__get(_g9).StaticCast<  ::snikket::Stanza >();
-HXDLIN( 325)					_g9 = (_g9 + 1);
-HXLINE( 326)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE( 327)						 ::snikket::Stanza tmp2 = item1->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
-HXDLIN( 327)						 ::snikket::Stanza upTo;
-HXDLIN( 327)						if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 327)							upTo = tmp2->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 321)				_hx_tmp19 = false;
+            			}
+HXDLIN( 321)			if (_hx_tmp19) {
+HXLINE( 322)				int _g9 = 0;
+HXDLIN( 322)				::Array< ::Dynamic> _g10 = pubsubEvent->getItems();
+HXDLIN( 322)				while((_g9 < _g10->length)){
+HXLINE( 322)					 ::snikket::Stanza item1 = _g10->__get(_g9).StaticCast<  ::snikket::Stanza >();
+HXDLIN( 322)					_g9 = (_g9 + 1);
+HXLINE( 323)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE( 324)						 ::snikket::Stanza tmp2 = item1->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN( 324)						 ::snikket::Stanza upTo;
+HXDLIN( 324)						if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 324)							upTo = tmp2->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
             						}
             						else {
-HXLINE( 327)							upTo = null();
+HXLINE( 324)							upTo = null();
             						}
-HXLINE( 328)						 ::snikket::Client _gthis12 = _gthis;
-HXDLIN( 328)						 ::snikket::Chat chat9 = _gthis12->getChat(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 329)						if (::hx::IsNull( chat9 )) {
+HXLINE( 325)						 ::snikket::Client _gthis12 = _gthis;
+HXDLIN( 325)						 ::snikket::Chat chat9 = _gthis12->getChat(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 326)						if (::hx::IsNull( chat9 )) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_16) HXARGC(1)
             							int _hx_run( ::snikket::Caps caps){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_330_new)
-HXLINE( 330)								return 2;
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_327_new)
+HXLINE( 327)								return 2;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_17, ::snikket::Stanza,upTo) HXARGC(1)
             							void _hx_run( ::snikket::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_330_new)
-HXLINE( 330)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 330)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_327_new)
+HXLINE( 327)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN( 327)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 330)							 ::snikket::Client _gthis13 = _gthis;
-HXDLIN( 330)							_gthis13->startChatWith(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_16()), ::Dynamic(new _hx_Closure_17(upTo)));
+HXLINE( 327)							 ::snikket::Client _gthis13 = _gthis;
+HXDLIN( 327)							_gthis13->startChatWith(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_16()), ::Dynamic(new _hx_Closure_17(upTo)));
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_18, ::snikket::Client,_gthis,::Dynamic,persistence, ::snikket::Chat,chat9) HXARGC(0)
             							void _hx_run(){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_332_new)
-HXLINE( 333)								::Dynamic persistence1 = persistence;
-HXDLIN( 333)								::String _hx_tmp = _gthis->accountId();
-HXDLIN( 333)								::snikket::Persistence_obj::storeChats(persistence1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,chat9));
-HXLINE( 334)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat9));
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_329_new)
+HXLINE( 330)								::Dynamic persistence1 = persistence;
+HXDLIN( 330)								::String _hx_tmp = _gthis->accountId();
+HXDLIN( 330)								::snikket::Persistence_obj::storeChats(persistence1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,chat9));
+HXLINE( 331)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat9));
             							}
             							HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 332)							 ::snikket::Chat chat10 = chat9;
-HXDLIN( 332)							::String _hx_tmp24 = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 332)							chat10->markReadUpToId(_hx_tmp24,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ), ::Dynamic(new _hx_Closure_18(_gthis,persistence,chat9)));
+HXLINE( 329)							 ::snikket::Chat chat10 = chat9;
+HXDLIN( 329)							::String _hx_tmp24 = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN( 329)							chat10->markReadUpToId(_hx_tmp24,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ), ::Dynamic(new _hx_Closure_18(_gthis,persistence,chat9)));
             						}
             					}
             				}
             			}
-HXLINE( 341)			return ::snikket::EventResult_obj::EventUnhandled_dyn();
+HXLINE( 338)			return ::snikket::EventResult_obj::EventUnhandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_20, ::snikket::Client,_gthis) HXARGC(1)
             		 ::snikket::IqResult _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_344_new)
-HXLINE( 345)			 ::snikket::JID from;
-HXDLIN( 345)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 345)				from = null();
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_341_new)
+HXLINE( 342)			 ::snikket::JID from;
+HXDLIN( 342)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 342)				from = null();
             			}
             			else {
-HXLINE( 345)				from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-            			}
-HXLINE( 346)			 ::snikket::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
-HXLINE( 347)			 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 347)			 ::snikket::DirectChat chat = _gthis1->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 348)			::Dynamic this1 = chat->jingleSessions;
-HXDLIN( 348)			::Dynamic session = ( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
-HXLINE( 350)			if ((( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-initiate",70,2d,30,f7))) {
-HXLINE( 351)				if (::hx::IsNotNull( session )) {
-HXLINE( 352)					try {
+HXLINE( 342)				from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+            			}
+HXLINE( 343)			 ::snikket::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
+HXLINE( 344)			 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 344)			 ::snikket::DirectChat chat = _gthis1->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 345)			::Dynamic this1 = chat->jingleSessions;
+HXDLIN( 345)			::Dynamic session = ( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
+HXLINE( 347)			if ((( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-initiate",70,2d,30,f7))) {
+HXLINE( 348)				if (::hx::IsNotNull( session )) {
+HXLINE( 349)					try {
             						HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 353)						::Dynamic this2 = chat->jingleSessions;
-HXDLIN( 353)						::String key = ::snikket::jingle::Session_obj::get_sid(session);
-HXDLIN( 353)						( ( ::haxe::ds::StringMap)(this2) )->set(key,::snikket::jingle::Session_obj::initiate(session,stanza));
+HXLINE( 350)						::Dynamic this2 = chat->jingleSessions;
+HXDLIN( 350)						::String key = ::snikket::jingle::Session_obj::get_sid(session);
+HXDLIN( 350)						( ( ::haxe::ds::StringMap)(this2) )->set(key,::snikket::jingle::Session_obj::initiate(session,stanza));
             					} catch( ::Dynamic _hx_e) {
             						if (_hx_e.IsClass<  ::Dynamic >() ){
             							HX_STACK_BEGIN_CATCH
             							 ::Dynamic _g = _hx_e;
-HXLINE( 354)							 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g);
-HXDLIN( 354)							{
-HXLINE( 355)								::haxe::Log_obj::trace(HX_("Bad session-inititate",c5,d7,64,3f), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 351)							 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g);
+HXDLIN( 351)							{
+HXLINE( 352)								::haxe::Log_obj::trace(HX_("Bad session-inititate",c5,d7,64,3f), ::Dynamic(::hx::Anon_obj::Create(5)
             									->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             									->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
             									->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             									->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            									->setFixed(4,HX_("lineNumber",dd,81,22,76),355)));
-HXLINE( 356)								{
-HXLINE( 356)									::Dynamic this3 = chat->jingleSessions;
-HXDLIN( 356)									( ( ::haxe::ds::StringMap)(this3) )->remove(::snikket::jingle::Session_obj::get_sid(session));
+            									->setFixed(4,HX_("lineNumber",dd,81,22,76),352)));
+HXLINE( 353)								{
+HXLINE( 353)									::Dynamic this3 = chat->jingleSessions;
+HXDLIN( 353)									( ( ::haxe::ds::StringMap)(this3) )->remove(::snikket::jingle::Session_obj::get_sid(session));
             								}
             							}
             						}
@@ -1247,378 +1255,378 @@ HXDLIN( 356)									( ( ::haxe::ds::StringMap)(this3) )->remove(::snikket::jing
             					}
             				}
             				else {
-HXLINE( 359)					 ::snikket::jingle::InitiatedSession newSession = ::snikket::jingle::InitiatedSession_obj::fromSessionInitiate(_gthis,stanza);
-HXLINE( 360)					{
-HXLINE( 360)						::Dynamic this4 = chat->jingleSessions;
-HXDLIN( 360)						( ( ::haxe::ds::StringMap)(this4) )->set(newSession->get_sid(),newSession);
+HXLINE( 356)					 ::snikket::jingle::InitiatedSession newSession = ::snikket::jingle::InitiatedSession_obj::fromSessionInitiate(_gthis,stanza);
+HXLINE( 357)					{
+HXLINE( 357)						::Dynamic this4 = chat->jingleSessions;
+HXDLIN( 357)						( ( ::haxe::ds::StringMap)(this4) )->set(newSession->get_sid(),newSession);
             					}
-HXLINE( 361)					_gthis->chatActivity(chat,null());
-HXLINE( 362)					newSession->ring();
+HXLINE( 358)					_gthis->chatActivity(chat,null());
+HXLINE( 359)					newSession->ring();
             				}
             			}
-HXLINE( 366)			bool _hx_tmp;
-HXDLIN( 366)			if (::hx::IsNotNull( session )) {
-HXLINE( 366)				_hx_tmp = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-accept",5f,92,e7,a8));
+HXLINE( 363)			bool _hx_tmp;
+HXDLIN( 363)			if (::hx::IsNotNull( session )) {
+HXLINE( 363)				_hx_tmp = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-accept",5f,92,e7,a8));
             			}
             			else {
-HXLINE( 366)				_hx_tmp = false;
+HXLINE( 363)				_hx_tmp = false;
             			}
-HXDLIN( 366)			if (_hx_tmp) {
-HXLINE( 367)				try {
+HXDLIN( 363)			if (_hx_tmp) {
+HXLINE( 364)				try {
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 368)					::Dynamic this5 = chat->jingleSessions;
-HXDLIN( 368)					::String key1 = ::snikket::jingle::Session_obj::get_sid(session);
-HXDLIN( 368)					( ( ::haxe::ds::StringMap)(this5) )->set(key1,::snikket::jingle::Session_obj::initiate(session,stanza));
+HXLINE( 365)					::Dynamic this5 = chat->jingleSessions;
+HXDLIN( 365)					::String key1 = ::snikket::jingle::Session_obj::get_sid(session);
+HXDLIN( 365)					( ( ::haxe::ds::StringMap)(this5) )->set(key1,::snikket::jingle::Session_obj::initiate(session,stanza));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
             						 ::Dynamic _g1 = _hx_e;
-HXLINE( 369)						 ::haxe::Exception e1 = ::haxe::Exception_obj::caught(_g1);
-HXLINE( 370)						::haxe::Log_obj::trace(HX_("session-accept failed",5e,a5,74,6b), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 366)						 ::haxe::Exception e1 = ::haxe::Exception_obj::caught(_g1);
+HXLINE( 367)						::haxe::Log_obj::trace(HX_("session-accept failed",5e,a5,74,6b), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e1))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),370)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),367)));
             					}
             					else {
             						HX_STACK_DO_THROW(_hx_e);
             					}
             				}
             			}
-HXLINE( 374)			bool _hx_tmp1;
-HXDLIN( 374)			if (::hx::IsNotNull( session )) {
-HXLINE( 374)				_hx_tmp1 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-terminate",6a,23,dc,12));
+HXLINE( 371)			bool _hx_tmp1;
+HXDLIN( 371)			if (::hx::IsNotNull( session )) {
+HXLINE( 371)				_hx_tmp1 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-terminate",6a,23,dc,12));
             			}
             			else {
-HXLINE( 374)				_hx_tmp1 = false;
+HXLINE( 371)				_hx_tmp1 = false;
             			}
-HXDLIN( 374)			if (_hx_tmp1) {
-HXLINE( 375)				::snikket::jingle::Session_obj::terminate(session);
-HXLINE( 376)				{
-HXLINE( 376)					::Dynamic this6 = chat->jingleSessions;
-HXDLIN( 376)					( ( ::haxe::ds::StringMap)(this6) )->remove(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
+HXDLIN( 371)			if (_hx_tmp1) {
+HXLINE( 372)				::snikket::jingle::Session_obj::terminate(session);
+HXLINE( 373)				{
+HXLINE( 373)					::Dynamic this6 = chat->jingleSessions;
+HXDLIN( 373)					( ( ::haxe::ds::StringMap)(this6) )->remove(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
             				}
             			}
-HXLINE( 379)			bool _hx_tmp2;
-HXDLIN( 379)			if (::hx::IsNotNull( session )) {
-HXLINE( 379)				_hx_tmp2 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-add",cd,a9,a1,10));
+HXLINE( 376)			bool _hx_tmp2;
+HXDLIN( 376)			if (::hx::IsNotNull( session )) {
+HXLINE( 376)				_hx_tmp2 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-add",cd,a9,a1,10));
             			}
             			else {
-HXLINE( 379)				_hx_tmp2 = false;
+HXLINE( 376)				_hx_tmp2 = false;
             			}
-HXDLIN( 379)			if (_hx_tmp2) {
-HXLINE( 380)				::snikket::jingle::Session_obj::contentAdd(session,stanza);
+HXDLIN( 376)			if (_hx_tmp2) {
+HXLINE( 377)				::snikket::jingle::Session_obj::contentAdd(session,stanza);
             			}
-HXLINE( 383)			bool _hx_tmp3;
-HXDLIN( 383)			if (::hx::IsNotNull( session )) {
-HXLINE( 383)				_hx_tmp3 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-accept",dc,ee,cb,f2));
+HXLINE( 380)			bool _hx_tmp3;
+HXDLIN( 380)			if (::hx::IsNotNull( session )) {
+HXLINE( 380)				_hx_tmp3 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-accept",dc,ee,cb,f2));
             			}
             			else {
-HXLINE( 383)				_hx_tmp3 = false;
+HXLINE( 380)				_hx_tmp3 = false;
             			}
-HXDLIN( 383)			if (_hx_tmp3) {
-HXLINE( 384)				::snikket::jingle::Session_obj::contentAccept(session,stanza);
+HXDLIN( 380)			if (_hx_tmp3) {
+HXLINE( 381)				::snikket::jingle::Session_obj::contentAccept(session,stanza);
             			}
-HXLINE( 387)			bool _hx_tmp4;
-HXDLIN( 387)			if (::hx::IsNotNull( session )) {
-HXLINE( 387)				_hx_tmp4 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("transport-info",d2,9e,05,1c));
+HXLINE( 384)			bool _hx_tmp4;
+HXDLIN( 384)			if (::hx::IsNotNull( session )) {
+HXLINE( 384)				_hx_tmp4 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("transport-info",d2,9e,05,1c));
             			}
             			else {
-HXLINE( 387)				_hx_tmp4 = false;
+HXLINE( 384)				_hx_tmp4 = false;
             			}
-HXDLIN( 387)			if (_hx_tmp4) {
-HXLINE( 388)				::snikket::jingle::Session_obj::transportInfo(session,stanza);
+HXDLIN( 384)			if (_hx_tmp4) {
+HXLINE( 385)				::snikket::jingle::Session_obj::transportInfo(session,stanza);
             			}
-HXLINE( 392)			return ::snikket::IqResult_obj::IqResult_dyn();
+HXLINE( 389)			return ::snikket::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_21, ::snikket::Client,_gthis) HXARGC(1)
             		 ::snikket::IqResult _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_396_new)
-HXLINE( 396)			return ::snikket::IqResult_obj::IqResultElement(_gthis->caps->discoReply());
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_393_new)
+HXLINE( 393)			return ::snikket::IqResult_obj::IqResultElement(_gthis->caps->discoReply());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_22, ::snikket::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::snikket::IqResult _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_399_new)
-HXLINE( 401)			bool _hx_tmp;
-HXDLIN( 401)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 402)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 401)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_396_new)
+HXLINE( 398)			bool _hx_tmp;
+HXDLIN( 398)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 399)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE( 398)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 401)				_hx_tmp = false;
-            			}
-HXLINE( 400)			if (_hx_tmp) {
-HXLINE( 404)				return ::snikket::IqResult_obj::IqNoResult_dyn();
-            			}
-HXLINE( 407)			 ::snikket::queries::RosterGet roster =  ::snikket::queries::RosterGet_obj::__alloc( HX_CTX ,null());
-HXLINE( 408)			roster->handleResponse(stanza);
-HXLINE( 409)			::Array< ::Dynamic> items = roster->getResult();
-HXLINE( 410)			if ((items->length == 0)) {
-HXLINE( 410)				return ::snikket::IqResult_obj::IqNoResult_dyn();
-            			}
-HXLINE( 412)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 413)			{
-HXLINE( 413)				int _g = 0;
-HXDLIN( 413)				while((_g < items->length)){
-HXLINE( 413)					 ::Dynamic item = items->__get(_g);
-HXDLIN( 413)					_g = (_g + 1);
-HXLINE( 414)					if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("remove",44,9c,88,04) )) {
-HXLINE( 415)						 ::snikket::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
-HXLINE( 416)						chat->updateFromRoster(item);
-HXLINE( 417)						chatsToUpdate->push(chat);
+HXLINE( 398)				_hx_tmp = false;
+            			}
+HXLINE( 397)			if (_hx_tmp) {
+HXLINE( 401)				return ::snikket::IqResult_obj::IqNoResult_dyn();
+            			}
+HXLINE( 404)			 ::snikket::queries::RosterGet roster =  ::snikket::queries::RosterGet_obj::__alloc( HX_CTX ,null());
+HXLINE( 405)			roster->handleResponse(stanza);
+HXLINE( 406)			::Array< ::Dynamic> items = roster->getResult();
+HXLINE( 407)			if ((items->length == 0)) {
+HXLINE( 407)				return ::snikket::IqResult_obj::IqNoResult_dyn();
+            			}
+HXLINE( 409)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 410)			{
+HXLINE( 410)				int _g = 0;
+HXDLIN( 410)				while((_g < items->length)){
+HXLINE( 410)					 ::Dynamic item = items->__get(_g);
+HXDLIN( 410)					_g = (_g + 1);
+HXLINE( 411)					if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("remove",44,9c,88,04) )) {
+HXLINE( 412)						 ::snikket::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
+HXLINE( 413)						chat->updateFromRoster(item);
+HXLINE( 414)						chatsToUpdate->push(chat);
             					}
             				}
             			}
-HXLINE( 420)			::Dynamic persistence1 = persistence;
-HXDLIN( 420)			::snikket::Persistence_obj::storeChats(persistence1,_gthis->accountId(),chatsToUpdate);
-HXLINE( 421)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
-HXLINE( 423)			return ::snikket::IqResult_obj::IqResult_dyn();
+HXLINE( 417)			::Dynamic persistence1 = persistence;
+HXDLIN( 417)			::snikket::Persistence_obj::storeChats(persistence1,_gthis->accountId(),chatsToUpdate);
+HXLINE( 418)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
+HXLINE( 420)			return ::snikket::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_23, ::snikket::Client,_gthis) HXARGC(1)
             		 ::snikket::IqResult _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_426_new)
-HXLINE( 428)			bool _hx_tmp;
-HXDLIN( 428)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 429)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 428)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_423_new)
+HXLINE( 425)			bool _hx_tmp;
+HXDLIN( 425)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 426)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE( 425)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 428)				_hx_tmp = false;
+HXLINE( 425)				_hx_tmp = false;
             			}
-HXLINE( 427)			if (_hx_tmp) {
-HXLINE( 431)				return ::snikket::IqResult_obj::IqNoResult_dyn();
+HXLINE( 424)			if (_hx_tmp) {
+HXLINE( 428)				return ::snikket::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 434)			{
-HXLINE( 434)				int _g = 0;
-HXDLIN( 434)				::Array< ::Dynamic> _g1;
-HXDLIN( 434)				 ::snikket::Stanza tmp = stanza->getChild(HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3));
-HXDLIN( 434)				::Array< ::Dynamic> tmp1;
-HXDLIN( 434)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 434)					tmp1 = tmp->allTags(HX_("item",13,c5,bf,45),null());
+HXLINE( 431)			{
+HXLINE( 431)				int _g = 0;
+HXDLIN( 431)				::Array< ::Dynamic> _g1;
+HXDLIN( 431)				 ::snikket::Stanza tmp = stanza->getChild(HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3));
+HXDLIN( 431)				::Array< ::Dynamic> tmp1;
+HXDLIN( 431)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 431)					tmp1 = tmp->allTags(HX_("item",13,c5,bf,45),null());
             				}
             				else {
-HXLINE( 434)					tmp1 = null();
+HXLINE( 431)					tmp1 = null();
             				}
-HXDLIN( 434)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 434)					_g1 = tmp1;
+HXDLIN( 431)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 431)					_g1 = tmp1;
             				}
             				else {
-HXLINE( 434)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
-            				}
-HXDLIN( 434)				while((_g < _g1->length)){
-HXLINE( 434)					 ::snikket::Stanza item = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
-HXDLIN( 434)					_g = (_g + 1);
-HXLINE( 435)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
-HXLINE( 435)						 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 435)						_gthis1->serverBlocked(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
+HXLINE( 431)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
+            				}
+HXDLIN( 431)				while((_g < _g1->length)){
+HXLINE( 431)					 ::snikket::Stanza item = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
+HXDLIN( 431)					_g = (_g + 1);
+HXLINE( 432)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
+HXLINE( 432)						 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 432)						_gthis1->serverBlocked(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
             					}
             				}
             			}
-HXLINE( 438)			return ::snikket::IqResult_obj::IqResult_dyn();
+HXLINE( 435)			return ::snikket::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_24, ::snikket::Client,_gthis) HXARGC(1)
             		 ::snikket::IqResult _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_441_new)
-HXLINE( 443)			bool _hx_tmp;
-HXDLIN( 443)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 444)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 443)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_438_new)
+HXLINE( 440)			bool _hx_tmp;
+HXDLIN( 440)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 441)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE( 440)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 443)				_hx_tmp = false;
+HXLINE( 440)				_hx_tmp = false;
             			}
-HXLINE( 442)			if (_hx_tmp) {
-HXLINE( 446)				return ::snikket::IqResult_obj::IqNoResult_dyn();
+HXLINE( 439)			if (_hx_tmp) {
+HXLINE( 443)				return ::snikket::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 449)			 ::snikket::Stanza tmp = stanza->getChild(HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3));
-HXDLIN( 449)			::Array< ::Dynamic> unblocks;
-HXDLIN( 449)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 449)				unblocks = tmp->allTags(HX_("item",13,c5,bf,45),null());
+HXLINE( 446)			 ::snikket::Stanza tmp = stanza->getChild(HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3));
+HXDLIN( 446)			::Array< ::Dynamic> unblocks;
+HXDLIN( 446)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 446)				unblocks = tmp->allTags(HX_("item",13,c5,bf,45),null());
             			}
             			else {
-HXLINE( 449)				unblocks = null();
-            			}
-HXLINE( 450)			if (::hx::IsNull( unblocks )) {
-HXLINE( 452)				int _g = 0;
-HXDLIN( 452)				::Array< ::Dynamic> _g1 = _gthis->chats;
-HXDLIN( 452)				while((_g < _g1->length)){
-HXLINE( 452)					 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN( 452)					_g = (_g + 1);
-HXLINE( 453)					if (chat->isBlocked) {
-HXLINE( 453)						chat->unblock(false);
+HXLINE( 446)				unblocks = null();
+            			}
+HXLINE( 447)			if (::hx::IsNull( unblocks )) {
+HXLINE( 449)				int _g = 0;
+HXDLIN( 449)				::Array< ::Dynamic> _g1 = _gthis->chats;
+HXDLIN( 449)				while((_g < _g1->length)){
+HXLINE( 449)					 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN( 449)					_g = (_g + 1);
+HXLINE( 450)					if (chat->isBlocked) {
+HXLINE( 450)						chat->unblock(false);
             					}
             				}
             			}
             			else {
-HXLINE( 456)				int _g2 = 0;
-HXDLIN( 456)				while((_g2 < unblocks->length)){
-HXLINE( 456)					 ::snikket::Stanza item = unblocks->__get(_g2).StaticCast<  ::snikket::Stanza >();
-HXDLIN( 456)					_g2 = (_g2 + 1);
-HXLINE( 457)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
-HXLINE( 457)						 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 457)						 ::snikket::Chat tmp1 = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
-HXDLIN( 457)						if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 457)							tmp1->unblock(false);
+HXLINE( 453)				int _g2 = 0;
+HXDLIN( 453)				while((_g2 < unblocks->length)){
+HXLINE( 453)					 ::snikket::Stanza item = unblocks->__get(_g2).StaticCast<  ::snikket::Stanza >();
+HXDLIN( 453)					_g2 = (_g2 + 1);
+HXLINE( 454)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
+HXLINE( 454)						 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 454)						 ::snikket::Chat tmp1 = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
+HXDLIN( 454)						if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 454)							tmp1->unblock(false);
             						}
             					}
             				}
             			}
-HXLINE( 461)			return ::snikket::IqResult_obj::IqResult_dyn();
+HXLINE( 458)			return ::snikket::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_32, ::snikket::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic event){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_464_new)
-HXLINE( 465)			 ::snikket::Stanza stanza = ( ( ::snikket::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE( 466)			 ::snikket::Stanza c = stanza->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXLINE( 467)			 ::snikket::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE( 468)			bool _hx_tmp;
-HXDLIN( 468)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 468)				_hx_tmp = ::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) );
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_461_new)
+HXLINE( 462)			 ::snikket::Stanza stanza = ( ( ::snikket::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE( 463)			 ::snikket::Stanza c = stanza->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
+HXLINE( 464)			 ::snikket::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE( 465)			bool _hx_tmp;
+HXDLIN( 465)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 465)				_hx_tmp = ::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) );
             			}
             			else {
-HXLINE( 468)				_hx_tmp = false;
-            			}
-HXDLIN( 468)			if (_hx_tmp) {
-HXLINE( 469)				 ::snikket::JID from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 470)				 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 470)				 ::snikket::Chat chat = _gthis1->getChat(from->asBare()->asString());
-HXLINE( 471)				if (::hx::IsNull( chat )) {
-HXLINE( 472)					 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
-HXDLIN( 472)					::String _hx_tmp2 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 472)					_hx_tmp1(_hx_tmp2,::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),472,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
-HXLINE( 473)					return ::snikket::EventResult_obj::EventUnhandled_dyn();
-            				}
-HXLINE( 475)				if (::hx::IsNull( c )) {
-HXLINE( 476)					 ::snikket::Chat chat1 = chat;
-HXDLIN( 476)					::String _hx_tmp3 = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource;
-HXDLIN( 476)					chat1->setPresence(_hx_tmp3, ::snikket::Presence_obj::__alloc( HX_CTX ,null(),mucUser));
-HXLINE( 477)					::Dynamic persistence1 = persistence;
-HXDLIN( 477)					::String _hx_tmp4 = _gthis->accountId();
-HXDLIN( 477)					::snikket::Persistence_obj::storeChats(persistence1,_hx_tmp4,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE( 478)					if (chat->livePresence()) {
-HXLINE( 478)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE( 465)				_hx_tmp = false;
+            			}
+HXDLIN( 465)			if (_hx_tmp) {
+HXLINE( 466)				 ::snikket::JID from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 467)				 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 467)				 ::snikket::Chat chat = _gthis1->getChat(from->asBare()->asString());
+HXLINE( 468)				if (::hx::IsNull( chat )) {
+HXLINE( 469)					 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
+HXDLIN( 469)					::String _hx_tmp2 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXDLIN( 469)					_hx_tmp1(_hx_tmp2,::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),469,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
+HXLINE( 470)					return ::snikket::EventResult_obj::EventUnhandled_dyn();
+            				}
+HXLINE( 472)				if (::hx::IsNull( c )) {
+HXLINE( 473)					 ::snikket::Chat chat1 = chat;
+HXDLIN( 473)					::String _hx_tmp3 = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource;
+HXDLIN( 473)					chat1->setPresence(_hx_tmp3, ::snikket::Presence_obj::__alloc( HX_CTX ,null(),mucUser));
+HXLINE( 474)					::Dynamic persistence1 = persistence;
+HXDLIN( 474)					::String _hx_tmp4 = _gthis->accountId();
+HXDLIN( 474)					::snikket::Persistence_obj::storeChats(persistence1,_hx_tmp4,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE( 475)					if (chat->livePresence()) {
+HXLINE( 475)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             					}
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_25, ::snikket::Client,_gthis, ::snikket::Stanza,mucUser,::Dynamic,persistence, ::snikket::Chat,chat, ::snikket::Stanza,stanza) HXARGC(1)
             					 ::snikket::Chat _hx_run( ::snikket::Caps caps){
-            						HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_480_new)
-HXLINE( 481)						 ::snikket::Chat chat1 = chat;
-HXDLIN( 481)						::String handleCaps = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource;
-HXDLIN( 481)						chat1->setPresence(handleCaps, ::snikket::Presence_obj::__alloc( HX_CTX ,caps,mucUser));
-HXLINE( 482)						bool handleCaps1;
-HXDLIN( 482)						if (::hx::IsNotNull( mucUser )) {
-HXLINE( 482)							handleCaps1 = chat->livePresence();
+            						HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_477_new)
+HXLINE( 478)						 ::snikket::Chat chat1 = chat;
+HXDLIN( 478)						::String handleCaps = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource;
+HXDLIN( 478)						chat1->setPresence(handleCaps, ::snikket::Presence_obj::__alloc( HX_CTX ,caps,mucUser));
+HXLINE( 479)						bool handleCaps1;
+HXDLIN( 479)						if (::hx::IsNotNull( mucUser )) {
+HXLINE( 479)							handleCaps1 = chat->livePresence();
             						}
             						else {
-HXLINE( 482)							handleCaps1 = true;
+HXLINE( 479)							handleCaps1 = true;
             						}
-HXDLIN( 482)						if (handleCaps1) {
-HXLINE( 482)							::Dynamic persistence1 = persistence;
-HXDLIN( 482)							::String handleCaps2 = _gthis->accountId();
-HXDLIN( 482)							::snikket::Persistence_obj::storeChats(persistence1,handleCaps2,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXDLIN( 479)						if (handleCaps1) {
+HXLINE( 479)							::Dynamic persistence1 = persistence;
+HXDLIN( 479)							::String handleCaps2 = _gthis->accountId();
+HXDLIN( 479)							::snikket::Persistence_obj::storeChats(persistence1,handleCaps2,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             						}
-HXLINE( 483)						return chat;
+HXLINE( 480)						return chat;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_28, ::snikket::Client,_gthis,::Dynamic,persistence, ::Dynamic,handleCaps, ::snikket::Stanza,stanza, ::snikket::Stanza,c) HXARGC(1)
             					void _hx_run( ::snikket::Caps caps){
-            						HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_487_new)
-HXLINE( 487)						if (::hx::IsNull( caps )) {
-HXLINE( 488)							::Dynamic this1 = _gthis->pendingCaps;
-HXDLIN( 488)							::Array< ::Dynamic> pending = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
-HXLINE( 489)							if (::hx::IsNull( pending )) {
+            						HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_484_new)
+HXLINE( 484)						if (::hx::IsNull( caps )) {
+HXLINE( 485)							::Dynamic this1 = _gthis->pendingCaps;
+HXDLIN( 485)							::Array< ::Dynamic> pending = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
+HXLINE( 486)							if (::hx::IsNull( pending )) {
             								HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_27, ::snikket::Client,_gthis,::Dynamic,persistence, ::snikket::queries::DiscoInfoGet,discoGet2, ::snikket::Stanza,c) HXARGC(0)
             								void _hx_run(){
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_26, ::haxe::ds::StringMap,chatsToUpdate) HXARGC(0)
             									 ::Dynamic _hx_run(){
-            										HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_501_new)
-HXLINE( 501)										return chatsToUpdate->iterator();
+            										HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_498_new)
+HXLINE( 498)										return chatsToUpdate->iterator();
             									}
             									HX_END_LOCAL_FUNC0(return)
 
-            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_492_new)
-HXLINE( 493)									 ::haxe::ds::StringMap chatsToUpdate =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 494)									::Array< ::Dynamic> handlers;
-HXDLIN( 494)									::Dynamic this1 = _gthis->pendingCaps;
-HXDLIN( 494)									::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
-HXDLIN( 494)									if (::hx::IsNotNull( tmp )) {
-HXLINE( 494)										handlers = tmp;
+            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_489_new)
+HXLINE( 490)									 ::haxe::ds::StringMap chatsToUpdate =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 491)									::Array< ::Dynamic> handlers;
+HXDLIN( 491)									::Dynamic this1 = _gthis->pendingCaps;
+HXDLIN( 491)									::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
+HXDLIN( 491)									if (::hx::IsNotNull( tmp )) {
+HXLINE( 491)										handlers = tmp;
             									}
             									else {
-HXLINE( 494)										handlers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 491)										handlers = ::Array_obj< ::Dynamic>::__new(0);
             									}
-HXLINE( 495)									{
-HXLINE( 495)										::Dynamic this2 = _gthis->pendingCaps;
-HXDLIN( 495)										( ( ::haxe::ds::StringMap)(this2) )->remove(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ));
+HXLINE( 492)									{
+HXLINE( 492)										::Dynamic this2 = _gthis->pendingCaps;
+HXDLIN( 492)										( ( ::haxe::ds::StringMap)(this2) )->remove(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ));
             									}
-HXLINE( 496)									if (::hx::IsNotNull( discoGet2->getResult() )) {
-HXLINE( 496)										::Dynamic persistence1 = persistence;
-HXDLIN( 496)										::snikket::Persistence_obj::storeCaps(persistence1,discoGet2->getResult());
+HXLINE( 493)									if (::hx::IsNotNull( discoGet2->getResult() )) {
+HXLINE( 493)										::Dynamic persistence1 = persistence;
+HXDLIN( 493)										::snikket::Persistence_obj::storeCaps(persistence1,discoGet2->getResult());
             									}
-HXLINE( 497)									{
-HXLINE( 497)										int _g = 0;
-HXDLIN( 497)										while((_g < handlers->length)){
-HXLINE( 497)											 ::Dynamic handler = handlers->__get(_g);
-HXDLIN( 497)											_g = (_g + 1);
-HXLINE( 498)											 ::snikket::Chat c1 = ( ( ::snikket::Chat)(handler(discoGet2->getResult())) );
-HXLINE( 499)											if (c1->livePresence()) {
-HXLINE( 499)												chatsToUpdate->set(c1->chatId,c1);
+HXLINE( 494)									{
+HXLINE( 494)										int _g = 0;
+HXDLIN( 494)										while((_g < handlers->length)){
+HXLINE( 494)											 ::Dynamic handler = handlers->__get(_g);
+HXDLIN( 494)											_g = (_g + 1);
+HXLINE( 495)											 ::snikket::Chat c1 = ( ( ::snikket::Chat)(handler(discoGet2->getResult())) );
+HXLINE( 496)											if (c1->livePresence()) {
+HXLINE( 496)												chatsToUpdate->set(c1->chatId,c1);
             											}
             										}
             									}
-HXLINE( 501)									 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 501)									_gthis1->trigger(HX_("chats/update",3d,8e,1d,14),::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 498)									 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 498)									_gthis1->trigger(HX_("chats/update",3d,8e,1d,14),::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             										->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_26(chatsToUpdate))))));
             								}
             								HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 490)								{
-HXLINE( 490)									::Dynamic this2 = _gthis->pendingCaps;
-HXDLIN( 490)									::String key = ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) );
-HXDLIN( 490)									( ( ::haxe::ds::StringMap)(this2) )->set(key,::Array_obj< ::Dynamic>::__new(1)->init(0,handleCaps));
+HXLINE( 487)								{
+HXLINE( 487)									::Dynamic this2 = _gthis->pendingCaps;
+HXDLIN( 487)									::String key = ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) );
+HXDLIN( 487)									( ( ::haxe::ds::StringMap)(this2) )->set(key,::Array_obj< ::Dynamic>::__new(1)->init(0,handleCaps));
             								}
-HXLINE( 491)								::String discoGet = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 491)								::String discoGet1 = (( (::String)(::Reflect_obj::field(c->attr,HX_("node",02,0a,0a,49))) ) + HX_("#",23,00,00,00));
-HXDLIN( 491)								 ::snikket::queries::DiscoInfoGet discoGet2 =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,discoGet,(discoGet1 + ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) )));
-HXLINE( 492)								discoGet2->onFinished( ::Dynamic(new _hx_Closure_27(_gthis,persistence,discoGet2,c)));
-HXLINE( 503)								_gthis->sendQuery(discoGet2);
+HXLINE( 488)								::String discoGet = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXDLIN( 488)								::String discoGet1 = (( (::String)(::Reflect_obj::field(c->attr,HX_("node",02,0a,0a,49))) ) + HX_("#",23,00,00,00));
+HXDLIN( 488)								 ::snikket::queries::DiscoInfoGet discoGet2 =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,discoGet,(discoGet1 + ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) )));
+HXLINE( 489)								discoGet2->onFinished( ::Dynamic(new _hx_Closure_27(_gthis,persistence,discoGet2,c)));
+HXLINE( 500)								_gthis->sendQuery(discoGet2);
             							}
             							else {
-HXLINE( 505)								pending->push(handleCaps);
+HXLINE( 502)								pending->push(handleCaps);
             							}
             						}
             						else {
-HXLINE( 508)							handleCaps(caps);
+HXLINE( 505)							handleCaps(caps);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 480)					 ::Dynamic handleCaps =  ::Dynamic(new _hx_Closure_25(_gthis,mucUser,persistence,chat,stanza));
-HXLINE( 486)					::Dynamic persistence2 = persistence;
-HXDLIN( 486)					::snikket::Persistence_obj::getCaps(persistence2,( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ), ::Dynamic(new _hx_Closure_28(_gthis,persistence,handleCaps,stanza,c)));
+HXLINE( 477)					 ::Dynamic handleCaps =  ::Dynamic(new _hx_Closure_25(_gthis,mucUser,persistence,chat,stanza));
+HXLINE( 483)					::Dynamic persistence2 = persistence;
+HXDLIN( 483)					::snikket::Persistence_obj::getCaps(persistence2,( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ), ::Dynamic(new _hx_Closure_28(_gthis,persistence,handleCaps,stanza,c)));
             				}
-HXLINE( 512)				if (from->isBare()) {
-HXLINE( 513)					::String avatarSha1Hex = stanza->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
-HXLINE( 514)					if (::hx::IsNotNull( avatarSha1Hex )) {
+HXLINE( 509)				if (from->isBare()) {
+HXLINE( 510)					::String avatarSha1Hex = stanza->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
+HXLINE( 511)					if (::hx::IsNotNull( avatarSha1Hex )) {
             						HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_31, ::snikket::Client,_gthis, ::snikket::JID,from,::Dynamic,persistence, ::snikket::Chat,chat) HXARGC(1)
             						void _hx_run(bool has){
-            							HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_519_new)
-HXLINE( 519)							if (has) {
-HXLINE( 520)								if (chat->livePresence()) {
-HXLINE( 520)									_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            							HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_516_new)
+HXLINE( 516)							if (has) {
+HXLINE( 517)								if (chat->livePresence()) {
+HXLINE( 517)									_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             								}
             							}
             							else {
@@ -1626,72 +1634,74 @@ HXLINE( 520)									_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::Virt
             								void _hx_run(){
             									HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_29, ::snikket::Client,_gthis, ::snikket::Chat,chat) HXARGC(0)
             									void _hx_run(){
-            										HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_527_new)
-HXLINE( 527)										_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            										HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_524_new)
+HXLINE( 524)										_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             									}
             									HX_END_LOCAL_FUNC0((void))
 
-            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_523_new)
-HXLINE( 524)									 ::Dynamic vcard = vcardGet->getResult();
-HXLINE( 525)									if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
-HXLINE( 525)										return;
+            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_520_new)
+HXLINE( 521)									 ::Dynamic vcard = vcardGet->getResult();
+HXLINE( 522)									if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
+HXLINE( 522)										return;
             									}
-HXLINE( 526)									::snikket::Persistence_obj::storeMedia(persistence, ::Dynamic( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)),( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b, ::Dynamic(new _hx_Closure_29(_gthis,chat)));
+HXLINE( 523)									::snikket::Persistence_obj::storeMedia(persistence, ::Dynamic( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)),( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b, ::Dynamic(new _hx_Closure_29(_gthis,chat)));
             								}
             								HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 522)								 ::snikket::queries::VcardTempGet vcardGet =  ::snikket::queries::VcardTempGet_obj::__alloc( HX_CTX ,from);
-HXLINE( 523)								vcardGet->onFinished( ::Dynamic(new _hx_Closure_30(_gthis,vcardGet,persistence,chat)));
-HXLINE( 530)								_gthis->sendQuery(vcardGet);
+HXLINE( 519)								 ::snikket::queries::VcardTempGet vcardGet =  ::snikket::queries::VcardTempGet_obj::__alloc( HX_CTX ,from);
+HXLINE( 520)								vcardGet->onFinished( ::Dynamic(new _hx_Closure_30(_gthis,vcardGet,persistence,chat)));
+HXLINE( 527)								_gthis->sendQuery(vcardGet);
             							}
             						}
             						HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 515)						 ::snikket::Hash tmp = ::snikket::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
-HXDLIN( 515)						::Array< unsigned char > avatarSha1;
-HXDLIN( 515)						if (::hx::IsNotNull( tmp )) {
-HXLINE( 515)							avatarSha1 = tmp->hash;
+HXLINE( 512)						 ::snikket::Hash tmp = ::snikket::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXDLIN( 512)						::Array< unsigned char > avatarSha1;
+HXDLIN( 512)						if (::hx::IsNotNull( tmp )) {
+HXLINE( 512)							avatarSha1 = tmp->hash;
             						}
             						else {
-HXLINE( 515)							avatarSha1 = null();
+HXLINE( 512)							avatarSha1 = null();
             						}
-HXLINE( 516)						chat->setAvatarSha1(avatarSha1);
-HXLINE( 517)						::Dynamic persistence3 = persistence;
-HXDLIN( 517)						::String _hx_tmp5 = _gthis->accountId();
-HXDLIN( 517)						::snikket::Persistence_obj::storeChats(persistence3,_hx_tmp5,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE( 518)						::snikket::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1, ::Dynamic(new _hx_Closure_31(_gthis,from,persistence,chat)));
+HXLINE( 513)						chat->setAvatarSha1(avatarSha1);
+HXLINE( 514)						::Dynamic persistence3 = persistence;
+HXDLIN( 514)						::String _hx_tmp5 = _gthis->accountId();
+HXDLIN( 514)						::snikket::Persistence_obj::storeChats(persistence3,_hx_tmp5,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE( 515)						::snikket::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1, ::Dynamic(new _hx_Closure_31(_gthis,from,persistence,chat)));
             					}
             				}
-HXLINE( 535)				return ::snikket::EventResult_obj::EventHandled_dyn();
+HXLINE( 532)				return ::snikket::EventResult_obj::EventHandled_dyn();
             			}
-HXLINE( 538)			bool _hx_tmp6;
-HXDLIN( 538)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 538)				_hx_tmp6 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd));
+HXLINE( 535)			bool _hx_tmp6;
+HXDLIN( 535)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 535)				_hx_tmp6 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd));
             			}
             			else {
-HXLINE( 538)				_hx_tmp6 = false;
+HXLINE( 535)				_hx_tmp6 = false;
             			}
-HXDLIN( 538)			if (_hx_tmp6) {
-HXLINE( 539)				 ::snikket::Client _gthis2 = _gthis;
-HXDLIN( 539)				 ::snikket::Chat chat2 = _gthis2->getChat(::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString());
-HXLINE( 540)				if (::hx::IsNull( chat2 )) {
-HXLINE( 541)					 ::Dynamic _hx_tmp7 = ::haxe::Log_obj::trace;
-HXDLIN( 541)					::String _hx_tmp8 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 541)					_hx_tmp7(_hx_tmp8,::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),541,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
-HXLINE( 542)					return ::snikket::EventResult_obj::EventUnhandled_dyn();
+HXDLIN( 535)			if (_hx_tmp6) {
+HXLINE( 536)				 ::snikket::Client _gthis2 = _gthis;
+HXDLIN( 536)				 ::snikket::Chat chat2 = _gthis2->getChat(::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString());
+HXLINE( 537)				if (::hx::IsNull( chat2 )) {
+HXLINE( 538)					 ::Dynamic _hx_tmp7 = ::haxe::Log_obj::trace;
+HXDLIN( 538)					::String _hx_tmp8 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXDLIN( 538)					_hx_tmp7(_hx_tmp8,::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),538,HX_("snikket.Client",3c,fe,06,7c),HX_("new",60,d0,53,00)));
+HXLINE( 539)					return ::snikket::EventResult_obj::EventUnhandled_dyn();
             				}
-HXLINE( 545)				chat2->removePresence(::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource);
-HXLINE( 546)				::Dynamic persistence4 = persistence;
-HXDLIN( 546)				::snikket::Persistence_obj::storeChats(persistence4,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
-HXLINE( 547)				_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
+HXLINE( 542)				chat2->removePresence(::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource);
+HXLINE( 543)				::Dynamic persistence4 = persistence;
+HXDLIN( 543)				::snikket::Persistence_obj::storeChats(persistence4,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
+HXLINE( 544)				_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
             			}
-HXLINE( 550)			return ::snikket::EventResult_obj::EventUnhandled_dyn();
+HXLINE( 547)			return ::snikket::EventResult_obj::EventUnhandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_51_new)
-HXLINE(  88)		this->inSync = false;
-HXLINE(  86)		this->pendingCaps =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 982)		this->enabledPushData = null();
+HXLINE(  89)		this->inSync = false;
+HXLINE(  87)		this->pendingCaps =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  86)		this->fastCount = null();
 HXLINE(  85)		this->token = null();
 HXLINE(  84)		this->fastMechanism = null();
 HXLINE(  64)		this->caps =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("https://sdk.snikket.org",d0,c9,43,f0),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_45,13));
@@ -1700,27 +1710,27 @@ HXLINE(  59)		this->chatStateHandlers = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE(  58)		this->syncMessageHandlers = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE(  57)		this->chatMessageHandlers = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE(  55)		this->sendAvailable = true;
-HXLINE(  96)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  97)		::sys::ssl::Socket_obj::DEFAULT_VERIFY_CERT = false;
-HXLINE(  98)		::snikket::_Util::Util_Fields__obj::setupTrace();
-HXLINE(  99)		super::__construct();
-HXLINE( 100)		this->jid = ::snikket::JID_obj::parse(address);
-HXLINE( 101)		this->_displayName = this->jid->node;
-HXLINE( 102)		this->persistence = persistence;
-HXLINE( 103)		this->stream =  ::snikket::streams::XmppStropheStream_obj::__alloc( HX_CTX );
-HXLINE( 104)		this->stream->on(HX_("status/online",10,05,0e,d2),this->onConnected_dyn());
-HXLINE( 105)		this->stream->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 109)		this->stream->on(HX_("fast-token",48,5f,c2,26), ::Dynamic(new _hx_Closure_1(_gthis,persistence)));
-HXLINE( 115)		this->stream->on(HX_("sm/update",1e,16,63,46), ::Dynamic(new _hx_Closure_3(_gthis,persistence)));
-HXLINE( 121)		this->stream->on(HX_("sm/ack",14,b2,12,dd), ::Dynamic(new _hx_Closure_5(_gthis,persistence)));
-HXLINE( 131)		this->stream->on(HX_("sm/fail",b3,aa,95,96), ::Dynamic(new _hx_Closure_7(_gthis,persistence)));
-HXLINE( 141)		this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_19(_gthis,persistence)));
-HXLINE( 344)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7), ::Dynamic(new _hx_Closure_20(_gthis)));
-HXLINE( 395)		this->stream->onIq(::snikket::IqRequestType_obj::Get_dyn(),HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b), ::Dynamic(new _hx_Closure_21(_gthis)));
-HXLINE( 399)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("query",08,8b,ea,5d),HX_("jabber:iq:roster",47,76,6e,06), ::Dynamic(new _hx_Closure_22(_gthis,persistence)));
-HXLINE( 426)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_23(_gthis)));
-HXLINE( 441)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_24(_gthis)));
-HXLINE( 464)		this->stream->on(HX_("presence",3b,52,d7,66), ::Dynamic(new _hx_Closure_32(_gthis,persistence)));
+HXLINE(  97)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  98)		::sys::ssl::Socket_obj::DEFAULT_VERIFY_CERT = false;
+HXLINE(  99)		::snikket::_Util::Util_Fields__obj::setupTrace();
+HXLINE( 100)		super::__construct();
+HXLINE( 101)		this->jid = ::snikket::JID_obj::parse(address);
+HXLINE( 102)		this->_displayName = this->jid->node;
+HXLINE( 103)		this->persistence = persistence;
+HXLINE( 104)		this->stream =  ::snikket::streams::XmppStropheStream_obj::__alloc( HX_CTX );
+HXLINE( 105)		this->stream->on(HX_("status/online",10,05,0e,d2),this->onConnected_dyn());
+HXLINE( 106)		this->stream->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 110)		this->stream->on(HX_("fast-token",48,5f,c2,26), ::Dynamic(new _hx_Closure_1(_gthis,persistence)));
+HXLINE( 116)		this->stream->on(HX_("sm/update",1e,16,63,46), ::Dynamic(new _hx_Closure_3(_gthis,persistence)));
+HXLINE( 122)		this->stream->on(HX_("sm/ack",14,b2,12,dd), ::Dynamic(new _hx_Closure_5(_gthis,persistence)));
+HXLINE( 132)		this->stream->on(HX_("sm/fail",b3,aa,95,96), ::Dynamic(new _hx_Closure_7(_gthis,persistence)));
+HXLINE( 142)		this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_19(_gthis,persistence)));
+HXLINE( 341)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7), ::Dynamic(new _hx_Closure_20(_gthis)));
+HXLINE( 392)		this->stream->onIq(::snikket::IqRequestType_obj::Get_dyn(),HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b), ::Dynamic(new _hx_Closure_21(_gthis)));
+HXLINE( 396)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("query",08,8b,ea,5d),HX_("jabber:iq:roster",47,76,6e,06), ::Dynamic(new _hx_Closure_22(_gthis,persistence)));
+HXLINE( 423)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_23(_gthis)));
+HXLINE( 438)		this->stream->onIq(::snikket::IqRequestType_obj::Set_dyn(),HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_24(_gthis)));
+HXLINE( 461)		this->stream->on(HX_("presence",3b,52,d7,66), ::Dynamic(new _hx_Closure_32(_gthis,persistence)));
             	}
 
 Dynamic Client_obj::__CreateEmpty() { return new Client_obj; }
@@ -1743,210 +1753,230 @@ bool Client_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void Client_obj::set_sendAvailable__fromC(bool value){
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_282_set_sendAvailable__fromC)
-HXDLIN( 282)		this->sendAvailable = value;
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_319_set_sendAvailable__fromC)
+HXDLIN( 319)		this->sendAvailable = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,set_sendAvailable__fromC,(void))
 
 void Client_obj::start(){
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::snikket::Client,_gthis) HXARGC(4)
-            		void _hx_run(::String clientId,::String loadedToken,int fastCount,::String displayName){
-            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_5, ::snikket::Client,_gthis,int,fastCount,::String,clientId,::String,displayName) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::snikket::Client,_gthis) HXARGC(0)
+            		void _hx_run(){
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::snikket::Client,_gthis) HXARGC(1)
             			void _hx_run(::Array< unsigned char > sm){
-            				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::snikket::Client,_gthis,int,fastCount,::Array< unsigned char >,sm) HXARGC(1)
-            				void _hx_run(::Array< ::Dynamic> protoChats){
-            					HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::snikket::Client,_gthis,int,fastCount,::Array< unsigned char >,sm) HXARGC(1)
-            					void _hx_run(::Array< ::Dynamic> details){
-            						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis,int,fastCount) HXARGC(1)
-            						 ::snikket::EventResult _hx_run( ::Dynamic data){
-            							HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_586_start)
-HXLINE( 587)							 ::Dynamic tmp = data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic);
-HXDLIN( 587)							 ::Dynamic tmp1;
-HXDLIN( 587)							if (::hx::IsNotNull( tmp )) {
-            								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
-            								 ::Dynamic _hx_run( ::Dynamic mech){
-            									HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_587_start)
-HXLINE( 587)									return  ::Dynamic(mech->__Field(HX_("canFast",cc,aa,0d,62),::hx::paccDynamic));
-            								}
-            								HX_END_LOCAL_FUNC1(return)
-
-HXLINE( 587)								tmp1 = tmp->__Field(HX_("find",39,d0,bb,43),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_0()));
-            							}
-            							else {
-HXLINE( 587)								tmp1 = null();
-            							}
-HXDLIN( 587)							::String _hx_tmp;
-HXDLIN( 587)							if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 587)								_hx_tmp = ( (::String)(tmp1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
-            							}
-            							else {
-HXLINE( 587)								_hx_tmp = null();
-            							}
-HXDLIN( 587)							_gthis->fastMechanism = _hx_tmp;
-HXLINE( 588)							bool _hx_tmp1;
-HXDLIN( 588)							if (::hx::IsNotNull( _gthis->token )) {
-HXLINE( 588)								if (::hx::IsNull( _gthis->fastMechanism )) {
-HXLINE( 588)									_hx_tmp1 = ::hx::IsNotNull( data->__Field(HX_("mechanimsms",cb,6a,49,06),::hx::paccDynamic) );
-            								}
-            								else {
-HXLINE( 588)									_hx_tmp1 = false;
-            								}
-            							}
-            							else {
-HXLINE( 588)								_hx_tmp1 = true;
-            							}
-HXDLIN( 588)							if (_hx_tmp1) {
-HXLINE( 589)								 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 589)								return _gthis1->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(1)
-            									->setFixed(0,HX_("accountId",e8,81,54,29),_gthis->accountId())));
-            							}
-            							else {
-HXLINE( 591)								return _gthis->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(3)
-            									->setFixed(0,HX_("fastCount",93,fc,67,a5),fastCount)
-            									->setFixed(1,HX_("mechanism",59,fd,7e,2e),_gthis->fastMechanism)
-            									->setFixed(2,HX_("password",1b,23,d0,48),_gthis->token)));
-            							}
-HXLINE( 588)							return null();
+            				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis) HXARGC(1)
+            				 ::snikket::EventResult _hx_run( ::Dynamic data){
+            					HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_557_start)
+HXLINE( 558)					 ::Dynamic tmp = data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic);
+HXDLIN( 558)					 ::Dynamic tmp1;
+HXDLIN( 558)					if (::hx::IsNotNull( tmp )) {
+            						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            						 ::Dynamic _hx_run( ::Dynamic mech){
+            							HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_558_start)
+HXLINE( 558)							return  ::Dynamic(mech->__Field(HX_("canFast",cc,aa,0d,62),::hx::paccDynamic));
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-            						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::snikket::Client,_gthis,::Array< unsigned char >,sm) HXARGC(1)
-            						 ::snikket::EventResult _hx_run( ::Dynamic data){
-            							HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_594_start)
-HXLINE( 595)							if (::hx::IsNotNull( _gthis->token )) {
-HXLINE( 596)								_gthis->token = null();
-HXLINE( 597)								 ::snikket::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 597)								::String _hx_tmp = _gthis->jid->asString();
-HXDLIN( 597)								_gthis1->connect(_hx_tmp,sm);
-            							}
-            							else {
-HXLINE( 599)								 ::snikket::GenericStream _gthis2 = _gthis->stream;
-HXDLIN( 599)								::String _hx_tmp1 = _gthis->jid->asString();
-HXDLIN( 599)								_gthis2->connect(_hx_tmp1,sm);
-            							}
-HXLINE( 601)							return ::snikket::EventResult_obj::EventHandled_dyn();
+HXLINE( 558)						tmp1 = tmp->__Field(HX_("find",39,d0,bb,43),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_0()));
+            					}
+            					else {
+HXLINE( 558)						tmp1 = null();
+            					}
+HXDLIN( 558)					::String _hx_tmp;
+HXDLIN( 558)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 558)						_hx_tmp = ( (::String)(tmp1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+            					}
+            					else {
+HXLINE( 558)						_hx_tmp = null();
+            					}
+HXDLIN( 558)					_gthis->fastMechanism = _hx_tmp;
+HXLINE( 559)					bool _hx_tmp1;
+HXDLIN( 559)					if (::hx::IsNotNull( _gthis->token )) {
+HXLINE( 559)						if (::hx::IsNull( _gthis->fastMechanism )) {
+HXLINE( 559)							_hx_tmp1 = ::hx::IsNotNull( data->__Field(HX_("mechanimsms",cb,6a,49,06),::hx::paccDynamic) );
             						}
-            						HX_END_LOCAL_FUNC1(return)
-
-            						HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_574_start)
-HXLINE( 575)						::haxe::Log_obj::trace(HX_("got details",ee,d5,cf,a0),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),575,HX_("snikket.Client",3c,fe,06,7c),HX_("start",62,74,0b,84)));
-HXLINE( 576)						{
-HXLINE( 576)							int _g = 0;
-HXDLIN( 576)							while((_g < details->length)){
-HXLINE( 576)								 ::Dynamic detail = details->__get(_g);
-HXDLIN( 576)								_g = (_g + 1);
-HXLINE( 577)								 ::snikket::Chat chat = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
-HXLINE( 578)								if (::hx::IsNotNull( chat )) {
-HXLINE( 579)									chat->setLastMessage(( ( ::snikket::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
-HXLINE( 580)									chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
-            								}
-            							}
+            						else {
+HXLINE( 559)							_hx_tmp1 = false;
             						}
-HXLINE( 583)						_gthis->sortChats();
-HXLINE( 584)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
-HXLINE( 586)						_gthis->stream->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_1(_gthis,fastCount)));
-HXLINE( 594)						_gthis->stream->on(HX_("auth/fail",25,45,e9,d1), ::Dynamic(new _hx_Closure_2(_gthis,sm)));
-HXLINE( 603)						::haxe::Log_obj::trace(HX_("go connect",f2,41,71,10),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),603,HX_("snikket.Client",3c,fe,06,7c),HX_("start",62,74,0b,84)));
-HXLINE( 604)						 ::snikket::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 604)						::String _hx_tmp = _gthis->jid->asString();
-HXDLIN( 604)						_gthis1->connect(_hx_tmp,sm);
             					}
-            					HX_END_LOCAL_FUNC1((void))
+            					else {
+HXLINE( 559)						_hx_tmp1 = true;
+            					}
+HXDLIN( 559)					if (_hx_tmp1) {
+HXLINE( 560)						 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 560)						return _gthis1->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(1)
+            							->setFixed(0,HX_("accountId",e8,81,54,29),_gthis->accountId())));
+            					}
+            					else {
+HXLINE( 562)						return _gthis->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(3)
+            							->setFixed(0,HX_("fastCount",93,fc,67,a5),_gthis->fastCount)
+            							->setFixed(1,HX_("mechanism",59,fd,7e,2e),_gthis->fastMechanism)
+            							->setFixed(2,HX_("password",1b,23,d0,48),_gthis->token)));
+            					}
+HXLINE( 559)					return null();
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::snikket::Client,_gthis,::Array< unsigned char >,sm) HXARGC(1)
+            				 ::snikket::EventResult _hx_run( ::Dynamic data){
+            					HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_565_start)
+HXLINE( 566)					if (::hx::IsNotNull( _gthis->token )) {
+HXLINE( 567)						_gthis->token = null();
+HXLINE( 568)						 ::snikket::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 568)						::String _hx_tmp = _gthis->jid->asString();
+HXDLIN( 568)						_gthis1->connect(_hx_tmp,sm);
+            					}
+            					else {
+HXLINE( 570)						 ::snikket::GenericStream _gthis2 = _gthis->stream;
+HXDLIN( 570)						::String _hx_tmp1 = _gthis->jid->asString();
+HXDLIN( 570)						_gthis2->connect(_hx_tmp1,sm);
+            					}
+HXLINE( 572)					return ::snikket::EventResult_obj::EventHandled_dyn();
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_556_start)
+HXLINE( 557)				_gthis->stream->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_1(_gthis)));
+HXLINE( 565)				_gthis->stream->on(HX_("auth/fail",25,45,e9,d1), ::Dynamic(new _hx_Closure_2(_gthis,sm)));
+HXLINE( 574)				 ::snikket::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 574)				::String _hx_tmp = _gthis->jid->asString();
+HXDLIN( 574)				_gthis1->connect(_hx_tmp,sm);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
 
-            					HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_569_start)
-HXLINE( 570)					::haxe::Log_obj::trace(HX_("got chats",c7,b4,d9,94),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),570,HX_("snikket.Client",3c,fe,06,7c),HX_("start",62,74,0b,84)));
-HXLINE( 571)					{
-HXLINE( 571)						int _g = 0;
-HXDLIN( 571)						while((_g < protoChats->length)){
-HXLINE( 571)							 ::snikket::SerializedChat protoChat = protoChats->__get(_g).StaticCast<  ::snikket::SerializedChat >();
-HXDLIN( 571)							_g = (_g + 1);
-HXLINE( 572)							::Array< ::Dynamic> _gthis1 = _gthis->chats;
-HXDLIN( 572)							_gthis1->push(protoChat->toChat(_gthis,_gthis->stream,_gthis->persistence));
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_556_start)
+HXLINE( 556)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 556)			::snikket::Persistence_obj::getStreamManagement(_gthis1,_gthis->accountId(), ::Dynamic(new _hx_Closure_3(_gthis)));
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_554_start)
+HXDLIN( 554)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 555)		this->startOffline( ::Dynamic(new _hx_Closure_4(_gthis)));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Client_obj,start,(void))
+
+void Client_obj::startOffline( ::Dynamic ready){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::snikket::Client,_gthis, ::Dynamic,ready) HXARGC(4)
+            		void _hx_run(::String clientId,::String loadedToken,int loadedFastCount,::String displayName){
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis, ::Dynamic,ready) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> protoChats){
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::Dynamic,ready) HXARGC(1)
+            				void _hx_run(::Array< ::Dynamic> details){
+            					HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_597_startOffline)
+HXLINE( 598)					{
+HXLINE( 598)						int _g = 0;
+HXDLIN( 598)						while((_g < details->length)){
+HXLINE( 598)							 ::Dynamic detail = details->__get(_g);
+HXDLIN( 598)							_g = (_g + 1);
+HXLINE( 599)							 ::snikket::Chat chat = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
+HXLINE( 600)							if (::hx::IsNotNull( chat )) {
+HXLINE( 601)								chat->setLastMessage(( ( ::snikket::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
+HXLINE( 602)								chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
+            							}
             						}
             					}
-HXLINE( 574)					::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN( 574)					::String _hx_tmp = _gthis->accountId();
-HXDLIN( 574)					::snikket::Persistence_obj::getChatsUnreadDetails(_gthis2,_hx_tmp,_gthis->chats, ::Dynamic(new _hx_Closure_3(_gthis,fastCount,sm)));
+HXLINE( 605)					_gthis->sortChats();
+HXLINE( 606)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
+HXLINE( 607)					ready();
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_561_start)
-HXLINE( 562)				::haxe::Log_obj::trace(HX_("got sm",ee,fa,01,65),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),562,HX_("snikket.Client",3c,fe,06,7c),HX_("start",62,74,0b,84)));
-HXLINE( 563)				::String tmp = clientId;
-HXDLIN( 563)				::String _hx_tmp;
-HXDLIN( 563)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 563)					_hx_tmp = tmp;
-            				}
-            				else {
-HXLINE( 563)					_hx_tmp = ::snikket::ID_obj::_hx_long();
-            				}
-HXDLIN( 563)				_gthis->stream->clientId = _hx_tmp;
-HXLINE( 564)				_gthis->jid = _gthis->jid->withResource(_gthis->stream->clientId);
-HXLINE( 565)				bool _hx_tmp1;
-HXDLIN( 565)				if (!(_gthis->updateDisplayName(displayName))) {
-HXLINE( 565)					_hx_tmp1 = ::hx::IsNull( clientId );
-            				}
-            				else {
-HXLINE( 565)					_hx_tmp1 = false;
-            				}
-HXDLIN( 565)				if (_hx_tmp1) {
-HXLINE( 566)					::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 566)					::String _hx_tmp2 = _gthis->jid->asBare()->asString();
-HXDLIN( 566)					::String _gthis2 = _gthis->stream->clientId;
-HXDLIN( 566)					::snikket::Persistence_obj::storeLogin(_gthis1,_hx_tmp2,_gthis2,_gthis->displayName(),null());
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_592_startOffline)
+HXLINE( 593)				{
+HXLINE( 593)					int _g = 0;
+HXDLIN( 593)					while((_g < protoChats->length)){
+HXLINE( 593)						 ::snikket::SerializedChat protoChat = protoChats->__get(_g).StaticCast<  ::snikket::SerializedChat >();
+HXDLIN( 593)						_g = (_g + 1);
+HXLINE( 594)						::Array< ::Dynamic> _gthis1 = _gthis->chats;
+HXDLIN( 594)						_gthis1->push(protoChat->toChat(_gthis,_gthis->stream,_gthis->persistence));
+            					}
             				}
-HXLINE( 569)				::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN( 569)				::snikket::Persistence_obj::getChats(_gthis3,_gthis->accountId(), ::Dynamic(new _hx_Closure_4(_gthis,fastCount,sm)));
+HXLINE( 597)				::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN( 597)				::String _hx_tmp = _gthis->accountId();
+HXDLIN( 597)				::snikket::Persistence_obj::getChatsUnreadDetails(_gthis2,_hx_tmp,_gthis->chats, ::Dynamic(new _hx_Closure_0(_gthis,ready)));
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_558_start)
-HXLINE( 559)			::haxe::Log_obj::trace(HX_("got login",95,ef,19,c8), ::Dynamic(::hx::Anon_obj::Create(5)
-            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
-            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,clientId))
-            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("start",62,74,0b,84))
-            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            				->setFixed(4,HX_("lineNumber",dd,81,22,76),559)));
-HXLINE( 560)			_gthis->token = loadedToken;
-HXLINE( 561)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 561)			::snikket::Persistence_obj::getStreamManagement(_gthis1,_gthis->accountId(), ::Dynamic(new _hx_Closure_5(_gthis,fastCount,clientId,displayName)));
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_583_startOffline)
+HXLINE( 584)			_gthis->token = loadedToken;
+HXLINE( 585)			_gthis->fastCount = loadedFastCount;
+HXLINE( 586)			::String tmp = clientId;
+HXDLIN( 586)			::String _hx_tmp;
+HXDLIN( 586)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 586)				_hx_tmp = tmp;
+            			}
+            			else {
+HXLINE( 586)				_hx_tmp = ::snikket::ID_obj::_hx_long();
+            			}
+HXDLIN( 586)			_gthis->stream->clientId = _hx_tmp;
+HXLINE( 587)			_gthis->jid = _gthis->jid->withResource(_gthis->stream->clientId);
+HXLINE( 588)			bool _hx_tmp1;
+HXDLIN( 588)			if (!(_gthis->updateDisplayName(displayName))) {
+HXLINE( 588)				_hx_tmp1 = ::hx::IsNull( clientId );
+            			}
+            			else {
+HXLINE( 588)				_hx_tmp1 = false;
+            			}
+HXDLIN( 588)			if (_hx_tmp1) {
+HXLINE( 589)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 589)				::String _hx_tmp2 = _gthis->jid->asBare()->asString();
+HXDLIN( 589)				::String _gthis2 = _gthis->stream->clientId;
+HXDLIN( 589)				::snikket::Persistence_obj::storeLogin(_gthis1,_hx_tmp2,_gthis2,_gthis->displayName(),null());
+            			}
+HXLINE( 592)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN( 592)			::snikket::Persistence_obj::getChats(_gthis3,_gthis->accountId(), ::Dynamic(new _hx_Closure_1(_gthis,ready)));
             		}
             		HX_END_LOCAL_FUNC4((void))
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_557_start)
-HXDLIN( 557)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 558)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 558)		::snikket::Persistence_obj::getLogin(_hx_tmp,this->accountId(), ::Dynamic(new _hx_Closure_6(_gthis)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_582_startOffline)
+HXDLIN( 582)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 583)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 583)		::snikket::Persistence_obj::getLogin(_hx_tmp,this->accountId(), ::Dynamic(new _hx_Closure_2(_gthis,ready)));
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC0(Client_obj,start,(void))
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,startOffline,(void))
+
+void Client_obj::startOffline__fromC(::cpp::Function< void  (void*) > ready,void* ready__context){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void*) >,ready,void*,ready__context) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_221_startOffline__fromC)
+HXLINE( 221)			ready(ready__context);
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_startOffline__fromC)
+HXDLIN( 252)		this->startOffline( ::Dynamic(new _hx_Closure_0(ready,ready__context)));
+            	}
+
 
 void Client_obj::logout(bool completely){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_620_logout)
-HXLINE( 620)			_gthis->stream->disconnect();
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_622_logout)
+HXLINE( 622)			_gthis->stream->disconnect();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_616_logout)
-HXDLIN( 616)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 617)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 617)		::snikket::Persistence_obj::removeAccount(_hx_tmp,this->accountId(),completely);
-HXLINE( 618)		 ::snikket::queries::Push2Disable disable =  ::snikket::queries::Push2Disable_obj::__alloc( HX_CTX ,this->jid->asBare()->asString());
-HXLINE( 619)		disable->onFinished( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 622)		this->sendQuery(disable);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_618_logout)
+HXDLIN( 618)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 619)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 619)		::snikket::Persistence_obj::removeAccount(_hx_tmp,this->accountId(),completely);
+HXLINE( 620)		 ::snikket::queries::Push2Disable disable =  ::snikket::queries::Push2Disable_obj::__alloc( HX_CTX ,this->jid->asBare()->asString());
+HXLINE( 621)		disable->onFinished( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 624)		this->sendQuery(disable);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,logout,(void))
 
 void Client_obj::usePassword(::String password){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_632_usePassword)
-HXDLIN( 632)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_634_usePassword)
+HXDLIN( 634)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("requestToken",2a,35,fd,af),this->fastMechanism)
             			->setFixed(1,HX_("password",1b,23,d0,48),password)));
             	}
@@ -1955,16 +1985,16 @@ HXDLIN( 632)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,usePassword,(void))
 
 ::String Client_obj::accountId(){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_641_accountId)
-HXDLIN( 641)		return this->jid->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_643_accountId)
+HXDLIN( 643)		return this->jid->asBare()->asString();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,accountId,return )
 
 ::String Client_obj::displayName(){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_650_displayName)
-HXDLIN( 650)		return this->_displayName;
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_652_displayName)
+HXDLIN( 652)		return this->_displayName;
             	}
 
 
@@ -1973,30 +2003,30 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,displayName,return )
 void Client_obj::setDisplayName(::String displayName){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		void _hx_run( ::snikket::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_668_setDisplayName)
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_670_setDisplayName)
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_658_setDisplayName)
-HXLINE( 659)		bool _hx_tmp;
-HXDLIN( 659)		bool _hx_tmp1;
-HXDLIN( 659)		if (::hx::IsNotNull( displayName )) {
-HXLINE( 659)			_hx_tmp1 = (displayName == HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_660_setDisplayName)
+HXLINE( 661)		bool _hx_tmp;
+HXDLIN( 661)		bool _hx_tmp1;
+HXDLIN( 661)		if (::hx::IsNotNull( displayName )) {
+HXLINE( 661)			_hx_tmp1 = (displayName == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 659)			_hx_tmp1 = true;
+HXLINE( 661)			_hx_tmp1 = true;
             		}
-HXDLIN( 659)		if (!(_hx_tmp1)) {
-HXLINE( 659)			_hx_tmp = (displayName == this->displayName());
+HXDLIN( 661)		if (!(_hx_tmp1)) {
+HXLINE( 661)			_hx_tmp = (displayName == this->displayName());
             		}
             		else {
-HXLINE( 659)			_hx_tmp = true;
+HXLINE( 661)			_hx_tmp = true;
             		}
-HXDLIN( 659)		if (_hx_tmp) {
-HXLINE( 659)			return;
+HXDLIN( 661)		if (_hx_tmp) {
+HXLINE( 661)			return;
             		}
-HXLINE( 661)		 ::snikket::GenericStream _hx_tmp2 = this->stream;
-HXDLIN( 661)		_hx_tmp2->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 663)		 ::snikket::GenericStream _hx_tmp2 = this->stream;
+HXDLIN( 663)		_hx_tmp2->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("node",02,0a,0a,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))))->tag(HX_("item",13,c5,bf,45),null())->textTag(HX_("nick",a3,7b,05,49),displayName, ::Dynamic(::hx::Anon_obj::Create(1)
@@ -2007,38 +2037,38 @@ HXDLIN( 661)		_hx_tmp2->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq"
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,setDisplayName,(void))
 
 bool Client_obj::updateDisplayName(::String fn){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_672_updateDisplayName)
-HXLINE( 673)		bool _hx_tmp;
-HXDLIN( 673)		bool _hx_tmp1;
-HXDLIN( 673)		if (::hx::IsNotNull( fn )) {
-HXLINE( 673)			_hx_tmp1 = (fn == HX_("",00,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_674_updateDisplayName)
+HXLINE( 675)		bool _hx_tmp;
+HXDLIN( 675)		bool _hx_tmp1;
+HXDLIN( 675)		if (::hx::IsNotNull( fn )) {
+HXLINE( 675)			_hx_tmp1 = (fn == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 673)			_hx_tmp1 = true;
+HXLINE( 675)			_hx_tmp1 = true;
             		}
-HXDLIN( 673)		if (!(_hx_tmp1)) {
-HXLINE( 673)			_hx_tmp = (fn == this->displayName());
+HXDLIN( 675)		if (!(_hx_tmp1)) {
+HXLINE( 675)			_hx_tmp = (fn == this->displayName());
             		}
             		else {
-HXLINE( 673)			_hx_tmp = true;
+HXLINE( 675)			_hx_tmp = true;
             		}
-HXDLIN( 673)		if (_hx_tmp) {
-HXLINE( 673)			return false;
+HXDLIN( 675)		if (_hx_tmp) {
+HXLINE( 675)			return false;
             		}
-HXLINE( 674)		this->_displayName = fn;
-HXLINE( 675)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 675)		::String _hx_tmp3 = this->jid->asBare()->asString();
-HXDLIN( 675)		::String tmp = this->stream->clientId;
-HXDLIN( 675)		::String _hx_tmp4;
-HXDLIN( 675)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 675)			_hx_tmp4 = tmp;
+HXLINE( 676)		this->_displayName = fn;
+HXLINE( 677)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN( 677)		::String _hx_tmp3 = this->jid->asBare()->asString();
+HXDLIN( 677)		::String tmp = this->stream->clientId;
+HXDLIN( 677)		::String _hx_tmp4;
+HXDLIN( 677)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 677)			_hx_tmp4 = tmp;
             		}
             		else {
-HXLINE( 675)			_hx_tmp4 = this->jid->resource;
+HXLINE( 677)			_hx_tmp4 = this->jid->resource;
             		}
-HXDLIN( 675)		::snikket::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,fn,null());
-HXLINE( 676)		this->pingAllChannels(false);
-HXLINE( 677)		return true;
+HXDLIN( 677)		::snikket::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,fn,null());
+HXLINE( 678)		this->pingAllChannels(false);
+HXLINE( 679)		return true;
             	}
 
 
@@ -2047,11 +2077,11 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,updateDisplayName,return )
  ::snikket::EventResult Client_obj::onConnected( ::Dynamic data){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis) HXARGC(2)
             		void _hx_run( ::Dynamic service, ::snikket::Caps caps){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_694_onConnected)
-HXLINE( 694)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 694)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 694)			::String _hx_tmp1 = ( ( ::snikket::JID)(service->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
-HXDLIN( 694)			::snikket::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1, ::Dynamic(service->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)), ::Dynamic(service->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)),caps);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_696_onConnected)
+HXLINE( 696)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 696)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 696)			::String _hx_tmp1 = ( ( ::snikket::JID)(service->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
+HXDLIN( 696)			::snikket::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1, ::Dynamic(service->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)), ::Dynamic(service->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)),caps);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
@@ -2061,109 +2091,109 @@ HXDLIN( 694)			::snikket::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1
             			void _hx_run(bool syncFinished){
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis) HXARGC(1)
             				void _hx_run(::Array< ::Dynamic> details){
-            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_711_onConnected)
-HXLINE( 712)					{
-HXLINE( 712)						int _g = 0;
-HXDLIN( 712)						while((_g < details->length)){
-HXLINE( 712)							 ::Dynamic detail = details->__get(_g);
-HXDLIN( 712)							_g = (_g + 1);
-HXLINE( 713)							 ::snikket::Chat chat;
-HXDLIN( 713)							 ::snikket::Chat tmp = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
-HXDLIN( 713)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 713)								chat = tmp;
+            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_713_onConnected)
+HXLINE( 714)					{
+HXLINE( 714)						int _g = 0;
+HXDLIN( 714)						while((_g < details->length)){
+HXLINE( 714)							 ::Dynamic detail = details->__get(_g);
+HXDLIN( 714)							_g = (_g + 1);
+HXLINE( 715)							 ::snikket::Chat chat;
+HXDLIN( 715)							 ::snikket::Chat tmp = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
+HXDLIN( 715)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 715)								chat = tmp;
             							}
             							else {
-HXLINE( 713)								chat = _gthis->getDirectChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ),false);
+HXLINE( 715)								chat = _gthis->getDirectChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ),false);
             							}
-HXLINE( 714)							::String initialLastId = chat->lastMessageId();
-HXLINE( 715)							chat->setLastMessage(( ( ::snikket::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
-HXLINE( 716)							chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
-HXLINE( 717)							bool _hx_tmp;
-HXDLIN( 717)							if (::hx::IsGreater( detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic),0 )) {
-HXLINE( 717)								_hx_tmp = (initialLastId != chat->lastMessageId());
+HXLINE( 716)							::String initialLastId = chat->lastMessageId();
+HXLINE( 717)							chat->setLastMessage(( ( ::snikket::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
+HXLINE( 718)							chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
+HXLINE( 719)							bool _hx_tmp;
+HXDLIN( 719)							if (::hx::IsGreater( detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic),0 )) {
+HXLINE( 719)								_hx_tmp = (initialLastId != chat->lastMessageId());
             							}
             							else {
-HXLINE( 717)								_hx_tmp = false;
+HXLINE( 719)								_hx_tmp = false;
             							}
-HXDLIN( 717)							if (_hx_tmp) {
-HXLINE( 718)								_gthis->chatActivity(chat,false);
+HXDLIN( 719)							if (_hx_tmp) {
+HXLINE( 720)								_gthis->chatActivity(chat,false);
             							}
             						}
             					}
-HXLINE( 721)					_gthis->sortChats();
-HXLINE( 722)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
-HXLINE( 724)					if (_gthis->sendAvailable) {
-HXLINE( 726)						 ::snikket::Client _gthis1 = _gthis;
-HXLINE( 727)						::String _hx_tmp1 = ::snikket::ID_obj::_hx_short();
-HXLINE( 726)						_gthis1->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 723)					_gthis->sortChats();
+HXLINE( 724)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
+HXLINE( 726)					if (_gthis->sendAvailable) {
+HXLINE( 728)						 ::snikket::Client _gthis1 = _gthis;
+HXLINE( 729)						::String _hx_tmp1 = ::snikket::ID_obj::_hx_short();
+HXLINE( 728)						_gthis1->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp1)
             							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("enable",83,ae,87,f8), ::Dynamic(::hx::Anon_obj::Create(1)
             							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:carbons:2",02,86,9e,df))))->up());
-HXLINE( 731)						_gthis->sendPresence(null(),null());
-HXLINE( 732)						_gthis->joinAllChannels();
+HXLINE( 733)						_gthis->sendPresence(null(),null());
+HXLINE( 734)						_gthis->joinAllChannels();
             					}
-HXLINE( 734)					_gthis->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 735)					::haxe::Log_obj::trace(HX_("SYNC: done",c3,a6,82,dd),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),735,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 736)					_gthis->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 737)					::haxe::Log_obj::trace(HX_("SYNC: done",c3,a6,82,dd),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),737,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_700_onConnected)
-HXLINE( 701)				if (!(syncFinished)) {
-HXLINE( 702)					::haxe::Log_obj::trace(HX_("SYNC: failed",3e,4e,5e,fa),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),702,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 703)					_gthis->inSync = false;
-HXLINE( 704)					_gthis->stream->disconnect();
-HXLINE( 706)					return;
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_702_onConnected)
+HXLINE( 703)				if (!(syncFinished)) {
+HXLINE( 704)					::haxe::Log_obj::trace(HX_("SYNC: failed",3e,4e,5e,fa),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),704,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 705)					_gthis->inSync = false;
+HXLINE( 706)					_gthis->stream->disconnect();
+HXLINE( 708)					return;
             				}
-HXLINE( 709)				::haxe::Log_obj::trace(HX_("SYNC: details",21,c5,8e,ac),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),709,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 710)				_gthis->inSync = true;
-HXLINE( 711)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 711)				::String _hx_tmp = _gthis->accountId();
-HXDLIN( 711)				::snikket::Persistence_obj::getChatsUnreadDetails(_gthis1,_hx_tmp,_gthis->chats, ::Dynamic(new _hx_Closure_1(_gthis)));
+HXLINE( 711)				::haxe::Log_obj::trace(HX_("SYNC: details",21,c5,8e,ac),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),711,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 712)				_gthis->inSync = true;
+HXLINE( 713)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 713)				::String _hx_tmp = _gthis->accountId();
+HXDLIN( 713)				::snikket::Persistence_obj::getChatsUnreadDetails(_gthis1,_hx_tmp,_gthis->chats, ::Dynamic(new _hx_Closure_1(_gthis)));
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_698_onConnected)
-HXLINE( 699)			::haxe::Log_obj::trace(HX_("SYNC: MAM",58,33,e1,36),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),699,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 700)			_gthis->sync( ::Dynamic(new _hx_Closure_2(_gthis)));
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_700_onConnected)
+HXLINE( 701)			::haxe::Log_obj::trace(HX_("SYNC: MAM",58,33,e1,36),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),701,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 702)			_gthis->sync( ::Dynamic(new _hx_Closure_2(_gthis)));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_680_onConnected)
-HXDLIN( 680)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 681)		bool _hx_tmp;
-HXDLIN( 681)		if (::hx::IsNotNull( data )) {
-HXLINE( 681)			_hx_tmp = ::hx::IsNotNull( data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_682_onConnected)
+HXDLIN( 682)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 683)		bool _hx_tmp;
+HXDLIN( 683)		if (::hx::IsNotNull( data )) {
+HXLINE( 683)			_hx_tmp = ::hx::IsNotNull( data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 681)			_hx_tmp = false;
+HXLINE( 683)			_hx_tmp = false;
             		}
-HXDLIN( 681)		if (_hx_tmp) {
-HXLINE( 682)			this->jid = ::snikket::JID_obj::parse(( (::String)(data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
-HXLINE( 683)			bool _hx_tmp1;
-HXDLIN( 683)			if (::hx::IsNull( this->stream->clientId )) {
-HXLINE( 683)				_hx_tmp1 = !(this->jid->isBare());
+HXDLIN( 683)		if (_hx_tmp) {
+HXLINE( 684)			this->jid = ::snikket::JID_obj::parse(( (::String)(data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
+HXLINE( 685)			bool _hx_tmp1;
+HXDLIN( 685)			if (::hx::IsNull( this->stream->clientId )) {
+HXLINE( 685)				_hx_tmp1 = !(this->jid->isBare());
             			}
             			else {
-HXLINE( 683)				_hx_tmp1 = false;
-            			}
-HXDLIN( 683)			if (_hx_tmp1) {
-HXLINE( 683)				::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 683)				::String _hx_tmp3 = this->jid->asBare()->asString();
-HXDLIN( 683)				::String _hx_tmp4 = this->jid->resource;
-HXDLIN( 683)				::snikket::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,this->displayName(),null());
-            			}
-            		}
-HXLINE( 686)		if (( (bool)(data->__Field(HX_("resumed",17,0e,58,6b),::hx::paccDynamic)) )) {
-HXLINE( 687)			this->inSync = true;
-HXLINE( 688)			this->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 689)			return ::snikket::EventResult_obj::EventHandled_dyn();
-            		}
-HXLINE( 693)		this->discoverServices( ::snikket::JID_obj::__alloc( HX_CTX ,null(),this->jid->domain,null()),null(), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 696)		this->rosterGet();
-HXLINE( 697)		::haxe::Log_obj::trace(HX_("SYNC: bookmarks",1c,91,b3,0d),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),697,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 698)		this->bookmarksGet( ::Dynamic(new _hx_Closure_3(_gthis)));
-HXLINE( 740)		this->trigger(HX_("session-started",0a,96,19,bc), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 742)		return ::snikket::EventResult_obj::EventHandled_dyn();
+HXLINE( 685)				_hx_tmp1 = false;
+            			}
+HXDLIN( 685)			if (_hx_tmp1) {
+HXLINE( 685)				::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN( 685)				::String _hx_tmp3 = this->jid->asBare()->asString();
+HXDLIN( 685)				::String _hx_tmp4 = this->jid->resource;
+HXDLIN( 685)				::snikket::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,this->displayName(),null());
+            			}
+            		}
+HXLINE( 688)		if (( (bool)(data->__Field(HX_("resumed",17,0e,58,6b),::hx::paccDynamic)) )) {
+HXLINE( 689)			this->inSync = true;
+HXLINE( 690)			this->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 691)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            		}
+HXLINE( 695)		this->discoverServices( ::snikket::JID_obj::__alloc( HX_CTX ,null(),this->jid->domain,null()),null(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 698)		this->rosterGet();
+HXLINE( 699)		::haxe::Log_obj::trace(HX_("SYNC: bookmarks",1c,91,b3,0d),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),699,HX_("snikket.Client",3c,fe,06,7c),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 700)		this->bookmarksGet( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 742)		this->trigger(HX_("session-started",0a,96,19,bc), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 744)		return ::snikket::EventResult_obj::EventHandled_dyn();
             	}
 
 
@@ -2172,66 +2202,66 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,onConnected,return )
 void Client_obj::prepareAttachment( ::snikket::AttachmentSource source, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::snikket::Client,_gthis, ::snikket::AttachmentSource,source, ::Dynamic,callback) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> services){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_749_prepareAttachment)
-HXLINE( 750)			 ::sha::SHA256 sha256 =  ::sha::SHA256_obj::__alloc( HX_CTX );
-HXLINE( 751)			{
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_751_prepareAttachment)
+HXLINE( 752)			 ::sha::SHA256 sha256 =  ::sha::SHA256_obj::__alloc( HX_CTX );
+HXLINE( 753)			{
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::sha::SHA256,sha256) HXARGC(1)
             				 ::tink::streams::Handled _hx_run(::Dynamic chunk){
-            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_751_prepareAttachment)
-HXLINE( 752)					 ::sha::SHA256 sha2561 = sha256;
-HXDLIN( 752)					sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk));
-HXLINE( 753)					return ::tink::streams::Handled_obj::Resume_dyn();
+            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_753_prepareAttachment)
+HXLINE( 754)					 ::sha::SHA256 sha2561 = sha256;
+HXDLIN( 754)					sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk));
+HXLINE( 755)					return ::tink::streams::Handled_obj::Resume_dyn();
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1, ::snikket::AttachmentSource,source, ::snikket::Client,_gthis,::Array< ::Dynamic>,services, ::sha::SHA256,sha256, ::Dynamic,callback) HXARGC(1)
             				void _hx_run( ::tink::streams::Conclusion o){
-            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_754_prepareAttachment)
-HXLINE( 754)					if ((o->_hx_getIndex() == 3)) {
-HXLINE( 756)						 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 756)						 ::snikket::AttachmentSource source1 = source;
-HXDLIN( 756)						::Array< ::Dynamic> services1 = services;
-HXDLIN( 756)						::Array< unsigned char > _hx_tmp = sha256->digest()->b;
-HXDLIN( 756)						_gthis1->prepareAttachmentFor(source1,services1,::Array_obj< ::Dynamic>::__new(1)->init(0, ::snikket::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),_hx_tmp)),callback);
+            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_756_prepareAttachment)
+HXLINE( 756)					if ((o->_hx_getIndex() == 3)) {
+HXLINE( 758)						 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 758)						 ::snikket::AttachmentSource source1 = source;
+HXDLIN( 758)						::Array< ::Dynamic> services1 = services;
+HXDLIN( 758)						::Array< unsigned char > _hx_tmp = sha256->digest()->b;
+HXDLIN( 758)						_gthis1->prepareAttachmentFor(source1,services1,::Array_obj< ::Dynamic>::__new(1)->init(0, ::snikket::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),_hx_tmp)),callback);
             					}
             					else {
-HXLINE( 758)						::haxe::Log_obj::trace(HX_("Error computing attachment hash",07,33,1d,57), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 760)						::haxe::Log_obj::trace(HX_("Error computing attachment hash",07,33,1d,57), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,o))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachment",4a,6c,4b,52))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),758)));
-HXLINE( 759)						callback(null());
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),760)));
+HXLINE( 761)						callback(null());
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 751)				::String name = source->name;
-HXDLIN( 751)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
-HXDLIN( 751)				 ::Dynamic options = null();
-HXDLIN( 751)				if (::hx::IsNull( options )) {
-HXLINE( 751)					options =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 753)				::String name = source->name;
+HXDLIN( 753)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN( 753)				 ::Dynamic options = null();
+HXDLIN( 753)				if (::hx::IsNull( options )) {
+HXLINE( 753)					options =  ::Dynamic(::hx::Anon_obj::Create(0));
             				}
-HXDLIN( 751)				::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
-HXDLIN( 751)				 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
-HXDLIN( 751)				int this2;
-HXDLIN( 751)				if (::hx::IsNull( _g )) {
-HXLINE( 751)					this2 = 65536;
+HXDLIN( 753)				::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN( 753)				 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN( 753)				int this2;
+HXDLIN( 753)				if (::hx::IsNull( _g )) {
+HXLINE( 753)					this2 = 65536;
             				}
             				else {
-HXLINE( 751)					 ::Dynamic v = _g;
-HXDLIN( 751)					this2 = ( (int)(v) );
+HXLINE( 753)					 ::Dynamic v = _g;
+HXDLIN( 753)					this2 = ( (int)(v) );
             				}
-HXDLIN( 751)				::Dynamic this3 = ::tink::io::_Source::Source_Impl__obj::chunked( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0));
-HXDLIN( 751)				::tink::streams::StreamObject_obj::forEach(this3,::tink::streams::_Stream::Handler_Impl__obj::ofSafeSync( ::Dynamic(new _hx_Closure_0(sha256))))->handle( ::Dynamic(new _hx_Closure_1(source,_gthis,services,sha256,callback)));
+HXDLIN( 753)				::Dynamic this3 = ::tink::io::_Source::Source_Impl__obj::chunked( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0));
+HXDLIN( 753)				::tink::streams::StreamObject_obj::forEach(this3,::tink::streams::_Stream::Handler_Impl__obj::ofSafeSync( ::Dynamic(new _hx_Closure_0(sha256))))->handle( ::Dynamic(new _hx_Closure_1(source,_gthis,services,sha256,callback)));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_748_prepareAttachment)
-HXDLIN( 748)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 749)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 749)		::snikket::Persistence_obj::findServicesWithFeature(_hx_tmp,this->accountId(),HX_("urn:xmpp:http:upload:0",0d,db,46,68), ::Dynamic(new _hx_Closure_2(_gthis,source,callback)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_750_prepareAttachment)
+HXDLIN( 750)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 751)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 751)		::snikket::Persistence_obj::findServicesWithFeature(_hx_tmp,this->accountId(),HX_("urn:xmpp:http:upload:0",0d,db,46,68), ::Dynamic(new _hx_Closure_2(_gthis,source,callback)));
             	}
 
 
@@ -2260,101 +2290,83 @@ HXLINE( 221)			callback1(ptr,callback__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_prepareAttachment__fromC)
-HXDLIN( 244)		this->prepareAttachment(source, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_prepareAttachment__fromC)
+HXDLIN( 252)		this->prepareAttachment(source, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
 void Client_obj::prepareAttachmentFor( ::snikket::AttachmentSource source,::Array< ::Dynamic> services,::Array< ::Dynamic> hashes, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_2, ::snikket::AttachmentSource,source, ::snikket::Client,_gthis,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,services, ::snikket::queries::HttpUploadSlot,httpUploadSlot, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_771_prepareAttachmentFor)
-HXLINE( 772)			 ::Dynamic slot = httpUploadSlot->getResult();
-HXLINE( 773)			if (::hx::IsNull( slot )) {
-HXLINE( 774)				 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 774)				 ::snikket::AttachmentSource source1 = source;
-HXDLIN( 774)				::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
-HXDLIN( 774)				_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_773_prepareAttachmentFor)
+HXLINE( 774)			 ::Dynamic slot = httpUploadSlot->getResult();
+HXLINE( 775)			if (::hx::IsNull( slot )) {
+HXLINE( 776)				 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 776)				 ::snikket::AttachmentSource source1 = source;
+HXDLIN( 776)				::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
+HXDLIN( 776)				_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             				::Dynamic _hx_run( ::tink::core::TypedError e){
-            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_776_prepareAttachmentFor)
-HXLINE( 776)					::haxe::Log_obj::trace(HX_("WUT",76,4e,42,00), ::Dynamic(::hx::Anon_obj::Create(5)
+            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_778_prepareAttachmentFor)
+HXLINE( 778)					::haxe::Log_obj::trace(HX_("WUT",76,4e,42,00), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachmentFor",df,5c,bf,82))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),776)));
-HXDLIN( 776)					HX_STACK_DO_THROW(e);
-HXDLIN( 776)					return null();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),778)));
+HXDLIN( 778)					HX_STACK_DO_THROW(e);
+HXDLIN( 778)					return null();
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis, ::Dynamic,slot, ::snikket::AttachmentSource,source,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,services, ::Dynamic,callback) HXARGC(1)
             				void _hx_run( ::tink::core::Outcome o){
-            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_777_prepareAttachmentFor)
-HXLINE( 777)					if ((o->_hx_getIndex() == 0)) {
-HXLINE( 780)						 ::tink::http::Message _g = ( ( ::tink::http::Message)(o->_hx_getObject(0)) );
-HXLINE( 778)						{
-HXLINE( 778)							 ::tink::http::Message res = _g;
-HXDLIN( 778)							if ((( ( ::tink::http::ResponseHeaderBase)(res->header) )->statusCode == 201)) {
-HXLINE( 779)								 ::Dynamic callback1 = callback;
-HXDLIN( 779)								callback1( ::snikket::ChatAttachment_obj::__alloc( HX_CTX ,source->name,source->type,source->size,::Array_obj< ::String >::__new(1)->init(0, ::Dynamic(slot->__Field(HX_("get",96,80,4e,00),::hx::paccDynamic))),hashes));
-            							}
-            							else {
-HXLINE( 780)								 ::tink::http::Message res1 = _g;
-HXDLIN( 780)								{
-HXLINE( 781)									::haxe::Log_obj::trace(HX_("HTTP upload result",84,16,6f,47), ::Dynamic(::hx::Anon_obj::Create(5)
-            										->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
-            										->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,res1->header))
-            										->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachmentFor",df,5c,bf,82))
-            										->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            										->setFixed(4,HX_("lineNumber",dd,81,22,76),781)));
-HXLINE( 782)									 ::snikket::Client _gthis1 = _gthis;
-HXDLIN( 782)									 ::snikket::AttachmentSource source1 = source;
-HXDLIN( 782)									::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
-HXDLIN( 782)									_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
-            								}
-            							}
+            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_779_prepareAttachmentFor)
+HXLINE( 779)					if ((o->_hx_getIndex() == 0)) {
+HXLINE( 780)						 ::tink::http::Message res = ( ( ::tink::http::Message)(o->_hx_getObject(0)) );
+HXDLIN( 780)						if ((( ( ::tink::http::ResponseHeaderBase)(res->header) )->statusCode == 201)) {
+HXLINE( 781)							 ::Dynamic callback1 = callback;
+HXDLIN( 781)							callback1( ::snikket::ChatAttachment_obj::__alloc( HX_CTX ,source->name,source->type,source->size,::Array_obj< ::String >::__new(1)->init(0, ::Dynamic(slot->__Field(HX_("get",96,80,4e,00),::hx::paccDynamic))),hashes));
+            						}
+            						else {
+HXLINE( 783)							 ::snikket::Client _gthis1 = _gthis;
+HXDLIN( 783)							 ::snikket::AttachmentSource source1 = source;
+HXDLIN( 783)							::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
+HXDLIN( 783)							_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
             						}
             					}
             					else {
-HXLINE( 784)						::haxe::Log_obj::trace(HX_("HTTP upload result",84,16,6f,47), ::Dynamic(::hx::Anon_obj::Create(5)
-            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
-            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,o))
-            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachmentFor",df,5c,bf,82))
-            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),784)));
-HXLINE( 785)						 ::snikket::Client _gthis2 = _gthis;
-HXDLIN( 785)						 ::snikket::AttachmentSource source2 = source;
-HXDLIN( 785)						::Array< ::Dynamic> _hx_tmp1 = services->slice(1,null());
-HXDLIN( 785)						_gthis2->prepareAttachmentFor(source2,_hx_tmp1,hashes,callback);
+HXLINE( 783)						 ::snikket::Client _gthis2 = _gthis;
+HXDLIN( 783)						 ::snikket::AttachmentSource source2 = source;
+HXDLIN( 783)						::Array< ::Dynamic> _hx_tmp1 = services->slice(1,null());
+HXDLIN( 783)						_gthis2->prepareAttachmentFor(source2,_hx_tmp1,hashes,callback);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 776)				 ::Dynamic url = ::tink::_Url::Url_Impl__obj::fromString(( (::String)(slot->__Field(HX_("put",cf,62,55,00),::hx::paccDynamic)) ));
-HXDLIN( 776)				::Array< ::Dynamic> slot1 = ( (::Array< ::Dynamic>)(slot->__Field(HX_("putHeaders",37,9f,1e,a4),::hx::paccDynamic)) );
-HXDLIN( 776)				::String this1 = HX_("Content-Length",fa,f8,b6,65).toLowerCase();
-HXDLIN( 776)				::Array< ::Dynamic> options = slot1->concat(::Array_obj< ::Dynamic>::__new(1)->init(0, ::tink::http::HeaderField_obj::__alloc( HX_CTX ,this1,::tink::http::_Header::HeaderValue_Impl__obj::ofInt(source->size))));
-HXDLIN( 776)				::String name = source->name;
-HXDLIN( 776)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
-HXDLIN( 776)				 ::Dynamic options1 = null();
-HXDLIN( 776)				if (::hx::IsNull( options1 )) {
-HXLINE( 776)					options1 =  ::Dynamic(::hx::Anon_obj::Create(0));
-            				}
-HXDLIN( 776)				::Dynamic options2 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options1->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
-HXDLIN( 776)				 ::Dynamic _g = options1->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
-HXDLIN( 776)				int options3;
-HXDLIN( 776)				if (::hx::IsNull( _g )) {
-HXLINE( 776)					options3 = 65536;
+HXLINE( 778)				 ::Dynamic url = ::tink::_Url::Url_Impl__obj::fromString(( (::String)(slot->__Field(HX_("put",cf,62,55,00),::hx::paccDynamic)) ));
+HXDLIN( 778)				::Array< ::Dynamic> slot1 = ( (::Array< ::Dynamic>)(slot->__Field(HX_("putHeaders",37,9f,1e,a4),::hx::paccDynamic)) );
+HXDLIN( 778)				::String this1 = HX_("Content-Length",fa,f8,b6,65).toLowerCase();
+HXDLIN( 778)				::Array< ::Dynamic> options = slot1->concat(::Array_obj< ::Dynamic>::__new(1)->init(0, ::tink::http::HeaderField_obj::__alloc( HX_CTX ,this1,::tink::http::_Header::HeaderValue_Impl__obj::ofInt(source->size))));
+HXDLIN( 778)				::String name = source->name;
+HXDLIN( 778)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN( 778)				 ::Dynamic options1 = null();
+HXDLIN( 778)				if (::hx::IsNull( options1 )) {
+HXLINE( 778)					options1 =  ::Dynamic(::hx::Anon_obj::Create(0));
+            				}
+HXDLIN( 778)				::Dynamic options2 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options1->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN( 778)				 ::Dynamic _g = options1->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN( 778)				int options3;
+HXDLIN( 778)				if (::hx::IsNull( _g )) {
+HXLINE( 778)					options3 = 65536;
             				}
             				else {
-HXLINE( 776)					 ::Dynamic v = _g;
-HXDLIN( 776)					options3 = ( (int)(v) );
+HXLINE( 778)					 ::Dynamic v = _g;
+HXDLIN( 778)					options3 = ( (int)(v) );
             				}
-HXDLIN( 776)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http::Fetch_obj::fetch(url, ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 778)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http::Fetch_obj::fetch(url, ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("method",e1,f6,5a,09),HX_("PUT",af,fe,3c,00))
             					->setFixed(1,HX_("body",a2,7a,1b,41),::tink::io::RealSourceTools_obj::idealize( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,options2,::haxe::io::Bytes_obj::alloc(options3),0), ::Dynamic(new _hx_Closure_0())))
             					->setFixed(2,HX_("headers",46,52,08,63),options))))->handle( ::Dynamic(new _hx_Closure_1(_gthis,slot,source,hashes,services,callback)));
@@ -2362,85 +2374,85 @@ HXDLIN( 776)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http:
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_764_prepareAttachmentFor)
-HXDLIN( 764)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 765)		if ((services->length < 1)) {
-HXLINE( 766)			::haxe::Log_obj::trace(HX_("No HTTP upload service found",d1,5a,61,46),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),766,HX_("snikket.Client",3c,fe,06,7c),HX_("prepareAttachmentFor",df,5c,bf,82)));
-HXLINE( 767)			callback(null());
-HXLINE( 768)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_766_prepareAttachmentFor)
+HXDLIN( 766)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 767)		if ((services->length < 1)) {
+HXLINE( 768)			::haxe::Log_obj::trace(HX_("No HTTP upload service found",d1,5a,61,46),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),768,HX_("snikket.Client",3c,fe,06,7c),HX_("prepareAttachmentFor",df,5c,bf,82)));
+HXLINE( 769)			callback(null());
+HXLINE( 770)			return;
             		}
-HXLINE( 770)		 ::snikket::queries::HttpUploadSlot httpUploadSlot =  ::snikket::queries::HttpUploadSlot_obj::__alloc( HX_CTX ,( (::String)(services->__get(0)->__Field(HX_("serviceId",70,93,d4,bc),::hx::paccDynamic)) ),source->name,source->size,source->type,hashes);
-HXLINE( 771)		httpUploadSlot->onFinished( ::Dynamic(new _hx_Closure_2(source,_gthis,hashes,services,httpUploadSlot,callback)));
-HXLINE( 789)		this->sendQuery(httpUploadSlot);
+HXLINE( 772)		 ::snikket::queries::HttpUploadSlot httpUploadSlot =  ::snikket::queries::HttpUploadSlot_obj::__alloc( HX_CTX ,( (::String)(services->__get(0)->__Field(HX_("serviceId",70,93,d4,bc),::hx::paccDynamic)) ),source->name,source->size,source->type,hashes);
+HXLINE( 773)		httpUploadSlot->onFinished( ::Dynamic(new _hx_Closure_2(source,_gthis,hashes,services,httpUploadSlot,callback)));
+HXLINE( 787)		this->sendQuery(httpUploadSlot);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Client_obj,prepareAttachmentFor,(void))
 
 ::Array< ::Dynamic> Client_obj::getChats(){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_796_getChats)
-HXDLIN( 796)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 796)		{
-HXDLIN( 796)			int _g1 = 0;
-HXDLIN( 796)			::Array< ::Dynamic> _g2 = this->chats;
-HXDLIN( 796)			while((_g1 < _g2->length)){
-HXDLIN( 796)				 ::snikket::Chat v = _g2->__get(_g1).StaticCast<  ::snikket::Chat >();
-HXDLIN( 796)				_g1 = (_g1 + 1);
-HXDLIN( 796)				if ((v->uiState != 2)) {
-HXDLIN( 796)					_g->push(v);
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_794_getChats)
+HXDLIN( 794)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 794)		{
+HXDLIN( 794)			int _g1 = 0;
+HXDLIN( 794)			::Array< ::Dynamic> _g2 = this->chats;
+HXDLIN( 794)			while((_g1 < _g2->length)){
+HXDLIN( 794)				 ::snikket::Chat v = _g2->__get(_g1).StaticCast<  ::snikket::Chat >();
+HXDLIN( 794)				_g1 = (_g1 + 1);
+HXDLIN( 794)				if ((v->uiState != 2)) {
+HXDLIN( 794)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 796)		return _g;
+HXDLIN( 794)		return _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,getChats,return )
 
 size_t Client_obj::getChats__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_242_getChats__fromC)
-HXDLIN( 242)		::Array< ::Dynamic> out = this->getChats();
-HXDLIN( 242)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 242)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 242)			{
-HXDLIN( 242)				int _g = 0;
-HXDLIN( 242)				while((_g < out->length)){
-HXDLIN( 242)					 ::snikket::Chat el = out->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN( 242)					_g = (_g + 1);
-HXDLIN( 242)					{
-HXDLIN( 242)						 ::Dynamic haxeObject = el;
-HXDLIN( 242)						void* ptr = haxeObject.mPtr;
-HXDLIN( 242)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 242)						{
-HXDLIN( 242)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 242)							int high = ptrInt64 >> 32;
-HXDLIN( 242)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 242)							if (::hx::IsNull( highMap )) {
-HXDLIN( 242)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_250_getChats__fromC)
+HXDLIN( 250)		::Array< ::Dynamic> out = this->getChats();
+HXDLIN( 250)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 250)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 250)			{
+HXDLIN( 250)				int _g = 0;
+HXDLIN( 250)				while((_g < out->length)){
+HXDLIN( 250)					 ::snikket::Chat el = out->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN( 250)					_g = (_g + 1);
+HXDLIN( 250)					{
+HXDLIN( 250)						 ::Dynamic haxeObject = el;
+HXDLIN( 250)						void* ptr = haxeObject.mPtr;
+HXDLIN( 250)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 250)						{
+HXDLIN( 250)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 250)							int high = ptrInt64 >> 32;
+HXDLIN( 250)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 250)							if (::hx::IsNull( highMap )) {
+HXDLIN( 250)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)								this1->set(low,highMap);
             							}
-HXDLIN( 242)							highMap->set(high,haxeObject);
+HXDLIN( 250)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 242)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 242)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 242)			{
-HXDLIN( 242)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 242)				int high1 = ptrInt641 >> 32;
-HXDLIN( 242)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 242)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 242)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)					this2->set(low1,highMap1);
+HXDLIN( 250)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 250)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 250)			{
+HXDLIN( 250)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 250)				int high1 = ptrInt641 >> 32;
+HXDLIN( 250)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 250)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 250)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)					this2->set(low1,highMap1);
             				}
-HXDLIN( 242)				highMap1->set(high1,out);
+HXDLIN( 250)				highMap1->set(high1,out);
             			}
-HXDLIN( 242)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 250)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 242)		return ( (size_t)(out->length) );
+HXDLIN( 250)		return ( (size_t)(out->length) );
             	}
 
 
@@ -2449,239 +2461,239 @@ void Client_obj::findAvailableChats(::String q, ::Dynamic callback){
             		void _hx_run( ::Dynamic jid, ::Dynamic __o_prepend){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,results,bool,prepend) HXARGC(1)
             			void _hx_run( ::snikket::AvailableChat item){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_809_findAvailableChats)
-HXLINE( 809)				if (prepend) {
-HXLINE( 809)					results->unshift(item);
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_807_findAvailableChats)
+HXLINE( 807)				if (prepend) {
+HXLINE( 807)					results->unshift(item);
             				}
             				else {
-HXLINE( 809)					results->push(item);
+HXLINE( 807)					results->push(item);
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S8(::hx::LocalFunc,_hx_Closure_1,::String,q, ::snikket::Client,_gthis,::Array< ::Dynamic>,results, ::Dynamic,add,::String,query, ::snikket::queries::DiscoInfoGet,discoGet, ::Dynamic,callback, ::Dynamic,jid) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_811_findAvailableChats)
-HXLINE( 812)				 ::snikket::Caps resultCaps = discoGet->getResult();
-HXLINE( 813)				if (::hx::IsNull( resultCaps )) {
-HXLINE( 814)					 ::snikket::Stanza tmp = discoGet->responseStanza;
-HXDLIN( 814)					 ::snikket::Stanza tmp1;
-HXDLIN( 814)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 814)						tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_809_findAvailableChats)
+HXLINE( 810)				 ::snikket::Caps resultCaps = discoGet->getResult();
+HXLINE( 811)				if (::hx::IsNull( resultCaps )) {
+HXLINE( 812)					 ::snikket::Stanza tmp = discoGet->responseStanza;
+HXDLIN( 812)					 ::snikket::Stanza tmp1;
+HXDLIN( 812)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 812)						tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
             					}
             					else {
-HXLINE( 814)						tmp1 = null();
+HXLINE( 812)						tmp1 = null();
             					}
-HXDLIN( 814)					 ::snikket::Stanza err;
-HXDLIN( 814)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 814)						err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN( 812)					 ::snikket::Stanza err;
+HXDLIN( 812)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 812)						err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             					}
             					else {
-HXLINE( 814)						err = null();
+HXLINE( 812)						err = null();
             					}
-HXLINE( 815)					bool checkAndAdd;
-HXDLIN( 815)					bool checkAndAdd1;
-HXDLIN( 815)					if (::hx::IsNotNull( err )) {
-HXLINE( 815)						::String checkAndAdd2;
-HXDLIN( 815)						if (::hx::IsNotNull( err )) {
-HXLINE( 815)							checkAndAdd2 = err->name;
+HXLINE( 813)					bool checkAndAdd;
+HXDLIN( 813)					bool checkAndAdd1;
+HXDLIN( 813)					if (::hx::IsNotNull( err )) {
+HXLINE( 813)						::String checkAndAdd2;
+HXDLIN( 813)						if (::hx::IsNotNull( err )) {
+HXLINE( 813)							checkAndAdd2 = err->name;
             						}
             						else {
-HXLINE( 815)							checkAndAdd2 = null();
+HXLINE( 813)							checkAndAdd2 = null();
             						}
-HXDLIN( 815)						checkAndAdd1 = (checkAndAdd2 == HX_("service-unavailable",f8,3c,11,1c));
+HXDLIN( 813)						checkAndAdd1 = (checkAndAdd2 == HX_("service-unavailable",f8,3c,11,1c));
             					}
             					else {
-HXLINE( 815)						checkAndAdd1 = true;
+HXLINE( 813)						checkAndAdd1 = true;
             					}
-HXDLIN( 815)					if (!(checkAndAdd1)) {
-HXLINE( 815)						::String checkAndAdd3;
-HXDLIN( 815)						if (::hx::IsNotNull( err )) {
-HXLINE( 815)							checkAndAdd3 = err->name;
+HXDLIN( 813)					if (!(checkAndAdd1)) {
+HXLINE( 813)						::String checkAndAdd3;
+HXDLIN( 813)						if (::hx::IsNotNull( err )) {
+HXLINE( 813)							checkAndAdd3 = err->name;
             						}
             						else {
-HXLINE( 815)							checkAndAdd3 = null();
+HXLINE( 813)							checkAndAdd3 = null();
             						}
-HXDLIN( 815)						checkAndAdd = (checkAndAdd3 == HX_("feature-not-implemented",71,20,2e,96));
+HXDLIN( 813)						checkAndAdd = (checkAndAdd3 == HX_("feature-not-implemented",71,20,2e,96));
             					}
             					else {
-HXLINE( 815)						checkAndAdd = true;
+HXLINE( 813)						checkAndAdd = true;
             					}
-HXDLIN( 815)					if (checkAndAdd) {
-HXLINE( 816)						 ::Dynamic add1 = add;
-HXDLIN( 816)						::String checkAndAdd4 = ( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) );
-HXDLIN( 816)						::String query1 = query;
-HXDLIN( 816)						::String checkAndAdd5 = ( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) );
-HXDLIN( 816)						add1( ::snikket::AvailableChat_obj::__alloc( HX_CTX ,checkAndAdd4,query1,checkAndAdd5, ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0))));
+HXDLIN( 813)					if (checkAndAdd) {
+HXLINE( 814)						 ::Dynamic add1 = add;
+HXDLIN( 814)						::String checkAndAdd4 = ( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) );
+HXDLIN( 814)						::String query1 = query;
+HXDLIN( 814)						::String checkAndAdd5 = ( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) );
+HXDLIN( 814)						add1( ::snikket::AvailableChat_obj::__alloc( HX_CTX ,checkAndAdd4,query1,checkAndAdd5, ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0))));
             					}
             				}
             				else {
-HXLINE( 819)					::snikket::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
-HXLINE( 820)					 ::snikket::Identity identity = resultCaps->identities->__get(0).StaticCast<  ::snikket::Identity >();
-HXLINE( 821)					::String displayName;
-HXDLIN( 821)					::String tmp2;
-HXDLIN( 821)					if (::hx::IsNotNull( identity )) {
-HXLINE( 821)						tmp2 = identity->name;
+HXLINE( 817)					::snikket::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
+HXLINE( 818)					 ::snikket::Identity identity = resultCaps->identities->__get(0).StaticCast<  ::snikket::Identity >();
+HXLINE( 819)					::String displayName;
+HXDLIN( 819)					::String tmp2;
+HXDLIN( 819)					if (::hx::IsNotNull( identity )) {
+HXLINE( 819)						tmp2 = identity->name;
             					}
             					else {
-HXLINE( 821)						tmp2 = null();
+HXLINE( 819)						tmp2 = null();
             					}
-HXDLIN( 821)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 821)						displayName = tmp2;
+HXDLIN( 819)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 819)						displayName = tmp2;
             					}
             					else {
-HXLINE( 821)						displayName = query;
+HXLINE( 819)						displayName = query;
             					}
-HXLINE( 822)					::String note = ( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) );
-HXDLIN( 822)					::String note1;
-HXDLIN( 822)					if (::hx::IsNull( identity )) {
-HXLINE( 822)						note1 = HX_("",00,00,00,00);
+HXLINE( 820)					::String note = ( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) );
+HXDLIN( 820)					::String note1;
+HXDLIN( 820)					if (::hx::IsNull( identity )) {
+HXLINE( 820)						note1 = HX_("",00,00,00,00);
             					}
             					else {
-HXLINE( 822)						note1 = ((HX_(" (",08,1c,00,00) + identity->type) + HX_(")",29,00,00,00));
+HXLINE( 820)						note1 = ((HX_(" (",08,1c,00,00) + identity->type) + HX_(")",29,00,00,00));
             					}
-HXDLIN( 822)					::String note2 = (note + note1);
-HXLINE( 823)					 ::Dynamic add2 = add;
-HXDLIN( 823)					add2( ::snikket::AvailableChat_obj::__alloc( HX_CTX ,( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) ),displayName,note2,resultCaps));
+HXDLIN( 820)					::String note2 = (note + note1);
+HXLINE( 821)					 ::Dynamic add2 = add;
+HXDLIN( 821)					add2( ::snikket::AvailableChat_obj::__alloc( HX_CTX ,( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) ),displayName,note2,resultCaps));
             				}
-HXLINE( 825)				callback(q,results);
+HXLINE( 823)				callback(q,results);
             			}
             			HX_END_LOCAL_FUNC0((void))
 
             		bool prepend = __o_prepend.Default(false);
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_808_findAvailableChats)
-HXLINE( 809)			 ::Dynamic add =  ::Dynamic(new _hx_Closure_0(results,prepend));
-HXLINE( 810)			 ::snikket::queries::DiscoInfoGet discoGet =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) ),null());
-HXLINE( 811)			discoGet->onFinished( ::Dynamic(new _hx_Closure_1(q,_gthis,results,add,query,discoGet,callback,jid)));
-HXLINE( 827)			_gthis->sendQuery(discoGet);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_806_findAvailableChats)
+HXLINE( 807)			 ::Dynamic add =  ::Dynamic(new _hx_Closure_0(results,prepend));
+HXLINE( 808)			 ::snikket::queries::DiscoInfoGet discoGet =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,( (::String)(jid->__Field(HX_("asString",63,33,06,a0),::hx::paccDynamic)()) ),null());
+HXLINE( 809)			discoGet->onFinished( ::Dynamic(new _hx_Closure_1(q,_gthis,results,add,query,discoGet,callback,jid)));
+HXLINE( 825)			_gthis->sendQuery(discoGet);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_805_findAvailableChats)
-HXDLIN( 805)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 806)		::Array< ::Dynamic> results = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 807)		::String query = ::StringTools_obj::trim(q);
-HXLINE( 808)		 ::Dynamic checkAndAdd =  ::Dynamic(new _hx_Closure_2(_gthis,q,results,query,callback));
-HXLINE( 829)		 ::snikket::JID jid;
-HXDLIN( 829)		if (::StringTools_obj::startsWith(query,HX_("xmpp:",65,3c,77,60))) {
-HXLINE( 829)			jid = ::snikket::JID_obj::parse(query.substr(5,null()));
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_803_findAvailableChats)
+HXDLIN( 803)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 804)		::Array< ::Dynamic> results = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 805)		::String query = ::StringTools_obj::trim(q);
+HXLINE( 806)		 ::Dynamic checkAndAdd =  ::Dynamic(new _hx_Closure_2(_gthis,q,results,query,callback));
+HXLINE( 827)		 ::snikket::JID jid;
+HXDLIN( 827)		if (::StringTools_obj::startsWith(query,HX_("xmpp:",65,3c,77,60))) {
+HXLINE( 827)			jid = ::snikket::JID_obj::parse(query.substr(5,null()));
             		}
             		else {
-HXLINE( 829)			jid = ::snikket::JID_obj::parse(query);
-            		}
-HXLINE( 834)		if (jid->isValid()) {
-HXLINE( 835)			checkAndAdd(jid,true);
-            		}
-HXLINE( 837)		{
-HXLINE( 837)			int _g = 0;
-HXDLIN( 837)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN( 837)			while((_g < _g1->length)){
-HXLINE( 837)				 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN( 837)				_g = (_g + 1);
-HXLINE( 838)				::String chat1 = chat->chatId;
-HXDLIN( 838)				if ((chat1 != jid->asBare()->asString())) {
-HXLINE( 839)					bool _hx_tmp;
-HXDLIN( 839)					::String s = chat->chatId;
-HXDLIN( 839)					if ((s.indexOf(query.toLowerCase(),null()) == -1)) {
-HXLINE( 839)						::String s1 = chat->getDisplayName().toLowerCase();
-HXDLIN( 839)						_hx_tmp = (s1.indexOf(query.toLowerCase(),null()) != -1);
+HXLINE( 827)			jid = ::snikket::JID_obj::parse(query);
+            		}
+HXLINE( 832)		if (jid->isValid()) {
+HXLINE( 833)			checkAndAdd(jid,true);
+            		}
+HXLINE( 835)		{
+HXLINE( 835)			int _g = 0;
+HXDLIN( 835)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN( 835)			while((_g < _g1->length)){
+HXLINE( 835)				 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN( 835)				_g = (_g + 1);
+HXLINE( 836)				::String chat1 = chat->chatId;
+HXDLIN( 836)				if ((chat1 != jid->asBare()->asString())) {
+HXLINE( 837)					bool _hx_tmp;
+HXDLIN( 837)					::String s = chat->chatId;
+HXDLIN( 837)					if ((s.indexOf(query.toLowerCase(),null()) == -1)) {
+HXLINE( 837)						::String s1 = chat->getDisplayName().toLowerCase();
+HXDLIN( 837)						_hx_tmp = (s1.indexOf(query.toLowerCase(),null()) != -1);
             					}
             					else {
-HXLINE( 839)						_hx_tmp = true;
+HXLINE( 837)						_hx_tmp = true;
             					}
-HXDLIN( 839)					if (_hx_tmp) {
-HXLINE( 840)						 ::snikket::Channel channel = ( ( ::snikket::Channel)(::snikket::_Util::Util_Fields__obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
-HXLINE( 841)						::Array< ::Dynamic> results1 = results;
-HXDLIN( 841)						::String chat2 = chat->chatId;
-HXDLIN( 841)						::String _hx_tmp1 = chat->getDisplayName();
-HXDLIN( 841)						::String chat3 = chat->chatId;
-HXDLIN( 841)						 ::snikket::Caps _hx_tmp2;
-HXDLIN( 841)						bool _hx_tmp3;
-HXDLIN( 841)						if (::hx::IsNotNull( channel )) {
-HXLINE( 841)							_hx_tmp3 = ::hx::IsNull( channel->disco );
+HXDLIN( 837)					if (_hx_tmp) {
+HXLINE( 838)						 ::snikket::Channel channel = ( ( ::snikket::Channel)(::snikket::_Util::Util_Fields__obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
+HXLINE( 839)						::Array< ::Dynamic> results1 = results;
+HXDLIN( 839)						::String chat2 = chat->chatId;
+HXDLIN( 839)						::String _hx_tmp1 = chat->getDisplayName();
+HXDLIN( 839)						::String chat3 = chat->chatId;
+HXDLIN( 839)						 ::snikket::Caps _hx_tmp2;
+HXDLIN( 839)						bool _hx_tmp3;
+HXDLIN( 839)						if (::hx::IsNotNull( channel )) {
+HXLINE( 839)							_hx_tmp3 = ::hx::IsNull( channel->disco );
             						}
             						else {
-HXLINE( 841)							_hx_tmp3 = true;
+HXLINE( 839)							_hx_tmp3 = true;
             						}
-HXDLIN( 841)						if (_hx_tmp3) {
-HXLINE( 841)							_hx_tmp2 =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0));
+HXDLIN( 839)						if (_hx_tmp3) {
+HXLINE( 839)							_hx_tmp2 =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0));
             						}
             						else {
-HXLINE( 841)							_hx_tmp2 = channel->disco;
+HXLINE( 839)							_hx_tmp2 = channel->disco;
             						}
-HXDLIN( 841)						results1->push( ::snikket::AvailableChat_obj::__alloc( HX_CTX ,chat2,_hx_tmp1,chat3,_hx_tmp2));
+HXDLIN( 839)						results1->push( ::snikket::AvailableChat_obj::__alloc( HX_CTX ,chat2,_hx_tmp1,chat3,_hx_tmp2));
             					}
             				}
-HXLINE( 844)				if (chat->isTrusted()) {
-HXLINE( 845)					 ::haxe::ds::StringMap resources =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 846)					{
-HXLINE( 846)						int _g2 = 0;
-HXDLIN( 846)						::Array< ::String > _g3 = ::snikket::Caps_obj::withIdentity(chat->getCaps(),HX_("gateway",04,40,59,91),null());
-HXDLIN( 846)						while((_g2 < _g3->length)){
-HXLINE( 846)							::String resource = _g3->__get(_g2);
-HXDLIN( 846)							_g2 = (_g2 + 1);
-HXLINE( 847)							resources->set(resource,true);
+HXLINE( 842)				if (chat->isTrusted()) {
+HXLINE( 843)					 ::haxe::ds::StringMap resources =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 844)					{
+HXLINE( 844)						int _g2 = 0;
+HXDLIN( 844)						::Array< ::String > _g3 = ::snikket::Caps_obj::withIdentity(chat->getCaps(),HX_("gateway",04,40,59,91),null());
+HXDLIN( 844)						while((_g2 < _g3->length)){
+HXLINE( 844)							::String resource = _g3->__get(_g2);
+HXDLIN( 844)							_g2 = (_g2 + 1);
+HXLINE( 845)							resources->set(resource,true);
             						}
             					}
-HXLINE( 849)					{
-HXLINE( 849)						int _g4 = 0;
-HXDLIN( 849)						::Array< ::String > _g5 = ::snikket::Caps_obj::withFeature(chat->getCaps(),HX_("jabber:iq:gateway",c8,db,57,c1));
-HXDLIN( 849)						while((_g4 < _g5->length)){
-HXLINE( 849)							::String resource1 = _g5->__get(_g4);
-HXDLIN( 849)							_g4 = (_g4 + 1);
-HXLINE( 850)							resources->set(resource1,true);
+HXLINE( 847)					{
+HXLINE( 847)						int _g4 = 0;
+HXDLIN( 847)						::Array< ::String > _g5 = ::snikket::Caps_obj::withFeature(chat->getCaps(),HX_("jabber:iq:gateway",c8,db,57,c1));
+HXDLIN( 847)						while((_g4 < _g5->length)){
+HXLINE( 847)							::String resource1 = _g5->__get(_g4);
+HXDLIN( 847)							_g4 = (_g4 + 1);
+HXLINE( 848)							resources->set(resource1,true);
             						}
             					}
-HXLINE( 852)					bool _hx_tmp4;
-HXDLIN( 852)					if (!(this->sendAvailable)) {
-HXLINE( 852)						_hx_tmp4 = ::snikket::JID_obj::parse(chat->chatId)->isDomain();
+HXLINE( 850)					bool _hx_tmp4;
+HXDLIN( 850)					if (!(this->sendAvailable)) {
+HXLINE( 850)						_hx_tmp4 = ::snikket::JID_obj::parse(chat->chatId)->isDomain();
             					}
             					else {
-HXLINE( 852)						_hx_tmp4 = false;
+HXLINE( 850)						_hx_tmp4 = false;
             					}
-HXDLIN( 852)					if (_hx_tmp4) {
-HXLINE( 853)						::String k = null();
-HXDLIN( 853)						resources->set(k,true);
+HXDLIN( 850)					if (_hx_tmp4) {
+HXLINE( 851)						::String k = null();
+HXDLIN( 851)						resources->set(k,true);
             					}
-HXLINE( 855)					{
-HXLINE( 855)						 ::Dynamic resource2 = resources->keys();
-HXDLIN( 855)						while(( (bool)(resource2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 853)					{
+HXLINE( 853)						 ::Dynamic resource2 = resources->keys();
+HXDLIN( 853)						while(( (bool)(resource2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
             							HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_3, ::snikket::queries::JabberIqGatewayGet,jigGet1,::String,resource3,::String,query, ::snikket::JID,bareJid, ::snikket::Chat,chat, ::Dynamic,checkAndAdd) HXARGC(0)
             							void _hx_run(){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_860_findAvailableChats)
-HXLINE( 860)								if (::hx::IsNull( jigGet1->getResult() )) {
-HXLINE( 861)									 ::snikket::Caps caps = chat->getResourceCaps(resource3);
-HXLINE( 862)									bool _hx_tmp;
-HXDLIN( 862)									if (bareJid->isDomain()) {
-HXLINE( 862)										_hx_tmp = caps->features->contains(HX_("jid\\20escaping",73,c5,d2,4a));
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_858_findAvailableChats)
+HXLINE( 858)								if (::hx::IsNull( jigGet1->getResult() )) {
+HXLINE( 859)									 ::snikket::Caps caps = chat->getResourceCaps(resource3);
+HXLINE( 860)									bool _hx_tmp;
+HXDLIN( 860)									if (bareJid->isDomain()) {
+HXLINE( 860)										_hx_tmp = caps->features->contains(HX_("jid\\20escaping",73,c5,d2,4a));
             									}
             									else {
-HXLINE( 862)										_hx_tmp = false;
+HXLINE( 860)										_hx_tmp = false;
             									}
-HXDLIN( 862)									if (_hx_tmp) {
-HXLINE( 863)										 ::Dynamic checkAndAdd1 = checkAndAdd;
-HXDLIN( 863)										checkAndAdd1( ::snikket::JID_obj::__alloc( HX_CTX ,query,bareJid->domain,null()),null());
+HXDLIN( 860)									if (_hx_tmp) {
+HXLINE( 861)										 ::Dynamic checkAndAdd1 = checkAndAdd;
+HXDLIN( 861)										checkAndAdd1( ::snikket::JID_obj::__alloc( HX_CTX ,query,bareJid->domain,null()),null());
             									}
             									else {
-HXLINE( 864)										if (bareJid->isDomain()) {
-HXLINE( 865)											 ::Dynamic checkAndAdd2 = checkAndAdd;
-HXDLIN( 865)											::String _hx_tmp1 = ::StringTools_obj::replace(query,HX_("@",40,00,00,00),HX_("%",25,00,00,00));
-HXDLIN( 865)											checkAndAdd2( ::snikket::JID_obj::__alloc( HX_CTX ,_hx_tmp1,bareJid->domain,null()),null());
+HXLINE( 862)										if (bareJid->isDomain()) {
+HXLINE( 863)											 ::Dynamic checkAndAdd2 = checkAndAdd;
+HXDLIN( 863)											::String _hx_tmp1 = ::StringTools_obj::replace(query,HX_("@",40,00,00,00),HX_("%",25,00,00,00));
+HXDLIN( 863)											checkAndAdd2( ::snikket::JID_obj::__alloc( HX_CTX ,_hx_tmp1,bareJid->domain,null()),null());
             										}
             									}
             								}
             								else {
-HXLINE( 868)									 ::haxe::ds::Either _g = jigGet1->getResult();
-HXDLIN( 868)									switch((int)(_g->_hx_getIndex())){
+HXLINE( 866)									 ::haxe::ds::Either _g = jigGet1->getResult();
+HXDLIN( 866)									switch((int)(_g->_hx_getIndex())){
             										case (int)0: {
-HXLINE( 869)											::String error = ( (::String)(_g->_hx_getObject(0)) );
-HXDLIN( 869)											return;
+HXLINE( 867)											::String error = ( (::String)(_g->_hx_getObject(0)) );
+HXDLIN( 867)											return;
             										}
             										break;
             										case (int)1: {
-HXLINE( 870)											::String result = ( (::String)(_g->_hx_getObject(0)) );
-HXLINE( 871)											 ::Dynamic checkAndAdd3 = checkAndAdd;
-HXDLIN( 871)											checkAndAdd3(::snikket::JID_obj::parse(result),null());
+HXLINE( 868)											::String result = ( (::String)(_g->_hx_getObject(0)) );
+HXLINE( 869)											 ::Dynamic checkAndAdd3 = checkAndAdd;
+HXDLIN( 869)											checkAndAdd3(::snikket::JID_obj::parse(result),null());
             										}
             										break;
             									}
@@ -2689,27 +2701,27 @@ HXDLIN( 871)											checkAndAdd3(::snikket::JID_obj::parse(result),null());
             							}
             							HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 855)							::String resource3 = ( (::String)(resource2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 856)							 ::snikket::JID bareJid = ::snikket::JID_obj::parse(chat->chatId);
-HXLINE( 857)							 ::snikket::JID fullJid =  ::snikket::JID_obj::__alloc( HX_CTX ,bareJid->node,bareJid->domain,resource3);
-HXLINE( 858)							::String jigGet = fullJid->asString();
-HXDLIN( 858)							 ::snikket::queries::JabberIqGatewayGet jigGet1 =  ::snikket::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX ,jigGet,query);
-HXLINE( 859)							jigGet1->onFinished( ::Dynamic(new _hx_Closure_3(jigGet1,resource3,query,bareJid,chat,checkAndAdd)));
-HXLINE( 875)							this->sendQuery(jigGet1);
+HXLINE( 853)							::String resource3 = ( (::String)(resource2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 854)							 ::snikket::JID bareJid = ::snikket::JID_obj::parse(chat->chatId);
+HXLINE( 855)							 ::snikket::JID fullJid =  ::snikket::JID_obj::__alloc( HX_CTX ,bareJid->node,bareJid->domain,resource3);
+HXLINE( 856)							::String jigGet = fullJid->asString();
+HXDLIN( 856)							 ::snikket::queries::JabberIqGatewayGet jigGet1 =  ::snikket::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX ,jigGet,query);
+HXLINE( 857)							jigGet1->onFinished( ::Dynamic(new _hx_Closure_3(jigGet1,resource3,query,bareJid,chat,checkAndAdd)));
+HXLINE( 873)							this->sendQuery(jigGet1);
             						}
             					}
             				}
             			}
             		}
-HXLINE( 879)		bool _hx_tmp5;
-HXDLIN( 879)		if (!(jid->isValid())) {
-HXLINE( 879)			_hx_tmp5 = (results->length > 0);
+HXLINE( 877)		bool _hx_tmp5;
+HXDLIN( 877)		if (!(jid->isValid())) {
+HXLINE( 877)			_hx_tmp5 = (results->length > 0);
             		}
             		else {
-HXLINE( 879)			_hx_tmp5 = false;
+HXLINE( 877)			_hx_tmp5 = false;
             		}
-HXDLIN( 879)		if (_hx_tmp5) {
-HXLINE( 880)			callback(q,results);
+HXDLIN( 877)		if (_hx_tmp5) {
+HXLINE( 878)			callback(q,results);
             		}
             	}
 
@@ -2775,77 +2787,77 @@ HXLINE( 221)			callback1(_hx_tmp,ptr1,( (size_t)(a1->length) ),callback__context
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_findAvailableChats__fromC)
-HXDLIN( 244)		this->findAvailableChats(q, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_findAvailableChats__fromC)
+HXDLIN( 252)		this->findAvailableChats(q, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
  ::snikket::Chat Client_obj::startChat( ::snikket::AvailableChat availableChat){
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_889_startChat)
-HXLINE( 890)		 ::snikket::Chat existingChat = this->getChat(availableChat->chatId);
-HXLINE( 891)		if (::hx::IsNotNull( existingChat )) {
-HXLINE( 892)			 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(existingChat,::hx::ClassOf< ::snikket::Channel >())) );
-HXLINE( 893)			bool _hx_tmp;
-HXDLIN( 893)			bool _hx_tmp1;
-HXDLIN( 893)			if (::hx::IsNull( channel )) {
-HXLINE( 893)				_hx_tmp1 = availableChat->isChannel();
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_887_startChat)
+HXLINE( 888)		 ::snikket::Chat existingChat = this->getChat(availableChat->chatId);
+HXLINE( 889)		if (::hx::IsNotNull( existingChat )) {
+HXLINE( 890)			 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(existingChat,::hx::ClassOf< ::snikket::Channel >())) );
+HXLINE( 891)			bool _hx_tmp;
+HXDLIN( 891)			bool _hx_tmp1;
+HXDLIN( 891)			if (::hx::IsNull( channel )) {
+HXLINE( 891)				_hx_tmp1 = availableChat->isChannel();
             			}
             			else {
-HXLINE( 893)				_hx_tmp1 = false;
+HXLINE( 891)				_hx_tmp1 = false;
             			}
-HXDLIN( 893)			if (!(_hx_tmp1)) {
-HXLINE( 893)				if (::hx::IsNotNull( channel )) {
-HXLINE( 893)					_hx_tmp = !(availableChat->isChannel());
+HXDLIN( 891)			if (!(_hx_tmp1)) {
+HXLINE( 891)				if (::hx::IsNotNull( channel )) {
+HXLINE( 891)					_hx_tmp = !(availableChat->isChannel());
             				}
             				else {
-HXLINE( 893)					_hx_tmp = false;
+HXLINE( 891)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE( 893)				_hx_tmp = true;
-            			}
-HXDLIN( 893)			if (_hx_tmp) {
-HXLINE( 894)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 894)				{
-HXLINE( 894)					int _g1 = 0;
-HXDLIN( 894)					::Array< ::Dynamic> _g2 = this->chats;
-HXDLIN( 894)					while((_g1 < _g2->length)){
-HXLINE( 894)						 ::snikket::Chat v = _g2->__get(_g1).StaticCast<  ::snikket::Chat >();
-HXDLIN( 894)						_g1 = (_g1 + 1);
-HXDLIN( 894)						if ((v->chatId != availableChat->chatId)) {
-HXLINE( 894)							_g->push(v);
+HXLINE( 891)				_hx_tmp = true;
+            			}
+HXDLIN( 891)			if (_hx_tmp) {
+HXLINE( 892)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 892)				{
+HXLINE( 892)					int _g1 = 0;
+HXDLIN( 892)					::Array< ::Dynamic> _g2 = this->chats;
+HXDLIN( 892)					while((_g1 < _g2->length)){
+HXLINE( 892)						 ::snikket::Chat v = _g2->__get(_g1).StaticCast<  ::snikket::Chat >();
+HXDLIN( 892)						_g1 = (_g1 + 1);
+HXDLIN( 892)						if ((v->chatId != availableChat->chatId)) {
+HXLINE( 892)							_g->push(v);
             						}
             					}
             				}
-HXDLIN( 894)				this->chats = _g;
+HXDLIN( 892)				this->chats = _g;
             			}
             			else {
-HXLINE( 896)				if ((existingChat->uiState == 2)) {
-HXLINE( 896)					existingChat->uiState = 1;
+HXLINE( 894)				if ((existingChat->uiState == 2)) {
+HXLINE( 894)					existingChat->uiState = 1;
             				}
-HXLINE( 897)				if (::hx::IsNotNull( channel )) {
-HXLINE( 897)					channel->selfPing(true);
+HXLINE( 895)				if (::hx::IsNotNull( channel )) {
+HXLINE( 895)					channel->selfPing(true);
             				}
-HXLINE( 898)				::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 898)				::snikket::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,existingChat));
-HXLINE( 899)				this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,existingChat));
-HXLINE( 900)				return existingChat;
+HXLINE( 896)				::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN( 896)				::snikket::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,existingChat));
+HXLINE( 897)				this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,existingChat));
+HXLINE( 898)				return existingChat;
             			}
             		}
-HXLINE( 904)		 ::snikket::Chat chat;
-HXDLIN( 904)		if (availableChat->isChannel()) {
-HXLINE( 905)			 ::snikket::Channel channel1 =  ::snikket::Channel_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,availableChat->chatId,1,false,null(),null(),null(),availableChat->caps);
-HXLINE( 906)			this->chats->unshift(channel1);
-HXLINE( 907)			channel1->selfPing(false);
-HXLINE( 904)			chat = channel1;
+HXLINE( 902)		 ::snikket::Chat chat;
+HXDLIN( 902)		if (availableChat->isChannel()) {
+HXLINE( 903)			 ::snikket::Channel channel1 =  ::snikket::Channel_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,availableChat->chatId,1,false,null(),null(),null(),availableChat->caps);
+HXLINE( 904)			this->chats->unshift(channel1);
+HXLINE( 905)			channel1->selfPing(false);
+HXLINE( 902)			chat = channel1;
             		}
             		else {
-HXLINE( 904)			chat = this->getDirectChat(availableChat->chatId,false);
+HXLINE( 902)			chat = this->getDirectChat(availableChat->chatId,false);
             		}
-HXLINE( 912)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 912)		::snikket::Persistence_obj::storeChats(_hx_tmp3,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE( 913)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
-HXLINE( 914)		return chat;
+HXLINE( 910)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN( 910)		::snikket::Persistence_obj::storeChats(_hx_tmp3,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE( 911)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE( 912)		return chat;
             	}
 
 
@@ -2854,13 +2866,13 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,startChat,return )
  ::snikket::Chat Client_obj::getChat(::String chatId){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::String,chatId) HXARGC(1)
             		bool _hx_run( ::snikket::Chat chat){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_923_getChat)
-HXDLIN( 923)			return (chat->chatId == chatId);
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_921_getChat)
+HXDLIN( 921)			return (chat->chatId == chatId);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_923_getChat)
-HXDLIN( 923)		return ( ( ::snikket::Chat)(::Lambda_obj::find(this->chats, ::Dynamic(new _hx_Closure_0(chatId)))) );
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_921_getChat)
+HXDLIN( 921)		return ( ( ::snikket::Chat)(::Lambda_obj::find(this->chats, ::Dynamic(new _hx_Closure_0(chatId)))) );
             	}
 
 
@@ -2871,45 +2883,45 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,getChat,return )
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::snikket::ModerationAction,action, ::Dynamic,resolve) HXARGC(1)
             			void _hx_run( ::snikket::ChatMessage moderateMessage){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_929_moderateMessage)
-HXLINE( 930)				if (::hx::IsNull( moderateMessage )) {
-HXLINE( 930)					resolve(null());
-HXDLIN( 930)					return;
-            				}
-HXLINE( 931)				{
-HXLINE( 931)					int _g = 0;
-HXDLIN( 931)					::Array< ::Dynamic> _g1 = moderateMessage->attachments;
-HXDLIN( 931)					while((_g < _g1->length)){
-HXLINE( 931)						 ::snikket::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::snikket::ChatAttachment >();
-HXDLIN( 931)						_g = (_g + 1);
-HXLINE( 932)						{
-HXLINE( 932)							int _g2 = 0;
-HXDLIN( 932)							::Array< ::Dynamic> _g3 = attachment->hashes;
-HXDLIN( 932)							while((_g2 < _g3->length)){
-HXLINE( 932)								 ::snikket::Hash hash = _g3->__get(_g2).StaticCast<  ::snikket::Hash >();
-HXDLIN( 932)								_g2 = (_g2 + 1);
-HXLINE( 933)								::snikket::Persistence_obj::removeMedia(_gthis->persistence,hash->algorithm,hash->hash);
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_927_moderateMessage)
+HXLINE( 928)				if (::hx::IsNull( moderateMessage )) {
+HXLINE( 928)					resolve(null());
+HXDLIN( 928)					return;
+            				}
+HXLINE( 929)				{
+HXLINE( 929)					int _g = 0;
+HXDLIN( 929)					::Array< ::Dynamic> _g1 = moderateMessage->attachments;
+HXDLIN( 929)					while((_g < _g1->length)){
+HXLINE( 929)						 ::snikket::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::snikket::ChatAttachment >();
+HXDLIN( 929)						_g = (_g + 1);
+HXLINE( 930)						{
+HXLINE( 930)							int _g2 = 0;
+HXDLIN( 930)							::Array< ::Dynamic> _g3 = attachment->hashes;
+HXDLIN( 930)							while((_g2 < _g3->length)){
+HXLINE( 930)								 ::snikket::Hash hash = _g3->__get(_g2).StaticCast<  ::snikket::Hash >();
+HXDLIN( 930)								_g2 = (_g2 + 1);
+HXLINE( 931)								::snikket::Persistence_obj::removeMedia(_gthis->persistence,hash->algorithm,hash->hash);
             							}
             						}
             					}
             				}
-HXLINE( 936)				moderateMessage = ::snikket::ChatMessageBuilder_obj::makeModerated(moderateMessage,action->timestamp,action->moderatorId,action->reason);
-HXLINE( 937)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 937)				::snikket::Persistence_obj::updateMessage(_gthis1,_gthis->accountId(),moderateMessage);
-HXLINE( 938)				resolve(moderateMessage);
+HXLINE( 934)				moderateMessage = ::snikket::ChatMessageBuilder_obj::makeModerated(moderateMessage,action->timestamp,action->moderatorId,action->reason);
+HXLINE( 935)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 935)				::snikket::Persistence_obj::updateMessage(_gthis1,_gthis->accountId(),moderateMessage);
+HXLINE( 936)				resolve(moderateMessage);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_929_moderateMessage)
-HXLINE( 929)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 929)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 929)			::snikket::Persistence_obj::getMessage(_gthis1,_hx_tmp,action->chatId,action->moderateServerId,null(), ::Dynamic(new _hx_Closure_0(_gthis,action,resolve)));
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_927_moderateMessage)
+HXLINE( 927)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 927)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 927)			::snikket::Persistence_obj::getMessage(_gthis1,_hx_tmp,action->chatId,action->moderateServerId,null(), ::Dynamic(new _hx_Closure_0(_gthis,action,resolve)));
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_927_moderateMessage)
-HXDLIN( 927)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 928)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,action)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_925_moderateMessage)
+HXDLIN( 925)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 926)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,action)));
             	}
 
 
@@ -2917,50 +2929,210 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,moderateMessage,return )
 
  ::snikket::DirectChat Client_obj::getDirectChat(::String chatId,::hx::Null< bool >  __o_triggerIfNew){
             		bool triggerIfNew = __o_triggerIfNew.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_944_getDirectChat)
-HXLINE( 945)		{
-HXLINE( 945)			int _g = 0;
-HXDLIN( 945)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN( 945)			while((_g < _g1->length)){
-HXLINE( 945)				 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN( 945)				_g = (_g + 1);
-HXLINE( 946)				bool _hx_tmp;
-HXDLIN( 946)				if (::Std_obj::isOfType(chat,::hx::ClassOf< ::snikket::DirectChat >())) {
-HXLINE( 946)					_hx_tmp = (chat->chatId == chatId);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_942_getDirectChat)
+HXLINE( 943)		{
+HXLINE( 943)			int _g = 0;
+HXDLIN( 943)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN( 943)			while((_g < _g1->length)){
+HXLINE( 943)				 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN( 943)				_g = (_g + 1);
+HXLINE( 944)				bool _hx_tmp;
+HXDLIN( 944)				if (::Std_obj::isOfType(chat,::hx::ClassOf< ::snikket::DirectChat >())) {
+HXLINE( 944)					_hx_tmp = (chat->chatId == chatId);
             				}
             				else {
-HXLINE( 946)					_hx_tmp = false;
+HXLINE( 944)					_hx_tmp = false;
             				}
-HXDLIN( 946)				if (_hx_tmp) {
-HXLINE( 947)					return ( ( ::snikket::DirectChat)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::DirectChat >())) );
+HXDLIN( 944)				if (_hx_tmp) {
+HXLINE( 945)					return ( ( ::snikket::DirectChat)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::DirectChat >())) );
             				}
             			}
             		}
-HXLINE( 950)		 ::snikket::DirectChat chat1 =  ::snikket::DirectChat_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,chatId,null(),null(),null(),null(),null());
-HXLINE( 951)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 951)		::snikket::Persistence_obj::storeChats(_hx_tmp1,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
-HXLINE( 952)		this->chats->unshift(chat1);
-HXLINE( 953)		if (triggerIfNew) {
-HXLINE( 953)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
+HXLINE( 948)		 ::snikket::DirectChat chat1 =  ::snikket::DirectChat_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,chatId,null(),null(),null(),null(),null());
+HXLINE( 949)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 949)		::snikket::Persistence_obj::storeChats(_hx_tmp1,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE( 950)		this->chats->unshift(chat1);
+HXLINE( 951)		if (triggerIfNew) {
+HXLINE( 951)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
             		}
-HXLINE( 954)		return chat1;
+HXLINE( 952)		return chat1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,getDirectChat,return )
 
+void Client_obj::enablePush(::String push_service,::String endpoint,::Array< unsigned char > p256dh,::Array< unsigned char > auth,int grace,::Array< unsigned char > vapid_private_pkcs8,::Array< ::String > claims){
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_995_enablePush)
+HXLINE( 996)		::Array< ::String > tmp = claims;
+HXDLIN( 996)		::Array< ::String > _hx_tmp;
+HXDLIN( 996)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 996)			_hx_tmp = tmp;
+            		}
+            		else {
+HXLINE( 996)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+            		}
+HXDLIN( 996)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
+            			->setFixed(0,HX_("grace",f8,03,ea,99),grace)
+            			->setFixed(1,HX_("p256dh",e7,0a,33,b5),p256dh)
+            			->setFixed(2,HX_("push_service",90,f1,d2,f8),push_service)
+            			->setFixed(3,HX_("vapid_private_pkcs8",32,d7,0a,03),vapid_private_pkcs8)
+            			->setFixed(4,HX_("claims",77,1d,09,05),_hx_tmp)
+            			->setFixed(5,HX_("endpoint",95,d6,5f,31),endpoint)
+            			->setFixed(6,HX_("auth",68,df,76,40),auth));
+HXLINE( 998)		::Array< ::Dynamic> filters = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 999)		{
+HXLINE( 999)			int _g = 0;
+HXDLIN( 999)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN( 999)			while((_g < _g1->length)){
+HXLINE( 999)				 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN( 999)				_g = (_g + 1);
+HXLINE(1000)				if (chat->notificationsFiltered()) {
+HXLINE(1001)					::String chat1 = chat->chatId;
+HXDLIN(1001)					bool _hx_tmp1 = chat->notifyMention();
+HXDLIN(1001)					filters->push( ::Dynamic(::hx::Anon_obj::Create(3)
+            						->setFixed(0,HX_("mention",ea,9e,bf,b9),_hx_tmp1)
+            						->setFixed(1,HX_("reply",2a,09,c6,e6),chat->notifyReply())
+            						->setFixed(2,HX_("jid",c5,ca,50,00),chat1)));
+            				}
+            			}
+            		}
+HXLINE(1005)		 ::haxe::ds::StringMap _g2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(1005)		_g2->set(HX_("aud",f0,00,4a,00),( (::Array< ::String >)(::tink::_Url::Url_Impl__obj::parse(endpoint,null())->__Field(HX_("hosts",0b,ac,62,2b),::hx::paccDynamic)) )->__get(0));
+HXDLIN(1005)		 ::haxe::ds::StringMap claimMap = _g2;
+HXLINE(1006)		{
+HXLINE(1006)			int _g3 = 0;
+HXDLIN(1006)			::Array< ::String > tmp1 = claims;
+HXDLIN(1006)			::Array< ::String > _g4;
+HXDLIN(1006)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1006)				_g4 = tmp1;
+            			}
+            			else {
+HXLINE(1006)				_g4 = ::Array_obj< ::String >::__new(0);
+            			}
+HXDLIN(1006)			int _g5 = _g4->length;
+HXDLIN(1006)			while((_g3 < _g5)){
+HXLINE(1006)				_g3 = (_g3 + 1);
+HXDLIN(1006)				int i = (_g3 - 1);
+HXLINE(1007)				if ((::hx::Mod(i,2) == 0)) {
+HXLINE(1008)					::String v = claims->__get((i + 1));
+HXDLIN(1008)					claimMap->set(claims->__get(i),v);
+            				}
+            			}
+            		}
+HXLINE(1013)		::String _hx_tmp2 = this->jid->asBare()->asString();
+HXLINE(1016)		 ::haxe::io::Bytes _hx_tmp3 = ::haxe::io::Bytes_obj::ofData(p256dh);
+HXLINE(1017)		 ::haxe::io::Bytes _hx_tmp4 = ::haxe::io::Bytes_obj::ofData(auth);
+HXLINE(1018)		::String _hx_tmp5;
+HXDLIN(1018)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE(1018)			_hx_tmp5 = null();
+            		}
+            		else {
+HXLINE(1018)			_hx_tmp5 = HX_("ES256",65,db,a8,f1);
+            		}
+HXLINE(1019)		 ::haxe::io::Bytes _hx_tmp6;
+HXDLIN(1019)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE(1019)			_hx_tmp6 = null();
+            		}
+            		else {
+HXLINE(1019)			_hx_tmp6 = ::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8);
+            		}
+HXLINE(1012)		this->sendQuery( ::snikket::queries::Push2Enable_obj::__alloc( HX_CTX ,_hx_tmp2,push_service,endpoint,_hx_tmp3,_hx_tmp4,_hx_tmp5,_hx_tmp6,claimMap,grace,filters));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC7(Client_obj,enablePush,(void))
+
+void Client_obj::enablePush__fromC(::String push_service,::String endpoint,::cpp::Pointer< unsigned char > p256dh,size_t p256dh__len,::cpp::Pointer< unsigned char > auth,size_t auth__len,int grace,::cpp::Pointer< unsigned char > vapid_private_pkcs8,size_t vapid_private_pkcs8__len,::cpp::Pointer< const char* > claims,size_t claims__len){
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_enablePush__fromC)
+HXLINE( 231)		::Array< unsigned char > _hx_tmp;
+HXDLIN( 231)		if (::hx::IsNull( p256dh )) {
+HXLINE( 231)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 231)			::cpp::Pointer< unsigned char > _this = p256dh->reinterpret();
+HXDLIN( 231)			::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 231)			::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 231)			result->setUnmanagedData(tmp,( (int)(p256dh__len) ));
+HXDLIN( 231)			_hx_tmp = result->copy();
+            		}
+HXDLIN( 231)		::Array< unsigned char > _hx_tmp1;
+HXDLIN( 231)		if (::hx::IsNull( auth )) {
+HXLINE( 231)			_hx_tmp1 = null();
+            		}
+            		else {
+HXLINE( 231)			::cpp::Pointer< unsigned char > _this1 = auth->reinterpret();
+HXDLIN( 231)			::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 231)			::cpp::Pointer< unsigned char > tmp1 = _this1;
+HXDLIN( 231)			result1->setUnmanagedData(tmp1,( (int)(auth__len) ));
+HXDLIN( 231)			_hx_tmp1 = result1->copy();
+            		}
+HXDLIN( 231)		::Array< unsigned char > _hx_tmp2;
+HXDLIN( 231)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE( 231)			_hx_tmp2 = null();
+            		}
+            		else {
+HXLINE( 231)			::cpp::Pointer< unsigned char > _this2 = vapid_private_pkcs8->reinterpret();
+HXDLIN( 231)			::Array< unsigned char > result2 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 231)			::cpp::Pointer< unsigned char > tmp2 = _this2;
+HXDLIN( 231)			result2->setUnmanagedData(tmp2,( (int)(vapid_private_pkcs8__len) ));
+HXDLIN( 231)			_hx_tmp2 = result2->copy();
+            		}
+HXLINE( 229)		::Array< ::String > _hx_tmp3;
+HXDLIN( 229)		if (::hx::IsNull( claims )) {
+HXLINE( 229)			_hx_tmp3 = null();
+            		}
+            		else {
+HXLINE( 229)			::cpp::Pointer< ::cpp::Pointer< char > > _this3 = claims->reinterpret();
+HXDLIN( 229)			::Array< ::cpp::Pointer< char > > result3 = ::Array_obj< ::cpp::Pointer< char > >::__new();
+HXDLIN( 229)			::cpp::Pointer< ::cpp::Pointer< char > > tmp3 = _this3;
+HXDLIN( 229)			result3->setUnmanagedData(tmp3,( (int)(claims__len) ));
+HXDLIN( 229)			::Array< ::cpp::Pointer< char > > _this4 = result3;
+HXDLIN( 229)			 ::Dynamic f = ::cpp::_NativeString::NativeString_Impl__obj::fromPointer_dyn();
+HXDLIN( 229)			::Array< ::String > result4 = ::Array_obj< ::String >::__new(_this4->length);
+HXDLIN( 229)			{
+HXLINE( 229)				int _g = 0;
+HXDLIN( 229)				int _g1 = _this4->length;
+HXDLIN( 229)				while((_g < _g1)){
+HXLINE( 229)					_g = (_g + 1);
+HXDLIN( 229)					int i = (_g - 1);
+HXDLIN( 229)					{
+HXLINE( 229)						::cpp::Pointer< char > tmp4 = _hx_array_unsafe_get(_this4,i);
+HXDLIN( 229)						::String inValue = ( (::String)(f(tmp4)) );
+HXDLIN( 229)						result4->__unsafe_set(i,inValue);
+            					}
+            				}
+            			}
+HXDLIN( 229)			_hx_tmp3 = result4->copy();
+            		}
+HXLINE( 252)		this->enablePush(push_service,endpoint,_hx_tmp,_hx_tmp1,grace,_hx_tmp2,_hx_tmp3);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC11(Client_obj,enablePush__fromC,(void))
+
+void Client_obj::updatePushIfEnabled(){
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1027_updatePushIfEnabled)
+HXLINE(1028)		if (::hx::IsNull( this->enabledPushData )) {
+HXLINE(1028)			return;
+            		}
+HXLINE(1029)		this->enablePush(( (::String)(this->enabledPushData->__Field(HX_("push_service",90,f1,d2,f8),::hx::paccDynamic)) ),( (::String)(this->enabledPushData->__Field(HX_("endpoint",95,d6,5f,31),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("p256dh",e7,0a,33,b5),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("auth",68,df,76,40),::hx::paccDynamic)) ),( (int)(this->enabledPushData->__Field(HX_("grace",f8,03,ea,99),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("vapid_private_pkcs8",32,d7,0a,03),::hx::paccDynamic)) ),( (::Array< ::String >)(this->enabledPushData->__Field(HX_("claims",77,1d,09,05),::hx::paccDynamic)) ));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Client_obj,updatePushIfEnabled,(void))
+
 void Client_obj::addPasswordNeededListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1020_addPasswordNeededListener)
-HXLINE(1021)			handler(_gthis);
-HXLINE(1022)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1038_addPasswordNeededListener)
+HXLINE(1039)			handler(_gthis);
+HXLINE(1040)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1019_addPasswordNeededListener)
-HXDLIN(1019)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1020)		this->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_0(_gthis,handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1037_addPasswordNeededListener)
+HXDLIN(1037)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1038)		this->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_0(_gthis,handler)));
             	}
 
 
@@ -2989,22 +3161,22 @@ HXLINE( 221)			handler1(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addPasswordNeededListener__fromC)
-HXDLIN( 244)		this->addPasswordNeededListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addPasswordNeededListener__fromC)
+HXDLIN( 252)		this->addPasswordNeededListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addStatusOnlineListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1032_addStatusOnlineListener)
-HXLINE(1033)			handler();
-HXLINE(1034)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1050_addStatusOnlineListener)
+HXLINE(1051)			handler();
+HXLINE(1052)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1032_addStatusOnlineListener)
-HXDLIN(1032)		this->on(HX_("status/online",10,05,0e,d2), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1050_addStatusOnlineListener)
+HXDLIN(1050)		this->on(HX_("status/online",10,05,0e,d2), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3018,22 +3190,22 @@ HXLINE( 221)			handler(handler__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addStatusOnlineListener__fromC)
-HXDLIN( 244)		this->addStatusOnlineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addStatusOnlineListener__fromC)
+HXDLIN( 252)		this->addStatusOnlineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addStatusOfflineListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1044_addStatusOfflineListener)
-HXLINE(1045)			handler();
-HXLINE(1046)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1062_addStatusOfflineListener)
+HXLINE(1063)			handler();
+HXLINE(1064)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1044_addStatusOfflineListener)
-HXDLIN(1044)		this->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1062_addStatusOfflineListener)
+HXDLIN(1062)		this->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3047,22 +3219,22 @@ HXLINE( 221)			handler(handler__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addStatusOfflineListener__fromC)
-HXDLIN( 244)		this->addStatusOfflineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addStatusOfflineListener__fromC)
+HXDLIN( 252)		this->addStatusOfflineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addConnectionFailedListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1056_addConnectionFailedListener)
-HXLINE(1057)			handler();
-HXLINE(1058)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1074_addConnectionFailedListener)
+HXLINE(1075)			handler();
+HXLINE(1076)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1056_addConnectionFailedListener)
-HXDLIN(1056)		this->stream->on(HX_("status/error",eb,19,84,6f), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1074_addConnectionFailedListener)
+HXDLIN(1074)		this->stream->on(HX_("status/error",eb,19,84,6f), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3076,21 +3248,21 @@ HXLINE( 221)			handler(handler__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addConnectionFailedListener__fromC)
-HXDLIN( 244)		this->addConnectionFailedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addConnectionFailedListener__fromC)
+HXDLIN( 252)		this->addConnectionFailedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addChatMessageListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(2)
             		void _hx_run( ::snikket::ChatMessage m,int e){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1081_addChatMessageListener)
-HXDLIN(1081)			handler(m,e);
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1099_addChatMessageListener)
+HXDLIN(1099)			handler(m,e);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1081_addChatMessageListener)
-HXDLIN(1081)		this->chatMessageHandlers->push( ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1099_addChatMessageListener)
+HXDLIN(1099)		this->chatMessageHandlers->push( ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3119,14 +3291,14 @@ HXLINE( 221)			handler1(ptr,a1,handler__context);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addChatMessageListener__fromC)
-HXDLIN( 244)		this->addChatMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addChatMessageListener__fromC)
+HXDLIN( 252)		this->addChatMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addSyncMessageListener( ::Dynamic handler){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1095_addSyncMessageListener)
-HXDLIN(1095)		this->syncMessageHandlers->push(handler);
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1113_addSyncMessageListener)
+HXDLIN(1113)		this->syncMessageHandlers->push(handler);
             	}
 
 
@@ -3155,22 +3327,22 @@ HXLINE( 221)			handler1(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addSyncMessageListener__fromC)
-HXDLIN( 244)		this->addSyncMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addSyncMessageListener__fromC)
+HXDLIN( 252)		this->addSyncMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addChatsUpdatedListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run(::Array< ::Dynamic> data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1104_addChatsUpdatedListener)
-HXLINE(1105)			handler(data);
-HXLINE(1106)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1122_addChatsUpdatedListener)
+HXLINE(1123)			handler(data);
+HXLINE(1124)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1104_addChatsUpdatedListener)
-HXDLIN(1104)		this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1122_addChatsUpdatedListener)
+HXDLIN(1122)		this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3221,22 +3393,22 @@ HXLINE( 221)			handler1(ptr1,( (size_t)(a0->length) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addChatsUpdatedListener__fromC)
-HXDLIN( 244)		this->addChatsUpdatedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addChatsUpdatedListener__fromC)
+HXDLIN( 252)		this->addChatsUpdatedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addCallRingListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1116_addCallRingListener)
-HXLINE(1117)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE(1118)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1134_addCallRingListener)
+HXLINE(1135)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE(1136)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1116_addCallRingListener)
-HXDLIN(1116)		this->on(HX_("call/ring",01,8e,91,54), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1134_addCallRingListener)
+HXDLIN(1134)		this->on(HX_("call/ring",01,8e,91,54), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3278,22 +3450,22 @@ HXLINE( 221)			handler1(ptr,cStrPtr,handler__context);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addCallRingListener__fromC)
-HXDLIN( 244)		this->addCallRingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addCallRingListener__fromC)
+HXDLIN( 252)		this->addCallRingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addCallRetractListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1128_addCallRetractListener)
-HXLINE(1129)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE(1130)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1146_addCallRetractListener)
+HXLINE(1147)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE(1148)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1128_addCallRetractListener)
-HXDLIN(1128)		this->on(HX_("call/retract",50,bc,8d,db), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1146_addCallRetractListener)
+HXDLIN(1146)		this->on(HX_("call/retract",50,bc,8d,db), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3321,22 +3493,22 @@ HXLINE( 221)			handler1(cStrPtr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addCallRetractListener__fromC)
-HXDLIN( 244)		this->addCallRetractListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addCallRetractListener__fromC)
+HXDLIN( 252)		this->addCallRetractListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addCallRingingListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1140_addCallRingingListener)
-HXLINE(1141)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE(1142)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1158_addCallRingingListener)
+HXLINE(1159)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE(1160)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1140_addCallRingingListener)
-HXDLIN(1140)		this->on(HX_("call/ringing",81,75,54,f9), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1158_addCallRingingListener)
+HXDLIN(1158)		this->on(HX_("call/ringing",81,75,54,f9), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3364,22 +3536,22 @@ HXLINE( 221)			handler1(cStrPtr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addCallRingingListener__fromC)
-HXDLIN( 244)		this->addCallRingingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addCallRingingListener__fromC)
+HXDLIN( 252)		this->addCallRingingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addCallMediaListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1154_addCallMediaListener)
-HXLINE(1155)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("audio",d6,78,80,27),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("video",7b,14,fc,36),::hx::paccDynamic)));
-HXLINE(1156)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1172_addCallMediaListener)
+HXLINE(1173)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("audio",d6,78,80,27),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("video",7b,14,fc,36),::hx::paccDynamic)));
+HXLINE(1174)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1154_addCallMediaListener)
-HXDLIN(1154)		this->on(HX_("call/media",73,5d,1d,c7), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1172_addCallMediaListener)
+HXDLIN(1172)		this->on(HX_("call/media",73,5d,1d,c7), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3408,22 +3580,22 @@ HXLINE( 221)			handler1(ptr,a1,a2,handler__context);
             		}
             		HX_END_LOCAL_FUNC3((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addCallMediaListener__fromC)
-HXDLIN( 244)		this->addCallMediaListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addCallMediaListener__fromC)
+HXDLIN( 252)		this->addCallMediaListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::addCallTrackListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1167_addCallTrackListener)
-HXLINE(1168)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)));
-HXLINE(1169)			return ::snikket::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1185_addCallTrackListener)
+HXLINE(1186)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)));
+HXLINE(1187)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1167_addCallTrackListener)
-HXDLIN(1167)		this->on(HX_("call/track",1a,e7,80,d7), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1185_addCallTrackListener)
+HXDLIN(1185)		this->on(HX_("call/track",1a,e7,80,d7), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3503,18 +3675,18 @@ HXLINE( 221)			handler1(_hx_tmp,_hx_tmp1,ptr2,( (size_t)(a2->length) ),handler__
             		}
             		HX_END_LOCAL_FUNC3((void))
 
-            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_244_addCallTrackListener__fromC)
-HXDLIN( 244)		this->addCallTrackListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_e44af0c967c6b6e2_252_addCallTrackListener__fromC)
+HXDLIN( 252)		this->addCallTrackListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::setInForeground(){
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1176_setInForeground)
-HXLINE(1177)		if (!(this->stream->csi)) {
-HXLINE(1177)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1194_setInForeground)
+HXLINE(1195)		if (!(this->stream->csi)) {
+HXLINE(1195)			return;
             		}
-HXLINE(1178)		 ::snikket::GenericStream _hx_tmp = this->stream;
-HXDLIN(1178)		_hx_tmp->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1196)		 ::snikket::GenericStream _hx_tmp = this->stream;
+HXDLIN(1196)		_hx_tmp->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24)))));
             	}
 
@@ -3522,12 +3694,12 @@ HXDLIN(1178)		_hx_tmp->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,setInForeground,(void))
 
 void Client_obj::setNotInForeground(){
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1184_setNotInForeground)
-HXLINE(1185)		if (!(this->stream->csi)) {
-HXLINE(1185)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1202_setNotInForeground)
+HXLINE(1203)		if (!(this->stream->csi)) {
+HXLINE(1203)			return;
             		}
-HXLINE(1186)		 ::snikket::GenericStream _hx_tmp = this->stream;
-HXDLIN(1186)		_hx_tmp->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1204)		 ::snikket::GenericStream _hx_tmp = this->stream;
+HXDLIN(1204)		_hx_tmp->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24)))));
             	}
 
@@ -3537,33 +3709,33 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,setNotInForeground,(void))
 ::Dynamic Client_obj::fetchMediaByHash(::Array< ::Dynamic> hashes,::Array< ::Dynamic> counterparts){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::Dynamic _hx_run( ::Dynamic x){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1194_fetchMediaByHash)
-HXLINE(1194)			return x;
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1212_fetchMediaByHash)
+HXLINE(1212)			return x;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,counterparts) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1194_fetchMediaByHash)
-HXLINE(1194)			 ::snikket::Client _gthis1 = _gthis;
-HXDLIN(1194)			::Array< ::Dynamic> hashes1 = hashes;
-HXDLIN(1194)			return _gthis1->fetchMediaByHash(hashes1,counterparts->slice(1,null()));
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1212_fetchMediaByHash)
+HXLINE(1212)			 ::snikket::Client _gthis1 = _gthis;
+HXDLIN(1212)			::Array< ::Dynamic> hashes1 = hashes;
+HXDLIN(1212)			return _gthis1->fetchMediaByHash(hashes1,counterparts->slice(1,null()));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1190_fetchMediaByHash)
-HXDLIN(1190)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1193)		bool _hx_tmp;
-HXDLIN(1193)		if ((hashes->length >= 1)) {
-HXLINE(1193)			_hx_tmp = (counterparts->length < 1);
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1208_fetchMediaByHash)
+HXDLIN(1208)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1211)		bool _hx_tmp;
+HXDLIN(1211)		if ((hashes->length >= 1)) {
+HXLINE(1211)			_hx_tmp = (counterparts->length < 1);
             		}
             		else {
-HXLINE(1193)			_hx_tmp = true;
+HXLINE(1211)			_hx_tmp = true;
             		}
-HXDLIN(1193)		if (_hx_tmp) {
-HXLINE(1193)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no counterparts left",64,15,a4,38));
+HXDLIN(1211)		if (_hx_tmp) {
+HXLINE(1211)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no counterparts left",64,15,a4,38));
             		}
-HXLINE(1194)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchMediaByHashOneCounterpart(hashes,counterparts->__get(0).StaticCast<  ::snikket::JID >()), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,hashes,counterparts)));
+HXLINE(1212)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchMediaByHashOneCounterpart(hashes,counterparts->__get(0).StaticCast<  ::snikket::JID >()), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,hashes,counterparts)));
             	}
 
 
@@ -3572,8 +3744,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,fetchMediaByHash,return )
 ::Dynamic Client_obj::fetchMediaByHashOneCounterpart(::Array< ::Dynamic> hashes, ::snikket::JID counterpart){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis,::Array< ::Dynamic>,hashes) HXARGC(2)
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1201_fetchMediaByHashOneCounterpart)
-HXLINE(1201)			::snikket::Persistence_obj::hasMedia(_gthis->persistence,hashes->__get(0).StaticCast<  ::snikket::Hash >()->algorithm,hashes->__get(0).StaticCast<  ::snikket::Hash >()->hash,resolve);
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1219_fetchMediaByHashOneCounterpart)
+HXLINE(1219)			::snikket::Persistence_obj::hasMedia(_gthis->persistence,hashes->__get(0).StaticCast<  ::snikket::Hash >()->algorithm,hashes->__get(0).StaticCast<  ::snikket::Hash >()->hash,resolve);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
@@ -3583,62 +3755,62 @@ HXLINE(1201)			::snikket::Persistence_obj::hasMedia(_gthis->persistence,hashes->
             			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             				HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2, ::snikket::Client,_gthis, ::Dynamic,resolve, ::Dynamic,reject, ::snikket::queries::BoB,q1) HXARGC(0)
             				void _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1207_fetchMediaByHashOneCounterpart)
-HXLINE(1208)					 ::Dynamic r = q1->getResult();
-HXLINE(1209)					if (::hx::IsNull( r )) {
-HXLINE(1210)						reject(HX_("bad or no result from BoB query",ad,e0,04,ee));
+            					HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1225_fetchMediaByHashOneCounterpart)
+HXLINE(1226)					 ::Dynamic r = q1->getResult();
+HXLINE(1227)					if (::hx::IsNull( r )) {
+HXLINE(1228)						reject(HX_("bad or no result from BoB query",ad,e0,04,ee));
             					}
             					else {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,resolve) HXARGC(0)
             						void _hx_run(){
-            							HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1212_fetchMediaByHashOneCounterpart)
-HXLINE(1212)							resolve(null());
+            							HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1230_fetchMediaByHashOneCounterpart)
+HXLINE(1230)							resolve(null());
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1212)						::snikket::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic(r->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)),( ( ::haxe::io::Bytes)(r->__Field(HX_("bytes",6b,08,98,bd),::hx::paccDynamic)) )->b, ::Dynamic(new _hx_Closure_1(resolve)));
+HXLINE(1230)						::snikket::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic(r->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)),( ( ::haxe::io::Bytes)(r->__Field(HX_("bytes",6b,08,98,bd),::hx::paccDynamic)) )->b, ::Dynamic(new _hx_Closure_1(resolve)));
             					}
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1205_fetchMediaByHashOneCounterpart)
-HXLINE(1206)				::String q = counterpart->asString();
-HXDLIN(1206)				 ::snikket::queries::BoB q1 = ::snikket::queries::BoB_obj::forHash(q,hashes->__get(0).StaticCast<  ::snikket::Hash >());
-HXLINE(1207)				q1->onFinished( ::Dynamic(new _hx_Closure_2(_gthis,resolve,reject,q1)));
-HXLINE(1215)				_gthis->sendQuery(q1);
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1223_fetchMediaByHashOneCounterpart)
+HXLINE(1224)				::String q = counterpart->asString();
+HXDLIN(1224)				 ::snikket::queries::BoB q1 = ::snikket::queries::BoB_obj::forHash(q,hashes->__get(0).StaticCast<  ::snikket::Hash >());
+HXLINE(1225)				q1->onFinished( ::Dynamic(new _hx_Closure_2(_gthis,resolve,reject,q1)));
+HXLINE(1233)				_gthis->sendQuery(q1);
             			}
             			HX_END_LOCAL_FUNC2((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             			 ::Dynamic _hx_run( ::Dynamic x){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1216_fetchMediaByHashOneCounterpart)
-HXLINE(1216)				return x;
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1234_fetchMediaByHashOneCounterpart)
+HXLINE(1234)				return x;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_5, ::snikket::JID,counterpart, ::snikket::Client,_gthis,::Array< ::Dynamic>,hashes) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1216_fetchMediaByHashOneCounterpart)
-HXLINE(1216)				 ::snikket::Client _gthis1 = _gthis;
-HXDLIN(1216)				::Array< ::Dynamic> _hx_tmp = hashes->slice(1,null());
-HXDLIN(1216)				return _gthis1->fetchMediaByHashOneCounterpart(_hx_tmp,counterpart);
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1234_fetchMediaByHashOneCounterpart)
+HXLINE(1234)				 ::snikket::Client _gthis1 = _gthis;
+HXDLIN(1234)				::Array< ::Dynamic> _hx_tmp = hashes->slice(1,null());
+HXDLIN(1234)				return _gthis1->fetchMediaByHashOneCounterpart(_hx_tmp,counterpart);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1202_fetchMediaByHashOneCounterpart)
-HXLINE(1203)			if (has) {
-HXLINE(1203)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1220_fetchMediaByHashOneCounterpart)
+HXLINE(1221)			if (has) {
+HXLINE(1221)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
-HXLINE(1205)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(counterpart,_gthis,hashes))), ::Dynamic(new _hx_Closure_4()), ::Dynamic(new _hx_Closure_5(counterpart,_gthis,hashes)));
+HXLINE(1223)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(counterpart,_gthis,hashes))), ::Dynamic(new _hx_Closure_4()), ::Dynamic(new _hx_Closure_5(counterpart,_gthis,hashes)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1197_fetchMediaByHashOneCounterpart)
-HXDLIN(1197)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1198)		if ((hashes->length < 1)) {
-HXLINE(1198)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no hashes left",8c,68,e6,69));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1215_fetchMediaByHashOneCounterpart)
+HXDLIN(1215)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1216)		if ((hashes->length < 1)) {
+HXLINE(1216)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no hashes left",8c,68,e6,69));
             		}
-HXLINE(1200)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis,hashes))), ::Dynamic(new _hx_Closure_6(counterpart,_gthis,hashes)),null());
+HXLINE(1218)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis,hashes))), ::Dynamic(new _hx_Closure_6(counterpart,_gthis,hashes)),null());
             	}
 
 
@@ -3646,43 +3818,43 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,fetchMediaByHashOneCounterpart,return )
 
 void Client_obj::chatActivity( ::snikket::Chat chat,::hx::Null< bool >  __o_trigger){
             		bool trigger = __o_trigger.Default(true);
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1221_chatActivity)
-HXLINE(1222)		if (chat->isBlocked) {
-HXLINE(1222)			return;
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1239_chatActivity)
+HXLINE(1240)		if (chat->isBlocked) {
+HXLINE(1240)			return;
             		}
-HXLINE(1223)		if ((chat->uiState == 2)) {
-HXLINE(1224)			chat->uiState = 1;
-HXLINE(1225)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1225)			::snikket::Persistence_obj::storeChats(_hx_tmp,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1241)		if ((chat->uiState == 2)) {
+HXLINE(1242)			chat->uiState = 1;
+HXLINE(1243)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1243)			::snikket::Persistence_obj::storeChats(_hx_tmp,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             		}
-HXLINE(1227)		int pinnedCount;
-HXDLIN(1227)		if ((chat->uiState == 0)) {
-HXLINE(1227)			pinnedCount = 0;
+HXLINE(1245)		int pinnedCount;
+HXDLIN(1245)		if ((chat->uiState == 0)) {
+HXLINE(1245)			pinnedCount = 0;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             			int _hx_run( ::snikket::Chat item,int result){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1227_chatActivity)
-HXLINE(1227)				int pinnedCount;
-HXDLIN(1227)				if ((item->uiState == 0)) {
-HXLINE(1227)					pinnedCount = 1;
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1245_chatActivity)
+HXLINE(1245)				int pinnedCount;
+HXDLIN(1245)				if ((item->uiState == 0)) {
+HXLINE(1245)					pinnedCount = 1;
             				}
             				else {
-HXLINE(1227)					pinnedCount = 0;
+HXLINE(1245)					pinnedCount = 0;
             				}
-HXDLIN(1227)				return (result + pinnedCount);
+HXDLIN(1245)				return (result + pinnedCount);
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1227)			pinnedCount = ( (int)(::Lambda_obj::fold(this->chats, ::Dynamic(new _hx_Closure_0()),0)) );
+HXLINE(1245)			pinnedCount = ( (int)(::Lambda_obj::fold(this->chats, ::Dynamic(new _hx_Closure_0()),0)) );
             		}
-HXLINE(1228)		int idx = this->chats->indexOf(chat,null());
-HXLINE(1229)		if ((idx > pinnedCount)) {
-HXLINE(1230)			this->chats->removeRange(idx,1);
-HXLINE(1231)			this->chats->insert(pinnedCount,chat);
+HXLINE(1246)		int idx = this->chats->indexOf(chat,null());
+HXLINE(1247)		if ((idx > pinnedCount)) {
+HXLINE(1248)			this->chats->removeRange(idx,1);
+HXLINE(1249)			this->chats->insert(pinnedCount,chat);
             		}
-HXLINE(1233)		if (trigger) {
-HXLINE(1233)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(1251)		if (trigger) {
+HXLINE(1251)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             		}
             	}
 
@@ -3692,129 +3864,129 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,chatActivity,(void))
 void Client_obj::sortChats(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		int _hx_run( ::snikket::Chat a, ::snikket::Chat b){
-            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1238_sortChats)
-HXLINE(1239)			bool _hx_tmp;
-HXDLIN(1239)			if ((a->uiState == 0)) {
-HXLINE(1239)				_hx_tmp = (b->uiState != 0);
+            			HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1256_sortChats)
+HXLINE(1257)			bool _hx_tmp;
+HXDLIN(1257)			if ((a->uiState == 0)) {
+HXLINE(1257)				_hx_tmp = (b->uiState != 0);
             			}
             			else {
-HXLINE(1239)				_hx_tmp = false;
+HXLINE(1257)				_hx_tmp = false;
             			}
-HXDLIN(1239)			if (_hx_tmp) {
-HXLINE(1239)				return -1;
+HXDLIN(1257)			if (_hx_tmp) {
+HXLINE(1257)				return -1;
             			}
-HXLINE(1240)			bool _hx_tmp1;
-HXDLIN(1240)			if ((b->uiState == 0)) {
-HXLINE(1240)				_hx_tmp1 = (a->uiState != 0);
+HXLINE(1258)			bool _hx_tmp1;
+HXDLIN(1258)			if ((b->uiState == 0)) {
+HXLINE(1258)				_hx_tmp1 = (a->uiState != 0);
             			}
             			else {
-HXLINE(1240)				_hx_tmp1 = false;
+HXLINE(1258)				_hx_tmp1 = false;
             			}
-HXDLIN(1240)			if (_hx_tmp1) {
-HXLINE(1240)				return 1;
+HXDLIN(1258)			if (_hx_tmp1) {
+HXLINE(1258)				return 1;
             			}
-HXLINE(1241)			::String _hx_tmp2;
-HXDLIN(1241)			::String tmp = a->lastMessageTimestamp();
-HXDLIN(1241)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1241)				_hx_tmp2 = tmp;
+HXLINE(1259)			::String _hx_tmp2;
+HXDLIN(1259)			::String tmp = a->lastMessageTimestamp();
+HXDLIN(1259)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1259)				_hx_tmp2 = tmp;
             			}
             			else {
-HXLINE(1241)				_hx_tmp2 = HX_("0",30,00,00,00);
+HXLINE(1259)				_hx_tmp2 = HX_("0",30,00,00,00);
             			}
-HXDLIN(1241)			::String tmp1 = b->lastMessageTimestamp();
-HXDLIN(1241)			::String _hx_tmp3;
-HXDLIN(1241)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1241)				_hx_tmp3 = tmp1;
+HXDLIN(1259)			::String tmp1 = b->lastMessageTimestamp();
+HXDLIN(1259)			::String _hx_tmp3;
+HXDLIN(1259)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1259)				_hx_tmp3 = tmp1;
             			}
             			else {
-HXLINE(1241)				_hx_tmp3 = HX_("0",30,00,00,00);
+HXLINE(1259)				_hx_tmp3 = HX_("0",30,00,00,00);
             			}
-HXDLIN(1241)			return -(::Reflect_obj::compare(_hx_tmp2,_hx_tmp3));
+HXDLIN(1259)			return -(::Reflect_obj::compare(_hx_tmp2,_hx_tmp3));
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1238_sortChats)
-HXDLIN(1238)		this->chats->sort( ::Dynamic(new _hx_Closure_0()));
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1256_sortChats)
+HXDLIN(1256)		this->chats->sort( ::Dynamic(new _hx_Closure_0()));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,sortChats,(void))
 
 void Client_obj::storeMessages(::Array< ::Dynamic> messages, ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1247_storeMessages)
-HXDLIN(1247)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1247)		::String _hx_tmp1 = this->accountId();
-HXDLIN(1247)		 ::Dynamic tmp = callback;
-HXDLIN(1247)		 ::Dynamic _hx_tmp2;
-HXDLIN(1247)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1247)			_hx_tmp2 = tmp;
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1265_storeMessages)
+HXDLIN(1265)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1265)		::String _hx_tmp1 = this->accountId();
+HXDLIN(1265)		 ::Dynamic tmp = callback;
+HXDLIN(1265)		 ::Dynamic _hx_tmp2;
+HXDLIN(1265)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1265)			_hx_tmp2 = tmp;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> _){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1247_storeMessages)
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1265_storeMessages)
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN(1247)			_hx_tmp2 =  ::Dynamic(new _hx_Closure_0());
+HXDLIN(1265)			_hx_tmp2 =  ::Dynamic(new _hx_Closure_0());
             		}
-HXDLIN(1247)		::snikket::Persistence_obj::storeMessages(_hx_tmp,_hx_tmp1,messages,_hx_tmp2);
+HXDLIN(1265)		::snikket::Persistence_obj::storeMessages(_hx_tmp,_hx_tmp1,messages,_hx_tmp2);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,storeMessages,(void))
 
 void Client_obj::sendQuery( ::snikket::queries::GenericQuery query){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1252_sendQuery)
-HXDLIN(1252)		 ::snikket::GenericStream _hx_tmp = this->stream;
-HXDLIN(1252)		_hx_tmp->sendIq(query->getQueryStanza(),query->handleResponse_dyn());
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1270_sendQuery)
+HXDLIN(1270)		 ::snikket::GenericStream _hx_tmp = this->stream;
+HXDLIN(1270)		_hx_tmp->sendIq(query->getQueryStanza(),query->handleResponse_dyn());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendQuery,(void))
 
 void Client_obj::sendStanza( ::snikket::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1256_sendStanza)
-HXLINE(1257)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1257)			 ::Dynamic this1 = stanza->attr;
-HXDLIN(1257)			::String value = ::snikket::ID_obj::_hx_long();
-HXDLIN(1257)			::Reflect_obj::setField(this1,HX_("id",db,5b,00,00),value);
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1274_sendStanza)
+HXLINE(1275)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE(1275)			 ::Dynamic this1 = stanza->attr;
+HXDLIN(1275)			::String value = ::snikket::ID_obj::_hx_long();
+HXDLIN(1275)			::Reflect_obj::setField(this1,HX_("id",db,5b,00,00),value);
             		}
-HXLINE(1258)		this->stream->sendStanza(stanza);
+HXLINE(1276)		this->stream->sendStanza(stanza);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendStanza,(void))
 
 void Client_obj::sendPresence(::String to, ::Dynamic augment){
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1263_sendPresence)
-HXLINE(1264)		 ::Dynamic tmp = augment;
-HXDLIN(1264)		 ::Dynamic _hx_tmp;
-HXDLIN(1264)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1264)			_hx_tmp = tmp;
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1281_sendPresence)
+HXLINE(1282)		 ::Dynamic tmp = augment;
+HXDLIN(1282)		 ::Dynamic _hx_tmp;
+HXDLIN(1282)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1282)			_hx_tmp = tmp;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			 ::snikket::Stanza _hx_run( ::snikket::Stanza s){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1264_sendPresence)
-HXLINE(1264)				return s;
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1282_sendPresence)
+HXLINE(1282)				return s;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1264)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
+HXLINE(1282)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
             		}
-HXLINE(1265)		 ::snikket::Caps _hx_tmp1 = this->caps;
-HXDLIN(1265)		 ::Dynamic _hx_tmp2;
-HXDLIN(1265)		if (::hx::IsNull( to )) {
-HXLINE(1265)			_hx_tmp2 =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(1283)		 ::snikket::Caps _hx_tmp1 = this->caps;
+HXDLIN(1283)		 ::Dynamic _hx_tmp2;
+HXDLIN(1283)		if (::hx::IsNull( to )) {
+HXLINE(1283)			_hx_tmp2 =  ::Dynamic(::hx::Anon_obj::Create(0));
             		}
             		else {
-HXLINE(1265)			_hx_tmp2 =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1283)			_hx_tmp2 =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("to",7b,65,00,00),to));
             		}
-HXDLIN(1265)		 ::snikket::Stanza _hx_tmp3 = _hx_tmp1->addC( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66),_hx_tmp2));
-HXLINE(1266)		::String _hx_tmp4 = this->displayName();
-HXLINE(1263)		this->sendStanza(( ( ::snikket::Stanza)(_hx_tmp(_hx_tmp3->textTag(HX_("nick",a3,7b,05,49),_hx_tmp4, ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1283)		 ::snikket::Stanza _hx_tmp3 = _hx_tmp1->addC( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66),_hx_tmp2));
+HXLINE(1284)		::String _hx_tmp4 = this->displayName();
+HXLINE(1281)		this->sendStanza(( ( ::snikket::Stanza)(_hx_tmp(_hx_tmp3->textTag(HX_("nick",a3,7b,05,49),_hx_tmp4, ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)))))) ));
             	}
 
@@ -3824,89 +3996,89 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,sendPresence,(void))
 void Client_obj::getIceServers( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::queries::ExtDiscoGet,extDiscoGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1274_getIceServers)
-HXLINE(1275)			 ::haxe::ds::StringMap didUrl =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1276)			::Array< ::Dynamic> servers = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1277)			{
-HXLINE(1277)				int _g = 0;
-HXDLIN(1277)				::Array< ::Dynamic> _g1;
-HXDLIN(1277)				::Array< ::Dynamic> tmp = extDiscoGet->getResult();
-HXDLIN(1277)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1277)					_g1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1292_getIceServers)
+HXLINE(1293)			 ::haxe::ds::StringMap didUrl =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1294)			::Array< ::Dynamic> servers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1295)			{
+HXLINE(1295)				int _g = 0;
+HXDLIN(1295)				::Array< ::Dynamic> _g1;
+HXDLIN(1295)				::Array< ::Dynamic> tmp = extDiscoGet->getResult();
+HXDLIN(1295)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1295)					_g1 = tmp;
             				}
             				else {
-HXLINE(1277)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1295)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
             				}
-HXDLIN(1277)				while((_g < _g1->length)){
-HXLINE(1277)					 ::snikket::Stanza service = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
-HXDLIN(1277)					_g = (_g + 1);
-HXLINE(1278)					if (!(::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_182,4)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) )))) {
-HXLINE(1278)						continue;
+HXDLIN(1295)				while((_g < _g1->length)){
+HXLINE(1295)					 ::snikket::Stanza service = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
+HXDLIN(1295)					_g = (_g + 1);
+HXLINE(1296)					if (!(::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_192,4)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) )))) {
+HXLINE(1296)						continue;
             					}
-HXLINE(1279)					::String host = ( (::String)(::Reflect_obj::field(service->attr,HX_("host",68,cf,12,45))) );
-HXLINE(1280)					bool _hx_tmp;
-HXDLIN(1280)					if (::hx::IsNotNull( host )) {
-HXLINE(1280)						_hx_tmp = (host == HX_("",00,00,00,00));
+HXLINE(1297)					::String host = ( (::String)(::Reflect_obj::field(service->attr,HX_("host",68,cf,12,45))) );
+HXLINE(1298)					bool _hx_tmp;
+HXDLIN(1298)					if (::hx::IsNotNull( host )) {
+HXLINE(1298)						_hx_tmp = (host == HX_("",00,00,00,00));
             					}
             					else {
-HXLINE(1280)						_hx_tmp = true;
+HXLINE(1298)						_hx_tmp = true;
             					}
-HXDLIN(1280)					if (_hx_tmp) {
-HXLINE(1280)						continue;
+HXDLIN(1298)					if (_hx_tmp) {
+HXLINE(1298)						continue;
             					}
-HXLINE(1281)					 ::Dynamic port = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(service->attr,HX_("port",81,83,5c,4a))) ));
-HXLINE(1282)					bool _hx_tmp1;
-HXDLIN(1282)					bool _hx_tmp2;
-HXDLIN(1282)					if (::hx::IsNotNull( port )) {
-HXLINE(1282)						_hx_tmp2 = ::hx::IsLess( port,1 );
+HXLINE(1299)					 ::Dynamic port = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(service->attr,HX_("port",81,83,5c,4a))) ));
+HXLINE(1300)					bool _hx_tmp1;
+HXDLIN(1300)					bool _hx_tmp2;
+HXDLIN(1300)					if (::hx::IsNotNull( port )) {
+HXLINE(1300)						_hx_tmp2 = ::hx::IsLess( port,1 );
             					}
             					else {
-HXLINE(1282)						_hx_tmp2 = true;
+HXLINE(1300)						_hx_tmp2 = true;
             					}
-HXDLIN(1282)					if (!(_hx_tmp2)) {
-HXLINE(1282)						_hx_tmp1 = ::hx::IsGreater( port,65535 );
+HXDLIN(1300)					if (!(_hx_tmp2)) {
+HXLINE(1300)						_hx_tmp1 = ::hx::IsGreater( port,65535 );
             					}
             					else {
-HXLINE(1282)						_hx_tmp1 = true;
+HXLINE(1300)						_hx_tmp1 = true;
             					}
-HXDLIN(1282)					if (_hx_tmp1) {
-HXLINE(1282)						continue;
+HXDLIN(1300)					if (_hx_tmp1) {
+HXLINE(1300)						continue;
             					}
-HXLINE(1283)					bool isTurn = ::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_183,2)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ));
-HXLINE(1284)					::String url = (( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ) + HX_(":",3a,00,00,00));
-HXDLIN(1284)					::String url1;
-HXDLIN(1284)					if ((host.indexOf(HX_(":",3a,00,00,00),null()) >= 0)) {
-HXLINE(1284)						url1 = ((HX_("[",5b,00,00,00) + host) + HX_("]",5d,00,00,00));
+HXLINE(1301)					bool isTurn = ::Array_obj< ::String >::fromData( _hx_array_data_7c06fe3c_193,2)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ));
+HXLINE(1302)					::String url = (( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ) + HX_(":",3a,00,00,00));
+HXDLIN(1302)					::String url1;
+HXDLIN(1302)					if ((host.indexOf(HX_(":",3a,00,00,00),null()) >= 0)) {
+HXLINE(1302)						url1 = ((HX_("[",5b,00,00,00) + host) + HX_("]",5d,00,00,00));
             					}
             					else {
-HXLINE(1284)						url1 = host;
+HXLINE(1302)						url1 = host;
             					}
-HXDLIN(1284)					::String url2;
-HXDLIN(1284)					if (isTurn) {
-HXLINE(1284)						url2 = (HX_("?transport=",73,c9,f2,13) + ( (::String)(::Reflect_obj::field(service->attr,HX_("transport",a9,4f,2f,4c))) ));
+HXDLIN(1302)					::String url2;
+HXDLIN(1302)					if (isTurn) {
+HXLINE(1302)						url2 = (HX_("?transport=",73,c9,f2,13) + ( (::String)(::Reflect_obj::field(service->attr,HX_("transport",a9,4f,2f,4c))) ));
             					}
             					else {
-HXLINE(1284)						url2 = HX_("",00,00,00,00);
+HXLINE(1302)						url2 = HX_("",00,00,00,00);
             					}
-HXDLIN(1284)					::String url3 = ((((url + url1) + HX_(":",3a,00,00,00)) + port) + url2);
-HXLINE(1285)					if (!(didUrl->exists(url3))) {
-HXLINE(1287)						::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(service->attr,HX_("username",16,86,eb,20))) );
-HXLINE(1286)						servers->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(1302)					::String url3 = ((((url + url1) + HX_(":",3a,00,00,00)) + port) + url2);
+HXLINE(1303)					if (!(didUrl->exists(url3))) {
+HXLINE(1305)						::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(service->attr,HX_("username",16,86,eb,20))) );
+HXLINE(1304)						servers->push( ::Dynamic(::hx::Anon_obj::Create(3)
             							->setFixed(0,HX_("credential",d7,89,b2,20),( (::String)(::Reflect_obj::field(service->attr,HX_("password",1b,23,d0,48))) ))
             							->setFixed(1,HX_("username",16,86,eb,20),_hx_tmp3)
             							->setFixed(2,HX_("urls",24,d6,ac,4d),::Array_obj< ::String >::__new(1)->init(0,url3))));
-HXLINE(1291)						didUrl->set(url3,true);
+HXLINE(1309)						didUrl->set(url3,true);
             					}
             				}
             			}
-HXLINE(1294)			callback(servers);
+HXLINE(1312)			callback(servers);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1272_getIceServers)
-HXLINE(1273)		 ::snikket::queries::ExtDiscoGet extDiscoGet =  ::snikket::queries::ExtDiscoGet_obj::__alloc( HX_CTX ,this->jid->domain);
-HXLINE(1274)		extDiscoGet->onFinished( ::Dynamic(new _hx_Closure_0(extDiscoGet,callback)));
-HXLINE(1296)		this->sendQuery(extDiscoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1290_getIceServers)
+HXLINE(1291)		 ::snikket::queries::ExtDiscoGet extDiscoGet =  ::snikket::queries::ExtDiscoGet_obj::__alloc( HX_CTX ,this->jid->domain);
+HXLINE(1292)		extDiscoGet->onFinished( ::Dynamic(new _hx_Closure_0(extDiscoGet,callback)));
+HXLINE(1314)		this->sendQuery(extDiscoGet);
             	}
 
 
@@ -3915,66 +4087,66 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,getIceServers,(void))
 void Client_obj::discoverServices( ::snikket::JID target,::String node, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::snikket::Client,_gthis, ::Dynamic,callback, ::snikket::queries::DiscoItemsGet,itemsGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1303_discoverServices)
-HXLINE(1303)			int _g = 0;
-HXDLIN(1303)			::Array< ::Dynamic> _g1;
-HXDLIN(1303)			::Array< ::Dynamic> tmp = itemsGet->getResult();
-HXDLIN(1303)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1303)				_g1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1321_discoverServices)
+HXLINE(1321)			int _g = 0;
+HXDLIN(1321)			::Array< ::Dynamic> _g1;
+HXDLIN(1321)			::Array< ::Dynamic> tmp = itemsGet->getResult();
+HXDLIN(1321)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1321)				_g1 = tmp;
             			}
             			else {
-HXLINE(1303)				_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1321)				_g1 = ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXDLIN(1303)			while((_g < _g1->length)){
+HXDLIN(1321)			while((_g < _g1->length)){
             				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::queries::DiscoInfoGet,infoGet1, ::Dynamic,item, ::Dynamic,callback) HXARGC(0)
             				void _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1306_discoverServices)
-HXLINE(1306)					 ::Dynamic callback1 = callback;
-HXDLIN(1306)					 ::Dynamic item1 = item;
-HXDLIN(1306)					callback1(item1,infoGet1->getResult());
+            					HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1324_discoverServices)
+HXLINE(1324)					 ::Dynamic callback1 = callback;
+HXDLIN(1324)					 ::Dynamic item1 = item;
+HXDLIN(1324)					callback1(item1,infoGet1->getResult());
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1303)				 ::Dynamic item = _g1->__get(_g);
-HXDLIN(1303)				_g = (_g + 1);
-HXLINE(1304)				::String infoGet = ( ( ::snikket::JID)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
-HXDLIN(1304)				 ::snikket::queries::DiscoInfoGet infoGet1 =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,infoGet,( (::String)(item->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) ));
-HXLINE(1305)				infoGet1->onFinished( ::Dynamic(new _hx_Closure_0(infoGet1,item,callback)));
-HXLINE(1308)				_gthis->sendQuery(infoGet1);
+HXLINE(1321)				 ::Dynamic item = _g1->__get(_g);
+HXDLIN(1321)				_g = (_g + 1);
+HXLINE(1322)				::String infoGet = ( ( ::snikket::JID)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
+HXDLIN(1322)				 ::snikket::queries::DiscoInfoGet infoGet1 =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,infoGet,( (::String)(item->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) ));
+HXLINE(1323)				infoGet1->onFinished( ::Dynamic(new _hx_Closure_0(infoGet1,item,callback)));
+HXLINE(1326)				_gthis->sendQuery(infoGet1);
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1300_discoverServices)
-HXDLIN(1300)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1301)		 ::snikket::queries::DiscoItemsGet itemsGet =  ::snikket::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,target->asString(),node);
-HXLINE(1302)		itemsGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,callback,itemsGet)));
-HXLINE(1311)		this->sendQuery(itemsGet);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1318_discoverServices)
+HXDLIN(1318)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1319)		 ::snikket::queries::DiscoItemsGet itemsGet =  ::snikket::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,target->asString(),node);
+HXLINE(1320)		itemsGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,callback,itemsGet)));
+HXLINE(1329)		this->sendQuery(itemsGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,discoverServices,(void))
 
 void Client_obj::notifyMessageHandlers( ::snikket::ChatMessage message,int event){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1315_notifyMessageHandlers)
-HXLINE(1316)		 ::snikket::Chat chat = this->getChat(message->chatId());
-HXLINE(1317)		bool _hx_tmp;
-HXDLIN(1317)		if (::hx::IsNotNull( chat )) {
-HXLINE(1317)			_hx_tmp = chat->isBlocked;
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1333_notifyMessageHandlers)
+HXLINE(1334)		 ::snikket::Chat chat = this->getChat(message->chatId());
+HXLINE(1335)		bool _hx_tmp;
+HXDLIN(1335)		if (::hx::IsNotNull( chat )) {
+HXLINE(1335)			_hx_tmp = chat->isBlocked;
             		}
             		else {
-HXLINE(1317)			_hx_tmp = false;
+HXLINE(1335)			_hx_tmp = false;
             		}
-HXDLIN(1317)		if (_hx_tmp) {
-HXLINE(1317)			return;
+HXDLIN(1335)		if (_hx_tmp) {
+HXLINE(1335)			return;
             		}
-HXLINE(1318)		{
-HXLINE(1318)			int _g = 0;
-HXDLIN(1318)			::Array< ::Dynamic> _g1 = this->chatMessageHandlers;
-HXDLIN(1318)			while((_g < _g1->length)){
-HXLINE(1318)				 ::Dynamic handler = _g1->__get(_g);
-HXDLIN(1318)				_g = (_g + 1);
-HXLINE(1319)				handler(message,event);
+HXLINE(1336)		{
+HXLINE(1336)			int _g = 0;
+HXDLIN(1336)			::Array< ::Dynamic> _g1 = this->chatMessageHandlers;
+HXDLIN(1336)			while((_g < _g1->length)){
+HXLINE(1336)				 ::Dynamic handler = _g1->__get(_g);
+HXDLIN(1336)				_g = (_g + 1);
+HXLINE(1337)				handler(message,event);
             			}
             		}
             	}
@@ -3983,35 +4155,35 @@ HXLINE(1319)				handler(message,event);
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,notifyMessageHandlers,(void))
 
 void Client_obj::notifySyncMessageHandlers( ::snikket::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1324_notifySyncMessageHandlers)
-HXLINE(1325)		bool _hx_tmp;
-HXDLIN(1325)		if (::hx::IsNotNull( message )) {
-HXLINE(1325)			_hx_tmp = (message->versions->length > 1);
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1342_notifySyncMessageHandlers)
+HXLINE(1343)		bool _hx_tmp;
+HXDLIN(1343)		if (::hx::IsNotNull( message )) {
+HXLINE(1343)			_hx_tmp = (message->versions->length > 1);
             		}
             		else {
-HXLINE(1325)			_hx_tmp = true;
+HXLINE(1343)			_hx_tmp = true;
             		}
-HXDLIN(1325)		if (_hx_tmp) {
-HXLINE(1325)			return;
+HXDLIN(1343)		if (_hx_tmp) {
+HXLINE(1343)			return;
             		}
-HXLINE(1326)		 ::snikket::Chat chat = this->getChat(message->chatId());
-HXLINE(1327)		bool _hx_tmp1;
-HXDLIN(1327)		if (::hx::IsNotNull( chat )) {
-HXLINE(1327)			_hx_tmp1 = chat->isBlocked;
+HXLINE(1344)		 ::snikket::Chat chat = this->getChat(message->chatId());
+HXLINE(1345)		bool _hx_tmp1;
+HXDLIN(1345)		if (::hx::IsNotNull( chat )) {
+HXLINE(1345)			_hx_tmp1 = chat->isBlocked;
             		}
             		else {
-HXLINE(1327)			_hx_tmp1 = false;
+HXLINE(1345)			_hx_tmp1 = false;
             		}
-HXDLIN(1327)		if (_hx_tmp1) {
-HXLINE(1327)			return;
+HXDLIN(1345)		if (_hx_tmp1) {
+HXLINE(1345)			return;
             		}
-HXLINE(1328)		{
-HXLINE(1328)			int _g = 0;
-HXDLIN(1328)			::Array< ::Dynamic> _g1 = this->syncMessageHandlers;
-HXDLIN(1328)			while((_g < _g1->length)){
-HXLINE(1328)				 ::Dynamic handler = _g1->__get(_g);
-HXDLIN(1328)				_g = (_g + 1);
-HXLINE(1329)				handler(message);
+HXLINE(1346)		{
+HXLINE(1346)			int _g = 0;
+HXDLIN(1346)			::Array< ::Dynamic> _g1 = this->syncMessageHandlers;
+HXDLIN(1346)			while((_g < _g1->length)){
+HXLINE(1346)				 ::Dynamic handler = _g1->__get(_g);
+HXDLIN(1346)				_g = (_g + 1);
+HXLINE(1347)				handler(message);
             			}
             		}
             	}
@@ -4022,30 +4194,30 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,notifySyncMessageHandlers,(void))
 void Client_obj::rosterGet(){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::snikket::queries::RosterGet,rosterGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1335_rosterGet)
-HXLINE(1336)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1337)			{
-HXLINE(1337)				int _g = 0;
-HXDLIN(1337)				::Array< ::Dynamic> _g1 = rosterGet->getResult();
-HXDLIN(1337)				while((_g < _g1->length)){
-HXLINE(1337)					 ::Dynamic item = _g1->__get(_g);
-HXDLIN(1337)					_g = (_g + 1);
-HXLINE(1338)					 ::snikket::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
-HXLINE(1339)					chat->updateFromRoster(item);
-HXLINE(1340)					chatsToUpdate->push(chat);
-            				}
-            			}
-HXLINE(1342)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1342)			::snikket::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),chatsToUpdate);
-HXLINE(1343)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1353_rosterGet)
+HXLINE(1354)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1355)			{
+HXLINE(1355)				int _g = 0;
+HXDLIN(1355)				::Array< ::Dynamic> _g1 = rosterGet->getResult();
+HXDLIN(1355)				while((_g < _g1->length)){
+HXLINE(1355)					 ::Dynamic item = _g1->__get(_g);
+HXDLIN(1355)					_g = (_g + 1);
+HXLINE(1356)					 ::snikket::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
+HXLINE(1357)					chat->updateFromRoster(item);
+HXLINE(1358)					chatsToUpdate->push(chat);
+            				}
+            			}
+HXLINE(1360)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1360)			::snikket::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),chatsToUpdate);
+HXLINE(1361)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1333_rosterGet)
-HXDLIN(1333)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1334)		 ::snikket::queries::RosterGet rosterGet =  ::snikket::queries::RosterGet_obj::__alloc( HX_CTX ,null());
-HXLINE(1335)		rosterGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,rosterGet)));
-HXLINE(1345)		this->sendQuery(rosterGet);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1351_rosterGet)
+HXDLIN(1351)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1352)		 ::snikket::queries::RosterGet rosterGet =  ::snikket::queries::RosterGet_obj::__alloc( HX_CTX ,null());
+HXLINE(1353)		rosterGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,rosterGet)));
+HXLINE(1363)		this->sendQuery(rosterGet);
             	}
 
 
@@ -4054,100 +4226,100 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,rosterGet,(void))
 void Client_obj::startChatWith(::String jid, ::Dynamic handleCaps, ::Dynamic handleChat){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::Dynamic,handleChat, ::Dynamic,handleCaps, ::snikket::queries::DiscoInfoGet,discoGet,::String,jid) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1350_startChatWith)
-HXLINE(1351)			 ::snikket::Caps resultCaps = discoGet->getResult();
-HXLINE(1352)			if (::hx::IsNull( resultCaps )) {
-HXLINE(1353)				 ::snikket::Stanza tmp = discoGet->responseStanza;
-HXDLIN(1353)				 ::snikket::Stanza tmp1;
-HXDLIN(1353)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1353)					tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1368_startChatWith)
+HXLINE(1369)			 ::snikket::Caps resultCaps = discoGet->getResult();
+HXLINE(1370)			if (::hx::IsNull( resultCaps )) {
+HXLINE(1371)				 ::snikket::Stanza tmp = discoGet->responseStanza;
+HXDLIN(1371)				 ::snikket::Stanza tmp1;
+HXDLIN(1371)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1371)					tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
             				}
             				else {
-HXLINE(1353)					tmp1 = null();
+HXLINE(1371)					tmp1 = null();
             				}
-HXDLIN(1353)				 ::snikket::Stanza err;
-HXDLIN(1353)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1353)					err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN(1371)				 ::snikket::Stanza err;
+HXDLIN(1371)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1371)					err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             				}
             				else {
-HXLINE(1353)					err = null();
-            				}
-HXLINE(1354)				bool _hx_tmp;
-HXDLIN(1354)				bool _hx_tmp1;
-HXDLIN(1354)				if (::hx::IsNotNull( err )) {
-HXLINE(1354)					::String _hx_tmp2;
-HXDLIN(1354)					if (::hx::IsNotNull( err )) {
-HXLINE(1354)						_hx_tmp2 = err->name;
+HXLINE(1371)					err = null();
+            				}
+HXLINE(1372)				bool _hx_tmp;
+HXDLIN(1372)				bool _hx_tmp1;
+HXDLIN(1372)				if (::hx::IsNotNull( err )) {
+HXLINE(1372)					::String _hx_tmp2;
+HXDLIN(1372)					if (::hx::IsNotNull( err )) {
+HXLINE(1372)						_hx_tmp2 = err->name;
             					}
             					else {
-HXLINE(1354)						_hx_tmp2 = null();
+HXLINE(1372)						_hx_tmp2 = null();
             					}
-HXDLIN(1354)					_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
+HXDLIN(1372)					_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
             				}
             				else {
-HXLINE(1354)					_hx_tmp1 = true;
+HXLINE(1372)					_hx_tmp1 = true;
             				}
-HXDLIN(1354)				if (!(_hx_tmp1)) {
-HXLINE(1354)					::String _hx_tmp3;
-HXDLIN(1354)					if (::hx::IsNotNull( err )) {
-HXLINE(1354)						_hx_tmp3 = err->name;
+HXDLIN(1372)				if (!(_hx_tmp1)) {
+HXLINE(1372)					::String _hx_tmp3;
+HXDLIN(1372)					if (::hx::IsNotNull( err )) {
+HXLINE(1372)						_hx_tmp3 = err->name;
             					}
             					else {
-HXLINE(1354)						_hx_tmp3 = null();
+HXLINE(1372)						_hx_tmp3 = null();
             					}
-HXDLIN(1354)					_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
+HXDLIN(1372)					_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
             				}
             				else {
-HXLINE(1354)					_hx_tmp = true;
+HXLINE(1372)					_hx_tmp = true;
             				}
-HXDLIN(1354)				if (_hx_tmp) {
-HXLINE(1355)					 ::snikket::DirectChat chat = _gthis->getDirectChat(jid,false);
-HXLINE(1356)					handleChat(chat);
-HXLINE(1357)					::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1357)					::snikket::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXDLIN(1372)				if (_hx_tmp) {
+HXLINE(1373)					 ::snikket::DirectChat chat = _gthis->getDirectChat(jid,false);
+HXLINE(1374)					handleChat(chat);
+HXLINE(1375)					::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1375)					::snikket::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             				}
             			}
             			else {
-HXLINE(1360)				::snikket::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
-HXLINE(1361)				int uiState = ( (int)(handleCaps(resultCaps)) );
-HXLINE(1362)				if (resultCaps->isChannel(jid)) {
-HXLINE(1363)					 ::snikket::Channel chat1 =  ::snikket::Channel_obj::__alloc( HX_CTX ,_gthis,_gthis->stream,_gthis->persistence,jid,uiState,false,null(),null(),null(),resultCaps);
-HXLINE(1364)					handleChat(chat1);
-HXLINE(1365)					_gthis->chats->unshift(chat1);
-HXLINE(1366)					::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1366)					::snikket::Persistence_obj::storeChats(_gthis2,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE(1378)				::snikket::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
+HXLINE(1379)				int uiState = ( (int)(handleCaps(resultCaps)) );
+HXLINE(1380)				if (resultCaps->isChannel(jid)) {
+HXLINE(1381)					 ::snikket::Channel chat1 =  ::snikket::Channel_obj::__alloc( HX_CTX ,_gthis,_gthis->stream,_gthis->persistence,jid,uiState,false,null(),null(),null(),resultCaps);
+HXLINE(1382)					handleChat(chat1);
+HXLINE(1383)					_gthis->chats->unshift(chat1);
+HXLINE(1384)					::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(1384)					::snikket::Persistence_obj::storeChats(_gthis2,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
             				}
             				else {
-HXLINE(1368)					 ::snikket::DirectChat chat2 = _gthis->getDirectChat(jid,false);
-HXLINE(1369)					handleChat(chat2);
-HXLINE(1370)					::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1370)					::snikket::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
+HXLINE(1386)					 ::snikket::DirectChat chat2 = _gthis->getDirectChat(jid,false);
+HXLINE(1387)					handleChat(chat2);
+HXLINE(1388)					::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(1388)					::snikket::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1348_startChatWith)
-HXDLIN(1348)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1349)		 ::snikket::queries::DiscoInfoGet discoGet =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid,null());
-HXLINE(1350)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,handleChat,handleCaps,discoGet,jid)));
-HXLINE(1374)		this->sendQuery(discoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1366_startChatWith)
+HXDLIN(1366)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1367)		 ::snikket::queries::DiscoInfoGet discoGet =  ::snikket::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid,null());
+HXLINE(1368)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,handleChat,handleCaps,discoGet,jid)));
+HXLINE(1392)		this->sendQuery(discoGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,startChatWith,(void))
 
 void Client_obj::serverBlocked(::String blocked){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1377_serverBlocked)
-HXLINE(1378)		 ::snikket::Chat chat;
-HXDLIN(1378)		 ::snikket::Chat tmp = this->getChat(blocked);
-HXDLIN(1378)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1378)			chat = tmp;
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1395_serverBlocked)
+HXLINE(1396)		 ::snikket::Chat chat;
+HXDLIN(1396)		 ::snikket::Chat tmp = this->getChat(blocked);
+HXDLIN(1396)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1396)			chat = tmp;
             		}
             		else {
-HXLINE(1378)			chat = this->getDirectChat(blocked,false);
+HXLINE(1396)			chat = this->getDirectChat(blocked,false);
             		}
-HXLINE(1379)		chat->block(null(),false);
+HXLINE(1397)		chat->block(null(),false);
             	}
 
 
@@ -4156,178 +4328,178 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,serverBlocked,(void))
 void Client_obj::bookmarksGet( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::snikket::queries::BlocklistGet,blockingGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1386_bookmarksGet)
-HXLINE(1386)			int _g = 0;
-HXDLIN(1386)			::Array< ::String > _g1 = blockingGet->getResult();
-HXDLIN(1386)			while((_g < _g1->length)){
-HXLINE(1386)				::String blocked = _g1->__get(_g);
-HXDLIN(1386)				_g = (_g + 1);
-HXLINE(1387)				_gthis->serverBlocked(blocked);
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1404_bookmarksGet)
+HXLINE(1404)			int _g = 0;
+HXDLIN(1404)			::Array< ::String > _g1 = blockingGet->getResult();
+HXDLIN(1404)			while((_g < _g1->length)){
+HXLINE(1404)				::String blocked = _g1->__get(_g);
+HXDLIN(1404)				_g = (_g + 1);
+HXLINE(1405)				_gthis->serverBlocked(blocked);
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::snikket::Client,_gthis, ::snikket::queries::PubsubGet,mdsGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1393_bookmarksGet)
-HXLINE(1394)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1395)			{
-HXLINE(1395)				int _g = 0;
-HXDLIN(1395)				::Array< ::Dynamic> _g1 = mdsGet->getResult();
-HXDLIN(1395)				while((_g < _g1->length)){
-HXLINE(1395)					 ::snikket::Stanza item = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
-HXDLIN(1395)					_g = (_g + 1);
-HXLINE(1396)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1397)						 ::snikket::Stanza tmp = item->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
-HXDLIN(1397)						 ::snikket::Stanza upTo;
-HXDLIN(1397)						if (::hx::IsNotNull( tmp )) {
-HXLINE(1397)							upTo = tmp->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1411_bookmarksGet)
+HXLINE(1412)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1413)			{
+HXLINE(1413)				int _g = 0;
+HXDLIN(1413)				::Array< ::Dynamic> _g1 = mdsGet->getResult();
+HXDLIN(1413)				while((_g < _g1->length)){
+HXLINE(1413)					 ::snikket::Stanza item = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
+HXDLIN(1413)					_g = (_g + 1);
+HXLINE(1414)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE(1415)						 ::snikket::Stanza tmp = item->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN(1415)						 ::snikket::Stanza upTo;
+HXDLIN(1415)						if (::hx::IsNotNull( tmp )) {
+HXLINE(1415)							upTo = tmp->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
             						}
             						else {
-HXLINE(1397)							upTo = null();
+HXLINE(1415)							upTo = null();
             						}
-HXLINE(1398)						 ::snikket::Client _gthis1 = _gthis;
-HXDLIN(1398)						 ::snikket::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
-HXLINE(1399)						if (::hx::IsNull( chat )) {
+HXLINE(1416)						 ::snikket::Client _gthis1 = _gthis;
+HXDLIN(1416)						 ::snikket::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
+HXLINE(1417)						if (::hx::IsNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             							int _hx_run( ::snikket::Caps caps){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1400_bookmarksGet)
-HXLINE(1400)								return 2;
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1418_bookmarksGet)
+HXLINE(1418)								return 2;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::snikket::Stanza,upTo) HXARGC(1)
             							void _hx_run( ::snikket::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1400_bookmarksGet)
-HXLINE(1400)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN(1400)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1418_bookmarksGet)
+HXLINE(1418)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN(1418)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1400)							 ::snikket::Client _gthis2 = _gthis;
-HXDLIN(1400)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2(upTo)));
+HXLINE(1418)							 ::snikket::Client _gthis2 = _gthis;
+HXDLIN(1418)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2(upTo)));
             						}
             						else {
-HXLINE(1402)							::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN(1402)							chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
-HXLINE(1403)							chatsToUpdate->push(chat);
+HXLINE(1420)							::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN(1420)							chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ),null());
+HXLINE(1421)							chatsToUpdate->push(chat);
             						}
             					}
             				}
             			}
-HXLINE(1407)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1407)			::snikket::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(1425)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(1425)			::snikket::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_6, ::snikket::Client,_gthis, ::snikket::queries::PubsubGet,pubsubGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1412_bookmarksGet)
-HXLINE(1413)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1414)			{
-HXLINE(1414)				int _g = 0;
-HXDLIN(1414)				::Array< ::Dynamic> _g1 = pubsubGet->getResult();
-HXDLIN(1414)				while((_g < _g1->length)){
-HXLINE(1414)					 ::snikket::Stanza item = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
-HXDLIN(1414)					_g = (_g + 1);
-HXLINE(1415)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1416)						 ::snikket::Client _gthis1 = _gthis;
-HXDLIN(1416)						 ::snikket::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
-HXLINE(1417)						if (::hx::IsNull( chat )) {
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1430_bookmarksGet)
+HXLINE(1431)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1432)			{
+HXLINE(1432)				int _g = 0;
+HXDLIN(1432)				::Array< ::Dynamic> _g1 = pubsubGet->getResult();
+HXDLIN(1432)				while((_g < _g1->length)){
+HXLINE(1432)					 ::snikket::Stanza item = _g1->__get(_g).StaticCast<  ::snikket::Stanza >();
+HXDLIN(1432)					_g = (_g + 1);
+HXLINE(1433)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE(1434)						 ::snikket::Client _gthis1 = _gthis;
+HXDLIN(1434)						 ::snikket::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
+HXLINE(1435)						if (::hx::IsNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::snikket::Stanza,item) HXARGC(1)
             							int _hx_run( ::snikket::Caps caps){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1420_bookmarksGet)
-HXLINE(1421)								 ::snikket::Identity identity = caps->identities->__get(0).StaticCast<  ::snikket::Identity >();
-HXLINE(1422)								 ::snikket::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
-HXLINE(1423)								if (::hx::IsNull( ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) ) )) {
-HXLINE(1424)									::String value;
-HXDLIN(1424)									if (::hx::IsNotNull( identity )) {
-HXLINE(1424)										value = identity->name;
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1438_bookmarksGet)
+HXLINE(1439)								 ::snikket::Identity identity = caps->identities->__get(0).StaticCast<  ::snikket::Identity >();
+HXLINE(1440)								 ::snikket::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE(1441)								if (::hx::IsNull( ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) ) )) {
+HXLINE(1442)									::String value;
+HXDLIN(1442)									if (::hx::IsNotNull( identity )) {
+HXLINE(1442)										value = identity->name;
             									}
             									else {
-HXLINE(1424)										value = null();
+HXLINE(1442)										value = null();
             									}
-HXDLIN(1424)									::Reflect_obj::setField(conf->attr,HX_("name",4b,72,ff,48),value);
+HXDLIN(1442)									::Reflect_obj::setField(conf->attr,HX_("name",4b,72,ff,48),value);
             								}
-HXLINE(1426)								bool _hx_tmp;
-HXDLIN(1426)								bool _hx_tmp1;
-HXDLIN(1426)								if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
-HXLINE(1426)									_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
+HXLINE(1444)								bool _hx_tmp;
+HXDLIN(1444)								bool _hx_tmp1;
+HXDLIN(1444)								if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
+HXLINE(1444)									_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
             								}
             								else {
-HXLINE(1426)									_hx_tmp1 = true;
+HXLINE(1444)									_hx_tmp1 = true;
             								}
-HXDLIN(1426)								if (!(_hx_tmp1)) {
-HXLINE(1426)									_hx_tmp = !(caps->isChannel(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) )));
+HXDLIN(1444)								if (!(_hx_tmp1)) {
+HXLINE(1444)									_hx_tmp = !(caps->isChannel(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) )));
             								}
             								else {
-HXLINE(1426)									_hx_tmp = true;
+HXLINE(1444)									_hx_tmp = true;
             								}
-HXDLIN(1426)								if (_hx_tmp) {
-HXLINE(1426)									return 1;
+HXDLIN(1444)								if (_hx_tmp) {
+HXLINE(1444)									return 1;
             								}
             								else {
-HXLINE(1426)									return 2;
+HXLINE(1444)									return 2;
             								}
-HXDLIN(1426)								return null();
+HXDLIN(1444)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::snikket::Stanza,item) HXARGC(1)
             							void _hx_run( ::snikket::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1429_bookmarksGet)
-HXLINE(1429)								chat->updateFromBookmark(item);
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1447_bookmarksGet)
+HXLINE(1447)								chat->updateFromBookmark(item);
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1418)							 ::snikket::Client _gthis2 = _gthis;
-HXDLIN(1418)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_4(item)), ::Dynamic(new _hx_Closure_5(item)));
+HXLINE(1436)							 ::snikket::Client _gthis2 = _gthis;
+HXDLIN(1436)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_4(item)), ::Dynamic(new _hx_Closure_5(item)));
             						}
             						else {
-HXLINE(1433)							chat->updateFromBookmark(item);
-HXLINE(1434)							chatsToUpdate->push(chat);
+HXLINE(1451)							chat->updateFromBookmark(item);
+HXLINE(1452)							chatsToUpdate->push(chat);
             						}
             					}
             				}
             			}
-HXLINE(1438)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1438)			::snikket::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
-HXLINE(1439)			callback();
+HXLINE(1456)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(1456)			::snikket::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(1457)			callback();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1383_bookmarksGet)
-HXDLIN(1383)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1384)		 ::snikket::queries::BlocklistGet blockingGet =  ::snikket::queries::BlocklistGet_obj::__alloc( HX_CTX );
-HXLINE(1385)		blockingGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,blockingGet)));
-HXLINE(1390)		this->sendQuery(blockingGet);
-HXLINE(1392)		 ::snikket::queries::PubsubGet mdsGet =  ::snikket::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb),null());
-HXLINE(1393)		mdsGet->onFinished( ::Dynamic(new _hx_Closure_3(_gthis,mdsGet)));
-HXLINE(1409)		this->sendQuery(mdsGet);
-HXLINE(1411)		 ::snikket::queries::PubsubGet pubsubGet =  ::snikket::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d),null());
-HXLINE(1412)		pubsubGet->onFinished( ::Dynamic(new _hx_Closure_6(_gthis,pubsubGet,callback)));
-HXLINE(1441)		this->sendQuery(pubsubGet);
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1401_bookmarksGet)
+HXDLIN(1401)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1402)		 ::snikket::queries::BlocklistGet blockingGet =  ::snikket::queries::BlocklistGet_obj::__alloc( HX_CTX );
+HXLINE(1403)		blockingGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,blockingGet)));
+HXLINE(1408)		this->sendQuery(blockingGet);
+HXLINE(1410)		 ::snikket::queries::PubsubGet mdsGet =  ::snikket::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb),null());
+HXLINE(1411)		mdsGet->onFinished( ::Dynamic(new _hx_Closure_3(_gthis,mdsGet)));
+HXLINE(1427)		this->sendQuery(mdsGet);
+HXLINE(1429)		 ::snikket::queries::PubsubGet pubsubGet =  ::snikket::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d),null());
+HXLINE(1430)		pubsubGet->onFinished( ::Dynamic(new _hx_Closure_6(_gthis,pubsubGet,callback)));
+HXLINE(1459)		this->sendQuery(pubsubGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,bookmarksGet,(void))
 
 void Client_obj::sync( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1444_sync)
-HXDLIN(1444)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1445)		if (::Std_obj::isOfType(this->persistence,::hx::ClassOf< ::snikket::persistence::Dummy >())) {
-HXLINE(1446)			callback(true);
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1462_sync)
+HXDLIN(1462)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1463)		if (::Std_obj::isOfType(this->persistence,::hx::ClassOf< ::snikket::persistence::Dummy >())) {
+HXLINE(1464)			callback(true);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::Client,_gthis, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::String lastId){
-            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1448_sync)
-HXLINE(1448)				_gthis->doSync(callback,lastId);
+            				HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1466_sync)
+HXLINE(1466)				_gthis->doSync(callback,lastId);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1448)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1448)			::snikket::Persistence_obj::lastId(_hx_tmp,this->accountId(),null(), ::Dynamic(new _hx_Closure_0(_gthis,callback)));
+HXLINE(1466)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1466)			::snikket::Persistence_obj::lastId(_hx_tmp,this->accountId(),null(), ::Dynamic(new _hx_Closure_0(_gthis,callback)));
             		}
             	}
 
@@ -4335,26 +4507,26 @@ HXDLIN(1448)			::snikket::Persistence_obj::lastId(_hx_tmp,this->accountId(),null
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sync,(void))
 
 void Client_obj::onMAMJMI(::String sid, ::snikket::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1452_onMAMJMI)
-HXLINE(1453)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE(1453)			return;
-            		}
-HXLINE(1454)		 ::snikket::JID from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE(1455)		 ::snikket::DirectChat chat = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE(1456)		if (chat->jingleSessions->exists(sid)) {
-HXLINE(1456)			return;
-            		}
-HXLINE(1457)		 ::snikket::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE(1458)		if (::hx::IsNull( jmiP )) {
-HXLINE(1458)			return;
-            		}
-HXLINE(1459)		 ::snikket::jingle::IncomingProposedSession session =  ::snikket::jingle::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,sid);
-HXLINE(1460)		{
-HXLINE(1460)			::Dynamic this1 = chat->jingleSessions;
-HXDLIN(1460)			( ( ::haxe::ds::StringMap)(this1) )->set(session->get_sid(),session);
-            		}
-HXLINE(1461)		this->chatActivity(chat,null());
-HXLINE(1462)		session->ring();
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1470_onMAMJMI)
+HXLINE(1471)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE(1471)			return;
+            		}
+HXLINE(1472)		 ::snikket::JID from = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE(1473)		 ::snikket::DirectChat chat = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE(1474)		if (chat->jingleSessions->exists(sid)) {
+HXLINE(1474)			return;
+            		}
+HXLINE(1475)		 ::snikket::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE(1476)		if (::hx::IsNull( jmiP )) {
+HXLINE(1476)			return;
+            		}
+HXLINE(1477)		 ::snikket::jingle::IncomingProposedSession session =  ::snikket::jingle::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,sid);
+HXLINE(1478)		{
+HXLINE(1478)			::Dynamic this1 = chat->jingleSessions;
+HXDLIN(1478)			( ( ::haxe::ds::StringMap)(this1) )->set(session->get_sid(),session);
+            		}
+HXLINE(1479)		this->chatActivity(chat,null());
+HXLINE(1480)		session->ring();
             	}
 
 
@@ -4363,9 +4535,9 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,onMAMJMI,(void))
 void Client_obj::doSync( ::Dynamic callback,::String lastId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		 ::snikket::ChatMessageBuilder _hx_run( ::snikket::ChatMessageBuilder builder, ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1475_doSync)
-HXLINE(1476)			builder->syncPoint = true;
-HXLINE(1477)			return builder;
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1493_doSync)
+HXLINE(1494)			builder->syncPoint = true;
+HXLINE(1495)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
@@ -4373,68 +4545,68 @@ HXLINE(1477)			return builder;
             		void _hx_run( ::Dynamic messageList){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5, ::snikket::Client,_gthis,::Array< ::Dynamic>,chatMessages) HXARGC(2)
             			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1501_doSync)
-HXLINE(1501)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1501)				::String _hx_tmp = _gthis->accountId();
-HXDLIN(1501)				::snikket::Persistence_obj::storeMessages(_gthis1,_hx_tmp,chatMessages,resolve);
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1519_doSync)
+HXLINE(1519)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1519)				::String _hx_tmp = _gthis->accountId();
+HXDLIN(1519)				::snikket::Persistence_obj::storeMessages(_gthis1,_hx_tmp,chatMessages,resolve);
             			}
             			HX_END_LOCAL_FUNC2((void))
 
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_6, ::snikket::Client,_gthis, ::haxe::ds::StringMap,chatIds, ::snikket::MessageSync,sync1, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> results){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1504_doSync)
-HXLINE(1505)				if ((_gthis->syncMessageHandlers->length > 0)) {
-HXLINE(1506)					int _g = 0;
-HXDLIN(1506)					while((_g < results->length)){
-HXLINE(1506)						::Array< ::Dynamic> messages = results->__get(_g).StaticCast< ::Array< ::Dynamic> >();
-HXDLIN(1506)						_g = (_g + 1);
-HXLINE(1507)						if (::hx::IsNotNull( messages )) {
-HXLINE(1508)							int _g1 = 0;
-HXDLIN(1508)							while((_g1 < messages->length)){
-HXLINE(1508)								 ::snikket::ChatMessage message = messages->__get(_g1).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN(1508)								_g1 = (_g1 + 1);
-HXLINE(1509)								_gthis->notifySyncMessageHandlers(message);
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1522_doSync)
+HXLINE(1523)				if ((_gthis->syncMessageHandlers->length > 0)) {
+HXLINE(1524)					int _g = 0;
+HXDLIN(1524)					while((_g < results->length)){
+HXLINE(1524)						::Array< ::Dynamic> messages = results->__get(_g).StaticCast< ::Array< ::Dynamic> >();
+HXDLIN(1524)						_g = (_g + 1);
+HXLINE(1525)						if (::hx::IsNotNull( messages )) {
+HXLINE(1526)							int _g1 = 0;
+HXDLIN(1526)							while((_g1 < messages->length)){
+HXLINE(1526)								 ::snikket::ChatMessage message = messages->__get(_g1).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN(1526)								_g1 = (_g1 + 1);
+HXLINE(1527)								_gthis->notifySyncMessageHandlers(message);
             							}
             						}
             					}
             				}
-HXLINE(1515)				if (sync1->hasMore()) {
-HXLINE(1516)					sync1->fetchNext();
+HXLINE(1533)				if (sync1->hasMore()) {
+HXLINE(1534)					sync1->fetchNext();
             				}
             				else {
-HXLINE(1518)					{
-HXLINE(1518)						::Dynamic map = sync1->jmi;
-HXDLIN(1518)						::Dynamic _g_map = map;
-HXDLIN(1518)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN(1518)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1518)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1518)							 ::snikket::Stanza _g_value = ( ( ::snikket::Stanza)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN(1518)							::String _g_key = key;
-HXDLIN(1518)							::String sid = _g_key;
-HXDLIN(1518)							 ::snikket::Stanza stanza = _g_value;
-HXLINE(1519)							_gthis->onMAMJMI(sid,stanza);
+HXLINE(1536)					{
+HXLINE(1536)						::Dynamic map = sync1->jmi;
+HXDLIN(1536)						::Dynamic _g_map = map;
+HXDLIN(1536)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1536)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1536)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1536)							 ::snikket::Stanza _g_value = ( ( ::snikket::Stanza)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN(1536)							::String _g_key = key;
+HXDLIN(1536)							::String sid = _g_key;
+HXDLIN(1536)							 ::snikket::Stanza stanza = _g_value;
+HXLINE(1537)							_gthis->onMAMJMI(sid,stanza);
             						}
             					}
-HXLINE(1521)					{
-HXLINE(1521)						::Dynamic map1 = chatIds;
-HXDLIN(1521)						::Dynamic _g_map1 = map1;
-HXDLIN(1521)						 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(map1);
-HXDLIN(1521)						while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1521)							::String key1 = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1521)							bool _g_value1 = ( (bool)(::haxe::IMap_obj::get(_g_map1,key1)) );
-HXDLIN(1521)							::String _g_key1 = key1;
-HXDLIN(1521)							::String chatId = _g_key1;
-HXDLIN(1521)							bool _ = _g_value1;
-HXDLIN(1521)							{
-HXLINE(1523)								 ::snikket::Chat chat = _gthis->getChat(chatId);
-HXLINE(1524)								if (::hx::IsNull( chat )) {
-HXLINE(1524)									_gthis->getDirectChat(chatId,null());
+HXLINE(1539)					{
+HXLINE(1539)						::Dynamic map1 = chatIds;
+HXDLIN(1539)						::Dynamic _g_map1 = map1;
+HXDLIN(1539)						 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(map1);
+HXDLIN(1539)						while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1539)							::String key1 = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1539)							bool _g_value1 = ( (bool)(::haxe::IMap_obj::get(_g_map1,key1)) );
+HXDLIN(1539)							::String _g_key1 = key1;
+HXDLIN(1539)							::String chatId = _g_key1;
+HXDLIN(1539)							bool _ = _g_value1;
+HXDLIN(1539)							{
+HXLINE(1541)								 ::snikket::Chat chat = _gthis->getChat(chatId);
+HXLINE(1542)								if (::hx::IsNull( chat )) {
+HXLINE(1542)									_gthis->getDirectChat(chatId,null());
             								}
             							}
             						}
             					}
-HXLINE(1526)					if (::hx::IsNotNull( callback )) {
-HXLINE(1526)						callback(true);
+HXLINE(1544)					if (::hx::IsNotNull( callback )) {
+HXLINE(1544)						callback(true);
             					}
             				}
             			}
@@ -4442,42 +4614,42 @@ HXLINE(1526)						callback(true);
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::Dynamic,callback) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1529_doSync)
-HXLINE(1530)				 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN(1530)				::String _hx_tmp1;
-HXDLIN(1530)				if (::hx::IsNull( e )) {
-HXLINE(1530)					_hx_tmp1 = HX_("null",87,9e,0e,49);
+            				HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1547_doSync)
+HXLINE(1548)				 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN(1548)				::String _hx_tmp1;
+HXDLIN(1548)				if (::hx::IsNull( e )) {
+HXLINE(1548)					_hx_tmp1 = HX_("null",87,9e,0e,49);
             				}
             				else {
-HXLINE(1530)					_hx_tmp1 = ::Std_obj::string(e);
+HXLINE(1548)					_hx_tmp1 = ::Std_obj::string(e);
             				}
-HXDLIN(1530)				_hx_tmp(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN(1548)				_hx_tmp(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1530)));
-HXLINE(1531)				callback(false);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1548)));
+HXLINE(1549)				callback(false);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1480_doSync)
-HXLINE(1481)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1482)			::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1483)			{
-HXLINE(1483)				int _g = 0;
-HXDLIN(1483)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN(1483)				while((_g < _g1->length)){
-HXLINE(1483)					 ::snikket::MessageStanza m = _g1->__get(_g).StaticCast<  ::snikket::MessageStanza >();
-HXDLIN(1483)					_g = (_g + 1);
-HXLINE(1484)					switch((int)(m->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1498_doSync)
+HXLINE(1499)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1500)			::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1501)			{
+HXLINE(1501)				int _g = 0;
+HXDLIN(1501)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN(1501)				while((_g < _g1->length)){
+HXLINE(1501)					 ::snikket::MessageStanza m = _g1->__get(_g).StaticCast<  ::snikket::MessageStanza >();
+HXDLIN(1501)					_g = (_g + 1);
+HXLINE(1502)					switch((int)(m->_hx_getIndex())){
             						case (int)1: {
-HXLINE(1485)							 ::snikket::ChatMessage message = m->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN(1485)							{
-HXLINE(1486)								chatMessages->push(message);
-HXLINE(1487)								if ((message->type == 0)) {
-HXLINE(1487)									::String k = message->chatId();
-HXDLIN(1487)									chatIds->set(k,true);
+HXLINE(1503)							 ::snikket::ChatMessage message = m->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN(1503)							{
+HXLINE(1504)								chatMessages->push(message);
+HXLINE(1505)								if ((message->type == 0)) {
+HXLINE(1505)									::String k = message->chatId();
+HXDLIN(1505)									chatIds->set(k,true);
             								}
             							}
             						}
@@ -4487,18 +4659,18 @@ HXDLIN(1487)									chatIds->set(k,true);
             							void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,resolve) HXARGC(1)
             								void _hx_run( ::snikket::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1494_doSync)
-HXLINE(1494)									resolve(null());
+            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1512_doSync)
+HXLINE(1512)									resolve(null());
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1494_doSync)
-HXLINE(1494)								::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_1(resolve)),null());
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1512_doSync)
+HXLINE(1512)								::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_1(resolve)),null());
             							}
             							HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1492)							 ::snikket::ModerationAction action = m->_hx_getObject(0).StaticCast<  ::snikket::ModerationAction >();
-HXLINE(1493)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,action))));
+HXLINE(1510)							 ::snikket::ModerationAction action = m->_hx_getObject(0).StaticCast<  ::snikket::ModerationAction >();
+HXLINE(1511)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,action))));
             						}
             						break;
             						case (int)3: {
@@ -4506,20 +4678,20 @@ HXLINE(1493)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new(
             							void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,resolve) HXARGC(1)
             								void _hx_run( ::snikket::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1490_doSync)
-HXLINE(1490)									resolve(null());
+            									HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1508_doSync)
+HXLINE(1508)									resolve(null());
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1490_doSync)
-HXLINE(1490)								::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1490)								::String _hx_tmp = _gthis->accountId();
-HXDLIN(1490)								::snikket::Persistence_obj::storeReaction(_gthis1,_hx_tmp,update, ::Dynamic(new _hx_Closure_3(resolve)));
+            								HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1508_doSync)
+HXLINE(1508)								::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1508)								::String _hx_tmp = _gthis->accountId();
+HXDLIN(1508)								::snikket::Persistence_obj::storeReaction(_gthis1,_hx_tmp,update, ::Dynamic(new _hx_Closure_3(resolve)));
             							}
             							HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1488)							 ::snikket::ReactionUpdate update = m->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
-HXLINE(1489)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,update))));
+HXLINE(1506)							 ::snikket::ReactionUpdate update = m->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
+HXLINE(1507)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,update))));
             						}
             						break;
             						default:{
@@ -4527,81 +4699,81 @@ HXLINE(1489)							promises->push(::thenshim::_Promise::Promise_Impl__obj::_new(
             					}
             				}
             			}
-HXLINE(1500)			promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,chatMessages))));
-HXLINE(1503)			::haxe::Log_obj::trace(HX_("SYNC: MAM page wait for writes",ad,4c,95,21),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),1503,HX_("snikket.Client",3c,fe,06,7c),HX_("doSync",86,5f,63,1c)));
-HXLINE(1504)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_6(_gthis,chatIds,sync1,callback)), ::Dynamic(new _hx_Closure_7(callback)));
+HXLINE(1518)			promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_5(_gthis,chatMessages))));
+HXLINE(1521)			::haxe::Log_obj::trace(HX_("SYNC: MAM page wait for writes",ad,4c,95,21),::hx::SourceInfo(HX_("snikket/Client.hx",e1,49,02,18),1521,HX_("snikket.Client",3c,fe,06,7c),HX_("doSync",86,5f,63,1c)));
+HXLINE(1522)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_6(_gthis,chatIds,sync1,callback)), ::Dynamic(new _hx_Closure_7(callback)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_9, ::snikket::Client,_gthis,::String,lastId, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::snikket::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1535_doSync)
-HXLINE(1535)			if (::hx::IsNotNull( lastId )) {
-HXLINE(1537)				_gthis->doSync(callback,null());
+            			HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1553_doSync)
+HXLINE(1553)			if (::hx::IsNotNull( lastId )) {
+HXLINE(1555)				_gthis->doSync(callback,null());
             			}
             			else {
-HXLINE(1539)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1557)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.Client",3c,fe,06,7c))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Client.hx",e1,49,02,18))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1539)));
-HXLINE(1540)				if (::hx::IsNotNull( callback )) {
-HXLINE(1540)					callback(false);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1557)));
+HXLINE(1558)				if (::hx::IsNotNull( callback )) {
+HXLINE(1558)					callback(false);
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1465_doSync)
-HXDLIN(1465)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1466)		::String thirtyDaysAgo = ::snikket::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-2592000000.))));
-HXLINE(1472)		 ::Dynamic sync;
-HXDLIN(1472)		if (::hx::IsNull( lastId )) {
-HXLINE(1472)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1483_doSync)
+HXDLIN(1483)		 ::snikket::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1484)		::String thirtyDaysAgo = ::snikket::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-2592000000.))));
+HXLINE(1490)		 ::Dynamic sync;
+HXDLIN(1490)		if (::hx::IsNull( lastId )) {
+HXLINE(1490)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("startTime",8f,45,f0,05),thirtyDaysAgo));
             		}
             		else {
-HXLINE(1472)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1490)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("after",1c,66,a2,1d),lastId))));
             		}
-HXLINE(1469)		 ::snikket::MessageSync sync1 =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,sync,null());
-HXLINE(1474)		sync1->setNewestPageFirst(false);
-HXLINE(1475)		sync1->addContext( ::Dynamic(new _hx_Closure_0()));
-HXLINE(1479)		 ::haxe::ds::StringMap chatIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1480)		sync1->onMessages( ::Dynamic(new _hx_Closure_8(_gthis,chatIds,sync1,callback)));
-HXLINE(1534)		sync1->onError( ::Dynamic(new _hx_Closure_9(_gthis,lastId,callback)));
-HXLINE(1543)		sync1->fetchNext();
+HXLINE(1487)		 ::snikket::MessageSync sync1 =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,sync,null());
+HXLINE(1492)		sync1->setNewestPageFirst(false);
+HXLINE(1493)		sync1->addContext( ::Dynamic(new _hx_Closure_0()));
+HXLINE(1497)		 ::haxe::ds::StringMap chatIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1498)		sync1->onMessages( ::Dynamic(new _hx_Closure_8(_gthis,chatIds,sync1,callback)));
+HXLINE(1552)		sync1->onError( ::Dynamic(new _hx_Closure_9(_gthis,lastId,callback)));
+HXLINE(1561)		sync1->fetchNext();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,doSync,(void))
 
 void Client_obj::pingAllChannels(bool refresh){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1547_pingAllChannels)
-HXDLIN(1547)		int _g = 0;
-HXDLIN(1547)		::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN(1547)		while((_g < _g1->length)){
-HXDLIN(1547)			 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN(1547)			_g = (_g + 1);
-HXLINE(1548)			 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
-HXLINE(1549)			if (::hx::IsNotNull( channel )) {
-HXLINE(1549)				bool _hx_tmp;
-HXDLIN(1549)				if (!(refresh)) {
-HXLINE(1549)					 ::snikket::Caps _hx_tmp1;
-HXDLIN(1549)					if (::hx::IsNotNull( channel )) {
-HXLINE(1549)						_hx_tmp1 = channel->disco;
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1565_pingAllChannels)
+HXDLIN(1565)		int _g = 0;
+HXDLIN(1565)		::Array< ::Dynamic> _g1 = this->getChats();
+HXDLIN(1565)		while((_g < _g1->length)){
+HXDLIN(1565)			 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN(1565)			_g = (_g + 1);
+HXLINE(1566)			 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
+HXLINE(1567)			if (::hx::IsNotNull( channel )) {
+HXLINE(1567)				bool _hx_tmp;
+HXDLIN(1567)				if (!(refresh)) {
+HXLINE(1567)					 ::snikket::Caps _hx_tmp1;
+HXDLIN(1567)					if (::hx::IsNotNull( channel )) {
+HXLINE(1567)						_hx_tmp1 = channel->disco;
             					}
             					else {
-HXLINE(1549)						_hx_tmp1 = null();
+HXLINE(1567)						_hx_tmp1 = null();
             					}
-HXDLIN(1549)					_hx_tmp = ::hx::IsNull( _hx_tmp1 );
+HXDLIN(1567)					_hx_tmp = ::hx::IsNull( _hx_tmp1 );
             				}
             				else {
-HXLINE(1549)					_hx_tmp = true;
+HXLINE(1567)					_hx_tmp = true;
             				}
-HXDLIN(1549)				channel->selfPing(_hx_tmp);
+HXDLIN(1567)				channel->selfPing(_hx_tmp);
             			}
             		}
             	}
@@ -4610,34 +4782,34 @@ HXDLIN(1549)				channel->selfPing(_hx_tmp);
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,pingAllChannels,(void))
 
 void Client_obj::joinAllChannels(){
-            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1554_joinAllChannels)
-HXDLIN(1554)		int _g = 0;
-HXDLIN(1554)		::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN(1554)		while((_g < _g1->length)){
-HXDLIN(1554)			 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN(1554)			_g = (_g + 1);
-HXLINE(1555)			 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
-HXLINE(1556)			if (::hx::IsNotNull( channel )) {
-HXLINE(1557)				if ((channel->disco->identities->length < 1)) {
+            	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1572_joinAllChannels)
+HXDLIN(1572)		int _g = 0;
+HXDLIN(1572)		::Array< ::Dynamic> _g1 = this->getChats();
+HXDLIN(1572)		while((_g < _g1->length)){
+HXDLIN(1572)			 ::snikket::Chat chat = _g1->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN(1572)			_g = (_g + 1);
+HXLINE(1573)			 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::snikket::Channel >())) );
+HXLINE(1574)			if (::hx::IsNotNull( channel )) {
+HXLINE(1575)				if ((channel->disco->identities->length < 1)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::Channel,channel) HXARGC(0)
             					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1559_joinAllChannels)
-HXLINE(1559)						channel->join();
+            						HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1577_joinAllChannels)
+HXLINE(1577)						channel->join();
             					}
             					HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1558)					channel->refreshDisco( ::Dynamic(new _hx_Closure_0(channel)));
+HXLINE(1576)					channel->refreshDisco( ::Dynamic(new _hx_Closure_0(channel)));
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::Channel,channel) HXARGC(0)
             					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1563_joinAllChannels)
-HXLINE(1563)						channel->refreshDisco(null());
+            						HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_1581_joinAllChannels)
+HXLINE(1581)						channel->refreshDisco(null());
             					}
             					HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1562)					channel->join();
-HXLINE(1563)					::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(channel)),30000);
+HXLINE(1580)					channel->join();
+HXLINE(1581)					::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(channel)),30000);
             				}
             			}
             		}
@@ -4679,8 +4851,10 @@ void Client_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(_displayName,"_displayName");
 	HX_MARK_MEMBER_NAME(fastMechanism,"fastMechanism");
 	HX_MARK_MEMBER_NAME(token,"token");
+	HX_MARK_MEMBER_NAME(fastCount,"fastCount");
 	HX_MARK_MEMBER_NAME(pendingCaps,"pendingCaps");
 	HX_MARK_MEMBER_NAME(inSync,"inSync");
+	HX_MARK_MEMBER_NAME(enabledPushData,"enabledPushData");
 	 ::snikket::EventEmitter_obj::__Mark(HX_MARK_ARG);
 	HX_MARK_END_CLASS();
 }
@@ -4699,8 +4873,10 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(_displayName,"_displayName");
 	HX_VISIT_MEMBER_NAME(fastMechanism,"fastMechanism");
 	HX_VISIT_MEMBER_NAME(token,"token");
+	HX_VISIT_MEMBER_NAME(fastCount,"fastCount");
 	HX_VISIT_MEMBER_NAME(pendingCaps,"pendingCaps");
 	HX_VISIT_MEMBER_NAME(inSync,"inSync");
+	HX_VISIT_MEMBER_NAME(enabledPushData,"enabledPushData");
 	 ::snikket::EventEmitter_obj::__Visit(HX_VISIT_ARG);
 }
 
@@ -4733,6 +4909,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"onMAMJMI") ) { return ::hx::Val( onMAMJMI_dyn() ); }
 		break;
 	case 9:
+		if (HX_FIELD_EQ(inName,"fastCount") ) { return ::hx::Val( fastCount ); }
 		if (HX_FIELD_EQ(inName,"accountId") ) { return ::hx::Val( accountId_dyn() ); }
 		if (HX_FIELD_EQ(inName,"startChat") ) { return ::hx::Val( startChat_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sortChats") ) { return ::hx::Val( sortChats_dyn() ); }
@@ -4740,6 +4917,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"rosterGet") ) { return ::hx::Val( rosterGet_dyn() ); }
 		break;
 	case 10:
+		if (HX_FIELD_EQ(inName,"enablePush") ) { return ::hx::Val( enablePush_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendStanza") ) { return ::hx::Val( sendStanza_dyn() ); }
 		break;
 	case 11:
@@ -4751,6 +4929,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 12:
 		if (HX_FIELD_EQ(inName,"_displayName") ) { return ::hx::Val( _displayName ); }
+		if (HX_FIELD_EQ(inName,"startOffline") ) { return ::hx::Val( startOffline_dyn() ); }
 		if (HX_FIELD_EQ(inName,"chatActivity") ) { return ::hx::Val( chatActivity_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendPresence") ) { return ::hx::Val( sendPresence_dyn() ); }
 		if (HX_FIELD_EQ(inName,"bookmarksGet") ) { return ::hx::Val( bookmarksGet_dyn() ); }
@@ -4769,6 +4948,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"moderateMessage") ) { return ::hx::Val( moderateMessage_dyn() ); }
+		if (HX_FIELD_EQ(inName,"enabledPushData") ) { return ::hx::Val( enabledPushData ); }
 		if (HX_FIELD_EQ(inName,"setInForeground") ) { return ::hx::Val( setInForeground_dyn() ); }
 		if (HX_FIELD_EQ(inName,"pingAllChannels") ) { return ::hx::Val( pingAllChannels_dyn() ); }
 		if (HX_FIELD_EQ(inName,"joinAllChannels") ) { return ::hx::Val( joinAllChannels_dyn() ); }
@@ -4781,6 +4961,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"chatStateHandlers") ) { return ::hx::Val( chatStateHandlers ); }
 		if (HX_FIELD_EQ(inName,"updateDisplayName") ) { return ::hx::Val( updateDisplayName_dyn() ); }
 		if (HX_FIELD_EQ(inName,"prepareAttachment") ) { return ::hx::Val( prepareAttachment_dyn() ); }
+		if (HX_FIELD_EQ(inName,"enablePush__fromC") ) { return ::hx::Val( enablePush__fromC_dyn() ); }
 		break;
 	case 18:
 		if (HX_FIELD_EQ(inName,"findAvailableChats") ) { return ::hx::Val( findAvailableChats_dyn() ); }
@@ -4789,6 +4970,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	case 19:
 		if (HX_FIELD_EQ(inName,"chatMessageHandlers") ) { return ::hx::Val( chatMessageHandlers ); }
 		if (HX_FIELD_EQ(inName,"syncMessageHandlers") ) { return ::hx::Val( syncMessageHandlers ); }
+		if (HX_FIELD_EQ(inName,"updatePushIfEnabled") ) { return ::hx::Val( updatePushIfEnabled_dyn() ); }
 		if (HX_FIELD_EQ(inName,"addCallRingListener") ) { return ::hx::Val( addCallRingListener_dyn() ); }
 		break;
 	case 20:
@@ -4843,6 +5025,9 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"stream") ) { stream=inValue.Cast<  ::snikket::GenericStream >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"inSync") ) { inSync=inValue.Cast< bool >(); return inValue; }
 		break;
+	case 9:
+		if (HX_FIELD_EQ(inName,"fastCount") ) { fastCount=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
 	case 11:
 		if (HX_FIELD_EQ(inName,"persistence") ) { persistence=inValue.Cast< ::Dynamic >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"pendingCaps") ) { pendingCaps=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
@@ -4854,6 +5039,9 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"sendAvailable") ) { sendAvailable=inValue.Cast< bool >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"fastMechanism") ) { fastMechanism=inValue.Cast< ::String >(); return inValue; }
 		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"enabledPushData") ) { enabledPushData=inValue.Cast<  ::Dynamic >(); return inValue; }
+		break;
 	case 17:
 		if (HX_FIELD_EQ(inName,"chatStateHandlers") ) { chatStateHandlers=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
@@ -4878,8 +5066,10 @@ void Client_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("_displayName",ae,bf,fb,96));
 	outFields->push(HX_("fastMechanism",1d,e7,34,8a));
 	outFields->push(HX_("token",f9,82,2b,14));
+	outFields->push(HX_("fastCount",93,fc,67,a5));
 	outFields->push(HX_("pendingCaps",18,58,88,be));
 	outFields->push(HX_("inSync",e0,98,c5,88));
+	outFields->push(HX_("enabledPushData",c5,32,81,93));
 	super::__GetFields(outFields);
 };
 
@@ -4897,8 +5087,10 @@ static ::hx::StorageInfo Client_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(Client_obj,_displayName),HX_("_displayName",ae,bf,fb,96)},
 	{::hx::fsString,(int)offsetof(Client_obj,fastMechanism),HX_("fastMechanism",1d,e7,34,8a)},
 	{::hx::fsString,(int)offsetof(Client_obj,token),HX_("token",f9,82,2b,14)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Client_obj,fastCount),HX_("fastCount",93,fc,67,a5)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Client_obj,pendingCaps),HX_("pendingCaps",18,58,88,be)},
 	{::hx::fsBool,(int)offsetof(Client_obj,inSync),HX_("inSync",e0,98,c5,88)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Client_obj,enabledPushData),HX_("enabledPushData",c5,32,81,93)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *Client_obj_sStaticStorageInfo = 0;
@@ -4918,9 +5110,11 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("_displayName",ae,bf,fb,96),
 	HX_("fastMechanism",1d,e7,34,8a),
 	HX_("token",f9,82,2b,14),
+	HX_("fastCount",93,fc,67,a5),
 	HX_("pendingCaps",18,58,88,be),
 	HX_("inSync",e0,98,c5,88),
 	HX_("start",62,74,0b,84),
+	HX_("startOffline",a1,72,73,44),
 	HX_("logout",8a,f6,6e,5c),
 	HX_("usePassword",82,2a,db,a2),
 	HX_("accountId",e8,81,54,29),
@@ -4936,6 +5130,10 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("getChat",8e,0e,42,14),
 	HX_("moderateMessage",44,98,f1,d4),
 	HX_("getDirectChat",d7,7a,64,6b),
+	HX_("enabledPushData",c5,32,81,93),
+	HX_("enablePush",fd,e9,ae,a3),
+	HX_("enablePush__fromC",1c,70,b7,2f),
+	HX_("updatePushIfEnabled",21,71,d8,62),
 	HX_("addPasswordNeededListener",45,5f,7e,e2),
 	HX_("addStatusOnlineListener",ba,7f,0a,f9),
 	HX_("addStatusOfflineListener",84,03,7d,f1),
@@ -5003,7 +5201,7 @@ void Client_obj::__boot()
 {
             	HX_STACKFRAME(&_hx_pos_ead56881d4bbcaca_51_boot)
 HXDLIN(  51)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(31)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(35)
             				->setFixed(0,HX_("addChatsUpdatedListener__fromC",e4,7a,96,80), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(1,HX_("addSyncMessageListener__fromC",ba,f6,2b,88), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -5016,55 +5214,63 @@ HXDLIN(  51)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
             				->setFixed(5,HX_("addStatusOnlineListener__fromC",ff,bb,66,a2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(6,HX_("getChats",25,ae,8a,a5), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(6,HX_("enablePush",fd,e9,ae,a3), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(7,HX_("addCallTrackListener__fromC",39,05,06,c4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(7,HX_("getChats",25,ae,8a,a5), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(8,HX_("addCallTrackListener__fromC",39,05,06,c4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(8,HX_("addCallMediaListener",99,4a,d3,ce), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(9,HX_("addCallMediaListener",99,4a,d3,ce), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(9,HX_("findAvailableChats__fromC",ae,49,41,d0), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(10,HX_("findAvailableChats__fromC",ae,49,41,d0), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(10,HX_("addChatsUpdatedListener",35,56,de,d1), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(11,HX_("addChatsUpdatedListener",35,56,de,d1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(11,HX_("addConnectionFailedListener__fromC",29,3d,00,dc), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(12,HX_("addConnectionFailedListener__fromC",29,3d,00,dc), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(12,HX_("addChatMessageListener__fromC",f7,a0,32,de), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(13,HX_("addChatMessageListener__fromC",f7,a0,32,de), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(13,HX_("addCallRingListener",43,06,12,df), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(14,HX_("addCallRingListener",43,06,12,df), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(14,HX_("addPasswordNeededListener",45,5f,7e,e2), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(15,HX_("addPasswordNeededListener",45,5f,7e,e2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(15,HX_("addSyncMessageListener",9f,bb,b2,e2), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(16,HX_("addSyncMessageListener",9f,bb,b2,e2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(16,HX_("findAvailableChats",2b,92,7a,e4), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(17,HX_("findAvailableChats",2b,92,7a,e4), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(17,HX_("addChatMessageListener",c2,ab,0f,ed), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(18,HX_("addChatMessageListener",c2,ab,0f,ed), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(18,HX_("addStatusOfflineListener",84,03,7d,f1), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(19,HX_("addStatusOfflineListener",84,03,7d,f1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(19,HX_("addStatusOnlineListener",ba,7f,0a,f9), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(20,HX_("addStatusOnlineListener",ba,7f,0a,f9), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(20,HX_("addCallRetractListener",f6,56,33,1b), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(21,HX_("addCallRetractListener",f6,56,33,1b), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(21,HX_("addPasswordNeededListener__fromC",d4,b3,20,1d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(22,HX_("addPasswordNeededListener__fromC",d4,b3,20,1d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(23,HX_("set_sendAvailable__fromC",35,ea,10,2d), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(22,HX_("set_sendAvailable__fromC",35,ea,10,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(24,HX_("enablePush__fromC",1c,70,b7,2f), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(23,HX_("addCallMediaListener__fromC",00,9b,9c,36), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(25,HX_("addCallMediaListener__fromC",00,9b,9c,36), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(24,HX_("addCallRingingListener",27,29,10,44), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(26,HX_("addCallRingingListener",27,29,10,44), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(25,HX_("addCallTrackListener",40,53,e3,46), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(27,HX_("startOffline",a1,72,73,44), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(26,HX_("addConnectionFailedListener",50,7d,89,49), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(28,HX_("addCallTrackListener",40,53,e3,46), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(27,HX_("prepareAttachment",4a,6c,4b,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(29,HX_("addConnectionFailedListener",50,7d,89,49), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(28,HX_("addCallRetractListener__fromC",43,84,e9,5a), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(30,HX_("prepareAttachment",4a,6c,4b,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(31,HX_("addCallRetractListener__fromC",43,84,e9,5a), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(32,HX_("startOffline__fromC",f8,03,65,60), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(29,HX_("addStatusOfflineListener__fromC",75,a5,68,6e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(33,HX_("addStatusOfflineListener__fromC",75,a5,68,6e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(30,HX_("getChats__fromC",f4,00,7e,7e), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(34,HX_("getChats__fromC",f4,00,7e,7e), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 }
diff --git a/Sources/c_snikket/src/snikket/Color.cpp b/Sources/c_snikket/src/snikket/Color.cpp
index 5c1a663..a6d7cfb 100644
--- a/Sources/c_snikket/src/snikket/Color.cpp
+++ b/Sources/c_snikket/src/snikket/Color.cpp
@@ -73,7 +73,7 @@ HXLINE(  21)				encodedLetter = HX_(" ",20,00,00,00);
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE(  26)		return (((((((HX_("data:image/svg+xml,<svg%20xmlns=\"http://www.w3.org/2000/svg\"%20version=\"1.1\"%20width=\"15\"%20height=\"15\"%20viewBox=\"0%200%2015%2015\">",89,4c,ea,28) + HX_("<rect%20style=\"fill:%23",82,0d,df,69)) + hex) + HX_(";\"%20width=\"15\"%20height=\"15\"%20x=\"0\"%20y=\"0\"%20/>",3b,1a,d3,d0)) + HX_("<text%20style=\"fill:%23ffffff;font-size:8px;font-family:sans-serif;\"%20text-anchor=\"middle\"%20%20x=\"7.5\"%20y=\"10\">",89,2f,63,75)) + encodedLetter) + HX_("</text>",9e,15,67,97)) + HX_("</svg>",4d,57,9c,59));
+HXLINE(  26)		return (((((((HX_("data:image/svg+xml,<svg%20xmlns=\"http://www.w3.org/2000/svg\"%20version=\"1.1\"%20width=\"15\"%20height=\"15\"%20viewBox=\"0%200%2015%2015\">",89,4c,ea,28) + HX_("<rect%20style=\"fill:%23",82,0d,df,69)) + hex) + HX_(";\"%20width=\"15\"%20height=\"15\"%20x=\"0\"%20y=\"0\"%20/>",3b,1a,d3,d0)) + HX_("<text%20style=\"fill:%23ffffff;font-size:8px;font-family:sans-serif;\"%20text-anchor=\"middle\"%20x=\"7.5\"%20y=\"10\">",82,0b,95,1e)) + encodedLetter) + HX_("</text>",9e,15,67,97)) + HX_("</svg>",4d,57,9c,59));
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/CustomEmojiReaction.cpp b/Sources/c_snikket/src/snikket/CustomEmojiReaction.cpp
index 5e2a475..c546739 100644
--- a/Sources/c_snikket/src/snikket/CustomEmojiReaction.cpp
+++ b/Sources/c_snikket/src/snikket/CustomEmojiReaction.cpp
@@ -12,7 +12,7 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_6c2890a46980c7c5_46_new,"snikket.CustomEmojiReaction","new",0x0196cbbf,"snikket.CustomEmojiReaction.new","snikket/Reaction.hx",46,0x19ff1ac3)
-HX_LOCAL_STACK_FRAME(_hx_pos_2e818d33177b7606_307_uri__fromC,"snikket.CustomEmojiReaction","uri__fromC",0xf2c1890e,"snikket.CustomEmojiReaction.uri__fromC","HaxeCBridge.hx",307,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_2e818d33177b7606_355_uri__fromC,"snikket.CustomEmojiReaction","uri__fromC",0xf2c1890e,"snikket.CustomEmojiReaction.uri__fromC","HaxeCBridge.hx",355,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_6c2890a46980c7c5_52_render,"snikket.CustomEmojiReaction","render",0xe0809557,"snikket.CustomEmojiReaction.render","snikket/Reaction.hx",52,0x19ff1ac3)
 HX_LOCAL_STACK_FRAME(_hx_pos_6c2890a46980c7c5_42_boot,"snikket.CustomEmojiReaction","boot",0x5a747bf3,"snikket.CustomEmojiReaction.boot","snikket/Reaction.hx",42,0x19ff1ac3)
 namespace snikket{
@@ -43,8 +43,8 @@ bool CustomEmojiReaction_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String CustomEmojiReaction_obj::uri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_2e818d33177b7606_307_uri__fromC)
-HXDLIN( 307)		return this->uri;
+            	HX_STACKFRAME(&_hx_pos_2e818d33177b7606_355_uri__fromC)
+HXDLIN( 355)		return this->uri;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/DirectChat.cpp b/Sources/c_snikket/src/snikket/DirectChat.cpp
index 92922ce..4a94bb6 100644
--- a/Sources/c_snikket/src/snikket/DirectChat.cpp
+++ b/Sources/c_snikket/src/snikket/DirectChat.cpp
@@ -89,41 +89,41 @@
 #include <snikket/_Stanza/NodeInterface.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_af7b91d6026813b6_720_new,"snikket.DirectChat","new",0x757e3104,"snikket.DirectChat.new","snikket/Chat.hx",720,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_724_getParticipants,"snikket.DirectChat","getParticipants",0x9f51d1ba,"snikket.DirectChat.getParticipants","snikket/Chat.hx",724,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_734_counterparts,"snikket.DirectChat","counterparts",0x2a527b80,"snikket.DirectChat.counterparts","snikket/Chat.hx",734,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_738_getParticipantDetails,"snikket.DirectChat","getParticipantDetails",0x79208529,"snikket.DirectChat.getParticipantDetails","snikket/Chat.hx",738,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_746_getMessagesBefore,"snikket.DirectChat","getMessagesBefore",0x4909a945,"snikket.DirectChat.getMessagesBefore","snikket/Chat.hx",746,0x18616bf4)
+HX_DEFINE_STACK_FRAME(_hx_pos_af7b91d6026813b6_718_new,"snikket.DirectChat","new",0x757e3104,"snikket.DirectChat.new","snikket/Chat.hx",718,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_722_getParticipants,"snikket.DirectChat","getParticipants",0x9f51d1ba,"snikket.DirectChat.getParticipants","snikket/Chat.hx",722,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_732_counterparts,"snikket.DirectChat","counterparts",0x2a527b80,"snikket.DirectChat.counterparts","snikket/Chat.hx",732,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_736_getParticipantDetails,"snikket.DirectChat","getParticipantDetails",0x79208529,"snikket.DirectChat.getParticipantDetails","snikket/Chat.hx",736,0x18616bf4)
 HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_744_getMessagesBefore,"snikket.DirectChat","getMessagesBefore",0x4909a945,"snikket.DirectChat.getMessagesBefore","snikket/Chat.hx",744,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_764_getMessagesAfter,"snikket.DirectChat","getMessagesAfter",0x26744c16,"snikket.DirectChat.getMessagesAfter","snikket/Chat.hx",764,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_758_getMessagesAfter,"snikket.DirectChat","getMessagesAfter",0x26744c16,"snikket.DirectChat.getMessagesAfter","snikket/Chat.hx",758,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_778_getMessagesAround,"snikket.DirectChat","getMessagesAround",0x64db4d13,"snikket.DirectChat.getMessagesAround","snikket/Chat.hx",778,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_777_getMessagesAround,"snikket.DirectChat","getMessagesAround",0x64db4d13,"snikket.DirectChat.getMessagesAround","snikket/Chat.hx",777,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_788_prepareIncomingMessage,"snikket.DirectChat","prepareIncomingMessage",0xe7120196,"snikket.DirectChat.prepareIncomingMessage","snikket/Chat.hx",788,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_793_prepareOutgoingMessage,"snikket.DirectChat","prepareOutgoingMessage",0x4d3ec6d0,"snikket.DirectChat.prepareOutgoingMessage","snikket/Chat.hx",793,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_810_correctMessage,"snikket.DirectChat","correctMessage",0x83971059,"snikket.DirectChat.correctMessage","snikket/Chat.hx",810,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_805_correctMessage,"snikket.DirectChat","correctMessage",0x83971059,"snikket.DirectChat.correctMessage","snikket/Chat.hx",805,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_826_sendMessage,"snikket.DirectChat","sendMessage",0x7d4f2e03,"snikket.DirectChat.sendMessage","snikket/Chat.hx",826,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_834_sendMessage,"snikket.DirectChat","sendMessage",0x7d4f2e03,"snikket.DirectChat.sendMessage","snikket/Chat.hx",834,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_850_sendMessage,"snikket.DirectChat","sendMessage",0x7d4f2e03,"snikket.DirectChat.sendMessage","snikket/Chat.hx",850,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_886_removeReaction,"snikket.DirectChat","removeReaction",0x4fdefde9,"snikket.DirectChat.removeReaction","snikket/Chat.hx",886,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_864_removeReaction,"snikket.DirectChat","removeReaction",0x4fdefde9,"snikket.DirectChat.removeReaction","snikket/Chat.hx",864,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_879_removeReaction,"snikket.DirectChat","removeReaction",0x4fdefde9,"snikket.DirectChat.removeReaction","snikket/Chat.hx",879,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_898_lastMessageId,"snikket.DirectChat","lastMessageId",0x6bb7a5f0,"snikket.DirectChat.lastMessageId","snikket/Chat.hx",898,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_903_markReadUpTo,"snikket.DirectChat","markReadUpTo",0xa06bd335,"snikket.DirectChat.markReadUpTo","snikket/Chat.hx",903,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_902_markReadUpTo,"snikket.DirectChat","markReadUpTo",0xa06bd335,"snikket.DirectChat.markReadUpTo","snikket/Chat.hx",902,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_934_bookmark,"snikket.DirectChat","bookmark",0x9ab25992,"snikket.DirectChat.bookmark","snikket/Chat.hx",934,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_924_bookmark,"snikket.DirectChat","bookmark",0x9ab25992,"snikket.DirectChat.bookmark","snikket/Chat.hx",924,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_943_sendChatState,"snikket.DirectChat","sendChatState",0xb2f43755,"snikket.DirectChat.sendChatState","snikket/Chat.hx",943,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_960_close,"snikket.DirectChat","close",0x2561e95c,"snikket.DirectChat.close","snikket/Chat.hx",960,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_717_boot,"snikket.DirectChat","boot",0x5105b30e,"snikket.DirectChat.boot","snikket/Chat.hx",717,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_742_getMessagesBefore,"snikket.DirectChat","getMessagesBefore",0x4909a945,"snikket.DirectChat.getMessagesBefore","snikket/Chat.hx",742,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_762_getMessagesAfter,"snikket.DirectChat","getMessagesAfter",0x26744c16,"snikket.DirectChat.getMessagesAfter","snikket/Chat.hx",762,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_756_getMessagesAfter,"snikket.DirectChat","getMessagesAfter",0x26744c16,"snikket.DirectChat.getMessagesAfter","snikket/Chat.hx",756,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_776_getMessagesAround,"snikket.DirectChat","getMessagesAround",0x64db4d13,"snikket.DirectChat.getMessagesAround","snikket/Chat.hx",776,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_775_getMessagesAround,"snikket.DirectChat","getMessagesAround",0x64db4d13,"snikket.DirectChat.getMessagesAround","snikket/Chat.hx",775,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_786_prepareIncomingMessage,"snikket.DirectChat","prepareIncomingMessage",0xe7120196,"snikket.DirectChat.prepareIncomingMessage","snikket/Chat.hx",786,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_791_prepareOutgoingMessage,"snikket.DirectChat","prepareOutgoingMessage",0x4d3ec6d0,"snikket.DirectChat.prepareOutgoingMessage","snikket/Chat.hx",791,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_808_correctMessage,"snikket.DirectChat","correctMessage",0x83971059,"snikket.DirectChat.correctMessage","snikket/Chat.hx",808,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_803_correctMessage,"snikket.DirectChat","correctMessage",0x83971059,"snikket.DirectChat.correctMessage","snikket/Chat.hx",803,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_824_sendMessage,"snikket.DirectChat","sendMessage",0x7d4f2e03,"snikket.DirectChat.sendMessage","snikket/Chat.hx",824,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_832_sendMessage,"snikket.DirectChat","sendMessage",0x7d4f2e03,"snikket.DirectChat.sendMessage","snikket/Chat.hx",832,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_848_sendMessage,"snikket.DirectChat","sendMessage",0x7d4f2e03,"snikket.DirectChat.sendMessage","snikket/Chat.hx",848,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_884_removeReaction,"snikket.DirectChat","removeReaction",0x4fdefde9,"snikket.DirectChat.removeReaction","snikket/Chat.hx",884,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_862_removeReaction,"snikket.DirectChat","removeReaction",0x4fdefde9,"snikket.DirectChat.removeReaction","snikket/Chat.hx",862,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_877_removeReaction,"snikket.DirectChat","removeReaction",0x4fdefde9,"snikket.DirectChat.removeReaction","snikket/Chat.hx",877,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_896_lastMessageId,"snikket.DirectChat","lastMessageId",0x6bb7a5f0,"snikket.DirectChat.lastMessageId","snikket/Chat.hx",896,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_901_markReadUpTo,"snikket.DirectChat","markReadUpTo",0xa06bd335,"snikket.DirectChat.markReadUpTo","snikket/Chat.hx",901,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_900_markReadUpTo,"snikket.DirectChat","markReadUpTo",0xa06bd335,"snikket.DirectChat.markReadUpTo","snikket/Chat.hx",900,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_932_bookmark,"snikket.DirectChat","bookmark",0x9ab25992,"snikket.DirectChat.bookmark","snikket/Chat.hx",932,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_922_bookmark,"snikket.DirectChat","bookmark",0x9ab25992,"snikket.DirectChat.bookmark","snikket/Chat.hx",922,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_941_sendChatState,"snikket.DirectChat","sendChatState",0xb2f43755,"snikket.DirectChat.sendChatState","snikket/Chat.hx",941,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_958_close,"snikket.DirectChat","close",0x2561e95c,"snikket.DirectChat.close","snikket/Chat.hx",958,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_af7b91d6026813b6_715_boot,"snikket.DirectChat","boot",0x5105b30e,"snikket.DirectChat.boot","snikket/Chat.hx",715,0x18616bf4)
 namespace snikket{
 
 void DirectChat_obj::__construct( ::snikket::Client client, ::snikket::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBlocked, ::snikket::Stanza extensions,::String readUpToId,::String readUpToBy){
             		int uiState = __o_uiState.Default(1);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_720_new)
-HXDLIN( 720)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy);
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_718_new)
+HXDLIN( 718)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy);
             	}
 
 Dynamic DirectChat_obj::__CreateEmpty() { return new DirectChat_obj; }
@@ -146,208 +146,208 @@ bool DirectChat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::Array< ::String > DirectChat_obj::getParticipants(){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_724_getParticipants)
-HXLINE( 725)		::Array< ::String > counters = this->counterparts();
-HXLINE( 726)		bool _hx_tmp;
-HXDLIN( 726)		if ((counters->length < 2)) {
-HXLINE( 726)			 ::snikket::ChatMessage tmp = this->lastMessage;
-HXDLIN( 726)			::Array< ::Dynamic> tmp1;
-HXDLIN( 726)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 726)				tmp1 = tmp->recipients;
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_722_getParticipants)
+HXLINE( 723)		::Array< ::String > counters = this->counterparts();
+HXLINE( 724)		bool _hx_tmp;
+HXDLIN( 724)		if ((counters->length < 2)) {
+HXLINE( 724)			 ::snikket::ChatMessage tmp = this->lastMessage;
+HXDLIN( 724)			::Array< ::Dynamic> tmp1;
+HXDLIN( 724)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 724)				tmp1 = tmp->recipients;
             			}
             			else {
-HXLINE( 726)				tmp1 = null();
+HXLINE( 724)				tmp1 = null();
             			}
-HXDLIN( 726)			 ::Dynamic tmp2;
-HXDLIN( 726)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 726)				tmp2 = tmp1->length;
+HXDLIN( 724)			 ::Dynamic tmp2;
+HXDLIN( 724)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 724)				tmp2 = tmp1->length;
             			}
             			else {
-HXLINE( 726)				tmp2 = null();
+HXLINE( 724)				tmp2 = null();
             			}
-HXDLIN( 726)			int _hx_tmp1;
-HXDLIN( 726)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 726)				_hx_tmp1 = ( (int)(tmp2) );
+HXDLIN( 724)			int _hx_tmp1;
+HXDLIN( 724)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 724)				_hx_tmp1 = ( (int)(tmp2) );
             			}
             			else {
-HXLINE( 726)				_hx_tmp1 = 0;
+HXLINE( 724)				_hx_tmp1 = 0;
             			}
-HXDLIN( 726)			_hx_tmp = (_hx_tmp1 > 1);
+HXDLIN( 724)			_hx_tmp = (_hx_tmp1 > 1);
             		}
             		else {
-HXLINE( 726)			_hx_tmp = false;
-            		}
-HXDLIN( 726)		if (_hx_tmp) {
-HXLINE( 727)			::Array< ::Dynamic> _this = this->lastMessage->recipients;
-HXDLIN( 727)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 727)			{
-HXLINE( 727)				int _g = 0;
-HXDLIN( 727)				int _g1 = _this->length;
-HXDLIN( 727)				while((_g < _g1)){
-HXLINE( 727)					_g = (_g + 1);
-HXDLIN( 727)					int i = (_g - 1);
-HXDLIN( 727)					{
-HXLINE( 727)						::String inValue = ( ( ::snikket::JID)(_hx_array_unsafe_get(_this,i)) )->asString();
-HXDLIN( 727)						result->__unsafe_set(i,inValue);
+HXLINE( 724)			_hx_tmp = false;
+            		}
+HXDLIN( 724)		if (_hx_tmp) {
+HXLINE( 725)			::Array< ::Dynamic> _this = this->lastMessage->recipients;
+HXDLIN( 725)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 725)			{
+HXLINE( 725)				int _g = 0;
+HXDLIN( 725)				int _g1 = _this->length;
+HXDLIN( 725)				while((_g < _g1)){
+HXLINE( 725)					_g = (_g + 1);
+HXDLIN( 725)					int i = (_g - 1);
+HXDLIN( 725)					{
+HXLINE( 725)						::String inValue = ( ( ::snikket::JID)(_hx_array_unsafe_get(_this,i)) )->asString();
+HXDLIN( 725)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 727)			return result->concat(::Array_obj< ::String >::__new(1)->init(0,this->lastMessage->senderId));
+HXDLIN( 725)			return result->concat(::Array_obj< ::String >::__new(1)->init(0,this->lastMessage->senderId));
             		}
             		else {
-HXLINE( 729)			::Array< ::String > _hx_tmp2 = this->counterparts();
-HXDLIN( 729)			return _hx_tmp2->concat(::Array_obj< ::String >::__new(1)->init(0,this->client->accountId()));
+HXLINE( 727)			::Array< ::String > _hx_tmp2 = this->counterparts();
+HXDLIN( 727)			return _hx_tmp2->concat(::Array_obj< ::String >::__new(1)->init(0,this->client->accountId()));
             		}
-HXLINE( 726)		return null();
+HXLINE( 724)		return null();
             	}
 
 
 ::Array< ::String > DirectChat_obj::counterparts(){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_734_counterparts)
-HXDLIN( 734)		return this->chatId.split(HX_("\n",0a,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_732_counterparts)
+HXDLIN( 732)		return this->chatId.split(HX_("\n",0a,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(DirectChat_obj,counterparts,return )
 
  ::snikket::Participant DirectChat_obj::getParticipantDetails(::String participantId){
-            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_738_getParticipantDetails)
-HXLINE( 739)		 ::snikket::DirectChat chat = this->client->getDirectChat(participantId,null());
-HXLINE( 740)		::String _hx_tmp = chat->getDisplayName();
-HXDLIN( 740)		::String _hx_tmp1 = chat->getPhoto();
-HXDLIN( 740)		::String _hx_tmp2 = chat->getPlaceholder();
-HXDLIN( 740)		::String chat1 = chat->chatId;
-HXDLIN( 740)		return  ::snikket::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,(chat1 == this->client->accountId()));
+            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_736_getParticipantDetails)
+HXLINE( 737)		 ::snikket::DirectChat chat = this->client->getDirectChat(participantId,null());
+HXLINE( 738)		::String _hx_tmp = chat->getDisplayName();
+HXDLIN( 738)		::String _hx_tmp1 = chat->getPhoto();
+HXDLIN( 738)		::String _hx_tmp2 = chat->getPlaceholder();
+HXDLIN( 738)		::String chat1 = chat->chatId;
+HXDLIN( 738)		return  ::snikket::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,(chat1 == this->client->accountId()));
             	}
 
 
 void DirectChat_obj::getMessagesBefore(::String beforeId,::String beforeTime, ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis,::String,beforeId, ::Dynamic,handler) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_746_getMessagesBefore)
-HXLINE( 746)			if ((messages->length > 0)) {
-HXLINE( 747)				handler(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_744_getMessagesBefore)
+HXLINE( 744)			if ((messages->length > 0)) {
+HXLINE( 745)				handler(messages);
             			}
             			else {
-HXLINE( 749)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 747)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("with",06,76,f8,4e),_gthis->chatId));
-HXLINE( 750)				if (::hx::IsNotNull( beforeId )) {
-HXLINE( 750)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 748)				if (::hx::IsNotNull( beforeId )) {
+HXLINE( 748)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("before",7f,54,32,9a),beforeId)),::hx::paccDynamic);
             				}
-HXLINE( 751)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
-HXLINE( 752)				_gthis->fetchFromSync(sync,handler);
+HXLINE( 749)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
+HXLINE( 750)				_gthis->fetchFromSync(sync,handler);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_744_getMessagesBefore)
-HXDLIN( 744)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 745)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 745)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN( 745)		::snikket::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime, ::Dynamic(new _hx_Closure_0(_gthis,beforeId,handler)));
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_742_getMessagesBefore)
+HXDLIN( 742)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 743)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 743)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN( 743)		::snikket::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime, ::Dynamic(new _hx_Closure_0(_gthis,beforeId,handler)));
             	}
 
 
 void DirectChat_obj::getMessagesAfter(::String afterId,::String afterTime, ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis,::String,afterId, ::Dynamic,handler) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_764_getMessagesAfter)
-HXLINE( 764)			if ((messages->length > 0)) {
-HXLINE( 765)				handler(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_762_getMessagesAfter)
+HXLINE( 762)			if ((messages->length > 0)) {
+HXLINE( 763)				handler(messages);
             			}
             			else {
-HXLINE( 767)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 765)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("with",06,76,f8,4e),_gthis->chatId));
-HXLINE( 768)				if (::hx::IsNotNull( afterId )) {
-HXLINE( 768)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 766)				if (::hx::IsNotNull( afterId )) {
+HXLINE( 766)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("after",1c,66,a2,1d),afterId)),::hx::paccDynamic);
             				}
-HXLINE( 769)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
-HXLINE( 770)				_gthis->fetchFromSync(sync,handler);
+HXLINE( 767)				 ::snikket::MessageSync sync =  ::snikket::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
+HXLINE( 768)				_gthis->fetchFromSync(sync,handler);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_758_getMessagesAfter)
-HXDLIN( 758)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 759)		bool _hx_tmp;
-HXDLIN( 759)		::String afterId1 = afterId;
-HXDLIN( 759)		if ((afterId1 == this->lastMessageId())) {
-HXLINE( 759)			_hx_tmp = !(this->syncing());
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_756_getMessagesAfter)
+HXDLIN( 756)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 757)		bool _hx_tmp;
+HXDLIN( 757)		::String afterId1 = afterId;
+HXDLIN( 757)		if ((afterId1 == this->lastMessageId())) {
+HXLINE( 757)			_hx_tmp = !(this->syncing());
             		}
             		else {
-HXLINE( 759)			_hx_tmp = false;
+HXLINE( 757)			_hx_tmp = false;
             		}
-HXDLIN( 759)		if (_hx_tmp) {
-HXLINE( 760)			handler(::Array_obj< ::Dynamic>::__new(0));
-HXLINE( 761)			return;
+HXDLIN( 757)		if (_hx_tmp) {
+HXLINE( 758)			handler(::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 759)			return;
             		}
-HXLINE( 763)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 763)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN( 763)		::snikket::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime, ::Dynamic(new _hx_Closure_0(_gthis,afterId,handler)));
+HXLINE( 761)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 761)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN( 761)		::snikket::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime, ::Dynamic(new _hx_Closure_0(_gthis,afterId,handler)));
             	}
 
 
 void DirectChat_obj::getMessagesAround(::String aroundId,::String aroundTime, ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_778_getMessagesAround)
-HXLINE( 778)			if ((messages->length > 0)) {
-HXLINE( 779)				handler(messages);
+            			HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_776_getMessagesAround)
+HXLINE( 776)			if ((messages->length > 0)) {
+HXLINE( 777)				handler(messages);
             			}
             			else {
-HXLINE( 782)				handler(::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 780)				handler(::Array_obj< ::Dynamic>::__new(0));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_777_getMessagesAround)
-HXDLIN( 777)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 777)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN( 777)		::snikket::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime, ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_775_getMessagesAround)
+HXDLIN( 775)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 775)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN( 775)		::snikket::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime, ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
  ::snikket::ChatMessageBuilder DirectChat_obj::prepareIncomingMessage( ::snikket::ChatMessageBuilder message, ::snikket::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_788_prepareIncomingMessage)
-HXLINE( 789)		message->syncPoint = !(this->syncing());
-HXLINE( 790)		return message;
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_786_prepareIncomingMessage)
+HXLINE( 787)		message->syncPoint = !(this->syncing());
+HXLINE( 788)		return message;
             	}
 
 
  ::snikket::ChatMessageBuilder DirectChat_obj::prepareOutgoingMessage( ::snikket::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_793_prepareOutgoingMessage)
-HXLINE( 794)		::String tmp = message->timestamp;
-HXDLIN( 794)		::String _hx_tmp;
-HXDLIN( 794)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 794)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_791_prepareOutgoingMessage)
+HXLINE( 792)		::String tmp = message->timestamp;
+HXDLIN( 792)		::String _hx_tmp;
+HXDLIN( 792)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 792)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE( 794)			_hx_tmp = ::snikket::Date_obj::format(::Date_obj::now());
-            		}
-HXDLIN( 794)		message->timestamp = _hx_tmp;
-HXLINE( 795)		message->direction = 1;
-HXLINE( 796)		message->from = this->client->jid;
-HXLINE( 797)		message->sender = message->from->asBare();
-HXLINE( 798)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
-HXLINE( 799)		::Array< ::String > _this = this->counterparts();
-HXDLIN( 799)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 799)		{
-HXLINE( 799)			int _g = 0;
-HXDLIN( 799)			int _g1 = _this->length;
-HXDLIN( 799)			while((_g < _g1)){
-HXLINE( 799)				_g = (_g + 1);
-HXDLIN( 799)				int i = (_g - 1);
-HXDLIN( 799)				{
-HXLINE( 799)					 ::snikket::JID inValue = ::snikket::JID_obj::parse(( (::String)(_hx_array_unsafe_get(_this,i)) ));
-HXDLIN( 799)					result->__unsafe_set(i,inValue);
+HXLINE( 792)			_hx_tmp = ::snikket::Date_obj::format(::Date_obj::now());
+            		}
+HXDLIN( 792)		message->timestamp = _hx_tmp;
+HXLINE( 793)		message->direction = 1;
+HXLINE( 794)		message->from = this->client->jid;
+HXLINE( 795)		message->sender = message->from->asBare();
+HXLINE( 796)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
+HXLINE( 797)		::Array< ::String > _this = this->counterparts();
+HXDLIN( 797)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 797)		{
+HXLINE( 797)			int _g = 0;
+HXDLIN( 797)			int _g1 = _this->length;
+HXDLIN( 797)			while((_g < _g1)){
+HXLINE( 797)				_g = (_g + 1);
+HXDLIN( 797)				int i = (_g - 1);
+HXDLIN( 797)				{
+HXLINE( 797)					 ::snikket::JID inValue = ::snikket::JID_obj::parse(( (::String)(_hx_array_unsafe_get(_this,i)) ));
+HXDLIN( 797)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 799)		message->recipients = result;
-HXLINE( 800)		message->to = message->recipients->__get(0).StaticCast<  ::snikket::JID >();
-HXLINE( 801)		return message;
+HXDLIN( 797)		message->recipients = result;
+HXLINE( 798)		message->to = message->recipients->__get(0).StaticCast<  ::snikket::JID >();
+HXLINE( 799)		return message;
             	}
 
 
@@ -356,151 +356,151 @@ HX_DEFINE_DYNAMIC_FUNC1(DirectChat_obj,prepareOutgoingMessage,return )
 void DirectChat_obj::correctMessage(::String localId, ::snikket::ChatMessageBuilder message){
             		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis,::Array< ::Dynamic>,message1,::String,localId,::String,toSendId) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> corrected){
-            			HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_810_correctMessage)
-HXLINE( 811)			::Array< ::Dynamic> _hx_tmp;
-HXDLIN( 811)			 ::snikket::ChatMessage tmp = corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->__get((corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 811)			::String _hx_tmp1;
-HXDLIN( 811)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 811)				_hx_tmp1 = tmp->localId;
+            			HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_808_correctMessage)
+HXLINE( 809)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 809)			 ::snikket::ChatMessage tmp = corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->__get((corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->length - 1)).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 809)			::String _hx_tmp1;
+HXDLIN( 809)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 809)				_hx_tmp1 = tmp->localId;
             			}
             			else {
-HXLINE( 811)				_hx_tmp1 = null();
+HXLINE( 809)				_hx_tmp1 = null();
             			}
-HXDLIN( 811)			if ((_hx_tmp1 == localId)) {
-HXLINE( 811)				_hx_tmp = corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions;
+HXDLIN( 809)			if ((_hx_tmp1 == localId)) {
+HXLINE( 809)				_hx_tmp = corrected->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions;
             			}
             			else {
-HXLINE( 811)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build());
-            			}
-HXDLIN( 811)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = _hx_tmp;
-HXLINE( 812)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = toSendId;
-HXLINE( 813)			{
-HXLINE( 813)				int _g = 0;
-HXDLIN( 813)				::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients;
-HXDLIN( 813)				while((_g < _g1->length)){
-HXLINE( 813)					 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
-HXDLIN( 813)					_g = (_g + 1);
-HXLINE( 814)					message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = recipient;
-HXLINE( 815)					 ::snikket::Client _gthis1 = _gthis->client;
-HXDLIN( 815)					_gthis1->sendStanza(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza());
+HXLINE( 809)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build());
+            			}
+HXDLIN( 809)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = _hx_tmp;
+HXLINE( 810)			message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = toSendId;
+HXLINE( 811)			{
+HXLINE( 811)				int _g = 0;
+HXDLIN( 811)				::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients;
+HXDLIN( 811)				while((_g < _g1->length)){
+HXLINE( 811)					 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
+HXDLIN( 811)					_g = (_g + 1);
+HXLINE( 812)					message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = recipient;
+HXLINE( 813)					 ::snikket::Client _gthis1 = _gthis->client;
+HXDLIN( 813)					_gthis1->sendStanza(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza());
             				}
             			}
-HXLINE( 817)			 ::snikket::ChatMessage tmp1 = _gthis->lastMessage;
-HXDLIN( 817)			::String _hx_tmp2;
-HXDLIN( 817)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 817)				_hx_tmp2 = tmp1->localId;
+HXLINE( 815)			 ::snikket::ChatMessage tmp1 = _gthis->lastMessage;
+HXDLIN( 815)			::String _hx_tmp2;
+HXDLIN( 815)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 815)				_hx_tmp2 = tmp1->localId;
             			}
             			else {
-HXLINE( 817)				_hx_tmp2 = null();
+HXLINE( 815)				_hx_tmp2 = null();
             			}
-HXDLIN( 817)			if ((localId == _hx_tmp2)) {
-HXLINE( 818)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >());
-HXLINE( 819)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN( 815)			if ((localId == _hx_tmp2)) {
+HXLINE( 816)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >());
+HXLINE( 817)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             			}
-HXLINE( 821)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >(),1);
+HXLINE( 819)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::snikket::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_805_correctMessage)
-HXDLIN( 805)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN( 805)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 806)		::String toSendId = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId;
-HXLINE( 807)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >());
-HXLINE( 808)		 ::snikket::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build();
-HXDLIN( 808)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
-HXLINE( 809)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = localId;
-HXLINE( 810)		 ::snikket::Client _hx_tmp1 = this->client;
-HXDLIN( 810)		_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId)));
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_803_correctMessage)
+HXDLIN( 803)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN( 803)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 804)		::String toSendId = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId;
+HXLINE( 805)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >());
+HXLINE( 806)		 ::snikket::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build();
+HXDLIN( 806)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
+HXLINE( 807)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->localId = localId;
+HXLINE( 808)		 ::snikket::Client _hx_tmp1 = this->client;
+HXDLIN( 808)		_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId)));
             	}
 
 
 void DirectChat_obj::sendMessage( ::snikket::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_826_sendMessage)
-HXDLIN( 826)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN( 826)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 827)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE( 827)			this->typingTimer->stop();
-            		}
-HXLINE( 828)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
-HXLINE( 829)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >());
-HXLINE( 830)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients->__get(0).StaticCast<  ::snikket::JID >();
-HXLINE( 831)		 ::snikket::Stanza fromStanza = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN( 831)		 ::snikket::MessageStanza fromStanza1 = ::snikket::Message_obj::fromStanza(fromStanza,this->client->jid,null())->parsed;
-HXLINE( 832)		switch((int)(fromStanza1->_hx_getIndex())){
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_824_sendMessage)
+HXDLIN( 824)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN( 824)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 825)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE( 825)			this->typingTimer->stop();
+            		}
+HXLINE( 826)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
+HXLINE( 827)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >());
+HXLINE( 828)		message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients->__get(0).StaticCast<  ::snikket::JID >();
+HXLINE( 829)		 ::snikket::Stanza fromStanza = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN( 829)		 ::snikket::MessageStanza fromStanza1 = ::snikket::Message_obj::fromStanza(fromStanza,this->client->jid,null())->parsed;
+HXLINE( 830)		switch((int)(fromStanza1->_hx_getIndex())){
             			case (int)1: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis,::Array< ::Dynamic>,message1) HXARGC(1)
             				void _hx_run(::Array< ::Dynamic> stored){
-            					HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_834_sendMessage)
-HXLINE( 835)					{
-HXLINE( 835)						int _g = 0;
-HXDLIN( 835)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients;
-HXDLIN( 835)						while((_g < _g1->length)){
-HXLINE( 835)							 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
-HXDLIN( 835)							_g = (_g + 1);
-HXLINE( 836)							message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = recipient;
-HXLINE( 837)							 ::snikket::Stanza stanza = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza();
-HXLINE( 838)							if (::hx::IsNotNull( _gthis->isActive )) {
-HXLINE( 839)								_gthis->isActive = true;
-HXLINE( 840)								_gthis->activeThread = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->threadId;
-HXLINE( 841)								stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+            					HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_832_sendMessage)
+HXLINE( 833)					{
+HXLINE( 833)						int _g = 0;
+HXDLIN( 833)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients;
+HXDLIN( 833)						while((_g < _g1->length)){
+HXLINE( 833)							 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
+HXDLIN( 833)							_g = (_g + 1);
+HXLINE( 834)							message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = recipient;
+HXLINE( 835)							 ::snikket::Stanza stanza = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza();
+HXLINE( 836)							if (::hx::IsNotNull( _gthis->isActive )) {
+HXLINE( 837)								_gthis->isActive = true;
+HXLINE( 838)								_gthis->activeThread = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->threadId;
+HXLINE( 839)								stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
             									->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
             							}
-HXLINE( 843)							_gthis->client->sendStanza(stanza);
+HXLINE( 841)							_gthis->client->sendStanza(stanza);
             						}
             					}
-HXLINE( 845)					 ::snikket::DirectChat _gthis1 = _gthis;
-HXDLIN( 845)					_gthis1->setLastMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build());
-HXLINE( 846)					_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
-HXLINE( 847)					int _hx_tmp;
-HXDLIN( 847)					if ((stored->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->length > 1)) {
-HXLINE( 847)						_hx_tmp = 1;
+HXLINE( 843)					 ::snikket::DirectChat _gthis1 = _gthis;
+HXDLIN( 843)					_gthis1->setLastMessage(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build());
+HXLINE( 844)					_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE( 845)					int _hx_tmp;
+HXDLIN( 845)					if ((stored->__get(0).StaticCast<  ::snikket::ChatMessage >()->versions->length > 1)) {
+HXLINE( 845)						_hx_tmp = 1;
             					}
             					else {
-HXLINE( 847)						_hx_tmp = 0;
+HXLINE( 845)						_hx_tmp = 0;
             					}
-HXDLIN( 847)					_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::snikket::ChatMessage >(),_hx_tmp);
+HXDLIN( 845)					_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::snikket::ChatMessage >(),_hx_tmp);
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 833)				 ::snikket::ChatMessage _g = fromStanza1->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
-HXLINE( 834)				 ::snikket::Client _hx_tmp = this->client;
-HXDLIN( 834)				_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()), ::Dynamic(new _hx_Closure_0(_gthis,message1)));
+HXLINE( 831)				 ::snikket::ChatMessage _g = fromStanza1->_hx_getObject(0).StaticCast<  ::snikket::ChatMessage >();
+HXLINE( 832)				 ::snikket::Client _hx_tmp = this->client;
+HXDLIN( 832)				_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()), ::Dynamic(new _hx_Closure_0(_gthis,message1)));
             			}
             			break;
             			case (int)3: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::DirectChat,_gthis,::Array< ::Dynamic>,message1) HXARGC(1)
             				void _hx_run( ::snikket::ChatMessage stored){
-            					HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_850_sendMessage)
-HXLINE( 851)					{
-HXLINE( 851)						int _g = 0;
-HXDLIN( 851)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients;
-HXDLIN( 851)						while((_g < _g1->length)){
-HXLINE( 851)							 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
-HXDLIN( 851)							_g = (_g + 1);
-HXLINE( 852)							message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = recipient;
-HXLINE( 853)							 ::snikket::Client _gthis1 = _gthis->client;
-HXDLIN( 853)							_gthis1->sendStanza(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza());
+            					HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_848_sendMessage)
+HXLINE( 849)					{
+HXLINE( 849)						int _g = 0;
+HXDLIN( 849)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->recipients;
+HXDLIN( 849)						while((_g < _g1->length)){
+HXLINE( 849)							 ::snikket::JID recipient = _g1->__get(_g).StaticCast<  ::snikket::JID >();
+HXDLIN( 849)							_g = (_g + 1);
+HXLINE( 850)							message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->to = recipient;
+HXLINE( 851)							 ::snikket::Client _gthis1 = _gthis->client;
+HXDLIN( 851)							_gthis1->sendStanza(message1->__get(0).StaticCast<  ::snikket::ChatMessageBuilder >()->build()->asStanza());
             						}
             					}
-HXLINE( 855)					if (::hx::IsNotNull( stored )) {
-HXLINE( 855)						_gthis->client->notifyMessageHandlers(stored,2);
+HXLINE( 853)					if (::hx::IsNotNull( stored )) {
+HXLINE( 853)						_gthis->client->notifyMessageHandlers(stored,2);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 849)				 ::snikket::ReactionUpdate update = fromStanza1->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
-HXLINE( 850)				::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 850)				::snikket::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),update, ::Dynamic(new _hx_Closure_1(_gthis,message1)));
+HXLINE( 847)				 ::snikket::ReactionUpdate update = fromStanza1->_hx_getObject(0).StaticCast<  ::snikket::ReactionUpdate >();
+HXLINE( 848)				::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 848)				::snikket::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),update, ::Dynamic(new _hx_Closure_1(_gthis,message1)));
             			}
             			break;
             			default:{
-HXLINE( 858)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 856)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.DirectChat",12,9f,50,5b))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,fromStanza1))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("sendMessage",5f,89,1d,24))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Chat.hx",f4,6b,61,18))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),858)));
-HXLINE( 859)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),856)));
+HXLINE( 857)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
             			}
             		}
             	}
@@ -509,165 +509,165 @@ HXLINE( 859)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0
 void DirectChat_obj::removeReaction( ::snikket::ChatMessage m, ::snikket::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::DirectChat,_gthis, ::snikket::ReactionUpdate,update3) HXARGC(1)
             		void _hx_run( ::snikket::ChatMessage stored){
-            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_886_removeReaction)
-HXLINE( 887)			 ::snikket::Stanza stanza = update3->asStanza();
-HXLINE( 888)			{
-HXLINE( 888)				int _g = 0;
-HXDLIN( 888)				::Array< ::String > _g1 = _gthis->counterparts();
-HXDLIN( 888)				while((_g < _g1->length)){
-HXLINE( 888)					::String recipient = _g1->__get(_g);
-HXDLIN( 888)					_g = (_g + 1);
-HXLINE( 889)					::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),recipient);
-HXLINE( 890)					_gthis->client->sendStanza(stanza);
+            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_884_removeReaction)
+HXLINE( 885)			 ::snikket::Stanza stanza = update3->asStanza();
+HXLINE( 886)			{
+HXLINE( 886)				int _g = 0;
+HXDLIN( 886)				::Array< ::String > _g1 = _gthis->counterparts();
+HXDLIN( 886)				while((_g < _g1->length)){
+HXLINE( 886)					::String recipient = _g1->__get(_g);
+HXDLIN( 886)					_g = (_g + 1);
+HXLINE( 887)					::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),recipient);
+HXLINE( 888)					_gthis->client->sendStanza(stanza);
             				}
             			}
-HXLINE( 892)			if (::hx::IsNotNull( stored )) {
-HXLINE( 892)				_gthis->client->notifyMessageHandlers(stored,2);
+HXLINE( 890)			if (::hx::IsNotNull( stored )) {
+HXLINE( 890)				_gthis->client->notifyMessageHandlers(stored,2);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_864_removeReaction)
-HXDLIN( 864)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 865)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::snikket::CustomEmojiReaction >())) {
-HXLINE( 866)			if (::hx::IsNull( reaction->envelopeId )) {
-HXLINE( 866)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
-            			}
-HXLINE( 867)			 ::snikket::ChatMessageBuilder correct = m->reply();
-HXLINE( 868)			correct->localId = ::snikket::ID_obj::_hx_long();
-HXLINE( 869)			correct->setHtml(HX_("",00,00,00,00));
-HXLINE( 870)			correct->text = null();
-HXLINE( 871)			this->correctMessage(reaction->envelopeId,correct);
-HXLINE( 872)			return;
-            		}
-HXLINE( 876)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 877)		{
-HXLINE( 877)			::Dynamic map = m->reactions;
-HXDLIN( 877)			::Dynamic _g_map = map;
-HXDLIN( 877)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 877)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 877)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 877)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 877)				::String _g_key = key;
-HXDLIN( 877)				::String areaction = _g_key;
-HXDLIN( 877)				::Array< ::Dynamic> reacts = _g_value;
-HXLINE( 878)				if ((areaction != reaction->key)) {
+            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_862_removeReaction)
+HXDLIN( 862)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 863)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::snikket::CustomEmojiReaction >())) {
+HXLINE( 864)			if (::hx::IsNull( reaction->envelopeId )) {
+HXLINE( 864)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
+            			}
+HXLINE( 865)			 ::snikket::ChatMessageBuilder correct = m->reply();
+HXLINE( 866)			correct->localId = ::snikket::ID_obj::_hx_long();
+HXLINE( 867)			correct->setHtml(HX_("",00,00,00,00));
+HXLINE( 868)			correct->text = null();
+HXLINE( 869)			this->correctMessage(reaction->envelopeId,correct);
+HXLINE( 870)			return;
+            		}
+HXLINE( 874)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 875)		{
+HXLINE( 875)			::Dynamic map = m->reactions;
+HXDLIN( 875)			::Dynamic _g_map = map;
+HXDLIN( 875)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 875)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 875)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 875)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 875)				::String _g_key = key;
+HXDLIN( 875)				::String areaction = _g_key;
+HXDLIN( 875)				::Array< ::Dynamic> reacts = _g_value;
+HXLINE( 876)				if ((areaction != reaction->key)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis) HXARGC(1)
             					bool _hx_run( ::snikket::Reaction r){
-            						HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_879_removeReaction)
-HXLINE( 879)						::String r1 = r->senderId;
-HXDLIN( 879)						return (r1 == _gthis->client->accountId());
+            						HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_877_removeReaction)
+HXLINE( 877)						::String r1 = r->senderId;
+HXDLIN( 877)						return (r1 == _gthis->client->accountId());
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 879)					 ::snikket::Reaction react = ( ( ::snikket::Reaction)(::Lambda_obj::find(reacts, ::Dynamic(new _hx_Closure_0(_gthis)))) );
-HXLINE( 880)					bool _hx_tmp;
-HXDLIN( 880)					if (::hx::IsNotNull( react )) {
-HXLINE( 880)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::snikket::CustomEmojiReaction >()));
+HXLINE( 877)					 ::snikket::Reaction react = ( ( ::snikket::Reaction)(::Lambda_obj::find(reacts, ::Dynamic(new _hx_Closure_0(_gthis)))) );
+HXLINE( 878)					bool _hx_tmp;
+HXDLIN( 878)					if (::hx::IsNotNull( react )) {
+HXLINE( 878)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::snikket::CustomEmojiReaction >()));
             					}
             					else {
-HXLINE( 880)						_hx_tmp = false;
+HXLINE( 878)						_hx_tmp = false;
             					}
-HXDLIN( 880)					if (_hx_tmp) {
-HXLINE( 881)						reactions->push(react);
+HXDLIN( 878)					if (_hx_tmp) {
+HXLINE( 879)						reactions->push(react);
             					}
             				}
             			}
             		}
-HXLINE( 885)		::String update = ::snikket::ID_obj::_hx_long();
-HXDLIN( 885)		::String m1 = m->localId;
-HXDLIN( 885)		::String update1 = m->chatId();
-HXDLIN( 885)		::String update2 = this->client->accountId();
-HXDLIN( 885)		 ::snikket::ReactionUpdate update3 =  ::snikket::ReactionUpdate_obj::__alloc( HX_CTX ,update,null(),null(),m1,update1,update2,::snikket::Date_obj::format(::Date_obj::now()),reactions,0);
-HXLINE( 886)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 886)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN( 886)		::snikket::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update3, ::Dynamic(new _hx_Closure_1(_gthis,update3)));
+HXLINE( 883)		::String update = ::snikket::ID_obj::_hx_long();
+HXDLIN( 883)		::String m1 = m->localId;
+HXDLIN( 883)		::String update1 = m->chatId();
+HXDLIN( 883)		::String update2 = this->client->accountId();
+HXDLIN( 883)		 ::snikket::ReactionUpdate update3 =  ::snikket::ReactionUpdate_obj::__alloc( HX_CTX ,update,null(),null(),m1,update1,update2,::snikket::Date_obj::format(::Date_obj::now()),reactions,0);
+HXLINE( 884)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 884)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN( 884)		::snikket::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update3, ::Dynamic(new _hx_Closure_1(_gthis,update3)));
             	}
 
 
 ::String DirectChat_obj::lastMessageId(){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_898_lastMessageId)
-HXDLIN( 898)		 ::snikket::ChatMessage tmp = this->lastMessage;
-HXDLIN( 898)		::String tmp1;
-HXDLIN( 898)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 898)			tmp1 = tmp->localId;
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_896_lastMessageId)
+HXDLIN( 896)		 ::snikket::ChatMessage tmp = this->lastMessage;
+HXDLIN( 896)		::String tmp1;
+HXDLIN( 896)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 896)			tmp1 = tmp->localId;
             		}
             		else {
-HXDLIN( 898)			tmp1 = null();
+HXDLIN( 896)			tmp1 = null();
             		}
-HXDLIN( 898)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 898)			return tmp1;
+HXDLIN( 896)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 896)			return tmp1;
             		}
             		else {
-HXDLIN( 898)			 ::snikket::ChatMessage tmp2 = this->lastMessage;
-HXDLIN( 898)			if (::hx::IsNotNull( tmp2 )) {
-HXDLIN( 898)				return tmp2->serverId;
+HXDLIN( 896)			 ::snikket::ChatMessage tmp2 = this->lastMessage;
+HXDLIN( 896)			if (::hx::IsNotNull( tmp2 )) {
+HXDLIN( 896)				return tmp2->serverId;
             			}
             			else {
-HXDLIN( 898)				return null();
+HXDLIN( 896)				return null();
             			}
             		}
-HXDLIN( 898)		return null();
+HXDLIN( 896)		return null();
             	}
 
 
 void DirectChat_obj::markReadUpTo( ::snikket::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis, ::snikket::ChatMessage,message) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_903_markReadUpTo)
-HXLINE( 906)			bool _hx_tmp;
-HXDLIN( 906)			if (message->isIncoming()) {
-HXLINE( 906)				_hx_tmp = ::hx::IsNotNull( message->localId );
+            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_901_markReadUpTo)
+HXLINE( 904)			bool _hx_tmp;
+HXDLIN( 904)			if (message->isIncoming()) {
+HXLINE( 904)				_hx_tmp = ::hx::IsNotNull( message->localId );
             			}
             			else {
-HXLINE( 906)				_hx_tmp = false;
-            			}
-HXDLIN( 906)			if (_hx_tmp) {
-HXLINE( 907)				int _g = 0;
-HXDLIN( 907)				::Array< ::String > _g1 = _gthis->counterparts();
-HXDLIN( 907)				while((_g < _g1->length)){
-HXLINE( 907)					::String recipient = _g1->__get(_g);
-HXDLIN( 907)					_g = (_g + 1);
-HXLINE( 909)					::String stanza = ::snikket::ID_obj::_hx_long();
-HXDLIN( 909)					 ::snikket::Stanza stanza1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 904)				_hx_tmp = false;
+            			}
+HXDLIN( 904)			if (_hx_tmp) {
+HXLINE( 905)				int _g = 0;
+HXDLIN( 905)				::Array< ::String > _g1 = _gthis->counterparts();
+HXDLIN( 905)				while((_g < _g1->length)){
+HXLINE( 905)					::String recipient = _g1->__get(_g);
+HXDLIN( 905)					_g = (_g + 1);
+HXLINE( 907)					::String stanza = ::snikket::ID_obj::_hx_long();
+HXDLIN( 907)					 ::snikket::Stanza stanza1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),stanza)
             						->setFixed(1,HX_("to",7b,65,00,00),recipient)))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),message->localId)
             						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))))->up();
-HXLINE( 911)					if (::hx::IsNotNull( message->threadId )) {
-HXLINE( 912)						stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
+HXLINE( 909)					if (::hx::IsNotNull( message->threadId )) {
+HXLINE( 910)						stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
             					}
-HXLINE( 914)					_gthis->client->sendStanza(stanza1);
+HXLINE( 912)					_gthis->client->sendStanza(stanza1);
             				}
             			}
-HXLINE( 918)			_gthis->publishMds();
-HXLINE( 919)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE( 916)			_gthis->publishMds();
+HXLINE( 917)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_902_markReadUpTo)
-HXDLIN( 902)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 903)		this->markReadUpToMessage(message, ::Dynamic(new _hx_Closure_0(_gthis,message)));
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_900_markReadUpTo)
+HXDLIN( 900)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 901)		this->markReadUpToMessage(message, ::Dynamic(new _hx_Closure_0(_gthis,message)));
             	}
 
 
 void DirectChat_obj::bookmark(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::DirectChat,_gthis) HXARGC(1)
             		void _hx_run( ::snikket::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_934_bookmark)
-HXLINE( 935)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 935)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_932_bookmark)
+HXLINE( 933)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE( 933)				return;
             			}
-HXLINE( 936)			 ::snikket::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 936)			::String _gthis2 = _gthis->chatId;
-HXDLIN( 936)			_gthis1->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 934)			 ::snikket::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 934)			::String _gthis2 = _gthis->chatId;
+HXDLIN( 934)			_gthis1->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),::snikket::ID_obj::_hx_short())
             				->setFixed(1,HX_("to",7b,65,00,00),_gthis2)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribe",4a,0b,18,19)))));
-HXLINE( 937)			if (_gthis->isTrusted()) {
-HXLINE( 937)				 ::snikket::GenericStream _gthis3 = _gthis->stream;
-HXDLIN( 937)				::String _gthis4 = _gthis->chatId;
-HXDLIN( 937)				_gthis3->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 935)			if (_gthis->isTrusted()) {
+HXLINE( 935)				 ::snikket::GenericStream _gthis3 = _gthis->stream;
+HXDLIN( 935)				::String _gthis4 = _gthis->chatId;
+HXDLIN( 935)				_gthis3->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),::snikket::ID_obj::_hx_short())
             					->setFixed(1,HX_("to",7b,65,00,00),_gthis4)
             					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribed",da,d5,f1,db)))));
@@ -675,70 +675,70 @@ HXDLIN( 937)				_gthis3->sendStanza( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_924_bookmark)
-HXDLIN( 924)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 925)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_922_bookmark)
+HXDLIN( 922)		 ::snikket::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 923)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId));
-HXLINE( 926)		bool _hx_tmp;
-HXDLIN( 926)		bool _hx_tmp1;
-HXDLIN( 926)		if (::hx::IsNotNull( this->displayName )) {
-HXLINE( 926)			_hx_tmp1 = (this->displayName != HX_("",00,00,00,00));
+HXLINE( 924)		bool _hx_tmp;
+HXDLIN( 924)		bool _hx_tmp1;
+HXDLIN( 924)		if (::hx::IsNotNull( this->displayName )) {
+HXLINE( 924)			_hx_tmp1 = (this->displayName != HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 926)			_hx_tmp1 = false;
+HXLINE( 924)			_hx_tmp1 = false;
             		}
-HXDLIN( 926)		if (_hx_tmp1) {
-HXLINE( 926)			_hx_tmp = (this->displayName != this->chatId);
+HXDLIN( 924)		if (_hx_tmp1) {
+HXLINE( 924)			_hx_tmp = (this->displayName != this->chatId);
             		}
             		else {
-HXLINE( 926)			_hx_tmp = false;
+HXLINE( 924)			_hx_tmp = false;
             		}
-HXDLIN( 926)		if (_hx_tmp) {
-HXLINE( 927)			::String value = this->displayName;
-HXDLIN( 927)			::Reflect_obj::setField(attr,HX_("name",4b,72,ff,48),value);
+HXDLIN( 924)		if (_hx_tmp) {
+HXLINE( 925)			::String value = this->displayName;
+HXDLIN( 925)			::Reflect_obj::setField(attr,HX_("name",4b,72,ff,48),value);
             		}
-HXLINE( 929)		 ::snikket::GenericStream _hx_tmp2 = this->stream;
-HXDLIN( 929)		_hx_tmp2->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 927)		 ::snikket::GenericStream _hx_tmp2 = this->stream;
+HXDLIN( 927)		_hx_tmp2->sendIq( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))))->tag(HX_("item",13,c5,bf,45),attr)->up()->up(), ::Dynamic(new _hx_Closure_0(_gthis)));
             	}
 
 
 void DirectChat_obj::sendChatState(::String state,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_943_sendChatState)
-HXDLIN( 943)		int _g = 0;
-HXDLIN( 943)		::Array< ::String > _g1 = this->counterparts();
-HXDLIN( 943)		while((_g < _g1->length)){
-HXDLIN( 943)			::String recipient = _g1->__get(_g);
-HXDLIN( 943)			_g = (_g + 1);
-HXLINE( 945)			::String stanza = ::snikket::ID_obj::_hx_long();
-HXLINE( 947)			::String stanza1 = this->client->jid->asString();
-HXLINE( 944)			 ::snikket::Stanza stanza2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_GC_STACKFRAME(&_hx_pos_af7b91d6026813b6_941_sendChatState)
+HXDLIN( 941)		int _g = 0;
+HXDLIN( 941)		::Array< ::String > _g1 = this->counterparts();
+HXDLIN( 941)		while((_g < _g1->length)){
+HXDLIN( 941)			::String recipient = _g1->__get(_g);
+HXDLIN( 941)			_g = (_g + 1);
+HXLINE( 943)			::String stanza = ::snikket::ID_obj::_hx_long();
+HXLINE( 945)			::String stanza1 = this->client->jid->asString();
+HXLINE( 942)			 ::snikket::Stanza stanza2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
             				->setFixed(0,HX_("id",db,5b,00,00),stanza)
             				->setFixed(1,HX_("to",7b,65,00,00),recipient)
             				->setFixed(2,HX_("from",6a,a5,c2,43),stanza1)
             				->setFixed(3,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
-HXLINE( 952)			if (::hx::IsNotNull( threadId )) {
-HXLINE( 953)				stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
+HXLINE( 950)			if (::hx::IsNotNull( threadId )) {
+HXLINE( 951)				stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
             			}
-HXLINE( 955)			this->stream->sendStanza(stanza2);
+HXLINE( 953)			this->stream->sendStanza(stanza2);
             		}
             	}
 
 
 void DirectChat_obj::close(){
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_960_close)
-HXLINE( 961)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE( 961)			this->typingTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_958_close)
+HXLINE( 959)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE( 959)			this->typingTimer->stop();
             		}
-HXLINE( 963)		this->uiState = 2;
-HXLINE( 964)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 964)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 965)		if (!(this->isBlocked)) {
-HXLINE( 965)			this->sendChatState(HX_("gone",5f,94,69,44),null());
+HXLINE( 961)		this->uiState = 2;
+HXLINE( 962)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 962)		::snikket::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 963)		if (!(this->isBlocked)) {
+HXLINE( 963)			this->sendChatState(HX_("gone",5f,94,69,44),null());
             		}
-HXLINE( 966)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 964)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
@@ -856,8 +856,8 @@ void DirectChat_obj::__register()
 void DirectChat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_717_boot)
-HXDLIN( 717)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_af7b91d6026813b6_715_boot)
+HXDLIN( 715)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(12)
             				->setFixed(0,HX_("removeReaction",0d,24,0b,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_snikket/src/snikket/Hash.cpp b/Sources/c_snikket/src/snikket/Hash.cpp
index 01f2696..bdf67d3 100644
--- a/Sources/c_snikket/src/snikket/Hash.cpp
+++ b/Sources/c_snikket/src/snikket/Hash.cpp
@@ -24,7 +24,7 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_9ae683eb017e4032_28_new,"snikket.Hash","new",0xae73a1f1,"snikket.Hash.new","snikket/Hash.hx",28,0x711518be)
-HX_LOCAL_STACK_FRAME(_hx_pos_7ac9242dabfc377a_307_algorithm__fromC,"snikket.Hash","algorithm__fromC",0x170887b9,"snikket.Hash.algorithm__fromC","HaxeCBridge.hx",307,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7ac9242dabfc377a_355_algorithm__fromC,"snikket.Hash","algorithm__fromC",0x170887b9,"snikket.Hash.algorithm__fromC","HaxeCBridge.hx",355,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ae683eb017e4032_68_toUri,"snikket.Hash","toUri",0x66fef482,"snikket.Hash.toUri","snikket/Hash.hx",68,0x711518be)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ae683eb017e4032_77_bobUri,"snikket.Hash","bobUri",0x8e2c4b86,"snikket.Hash.bobUri","snikket/Hash.hx",77,0x711518be)
 HX_LOCAL_STACK_FRAME(_hx_pos_9ae683eb017e4032_82_serializeUri,"snikket.Hash","serializeUri",0x078265bb,"snikket.Hash.serializeUri","snikket/Hash.hx",82,0x711518be)
@@ -60,8 +60,8 @@ bool Hash_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Hash_obj::algorithm__fromC(){
-            	HX_STACKFRAME(&_hx_pos_7ac9242dabfc377a_307_algorithm__fromC)
-HXDLIN( 307)		return this->algorithm;
+            	HX_STACKFRAME(&_hx_pos_7ac9242dabfc377a_355_algorithm__fromC)
+HXDLIN( 355)		return this->algorithm;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/JsonPrinter.cpp b/Sources/c_snikket/src/snikket/JsonPrinter.cpp
new file mode 100644
index 0000000..e6b9aad
--- /dev/null
+++ b/Sources/c_snikket/src/snikket/JsonPrinter.cpp
@@ -0,0 +1,838 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_95f339a1d026d52c
+#define INCLUDED_95f339a1d026d52c
+#include "hxMath.h"
+#endif
+#ifndef INCLUDED_Date
+#include <Date.h>
+#endif
+#ifndef INCLUDED_Reflect
+#include <Reflect.h>
+#endif
+#ifndef INCLUDED_Std
+#include <Std.h>
+#endif
+#ifndef INCLUDED_StringBuf
+#include <StringBuf.h>
+#endif
+#ifndef INCLUDED_StringTools
+#include <StringTools.h>
+#endif
+#ifndef INCLUDED_Type
+#include <Type.h>
+#endif
+#ifndef INCLUDED_ValueType
+#include <ValueType.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+#ifndef INCLUDED_snikket_JsonPrinter
+#include <snikket/JsonPrinter.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_b77b8280a0c8b7bd_56_new,"snikket.JsonPrinter","new",0x99b46873,"snikket.JsonPrinter.new","snikket/JsonPrinter.hx",56,0xc4bd461e)
+HX_LOCAL_STACK_FRAME(_hx_pos_b77b8280a0c8b7bd_81_write,"snikket.JsonPrinter","write",0xf51e6fb2,"snikket.JsonPrinter.write","snikket/JsonPrinter.hx",81,0xc4bd461e)
+static const ::String _hx_array_data_9fbcb301_4[] = {
+	HX_("null",87,9e,0e,49),
+};
+static const ::String _hx_array_data_9fbcb301_5[] = {
+	HX_("\"<fun>\"",09,3c,cc,8b),
+};
+static const ::String _hx_array_data_9fbcb301_6[] = {
+	HX_("\"???\"",45,2f,74,bd),
+};
+HX_LOCAL_STACK_FRAME(_hx_pos_b77b8280a0c8b7bd_158_classString,"snikket.JsonPrinter","classString",0x801c723c,"snikket.JsonPrinter.classString","snikket/JsonPrinter.hx",158,0xc4bd461e)
+HX_LOCAL_STACK_FRAME(_hx_pos_b77b8280a0c8b7bd_165_fieldsString,"snikket.JsonPrinter","fieldsString",0xebaa19b7,"snikket.JsonPrinter.fieldsString","snikket/JsonPrinter.hx",165,0xc4bd461e)
+HX_LOCAL_STACK_FRAME(_hx_pos_b77b8280a0c8b7bd_195_quote,"snikket.JsonPrinter","quote",0x82b7260f,"snikket.JsonPrinter.quote","snikket/JsonPrinter.hx",195,0xc4bd461e)
+static const ::String _hx_array_data_9fbcb301_12[] = {
+	HX_("\\b",86,50,00,00),
+};
+static const ::String _hx_array_data_9fbcb301_13[] = {
+	HX_("\\t",98,50,00,00),
+};
+static const ::String _hx_array_data_9fbcb301_14[] = {
+	HX_("\\n",92,50,00,00),
+};
+static const ::String _hx_array_data_9fbcb301_15[] = {
+	HX_("\\f",8a,50,00,00),
+};
+static const ::String _hx_array_data_9fbcb301_16[] = {
+	HX_("\\r",96,50,00,00),
+};
+static const ::String _hx_array_data_9fbcb301_17[] = {
+	HX_("\\\"",46,50,00,00),
+};
+static const ::String _hx_array_data_9fbcb301_18[] = {
+	HX_("\\\\",80,50,00,00),
+};
+HX_LOCAL_STACK_FRAME(_hx_pos_b77b8280a0c8b7bd_44_print,"snikket.JsonPrinter","print",0xed505b00,"snikket.JsonPrinter.print","snikket/JsonPrinter.hx",44,0xc4bd461e)
+namespace snikket{
+
+void JsonPrinter_obj::__construct( ::Dynamic replacer,::String space){
+            	HX_GC_STACKFRAME(&_hx_pos_b77b8280a0c8b7bd_56_new)
+HXLINE(  57)		this->replacer = replacer;
+HXLINE(  58)		this->indent = space;
+HXLINE(  59)		this->pretty = ::hx::IsNotNull( space );
+HXLINE(  60)		this->nind = 0;
+HXLINE(  67)		this->buf =  ::StringBuf_obj::__alloc( HX_CTX );
+            	}
+
+Dynamic JsonPrinter_obj::__CreateEmpty() { return new JsonPrinter_obj; }
+
+void *JsonPrinter_obj::_hx_vtable = 0;
+
+Dynamic JsonPrinter_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< JsonPrinter_obj > _hx_result = new JsonPrinter_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1]);
+	return _hx_result;
+}
+
+bool JsonPrinter_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x1bd625d5;
+}
+
+void JsonPrinter_obj::write( ::Dynamic k, ::Dynamic v){
+            	HX_STACKFRAME(&_hx_pos_b77b8280a0c8b7bd_81_write)
+HXLINE(  82)		if (::hx::IsNotNull( this->replacer )) {
+HXLINE(  83)			v = this->replacer(k,v);
+            		}
+HXLINE(  84)		{
+HXLINE(  84)			 ::ValueType _g = ::Type_obj::_hx_typeof(v);
+HXDLIN(  84)			switch((int)(_g->_hx_getIndex())){
+            				case (int)0: {
+HXLINE( 136)					 ::StringBuf _this = this->buf;
+HXDLIN( 136)					if (::hx::IsNotNull( _this->charBuf )) {
+HXLINE( 136)						_this->flush();
+            					}
+HXDLIN( 136)					if (::hx::IsNull( _this->b )) {
+HXLINE( 136)						_this->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_4,1);
+            					}
+            					else {
+HXLINE( 136)						_this->b->push(HX_("null",87,9e,0e,49));
+            					}
+            				}
+            				break;
+            				case (int)1: {
+HXLINE(  90)					::String v1 = ( (::String)(v) );
+HXDLIN(  90)					{
+HXLINE(  90)						 ::StringBuf _this1 = this->buf;
+HXDLIN(  90)						if (::hx::IsNotNull( _this1->charBuf )) {
+HXLINE(  90)							_this1->flush();
+            						}
+HXDLIN(  90)						if (::hx::IsNull( _this1->b )) {
+HXLINE(  90)							_this1->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v1));
+            						}
+            						else {
+HXLINE(  90)							::Array< ::String > _this2 = _this1->b;
+HXDLIN(  90)							_this2->push(::Std_obj::string(v1));
+            						}
+            					}
+            				}
+            				break;
+            				case (int)2: {
+HXLINE(  92)					::String v2;
+HXDLIN(  92)					if (::Math_obj::isFinite(( (Float)(v) ))) {
+HXLINE(  92)						v2 = ::Std_obj::string(v);
+            					}
+            					else {
+HXLINE(  92)						v2 = HX_("null",87,9e,0e,49);
+            					}
+HXDLIN(  92)					{
+HXLINE(  92)						 ::StringBuf _this3 = this->buf;
+HXDLIN(  92)						if (::hx::IsNotNull( _this3->charBuf )) {
+HXLINE(  92)							_this3->flush();
+            						}
+HXDLIN(  92)						if (::hx::IsNull( _this3->b )) {
+HXLINE(  92)							_this3->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v2));
+            						}
+            						else {
+HXLINE(  92)							::Array< ::String > _this4 = _this3->b;
+HXDLIN(  92)							_this4->push(::Std_obj::string(v2));
+            						}
+            					}
+            				}
+            				break;
+            				case (int)3: {
+HXLINE( 134)					::String v3 = ( (::String)(v) );
+HXDLIN( 134)					{
+HXLINE( 134)						 ::StringBuf _this5 = this->buf;
+HXDLIN( 134)						if (::hx::IsNotNull( _this5->charBuf )) {
+HXLINE( 134)							_this5->flush();
+            						}
+HXDLIN( 134)						if (::hx::IsNull( _this5->b )) {
+HXLINE( 134)							_this5->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v3));
+            						}
+            						else {
+HXLINE( 134)							::Array< ::String > _this6 = _this5->b;
+HXDLIN( 134)							_this6->push(::Std_obj::string(v3));
+            						}
+            					}
+            				}
+            				break;
+            				case (int)4: {
+HXLINE(  88)					this->fieldsString(v,::Reflect_obj::fields(v));
+            				}
+            				break;
+            				case (int)5: {
+HXLINE(  94)					 ::StringBuf _this7 = this->buf;
+HXDLIN(  94)					if (::hx::IsNotNull( _this7->charBuf )) {
+HXLINE(  94)						_this7->flush();
+            					}
+HXDLIN(  94)					if (::hx::IsNull( _this7->b )) {
+HXLINE(  94)						_this7->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_5,1);
+            					}
+            					else {
+HXLINE(  94)						_this7->b->push(HX_("\"<fun>\"",09,3c,cc,8b));
+            					}
+            				}
+            				break;
+            				case (int)6: {
+HXLINE(  95)					::hx::Class c = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
+HXLINE(  96)					if (::hx::IsPointerEq( c,::hx::ClassOf< ::String >() )) {
+HXLINE(  97)						this->quote(( (::String)(v) ));
+            					}
+            					else {
+HXLINE(  98)						if (::hx::IsPointerEq( c,::hx::ArrayBase::__mClass )) {
+HXLINE(  99)							::cpp::VirtualArray v4 = ( (::cpp::VirtualArray)(v) );
+HXLINE( 100)							{
+HXLINE( 100)								 ::StringBuf _this8 = this->buf;
+HXDLIN( 100)								{
+HXLINE( 100)									if (::hx::IsNull( _this8->charBuf )) {
+HXLINE( 100)										_this8->charBuf = ::Array_obj< char >::__new();
+            									}
+HXDLIN( 100)									_this8->charBuf->push(91);
+            								}
+            							}
+HXLINE( 102)							int len = v4->get_length();
+HXLINE( 103)							int last = (len - 1);
+HXLINE( 104)							{
+HXLINE( 104)								int _g1 = 0;
+HXDLIN( 104)								int _g2 = len;
+HXDLIN( 104)								while((_g1 < _g2)){
+HXLINE( 104)									_g1 = (_g1 + 1);
+HXDLIN( 104)									int i = (_g1 - 1);
+HXLINE( 105)									if ((i > 0)) {
+HXLINE( 106)										 ::StringBuf _this9 = this->buf;
+HXDLIN( 106)										{
+HXLINE( 106)											if (::hx::IsNull( _this9->charBuf )) {
+HXLINE( 106)												_this9->charBuf = ::Array_obj< char >::__new();
+            											}
+HXDLIN( 106)											_this9->charBuf->push(44);
+            										}
+            									}
+            									else {
+HXLINE( 108)										this->nind++;
+            									}
+HXLINE( 109)									if (this->pretty) {
+HXLINE( 109)										 ::StringBuf _this10 = this->buf;
+HXDLIN( 109)										{
+HXLINE( 109)											if (::hx::IsNull( _this10->charBuf )) {
+HXLINE( 109)												_this10->charBuf = ::Array_obj< char >::__new();
+            											}
+HXDLIN( 109)											_this10->charBuf->push(10);
+            										}
+            									}
+HXLINE( 110)									if (this->pretty) {
+HXLINE( 110)										::String v5 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
+HXDLIN( 110)										{
+HXLINE( 110)											 ::StringBuf _this11 = this->buf;
+HXDLIN( 110)											if (::hx::IsNotNull( _this11->charBuf )) {
+HXLINE( 110)												_this11->flush();
+            											}
+HXDLIN( 110)											if (::hx::IsNull( _this11->b )) {
+HXLINE( 110)												_this11->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v5));
+            											}
+            											else {
+HXLINE( 110)												::Array< ::String > _this12 = _this11->b;
+HXDLIN( 110)												_this12->push(::Std_obj::string(v5));
+            											}
+            										}
+            									}
+HXLINE( 111)									this->write(i,v4->__get(i));
+HXLINE( 112)									if ((i == last)) {
+HXLINE( 113)										this->nind--;
+HXLINE( 114)										if (this->pretty) {
+HXLINE( 114)											 ::StringBuf _this13 = this->buf;
+HXDLIN( 114)											{
+HXLINE( 114)												if (::hx::IsNull( _this13->charBuf )) {
+HXLINE( 114)													_this13->charBuf = ::Array_obj< char >::__new();
+            												}
+HXDLIN( 114)												_this13->charBuf->push(10);
+            											}
+            										}
+HXLINE( 115)										if (this->pretty) {
+HXLINE( 115)											::String v6 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
+HXDLIN( 115)											{
+HXLINE( 115)												 ::StringBuf _this14 = this->buf;
+HXDLIN( 115)												if (::hx::IsNotNull( _this14->charBuf )) {
+HXLINE( 115)													_this14->flush();
+            												}
+HXDLIN( 115)												if (::hx::IsNull( _this14->b )) {
+HXLINE( 115)													_this14->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v6));
+            												}
+            												else {
+HXLINE( 115)													::Array< ::String > _this15 = _this14->b;
+HXDLIN( 115)													_this15->push(::Std_obj::string(v6));
+            												}
+            											}
+            										}
+            									}
+            								}
+            							}
+HXLINE( 118)							{
+HXLINE( 118)								 ::StringBuf _this16 = this->buf;
+HXDLIN( 118)								{
+HXLINE( 118)									if (::hx::IsNull( _this16->charBuf )) {
+HXLINE( 118)										_this16->charBuf = ::Array_obj< char >::__new();
+            									}
+HXDLIN( 118)									_this16->charBuf->push(93);
+            								}
+            							}
+            						}
+            						else {
+HXLINE( 119)							if (::hx::IsPointerEq( c,::hx::ClassOf< ::haxe::ds::StringMap >() )) {
+HXLINE( 120)								 ::haxe::ds::StringMap v7 = ( ( ::haxe::ds::StringMap)(v) );
+HXLINE( 121)								 ::Dynamic o =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 122)								{
+HXLINE( 122)									 ::Dynamic k1 = v7->keys();
+HXDLIN( 122)									while(( (bool)(k1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 122)										::String k2 = ( (::String)(k1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 123)										::Reflect_obj::setField(o,k2,v7->get(k2));
+            									}
+            								}
+HXLINE( 124)								{
+HXLINE( 124)									 ::Dynamic v8 = o;
+HXDLIN( 124)									this->fieldsString(v8,::Reflect_obj::fields(v8));
+            								}
+            							}
+            							else {
+HXLINE( 125)								if (::hx::IsPointerEq( c,::hx::ClassOf< ::Date >() )) {
+HXLINE( 126)									 ::Date v9 = ( ( ::Date)(v) );
+HXLINE( 127)									this->quote(v9->toString());
+            								}
+            								else {
+HXLINE( 129)									this->classString(v);
+            								}
+            							}
+            						}
+            					}
+            				}
+            				break;
+            				case (int)7: {
+HXLINE( 130)					::hx::Class _g3 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
+HXDLIN( 130)					{
+HXLINE( 131)						int i1 = _hx_getEnumValueIndex(v);
+HXLINE( 132)						{
+HXLINE( 132)							::String v10 = ::Std_obj::string(i1);
+HXDLIN( 132)							{
+HXLINE( 132)								 ::StringBuf _this17 = this->buf;
+HXDLIN( 132)								if (::hx::IsNotNull( _this17->charBuf )) {
+HXLINE( 132)									_this17->flush();
+            								}
+HXDLIN( 132)								if (::hx::IsNull( _this17->b )) {
+HXLINE( 132)									_this17->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v10));
+            								}
+            								else {
+HXLINE( 132)									::Array< ::String > _this18 = _this17->b;
+HXDLIN( 132)									_this18->push(::Std_obj::string(v10));
+            								}
+            							}
+            						}
+            					}
+            				}
+            				break;
+            				case (int)8: {
+HXLINE(  86)					 ::StringBuf _this19 = this->buf;
+HXDLIN(  86)					if (::hx::IsNotNull( _this19->charBuf )) {
+HXLINE(  86)						_this19->flush();
+            					}
+HXDLIN(  86)					if (::hx::IsNull( _this19->b )) {
+HXLINE(  86)						_this19->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_6,1);
+            					}
+            					else {
+HXLINE(  86)						_this19->b->push(HX_("\"???\"",45,2f,74,bd));
+            					}
+            				}
+            				break;
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(JsonPrinter_obj,write,(void))
+
+void JsonPrinter_obj::classString( ::Dynamic v){
+            	HX_STACKFRAME(&_hx_pos_b77b8280a0c8b7bd_158_classString)
+HXDLIN( 158)		this->fieldsString(v,::Type_obj::getInstanceFields(::Type_obj::getClass(v)));
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(JsonPrinter_obj,classString,(void))
+
+void JsonPrinter_obj::fieldsString( ::Dynamic v,::Array< ::String > fields){
+            	HX_STACKFRAME(&_hx_pos_b77b8280a0c8b7bd_165_fieldsString)
+HXLINE( 166)		{
+HXLINE( 166)			 ::StringBuf _this = this->buf;
+HXDLIN( 166)			{
+HXLINE( 166)				if (::hx::IsNull( _this->charBuf )) {
+HXLINE( 166)					_this->charBuf = ::Array_obj< char >::__new();
+            				}
+HXDLIN( 166)				_this->charBuf->push(123);
+            			}
+            		}
+HXLINE( 167)		int len = fields->length;
+HXLINE( 168)		bool empty = true;
+HXLINE( 169)		{
+HXLINE( 169)			int _g = 0;
+HXDLIN( 169)			int _g1 = len;
+HXDLIN( 169)			while((_g < _g1)){
+HXLINE( 169)				_g = (_g + 1);
+HXDLIN( 169)				int i = (_g - 1);
+HXLINE( 170)				::String f = fields->__get(i);
+HXLINE( 171)				 ::Dynamic value = ::Reflect_obj::field(v,f);
+HXLINE( 172)				if (::Reflect_obj::isFunction(value)) {
+HXLINE( 173)					continue;
+            				}
+HXLINE( 174)				if (empty) {
+HXLINE( 175)					this->nind++;
+HXLINE( 176)					empty = false;
+            				}
+            				else {
+HXLINE( 178)					 ::StringBuf _this1 = this->buf;
+HXDLIN( 178)					{
+HXLINE( 178)						if (::hx::IsNull( _this1->charBuf )) {
+HXLINE( 178)							_this1->charBuf = ::Array_obj< char >::__new();
+            						}
+HXDLIN( 178)						_this1->charBuf->push(44);
+            					}
+            				}
+HXLINE( 179)				if (this->pretty) {
+HXLINE( 179)					 ::StringBuf _this2 = this->buf;
+HXDLIN( 179)					{
+HXLINE( 179)						if (::hx::IsNull( _this2->charBuf )) {
+HXLINE( 179)							_this2->charBuf = ::Array_obj< char >::__new();
+            						}
+HXDLIN( 179)						_this2->charBuf->push(10);
+            					}
+            				}
+HXLINE( 180)				if (this->pretty) {
+HXLINE( 180)					::String v1 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
+HXDLIN( 180)					{
+HXLINE( 180)						 ::StringBuf _this3 = this->buf;
+HXDLIN( 180)						if (::hx::IsNotNull( _this3->charBuf )) {
+HXLINE( 180)							_this3->flush();
+            						}
+HXDLIN( 180)						if (::hx::IsNull( _this3->b )) {
+HXLINE( 180)							_this3->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v1));
+            						}
+            						else {
+HXLINE( 180)							::Array< ::String > _this4 = _this3->b;
+HXDLIN( 180)							_this4->push(::Std_obj::string(v1));
+            						}
+            					}
+            				}
+HXLINE( 181)				this->quote(f);
+HXLINE( 182)				{
+HXLINE( 182)					 ::StringBuf _this5 = this->buf;
+HXDLIN( 182)					{
+HXLINE( 182)						if (::hx::IsNull( _this5->charBuf )) {
+HXLINE( 182)							_this5->charBuf = ::Array_obj< char >::__new();
+            						}
+HXDLIN( 182)						_this5->charBuf->push(58);
+            					}
+            				}
+HXLINE( 183)				if (this->pretty) {
+HXLINE( 184)					 ::StringBuf _this6 = this->buf;
+HXDLIN( 184)					{
+HXLINE( 184)						if (::hx::IsNull( _this6->charBuf )) {
+HXLINE( 184)							_this6->charBuf = ::Array_obj< char >::__new();
+            						}
+HXDLIN( 184)						_this6->charBuf->push(32);
+            					}
+            				}
+HXLINE( 185)				this->write(f,value);
+            			}
+            		}
+HXLINE( 187)		if (!(empty)) {
+HXLINE( 188)			this->nind--;
+HXLINE( 189)			if (this->pretty) {
+HXLINE( 189)				 ::StringBuf _this7 = this->buf;
+HXDLIN( 189)				{
+HXLINE( 189)					if (::hx::IsNull( _this7->charBuf )) {
+HXLINE( 189)						_this7->charBuf = ::Array_obj< char >::__new();
+            					}
+HXDLIN( 189)					_this7->charBuf->push(10);
+            				}
+            			}
+HXLINE( 190)			if (this->pretty) {
+HXLINE( 190)				::String v2 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
+HXDLIN( 190)				{
+HXLINE( 190)					 ::StringBuf _this8 = this->buf;
+HXDLIN( 190)					if (::hx::IsNotNull( _this8->charBuf )) {
+HXLINE( 190)						_this8->flush();
+            					}
+HXDLIN( 190)					if (::hx::IsNull( _this8->b )) {
+HXLINE( 190)						_this8->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v2));
+            					}
+            					else {
+HXLINE( 190)						::Array< ::String > _this9 = _this8->b;
+HXDLIN( 190)						_this9->push(::Std_obj::string(v2));
+            					}
+            				}
+            			}
+            		}
+HXLINE( 192)		{
+HXLINE( 192)			 ::StringBuf _this10 = this->buf;
+HXDLIN( 192)			{
+HXLINE( 192)				if (::hx::IsNull( _this10->charBuf )) {
+HXLINE( 192)					_this10->charBuf = ::Array_obj< char >::__new();
+            				}
+HXDLIN( 192)				_this10->charBuf->push(125);
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC2(JsonPrinter_obj,fieldsString,(void))
+
+void JsonPrinter_obj::quote(::String s){
+            	HX_STACKFRAME(&_hx_pos_b77b8280a0c8b7bd_195_quote)
+HXLINE( 196)		{
+HXLINE( 196)			 ::StringBuf _this = this->buf;
+HXDLIN( 196)			{
+HXLINE( 196)				if (::hx::IsNull( _this->charBuf )) {
+HXLINE( 196)					_this->charBuf = ::Array_obj< char >::__new();
+            				}
+HXDLIN( 196)				_this->charBuf->push(34);
+            			}
+            		}
+HXLINE( 197)		{
+HXLINE( 197)			int _g_offset = 0;
+HXDLIN( 197)			::String _g_s = s;
+HXDLIN( 197)			while((_g_offset < _g_s.length)){
+HXLINE( 197)				::String s1 = _g_s;
+HXDLIN( 197)				_g_offset = (_g_offset + 1);
+HXDLIN( 197)				int index = (_g_offset - 1);
+HXDLIN( 197)				int c = s1.cca(index);
+HXDLIN( 197)				bool _hx_tmp;
+HXDLIN( 197)				if ((c >= 55296)) {
+HXLINE( 197)					_hx_tmp = (c <= 56319);
+            				}
+            				else {
+HXLINE( 197)					_hx_tmp = false;
+            				}
+HXDLIN( 197)				if (_hx_tmp) {
+HXLINE( 639)					c = (((c - 55232) << 10) | (s1.cca((index + 1)) & 1023));
+            				}
+HXLINE( 197)				int c1 = c;
+HXDLIN( 197)				if ((c1 >= 65536)) {
+HXLINE( 197)					_g_offset = (_g_offset + 1);
+            				}
+HXDLIN( 197)				int c2 = c1;
+HXLINE( 198)				switch((int)(c2)){
+            					case (int)8: {
+HXLINE( 210)						 ::StringBuf _this1 = this->buf;
+HXDLIN( 210)						if (::hx::IsNotNull( _this1->charBuf )) {
+HXLINE( 210)							_this1->flush();
+            						}
+HXDLIN( 210)						if (::hx::IsNull( _this1->b )) {
+HXLINE( 210)							_this1->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_12,1);
+            						}
+            						else {
+HXLINE( 210)							_this1->b->push(HX_("\\b",86,50,00,00));
+            						}
+            					}
+            					break;
+            					case (int)9: {
+HXLINE( 208)						 ::StringBuf _this2 = this->buf;
+HXDLIN( 208)						if (::hx::IsNotNull( _this2->charBuf )) {
+HXLINE( 208)							_this2->flush();
+            						}
+HXDLIN( 208)						if (::hx::IsNull( _this2->b )) {
+HXLINE( 208)							_this2->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_13,1);
+            						}
+            						else {
+HXLINE( 208)							_this2->b->push(HX_("\\t",98,50,00,00));
+            						}
+            					}
+            					break;
+            					case (int)10: {
+HXLINE( 204)						 ::StringBuf _this3 = this->buf;
+HXDLIN( 204)						if (::hx::IsNotNull( _this3->charBuf )) {
+HXLINE( 204)							_this3->flush();
+            						}
+HXDLIN( 204)						if (::hx::IsNull( _this3->b )) {
+HXLINE( 204)							_this3->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_14,1);
+            						}
+            						else {
+HXLINE( 204)							_this3->b->push(HX_("\\n",92,50,00,00));
+            						}
+            					}
+            					break;
+            					case (int)12: {
+HXLINE( 212)						 ::StringBuf _this4 = this->buf;
+HXDLIN( 212)						if (::hx::IsNotNull( _this4->charBuf )) {
+HXLINE( 212)							_this4->flush();
+            						}
+HXDLIN( 212)						if (::hx::IsNull( _this4->b )) {
+HXLINE( 212)							_this4->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_15,1);
+            						}
+            						else {
+HXLINE( 212)							_this4->b->push(HX_("\\f",8a,50,00,00));
+            						}
+            					}
+            					break;
+            					case (int)13: {
+HXLINE( 206)						 ::StringBuf _this5 = this->buf;
+HXDLIN( 206)						if (::hx::IsNotNull( _this5->charBuf )) {
+HXLINE( 206)							_this5->flush();
+            						}
+HXDLIN( 206)						if (::hx::IsNull( _this5->b )) {
+HXLINE( 206)							_this5->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_16,1);
+            						}
+            						else {
+HXLINE( 206)							_this5->b->push(HX_("\\r",96,50,00,00));
+            						}
+            					}
+            					break;
+            					case (int)34: {
+HXLINE( 200)						 ::StringBuf _this6 = this->buf;
+HXDLIN( 200)						if (::hx::IsNotNull( _this6->charBuf )) {
+HXLINE( 200)							_this6->flush();
+            						}
+HXDLIN( 200)						if (::hx::IsNull( _this6->b )) {
+HXLINE( 200)							_this6->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_17,1);
+            						}
+            						else {
+HXLINE( 200)							_this6->b->push(HX_("\\\"",46,50,00,00));
+            						}
+            					}
+            					break;
+            					case (int)92: {
+HXLINE( 202)						 ::StringBuf _this7 = this->buf;
+HXDLIN( 202)						if (::hx::IsNotNull( _this7->charBuf )) {
+HXLINE( 202)							_this7->flush();
+            						}
+HXDLIN( 202)						if (::hx::IsNull( _this7->b )) {
+HXLINE( 202)							_this7->b = ::Array_obj< ::String >::fromData( _hx_array_data_9fbcb301_18,1);
+            						}
+            						else {
+HXLINE( 202)							_this7->b->push(HX_("\\\\",80,50,00,00));
+            						}
+            					}
+            					break;
+            					default:{
+HXLINE( 214)						 ::StringBuf _this8 = this->buf;
+HXDLIN( 214)						if ((c2 >= 127)) {
+HXLINE( 214)							::String x = ::String::fromCharCode(c2);
+HXDLIN( 214)							if (::hx::IsNotNull( _this8->charBuf )) {
+HXLINE( 214)								_this8->flush();
+            							}
+HXDLIN( 214)							if (::hx::IsNull( _this8->b )) {
+HXLINE( 214)								_this8->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
+            							}
+            							else {
+HXLINE( 214)								::Array< ::String > _this9 = _this8->b;
+HXDLIN( 214)								_this9->push(::Std_obj::string(x));
+            							}
+            						}
+            						else {
+HXLINE( 214)							if (::hx::IsNull( _this8->charBuf )) {
+HXLINE( 214)								_this8->charBuf = ::Array_obj< char >::__new();
+            							}
+HXDLIN( 214)							_this8->charBuf->push(c2);
+            						}
+            					}
+            				}
+            			}
+            		}
+HXLINE( 217)		{
+HXLINE( 217)			 ::StringBuf _this10 = this->buf;
+HXDLIN( 217)			{
+HXLINE( 217)				if (::hx::IsNull( _this10->charBuf )) {
+HXLINE( 217)					_this10->charBuf = ::Array_obj< char >::__new();
+            				}
+HXDLIN( 217)				_this10->charBuf->push(34);
+            			}
+            		}
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(JsonPrinter_obj,quote,(void))
+
+::String JsonPrinter_obj::print( ::Dynamic o, ::Dynamic replacer,::String space){
+            	HX_GC_STACKFRAME(&_hx_pos_b77b8280a0c8b7bd_44_print)
+HXLINE(  45)		 ::snikket::JsonPrinter printer =  ::snikket::JsonPrinter_obj::__alloc( HX_CTX ,replacer,space);
+HXLINE(  46)		printer->write(HX_("",00,00,00,00),o);
+HXLINE(  47)		return printer->buf->toString();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(JsonPrinter_obj,print,return )
+
+
+::hx::ObjectPtr< JsonPrinter_obj > JsonPrinter_obj::__new( ::Dynamic replacer,::String space) {
+	::hx::ObjectPtr< JsonPrinter_obj > __this = new JsonPrinter_obj();
+	__this->__construct(replacer,space);
+	return __this;
+}
+
+::hx::ObjectPtr< JsonPrinter_obj > JsonPrinter_obj::__alloc(::hx::Ctx *_hx_ctx, ::Dynamic replacer,::String space) {
+	JsonPrinter_obj *__this = (JsonPrinter_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(JsonPrinter_obj), true, "snikket.JsonPrinter"));
+	*(void **)__this = JsonPrinter_obj::_hx_vtable;
+	__this->__construct(replacer,space);
+	return __this;
+}
+
+JsonPrinter_obj::JsonPrinter_obj()
+{
+}
+
+void JsonPrinter_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(JsonPrinter);
+	HX_MARK_MEMBER_NAME(buf,"buf");
+	HX_MARK_MEMBER_NAME(replacer,"replacer");
+	HX_MARK_MEMBER_NAME(indent,"indent");
+	HX_MARK_MEMBER_NAME(pretty,"pretty");
+	HX_MARK_MEMBER_NAME(nind,"nind");
+	HX_MARK_END_CLASS();
+}
+
+void JsonPrinter_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(buf,"buf");
+	HX_VISIT_MEMBER_NAME(replacer,"replacer");
+	HX_VISIT_MEMBER_NAME(indent,"indent");
+	HX_VISIT_MEMBER_NAME(pretty,"pretty");
+	HX_VISIT_MEMBER_NAME(nind,"nind");
+}
+
+::hx::Val JsonPrinter_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"buf") ) { return ::hx::Val( buf ); }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"nind") ) { return ::hx::Val( nind ); }
+		break;
+	case 5:
+		if (HX_FIELD_EQ(inName,"write") ) { return ::hx::Val( write_dyn() ); }
+		if (HX_FIELD_EQ(inName,"quote") ) { return ::hx::Val( quote_dyn() ); }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"indent") ) { return ::hx::Val( indent ); }
+		if (HX_FIELD_EQ(inName,"pretty") ) { return ::hx::Val( pretty ); }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"replacer") ) { return ::hx::Val( replacer ); }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"classString") ) { return ::hx::Val( classString_dyn() ); }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"fieldsString") ) { return ::hx::Val( fieldsString_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+bool JsonPrinter_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"print") ) { outValue = print_dyn(); return true; }
+	}
+	return false;
+}
+
+::hx::Val JsonPrinter_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 3:
+		if (HX_FIELD_EQ(inName,"buf") ) { buf=inValue.Cast<  ::StringBuf >(); return inValue; }
+		break;
+	case 4:
+		if (HX_FIELD_EQ(inName,"nind") ) { nind=inValue.Cast< int >(); return inValue; }
+		break;
+	case 6:
+		if (HX_FIELD_EQ(inName,"indent") ) { indent=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"pretty") ) { pretty=inValue.Cast< bool >(); return inValue; }
+		break;
+	case 8:
+		if (HX_FIELD_EQ(inName,"replacer") ) { replacer=inValue.Cast<  ::Dynamic >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void JsonPrinter_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("buf",33,c3,4a,00));
+	outFields->push(HX_("indent",6c,0c,f3,93));
+	outFields->push(HX_("pretty",b6,82,c1,ae));
+	outFields->push(HX_("nind",31,85,05,49));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo JsonPrinter_obj_sMemberStorageInfo[] = {
+	{::hx::fsObject /*  ::StringBuf */ ,(int)offsetof(JsonPrinter_obj,buf),HX_("buf",33,c3,4a,00)},
+	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(JsonPrinter_obj,replacer),HX_("replacer",be,e5,16,18)},
+	{::hx::fsString,(int)offsetof(JsonPrinter_obj,indent),HX_("indent",6c,0c,f3,93)},
+	{::hx::fsBool,(int)offsetof(JsonPrinter_obj,pretty),HX_("pretty",b6,82,c1,ae)},
+	{::hx::fsInt,(int)offsetof(JsonPrinter_obj,nind),HX_("nind",31,85,05,49)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *JsonPrinter_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String JsonPrinter_obj_sMemberFields[] = {
+	HX_("buf",33,c3,4a,00),
+	HX_("replacer",be,e5,16,18),
+	HX_("indent",6c,0c,f3,93),
+	HX_("pretty",b6,82,c1,ae),
+	HX_("nind",31,85,05,49),
+	HX_("write",df,6c,59,d0),
+	HX_("classString",29,0f,79,88),
+	HX_("fieldsString",2a,cc,56,34),
+	HX_("quote",3c,23,f2,5d),
+	::String(null()) };
+
+::hx::Class JsonPrinter_obj::__mClass;
+
+static ::String JsonPrinter_obj_sStaticFields[] = {
+	HX_("print",2d,58,8b,c8),
+	::String(null())
+};
+
+void JsonPrinter_obj::__register()
+{
+	JsonPrinter_obj _hx_dummy;
+	JsonPrinter_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("snikket.JsonPrinter",01,b3,bc,9f);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &JsonPrinter_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(JsonPrinter_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(JsonPrinter_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< JsonPrinter_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = JsonPrinter_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = JsonPrinter_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace snikket
diff --git a/Sources/c_snikket/src/snikket/Notification.cpp b/Sources/c_snikket/src/snikket/Notification.cpp
index bd3f9eb..4b7c913 100644
--- a/Sources/c_snikket/src/snikket/Notification.cpp
+++ b/Sources/c_snikket/src/snikket/Notification.cpp
@@ -23,24 +23,36 @@
 #include <snikket/_Stanza/NodeInterface.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_b0a79cae3ba17812_21_new,"snikket.Notification","new",0x26dbd48e,"snikket.Notification.new","snikket/Notification.hx",21,0x3ec09fc1)
-HX_LOCAL_STACK_FRAME(_hx_pos_b0a79cae3ba17812_35_fromChatMessage,"snikket.Notification","fromChatMessage",0xbfab11b3,"snikket.Notification.fromChatMessage","snikket/Notification.hx",35,0x3ec09fc1)
-HX_LOCAL_STACK_FRAME(_hx_pos_b0a79cae3ba17812_59_fromThinStanza,"snikket.Notification","fromThinStanza",0xff0721ca,"snikket.Notification.fromThinStanza","snikket/Notification.hx",59,0x3ec09fc1)
+HX_DEFINE_STACK_FRAME(_hx_pos_b0a79cae3ba17812_30_new,"snikket.Notification","new",0x26dbd48e,"snikket.Notification.new","snikket/Notification.hx",30,0x3ec09fc1)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_title__fromC,"snikket.Notification","title__fromC",0x471ac3f3,"snikket.Notification.title__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_body__fromC,"snikket.Notification","body__fromC",0x310d5045,"snikket.Notification.body__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_accountId__fromC,"snikket.Notification","accountId__fromC",0x303bf2a3,"snikket.Notification.accountId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_chatId__fromC,"snikket.Notification","chatId__fromC",0xd6de45b4,"snikket.Notification.chatId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_messageId__fromC,"snikket.Notification","messageId__fromC",0x04e5c649,"snikket.Notification.messageId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_type__fromC,"snikket.Notification","type__fromC",0x2ef98b2d,"snikket.Notification.type__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_callStatus__fromC,"snikket.Notification","callStatus__fromC",0x3a2418b7,"snikket.Notification.callStatus__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_callSid__fromC,"snikket.Notification","callSid__fromC",0x1bec6bfb,"snikket.Notification.callSid__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_imageUri__fromC,"snikket.Notification","imageUri__fromC",0xc4a25ef6,"snikket.Notification.imageUri__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_lang__fromC,"snikket.Notification","lang__fromC",0xed8d0679,"snikket.Notification.lang__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a71b5c2960d44fdc_355_timestamp__fromC,"snikket.Notification","timestamp__fromC",0xec75f975,"snikket.Notification.timestamp__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b0a79cae3ba17812_45_fromChatMessage,"snikket.Notification","fromChatMessage",0xbfab11b3,"snikket.Notification.fromChatMessage","snikket/Notification.hx",45,0x3ec09fc1)
+HX_LOCAL_STACK_FRAME(_hx_pos_b0a79cae3ba17812_70_fromThinStanza,"snikket.Notification","fromThinStanza",0xff0721ca,"snikket.Notification.fromThinStanza","snikket/Notification.hx",70,0x3ec09fc1)
+HX_LOCAL_STACK_FRAME(_hx_pos_b0a79cae3ba17812_16_boot,"snikket.Notification","boot",0xd1972844,"snikket.Notification.boot","snikket/Notification.hx",16,0x3ec09fc1)
 namespace snikket{
 
 void Notification_obj::__construct(::String title,::String body,::String accountId,::String chatId,::String messageId,int type,::String callStatus,::String callSid,::String imageUri,::String lang,::String timestamp){
-            	HX_STACKFRAME(&_hx_pos_b0a79cae3ba17812_21_new)
-HXLINE(  22)		this->title = title;
-HXLINE(  23)		this->body = body;
-HXLINE(  24)		this->accountId = accountId;
-HXLINE(  25)		this->chatId = chatId;
-HXLINE(  26)		this->messageId = messageId;
-HXLINE(  27)		this->type = type;
-HXLINE(  28)		this->callStatus = callStatus;
-HXLINE(  29)		this->callSid = callSid;
-HXLINE(  30)		this->imageUri = imageUri;
-HXLINE(  31)		this->lang = lang;
-HXLINE(  32)		this->timestamp = timestamp;
+            	HX_STACKFRAME(&_hx_pos_b0a79cae3ba17812_30_new)
+HXLINE(  31)		this->title = title;
+HXLINE(  32)		this->body = body;
+HXLINE(  33)		this->accountId = accountId;
+HXLINE(  34)		this->chatId = chatId;
+HXLINE(  35)		this->messageId = messageId;
+HXLINE(  36)		this->type = type;
+HXLINE(  37)		this->callStatus = callStatus;
+HXLINE(  38)		this->callSid = callSid;
+HXLINE(  39)		this->imageUri = imageUri;
+HXLINE(  40)		this->lang = lang;
+HXLINE(  41)		this->timestamp = timestamp;
             	}
 
 Dynamic Notification_obj::__CreateEmpty() { return new Notification_obj; }
@@ -58,38 +70,126 @@ bool Notification_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x778a3c48;
 }
 
+::String Notification_obj::title__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_title__fromC)
+HXDLIN( 355)		return this->title;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,title__fromC,return )
+
+::String Notification_obj::body__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_body__fromC)
+HXDLIN( 355)		return this->body;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,body__fromC,return )
+
+::String Notification_obj::accountId__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_accountId__fromC)
+HXDLIN( 355)		return this->accountId;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,accountId__fromC,return )
+
+::String Notification_obj::chatId__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_chatId__fromC)
+HXDLIN( 355)		return this->chatId;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,chatId__fromC,return )
+
+::String Notification_obj::messageId__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_messageId__fromC)
+HXDLIN( 355)		return this->messageId;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,messageId__fromC,return )
+
+int Notification_obj::type__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_type__fromC)
+HXDLIN( 355)		return this->type;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,type__fromC,return )
+
+::String Notification_obj::callStatus__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_callStatus__fromC)
+HXDLIN( 355)		return this->callStatus;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,callStatus__fromC,return )
+
+::String Notification_obj::callSid__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_callSid__fromC)
+HXDLIN( 355)		return this->callSid;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,callSid__fromC,return )
+
+::String Notification_obj::imageUri__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_imageUri__fromC)
+HXDLIN( 355)		return this->imageUri;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,imageUri__fromC,return )
+
+::String Notification_obj::lang__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_lang__fromC)
+HXDLIN( 355)		return this->lang;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,lang__fromC,return )
+
+::String Notification_obj::timestamp__fromC(){
+            	HX_STACKFRAME(&_hx_pos_a71b5c2960d44fdc_355_timestamp__fromC)
+HXDLIN( 355)		return this->timestamp;
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,timestamp__fromC,return )
+
  ::snikket::Notification Notification_obj::fromChatMessage( ::snikket::ChatMessage m){
-            	HX_GC_STACKFRAME(&_hx_pos_b0a79cae3ba17812_35_fromChatMessage)
-HXLINE(  36)		::String imageUri = null();
-HXLINE(  37)		 ::snikket::ChatAttachment attachment = m->attachments->__get(0).StaticCast<  ::snikket::ChatAttachment >();
-HXLINE(  38)		if (::hx::IsNotNull( attachment )) {
-HXLINE(  39)			imageUri = attachment->uris->__get(0);
+            	HX_GC_STACKFRAME(&_hx_pos_b0a79cae3ba17812_45_fromChatMessage)
+HXLINE(  46)		::String imageUri = null();
+HXLINE(  47)		 ::snikket::ChatAttachment attachment = m->attachments->__get(0).StaticCast<  ::snikket::ChatAttachment >();
+HXLINE(  48)		if (::hx::IsNotNull( attachment )) {
+HXLINE(  49)			imageUri = attachment->uris->__get(0);
             		}
-HXLINE(  42)		::String _hx_tmp;
-HXDLIN(  42)		if ((m->type == 1)) {
-HXLINE(  42)			_hx_tmp = HX_("Incoming Call",18,e2,4d,47);
+HXLINE(  52)		::String _hx_tmp;
+HXDLIN(  52)		if ((m->type == 1)) {
+HXLINE(  52)			_hx_tmp = HX_("Incoming Call",18,e2,4d,47);
             		}
             		else {
-HXLINE(  42)			_hx_tmp = HX_("New Message",c7,69,0e,bd);
+HXLINE(  52)			_hx_tmp = HX_("New Message",c7,69,0e,bd);
             		}
-HXLINE(  43)		::String m1 = m->text;
-HXLINE(  44)		::String _hx_tmp1 = m->account();
-HXLINE(  45)		::String _hx_tmp2 = m->chatId();
-HXLINE(  46)		::String m2 = m->serverId;
-HXLINE(  47)		int m3 = m->type;
-HXLINE(  48)		::String _hx_tmp3 = m->callStatus();
-HXLINE(  49)		::String _hx_tmp4 = m->callSid();
-HXLINE(  41)		return  ::snikket::Notification_obj::__alloc( HX_CTX ,_hx_tmp,m1,_hx_tmp1,_hx_tmp2,m2,m3,_hx_tmp3,_hx_tmp4,imageUri,m->lang,m->timestamp);
+HXLINE(  53)		::String m1 = m->text;
+HXLINE(  54)		::String _hx_tmp1 = m->account();
+HXLINE(  55)		::String _hx_tmp2 = m->chatId();
+HXLINE(  56)		::String m2 = m->serverId;
+HXLINE(  57)		int m3 = m->type;
+HXLINE(  58)		::String _hx_tmp3 = m->callStatus();
+HXLINE(  59)		::String _hx_tmp4 = m->callSid();
+HXLINE(  51)		return  ::snikket::Notification_obj::__alloc( HX_CTX ,_hx_tmp,m1,_hx_tmp1,_hx_tmp2,m2,m3,_hx_tmp3,_hx_tmp4,imageUri,m->lang,m->timestamp);
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(Notification_obj,fromChatMessage,return )
 
  ::snikket::Notification Notification_obj::fromThinStanza( ::snikket::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_b0a79cae3ba17812_59_fromThinStanza)
-HXLINE(  62)		::String _hx_tmp = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString();
-HXLINE(  63)		::String _hx_tmp1 = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString();
-HXLINE(  59)		return  ::snikket::Notification_obj::__alloc( HX_CTX ,HX_("New Message",c7,69,0e,bd),HX_("",00,00,00,00),_hx_tmp,_hx_tmp1,stanza->getChildText(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54)),0,null(),null(),null(),null(),null());
+            	HX_GC_STACKFRAME(&_hx_pos_b0a79cae3ba17812_70_fromThinStanza)
+HXLINE(  73)		::String _hx_tmp = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString();
+HXLINE(  74)		::String _hx_tmp1 = ::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString();
+HXLINE(  70)		return  ::snikket::Notification_obj::__alloc( HX_CTX ,HX_("New Message",c7,69,0e,bd),HX_("",00,00,00,00),_hx_tmp,_hx_tmp1,stanza->getChildText(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54)),0,null(),null(),null(),null(),null());
             	}
 
 
@@ -159,6 +259,31 @@ void Notification_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"callStatus") ) { return ::hx::Val( callStatus ); }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"body__fromC") ) { return ::hx::Val( body__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"type__fromC") ) { return ::hx::Val( type__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"lang__fromC") ) { return ::hx::Val( lang__fromC_dyn() ); }
+		break;
+	case 12:
+		if (HX_FIELD_EQ(inName,"title__fromC") ) { return ::hx::Val( title__fromC_dyn() ); }
+		break;
+	case 13:
+		if (HX_FIELD_EQ(inName,"chatId__fromC") ) { return ::hx::Val( chatId__fromC_dyn() ); }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"callSid__fromC") ) { return ::hx::Val( callSid__fromC_dyn() ); }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"imageUri__fromC") ) { return ::hx::Val( imageUri__fromC_dyn() ); }
+		break;
+	case 16:
+		if (HX_FIELD_EQ(inName,"accountId__fromC") ) { return ::hx::Val( accountId__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"messageId__fromC") ) { return ::hx::Val( messageId__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"timestamp__fromC") ) { return ::hx::Val( timestamp__fromC_dyn() ); }
+		break;
+	case 17:
+		if (HX_FIELD_EQ(inName,"callStatus__fromC") ) { return ::hx::Val( callStatus__fromC_dyn() ); }
 	}
 	return super::__Field(inName,inCallProp);
 }
@@ -242,16 +367,27 @@ static ::hx::StaticInfo *Notification_obj_sStaticStorageInfo = 0;
 
 static ::String Notification_obj_sMemberFields[] = {
 	HX_("title",98,15,3b,10),
+	HX_("title__fromC",e1,bd,61,c7),
 	HX_("body",a2,7a,1b,41),
+	HX_("body__fromC",17,6e,80,95),
 	HX_("accountId",e8,81,54,29),
+	HX_("accountId__fromC",91,7b,51,1b),
 	HX_("chatId",d3,04,77,b7),
+	HX_("chatId__fromC",06,fc,b1,94),
 	HX_("messageId",82,b5,1f,29),
+	HX_("messageId__fromC",37,4f,fb,ef),
 	HX_("type",ba,f2,08,4d),
+	HX_("type__fromC",ff,a8,6c,93),
 	HX_("callStatus",70,be,2b,31),
+	HX_("callStatus__fromC",09,60,e6,01),
 	HX_("callSid",10,f5,53,54),
+	HX_("callSid__fromC",69,3d,58,77),
 	HX_("imageUri",d1,8e,3b,84),
+	HX_("imageUri__fromC",c8,cd,8d,67),
 	HX_("lang",ee,05,ad,47),
+	HX_("lang__fromC",4b,24,00,52),
 	HX_("timestamp",d6,d4,ce,a5),
+	HX_("timestamp__fromC",63,82,8b,d7),
 	::String(null()) };
 
 ::hx::Class Notification_obj::__mClass;
@@ -285,4 +421,35 @@ void Notification_obj::__register()
 	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
 }
 
+void Notification_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_b0a79cae3ba17812_16_boot)
+HXDLIN(  16)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(11)
+            				->setFixed(0,HX_("type__fromC",ff,a8,6c,93), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("chatId__fromC",06,fc,b1,94), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(2,HX_("body__fromC",17,6e,80,95), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(3,HX_("title__fromC",e1,bd,61,c7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(4,HX_("timestamp__fromC",63,82,8b,d7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(5,HX_("messageId__fromC",37,4f,fb,ef), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(6,HX_("callStatus__fromC",09,60,e6,01), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(7,HX_("accountId__fromC",91,7b,51,1b), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(8,HX_("lang__fromC",4b,24,00,52), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(9,HX_("imageUri__fromC",c8,cd,8d,67), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(10,HX_("callSid__fromC",69,3d,58,77), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
+            	}
+}
+
 } // end namespace snikket
diff --git a/Sources/c_snikket/src/snikket/Participant.cpp b/Sources/c_snikket/src/snikket/Participant.cpp
index 9746774..de3db76 100644
--- a/Sources/c_snikket/src/snikket/Participant.cpp
+++ b/Sources/c_snikket/src/snikket/Participant.cpp
@@ -6,10 +6,10 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_33195ab9b813f4c6_20_new,"snikket.Participant","new",0x30d44414,"snikket.Participant.new","snikket/Participant.hx",20,0x8d2a799d)
-HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_307_displayName__fromC,"snikket.Participant","displayName__fromC",0x32bb7538,"snikket.Participant.displayName__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_307_photoUri__fromC,"snikket.Participant","photoUri__fromC",0x51355b93,"snikket.Participant.photoUri__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_307_placeholderUri__fromC,"snikket.Participant","placeholderUri__fromC",0x436ea094,"snikket.Participant.placeholderUri__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_307_isSelf__fromC,"snikket.Participant","isSelf__fromC",0x5a5f9b57,"snikket.Participant.isSelf__fromC","HaxeCBridge.hx",307,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_355_displayName__fromC,"snikket.Participant","displayName__fromC",0x32bb7538,"snikket.Participant.displayName__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_355_photoUri__fromC,"snikket.Participant","photoUri__fromC",0x51355b93,"snikket.Participant.photoUri__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_355_placeholderUri__fromC,"snikket.Participant","placeholderUri__fromC",0x436ea094,"snikket.Participant.placeholderUri__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_dd664f1e3e572410_355_isSelf__fromC,"snikket.Participant","isSelf__fromC",0x5a5f9b57,"snikket.Participant.isSelf__fromC","HaxeCBridge.hx",355,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_33195ab9b813f4c6_13_boot,"snikket.Participant","boot",0x81004dfe,"snikket.Participant.boot","snikket/Participant.hx",13,0x8d2a799d)
 namespace snikket{
 
@@ -37,32 +37,32 @@ bool Participant_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Participant_obj::displayName__fromC(){
-            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_307_displayName__fromC)
-HXDLIN( 307)		return this->displayName;
+            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_355_displayName__fromC)
+HXDLIN( 355)		return this->displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,displayName__fromC,return )
 
 ::String Participant_obj::photoUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_307_photoUri__fromC)
-HXDLIN( 307)		return this->photoUri;
+            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_355_photoUri__fromC)
+HXDLIN( 355)		return this->photoUri;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,photoUri__fromC,return )
 
 ::String Participant_obj::placeholderUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_307_placeholderUri__fromC)
-HXDLIN( 307)		return this->placeholderUri;
+            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_355_placeholderUri__fromC)
+HXDLIN( 355)		return this->placeholderUri;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,placeholderUri__fromC,return )
 
 bool Participant_obj::isSelf__fromC(){
-            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_307_isSelf__fromC)
-HXDLIN( 307)		return this->isSelf;
+            	HX_STACKFRAME(&_hx_pos_dd664f1e3e572410_355_isSelf__fromC)
+HXDLIN( 355)		return this->isSelf;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/Push.cpp b/Sources/c_snikket/src/snikket/Push.cpp
new file mode 100644
index 0000000..75538c8
--- /dev/null
+++ b/Sources/c_snikket/src/snikket/Push.cpp
@@ -0,0 +1,143 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_Reflect
+#include <Reflect.h>
+#endif
+#ifndef INCLUDED_snikket_ChatMessage
+#include <snikket/ChatMessage.h>
+#endif
+#ifndef INCLUDED_snikket_ChatMessageBuilder
+#include <snikket/ChatMessageBuilder.h>
+#endif
+#ifndef INCLUDED_snikket_JID
+#include <snikket/JID.h>
+#endif
+#ifndef INCLUDED_snikket_Notification
+#include <snikket/Notification.h>
+#endif
+#ifndef INCLUDED_snikket_Persistence
+#include <snikket/Persistence.h>
+#endif
+#ifndef INCLUDED_snikket_Push
+#include <snikket/Push.h>
+#endif
+#ifndef INCLUDED_snikket_Stanza
+#include <snikket/Stanza.h>
+#endif
+#ifndef INCLUDED_snikket__Stanza_NodeInterface
+#include <snikket/_Stanza/NodeInterface.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_f43ad8fb7d9b8ef0_21_receive,"snikket.Push","receive",0x2faa9e00,"snikket.Push.receive","snikket/Push.hx",21,0xbce40632)
+namespace snikket{
+
+void Push_obj::__construct() { }
+
+Dynamic Push_obj::__CreateEmpty() { return new Push_obj; }
+
+void *Push_obj::_hx_vtable = 0;
+
+Dynamic Push_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Push_obj > _hx_result = new Push_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Push_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x0b0d3237;
+}
+
+ ::snikket::Notification Push_obj::receive(::String data,::Dynamic persistence){
+            	HX_STACKFRAME(&_hx_pos_f43ad8fb7d9b8ef0_21_receive)
+HXLINE(  22)		 ::snikket::Stanza stanza = ::snikket::Stanza_obj::parse(data);
+HXLINE(  23)		if (::hx::IsNull( stanza )) {
+HXLINE(  23)			return null();
+            		}
+HXLINE(  24)		bool _hx_tmp;
+HXDLIN(  24)		if ((stanza->name == HX_("envelope",10,df,6c,0c))) {
+HXLINE(  24)			_hx_tmp = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:sce:1",30,c6,40,50));
+            		}
+            		else {
+HXLINE(  24)			_hx_tmp = false;
+            		}
+HXDLIN(  24)		if (_hx_tmp) {
+HXLINE(  25)			stanza = stanza->getChild(HX_("content",39,8d,77,19),null())->getFirstChild();
+            		}
+HXLINE(  27)		bool _hx_tmp1;
+HXDLIN(  27)		if ((stanza->name == HX_("forwarded",64,f5,9a,17))) {
+HXLINE(  27)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+            		}
+            		else {
+HXLINE(  27)			_hx_tmp1 = false;
+            		}
+HXDLIN(  27)		if (_hx_tmp1) {
+HXLINE(  28)			stanza = stanza->getChild(HX_("message",c7,35,11,9a),HX_("jabber:client",21,64,c5,e4));
+            		}
+HXLINE(  30)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ) )) {
+HXLINE(  30)			return null();
+            		}
+HXLINE(  32)		 ::snikket::ChatMessage message = ::snikket::ChatMessage_obj::fromStanza(stanza,::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ))->asBare(),null());
+HXLINE(  33)		if (::hx::IsNotNull( message )) {
+HXLINE(  34)			return ::snikket::Notification_obj::fromChatMessage(message);
+            		}
+            		else {
+HXLINE(  36)			return ::snikket::Notification_obj::fromThinStanza(stanza);
+            		}
+HXLINE(  33)		return null();
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC2(Push_obj,receive,return )
+
+
+Push_obj::Push_obj()
+{
+}
+
+bool Push_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"receive") ) { outValue = receive_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Push_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Push_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Push_obj::__mClass;
+
+static ::String Push_obj_sStaticFields[] = {
+	HX_("receive",e3,61,58,2a),
+	::String(null())
+};
+
+void Push_obj::__register()
+{
+	Push_obj _hx_dummy;
+	Push_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("snikket.Push",8b,b7,1e,55);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Push_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Push_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Push_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Push_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Push_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace snikket
diff --git a/Sources/c_snikket/src/snikket/Reaction.cpp b/Sources/c_snikket/src/snikket/Reaction.cpp
index 71a96ef..5a3e2ed 100644
--- a/Sources/c_snikket/src/snikket/Reaction.cpp
+++ b/Sources/c_snikket/src/snikket/Reaction.cpp
@@ -9,11 +9,11 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_0c571df6f15c506b_23_new,"snikket.Reaction","new",0x5f7c4fcc,"snikket.Reaction.new","snikket/Reaction.hx",23,0x19ff1ac3)
-HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_307_senderId__fromC,"snikket.Reaction","senderId__fromC",0x31e900f5,"snikket.Reaction.senderId__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_307_timestamp__fromC,"snikket.Reaction","timestamp__fromC",0x3cdecf77,"snikket.Reaction.timestamp__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_307_text__fromC,"snikket.Reaction","text__fromC",0x07330ed8,"snikket.Reaction.text__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_307_key__fromC,"snikket.Reaction","key__fromC",0x8fe06ece,"snikket.Reaction.key__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_307_envelopeId__fromC,"snikket.Reaction","envelopeId__fromC",0x1c2ed93a,"snikket.Reaction.envelopeId__fromC","HaxeCBridge.hx",307,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_355_senderId__fromC,"snikket.Reaction","senderId__fromC",0x31e900f5,"snikket.Reaction.senderId__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_355_timestamp__fromC,"snikket.Reaction","timestamp__fromC",0x3cdecf77,"snikket.Reaction.timestamp__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_355_text__fromC,"snikket.Reaction","text__fromC",0x07330ed8,"snikket.Reaction.text__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_355_key__fromC,"snikket.Reaction","key__fromC",0x8fe06ece,"snikket.Reaction.key__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c56bcd6450319fb4_355_envelopeId__fromC,"snikket.Reaction","envelopeId__fromC",0x1c2ed93a,"snikket.Reaction.envelopeId__fromC","HaxeCBridge.hx",355,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c571df6f15c506b_33_render,"snikket.Reaction","render",0xc87d576a,"snikket.Reaction.render","snikket/Reaction.hx",33,0x19ff1ac3)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c571df6f15c506b_15_boot,"snikket.Reaction","boot",0x25628346,"snikket.Reaction.boot","snikket/Reaction.hx",15,0x19ff1ac3)
 namespace snikket{
@@ -51,40 +51,40 @@ bool Reaction_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Reaction_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_307_senderId__fromC)
-HXDLIN( 307)		return this->senderId;
+            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_355_senderId__fromC)
+HXDLIN( 355)		return this->senderId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Reaction_obj,senderId__fromC,return )
 
 ::String Reaction_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_307_timestamp__fromC)
-HXDLIN( 307)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_355_timestamp__fromC)
+HXDLIN( 355)		return this->timestamp;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Reaction_obj,timestamp__fromC,return )
 
 ::String Reaction_obj::text__fromC(){
-            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_307_text__fromC)
-HXDLIN( 307)		return this->text;
+            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_355_text__fromC)
+HXDLIN( 355)		return this->text;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Reaction_obj,text__fromC,return )
 
 ::String Reaction_obj::key__fromC(){
-            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_307_key__fromC)
-HXDLIN( 307)		return this->key;
+            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_355_key__fromC)
+HXDLIN( 355)		return this->key;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Reaction_obj,key__fromC,return )
 
 ::String Reaction_obj::envelopeId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_307_envelopeId__fromC)
-HXDLIN( 307)		return this->envelopeId;
+            	HX_STACKFRAME(&_hx_pos_c56bcd6450319fb4_355_envelopeId__fromC)
+HXDLIN( 355)		return this->envelopeId;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/SerializedChat.cpp b/Sources/c_snikket/src/snikket/SerializedChat.cpp
index e41d502..1f215f8 100644
--- a/Sources/c_snikket/src/snikket/SerializedChat.cpp
+++ b/Sources/c_snikket/src/snikket/SerializedChat.cpp
@@ -7,9 +7,6 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
-#ifndef INCLUDED_haxe_Log
-#include <haxe/Log.h>
-#endif
 #ifndef INCLUDED_haxe_ds_StringMap
 #include <haxe/ds/StringMap.h>
 #endif
@@ -53,54 +50,54 @@
 #include <snikket/_Stanza/NodeInterface.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_59459d97d9a61381_1572_new,"snikket.SerializedChat","new",0xcbfecbdf,"snikket.SerializedChat.new","snikket/Chat.hx",1572,0x18616bf4)
-HX_LOCAL_STACK_FRAME(_hx_pos_59459d97d9a61381_1590_toChat,"snikket.SerializedChat","toChat",0x0e8ec7d4,"snikket.SerializedChat.toChat","snikket/Chat.hx",1590,0x18616bf4)
+HX_DEFINE_STACK_FRAME(_hx_pos_59459d97d9a61381_1570_new,"snikket.SerializedChat","new",0xcbfecbdf,"snikket.SerializedChat.new","snikket/Chat.hx",1570,0x18616bf4)
+HX_LOCAL_STACK_FRAME(_hx_pos_59459d97d9a61381_1588_toChat,"snikket.SerializedChat","toChat",0x0e8ec7d4,"snikket.SerializedChat.toChat","snikket/Chat.hx",1588,0x18616bf4)
 static const ::String _hx_array_data_8cddf06d_3[] = {
 	HX_("http://jabber.org/protocol/muc",07,b2,7f,c6),
 };
 namespace snikket{
 
 void SerializedChat_obj::__construct(::String chatId,bool trusted,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::snikket::Caps disco,::String klass){
-            	HX_STACKFRAME(&_hx_pos_59459d97d9a61381_1572_new)
-HXLINE(1573)		this->chatId = chatId;
-HXLINE(1574)		this->trusted = trusted;
-HXLINE(1575)		this->avatarSha1 = avatarSha1;
-HXLINE(1576)		this->presence = presence;
-HXLINE(1577)		this->displayName = displayName;
-HXLINE(1578)		 ::Dynamic tmp = uiState;
-HXDLIN(1578)		int _hx_tmp;
-HXDLIN(1578)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1578)			_hx_tmp = ( (int)(tmp) );
+            	HX_STACKFRAME(&_hx_pos_59459d97d9a61381_1570_new)
+HXLINE(1571)		this->chatId = chatId;
+HXLINE(1572)		this->trusted = trusted;
+HXLINE(1573)		this->avatarSha1 = avatarSha1;
+HXLINE(1574)		this->presence = presence;
+HXLINE(1575)		this->displayName = displayName;
+HXLINE(1576)		 ::Dynamic tmp = uiState;
+HXDLIN(1576)		int _hx_tmp;
+HXDLIN(1576)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1576)			_hx_tmp = ( (int)(tmp) );
             		}
             		else {
-HXLINE(1578)			_hx_tmp = 1;
+HXLINE(1576)			_hx_tmp = 1;
             		}
-HXDLIN(1578)		this->uiState = _hx_tmp;
-HXLINE(1579)		 ::Dynamic tmp1 = isBlocked;
-HXDLIN(1579)		bool _hx_tmp1;
-HXDLIN(1579)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1579)			_hx_tmp1 = ( (bool)(tmp1) );
+HXDLIN(1576)		this->uiState = _hx_tmp;
+HXLINE(1577)		 ::Dynamic tmp1 = isBlocked;
+HXDLIN(1577)		bool _hx_tmp1;
+HXDLIN(1577)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1577)			_hx_tmp1 = ( (bool)(tmp1) );
             		}
             		else {
-HXLINE(1579)			_hx_tmp1 = false;
+HXLINE(1577)			_hx_tmp1 = false;
             		}
-HXDLIN(1579)		this->isBlocked = _hx_tmp1;
-HXLINE(1580)		::String tmp2 = extensions;
-HXDLIN(1580)		::String _hx_tmp2;
-HXDLIN(1580)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1580)			_hx_tmp2 = tmp2;
+HXDLIN(1577)		this->isBlocked = _hx_tmp1;
+HXLINE(1578)		::String tmp2 = extensions;
+HXDLIN(1578)		::String _hx_tmp2;
+HXDLIN(1578)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1578)			_hx_tmp2 = tmp2;
             		}
             		else {
-HXLINE(1580)			_hx_tmp2 = HX_("<extensions xmlns='urn:app:bookmarks:1' />",84,43,42,a9);
+HXLINE(1578)			_hx_tmp2 = HX_("<extensions xmlns='urn:app:bookmarks:1' />",84,43,42,a9);
             		}
-HXDLIN(1580)		this->extensions = _hx_tmp2;
-HXLINE(1581)		this->readUpToId = readUpToId;
-HXLINE(1582)		this->readUpToBy = readUpToBy;
-HXLINE(1583)		this->notificationsFiltered = notificationsFiltered;
-HXLINE(1584)		this->notifyMention = notifyMention;
-HXLINE(1585)		this->notifyReply = notifyReply;
-HXLINE(1586)		this->disco = disco;
-HXLINE(1587)		this->klass = klass;
+HXDLIN(1578)		this->extensions = _hx_tmp2;
+HXLINE(1579)		this->readUpToId = readUpToId;
+HXLINE(1580)		this->readUpToBy = readUpToBy;
+HXLINE(1581)		this->notificationsFiltered = notificationsFiltered;
+HXLINE(1582)		this->notifyMention = notifyMention;
+HXLINE(1583)		this->notifyReply = notifyReply;
+HXLINE(1584)		this->disco = disco;
+HXLINE(1585)		this->klass = klass;
             	}
 
 Dynamic SerializedChat_obj::__CreateEmpty() { return new SerializedChat_obj; }
@@ -119,80 +116,72 @@ bool SerializedChat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
  ::snikket::Chat SerializedChat_obj::toChat( ::snikket::Client client, ::snikket::GenericStream stream,::Dynamic persistence){
-            	HX_GC_STACKFRAME(&_hx_pos_59459d97d9a61381_1590_toChat)
-HXLINE(1591)		 ::snikket::Stanza extensionsStanza = ::snikket::Stanza_obj::fromXml(::Xml_obj::parse(this->extensions));
-HXLINE(1592)		bool filterN;
-HXDLIN(1592)		 ::Dynamic tmp = this->notificationsFiltered;
-HXDLIN(1592)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1592)			filterN = ( (bool)(tmp) );
+            	HX_GC_STACKFRAME(&_hx_pos_59459d97d9a61381_1588_toChat)
+HXLINE(1589)		 ::snikket::Stanza extensionsStanza = ::snikket::Stanza_obj::fromXml(::Xml_obj::parse(this->extensions));
+HXLINE(1590)		bool filterN;
+HXDLIN(1590)		 ::Dynamic tmp = this->notificationsFiltered;
+HXDLIN(1590)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1590)			filterN = ( (bool)(tmp) );
             		}
             		else {
-HXLINE(1592)			filterN = false;
+HXLINE(1590)			filterN = false;
             		}
-HXLINE(1593)		bool mention = this->notifyMention;
-HXLINE(1595)		 ::snikket::Chat chat;
-HXDLIN(1595)		if ((this->klass == HX_("DirectChat",c1,22,a3,05))) {
-HXLINE(1595)			chat =  ::snikket::DirectChat_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy);
+HXLINE(1591)		bool mention = this->notifyMention;
+HXLINE(1593)		 ::snikket::Chat chat;
+HXDLIN(1593)		if ((this->klass == HX_("DirectChat",c1,22,a3,05))) {
+HXLINE(1593)			chat =  ::snikket::DirectChat_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy);
             		}
             		else {
-HXLINE(1597)			if ((this->klass == HX_("Channel",a3,28,23,9a))) {
-HXLINE(1598)				 ::snikket::Channel channel =  ::snikket::Channel_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,null());
-HXLINE(1599)				 ::snikket::Caps tmp1 = this->disco;
-HXDLIN(1599)				 ::snikket::Caps chat1;
-HXDLIN(1599)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1599)					chat1 = tmp1;
+HXLINE(1595)			if ((this->klass == HX_("Channel",a3,28,23,9a))) {
+HXLINE(1596)				 ::snikket::Channel channel =  ::snikket::Channel_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,null());
+HXLINE(1597)				 ::snikket::Caps tmp1 = this->disco;
+HXDLIN(1597)				 ::snikket::Caps chat1;
+HXDLIN(1597)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1597)					chat1 = tmp1;
             				}
             				else {
-HXLINE(1599)					chat1 =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_8cddf06d_3,1));
+HXLINE(1597)					chat1 =  ::snikket::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_8cddf06d_3,1));
             				}
-HXDLIN(1599)				channel->disco = chat1;
-HXLINE(1600)				bool chat2;
-HXDLIN(1600)				if (::hx::IsNull( this->notificationsFiltered )) {
-HXLINE(1600)					chat2 = !(channel->isPrivate());
+HXDLIN(1597)				channel->disco = chat1;
+HXLINE(1598)				bool chat2;
+HXDLIN(1598)				if (::hx::IsNull( this->notificationsFiltered )) {
+HXLINE(1598)					chat2 = !(channel->isPrivate());
             				}
             				else {
-HXLINE(1600)					chat2 = false;
+HXLINE(1598)					chat2 = false;
             				}
-HXDLIN(1600)				if (chat2) {
-HXLINE(1601)					filterN = true;
-HXDLIN(1601)					mention = filterN;
+HXDLIN(1598)				if (chat2) {
+HXLINE(1599)					filterN = true;
+HXDLIN(1599)					mention = filterN;
             				}
-HXLINE(1595)				chat = channel;
+HXLINE(1593)				chat = channel;
             			}
             			else {
-HXLINE(1605)				HX_STACK_DO_THROW((((HX_("Unknown class of ",0b,cb,7f,f2) + this->chatId) + HX_(": ",a6,32,00,00)) + this->klass));
+HXLINE(1603)				HX_STACK_DO_THROW((((HX_("Unknown class of ",0b,cb,7f,f2) + this->chatId) + HX_(": ",a6,32,00,00)) + this->klass));
             			}
             		}
-HXLINE(1607)		chat->setNotifications(filterN,mention,this->notifyReply);
-HXLINE(1608)		if (::hx::IsNotNull( this->displayName )) {
-HXLINE(1608)			chat->displayName = this->displayName;
-            		}
-HXLINE(1609)		if ((this->chatId == HX_("singpolyma@singpolyma.net",8f,e1,1e,c9))) {
-HXLINE(1609)			::haxe::Log_obj::trace(HX_("AVATAR WOO",b0,c9,52,24), ::Dynamic(::hx::Anon_obj::Create(5)
-            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.SerializedChat",6d,f0,dd,8c))
-            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,this->avatarSha1))
-            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("toChat",f3,c9,78,77))
-            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/Chat.hx",f4,6b,61,18))
-            				->setFixed(4,HX_("lineNumber",dd,81,22,76),1609)));
+HXLINE(1605)		chat->setNotifications(filterN,mention,this->notifyReply);
+HXLINE(1606)		if (::hx::IsNotNull( this->displayName )) {
+HXLINE(1606)			chat->displayName = this->displayName;
             		}
-HXLINE(1610)		if (::hx::IsNotNull( this->avatarSha1 )) {
-HXLINE(1610)			chat->setAvatarSha1(this->avatarSha1);
+HXLINE(1607)		if (::hx::IsNotNull( this->avatarSha1 )) {
+HXLINE(1607)			chat->setAvatarSha1(this->avatarSha1);
             		}
-HXLINE(1611)		chat->setTrusted(this->trusted);
-HXLINE(1612)		{
-HXLINE(1612)			::Dynamic map = this->presence;
-HXDLIN(1612)			::Dynamic _g_map = map;
-HXDLIN(1612)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN(1612)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1612)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1612)				 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN(1612)				::String _g_key = key;
-HXDLIN(1612)				::String resource = _g_key;
-HXDLIN(1612)				 ::snikket::Presence p = _g_value;
-HXLINE(1613)				chat->setPresence(resource,p);
+HXLINE(1608)		chat->setTrusted(this->trusted);
+HXLINE(1609)		{
+HXLINE(1609)			::Dynamic map = this->presence;
+HXDLIN(1609)			::Dynamic _g_map = map;
+HXDLIN(1609)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(1609)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1609)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1609)				 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN(1609)				::String _g_key = key;
+HXDLIN(1609)				::String resource = _g_key;
+HXDLIN(1609)				 ::snikket::Presence p = _g_value;
+HXLINE(1610)				chat->setPresence(resource,p);
             			}
             		}
-HXLINE(1615)		return chat;
+HXLINE(1612)		return chat;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/XEP0393.cpp b/Sources/c_snikket/src/snikket/XEP0393.cpp
index 4980896..843f475 100644
--- a/Sources/c_snikket/src/snikket/XEP0393.cpp
+++ b/Sources/c_snikket/src/snikket/XEP0393.cpp
@@ -19,12 +19,6 @@
 #ifndef INCLUDED__UnicodeString_UnicodeString_Impl_
 #include <_UnicodeString/UnicodeString_Impl_.h>
 #endif
-#ifndef INCLUDED_haxe_Exception
-#include <haxe/Exception.h>
-#endif
-#ifndef INCLUDED_haxe_Log
-#include <haxe/Log.h>
-#endif
 #ifndef INCLUDED_snikket_Autolink
 #include <snikket/Autolink.h>
 #endif
@@ -45,7 +39,7 @@
 #endif
 
 HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_7_parse,"snikket.XEP0393","parse",0x13882074,"snikket.XEP0393.parse","snikket/XEP0393.hx",7,0xcee3f370)
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_21_render,"snikket.XEP0393","render",0x1b3513f5,"snikket.XEP0393.render","snikket/XEP0393.hx",21,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_17_render,"snikket.XEP0393","render",0x1b3513f5,"snikket.XEP0393.render","snikket/XEP0393.hx",17,0xcee3f370)
 static const ::String _hx_array_data_533559ef_4[] = {
 	HX_("\n```\n",b4,74,bf,01),
 };
@@ -79,12 +73,12 @@ static const ::String _hx_array_data_533559ef_13[] = {
 static const ::String _hx_array_data_533559ef_14[] = {
 	HX_("```\n",aa,a7,bd,3f),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_88_renderNode,"snikket.XEP0393","renderNode",0x3bc9e897,"snikket.XEP0393.renderNode","snikket/XEP0393.hx",88,0xcee3f370)
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_94_parseSpans,"snikket.XEP0393","parseSpans",0x00fdc155,"snikket.XEP0393.parseSpans","snikket/XEP0393.hx",94,0xcee3f370)
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_140_parseSpan,"snikket.XEP0393","parseSpan",0x4bc5715e,"snikket.XEP0393.parseSpan","snikket/XEP0393.hx",140,0xcee3f370)
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_160_parseBlock,"snikket.XEP0393","parseBlock",0x3493a039,"snikket.XEP0393.parseBlock","snikket/XEP0393.hx",160,0xcee3f370)
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_172_parseQuote,"snikket.XEP0393","parseQuote",0xdd894e28,"snikket.XEP0393.parseQuote","snikket/XEP0393.hx",172,0xcee3f370)
-HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_199_parsePreformatted,"snikket.XEP0393","parsePreformatted",0xd018390d,"snikket.XEP0393.parsePreformatted","snikket/XEP0393.hx",199,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_84_renderNode,"snikket.XEP0393","renderNode",0x3bc9e897,"snikket.XEP0393.renderNode","snikket/XEP0393.hx",84,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_90_parseSpans,"snikket.XEP0393","parseSpans",0x00fdc155,"snikket.XEP0393.parseSpans","snikket/XEP0393.hx",90,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_136_parseSpan,"snikket.XEP0393","parseSpan",0x4bc5715e,"snikket.XEP0393.parseSpan","snikket/XEP0393.hx",136,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_156_parseBlock,"snikket.XEP0393","parseBlock",0x3493a039,"snikket.XEP0393.parseBlock","snikket/XEP0393.hx",156,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_168_parseQuote,"snikket.XEP0393","parseQuote",0xdd894e28,"snikket.XEP0393.parseQuote","snikket/XEP0393.hx",168,0xcee3f370)
+HX_LOCAL_STACK_FRAME(_hx_pos_100c160c0c16a433_195_parsePreformatted,"snikket.XEP0393","parsePreformatted",0xd018390d,"snikket.XEP0393.parsePreformatted","snikket/XEP0393.hx",195,0xcee3f370)
 namespace snikket{
 
 void XEP0393_obj::__construct() { }
@@ -107,363 +101,345 @@ bool XEP0393_obj::_hx_isInstanceOf(int inClassId) {
  ::Dynamic XEP0393_obj::parse(::String styled){
             	HX_STACKFRAME(&_hx_pos_100c160c0c16a433_7_parse)
 HXLINE(   8)		::Array< ::Dynamic> blocks = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(   9)		try {
-            			HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(  10)			while((::_UnicodeString::UnicodeString_Impl__obj::get_length(styled) > 0)){
-HXLINE(  11)				 ::Dynamic result = ::snikket::XEP0393_obj::parseBlock(styled);
-HXLINE(  12)				styled = ( (::String)(result->__Field(HX_("rest",14,5b,a7,4b),::hx::paccDynamic)) );
-HXLINE(  13)				blocks->push( ::Dynamic(result->__Field(HX_("block",4d,75,fc,b4),::hx::paccDynamic)));
-            			}
-            		} catch( ::Dynamic _hx_e) {
-            			if (_hx_e.IsClass<  ::Dynamic >() ){
-            				HX_STACK_BEGIN_CATCH
-            				 ::Dynamic _g = _hx_e;
-HXLINE(  15)				 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g);
-HXLINE(  16)				::haxe::Log_obj::trace(HX_("WUT",76,4e,42,00), ::Dynamic(::hx::Anon_obj::Create(5)
-            					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.XEP0393",ef,59,35,53))
-            					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
-            					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("parse",33,90,55,bd))
-            					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/XEP0393.hx",70,f3,e3,ce))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),16)));
-            			}
-            			else {
-            				HX_STACK_DO_THROW(_hx_e);
-            			}
+HXLINE(   9)		while((::_UnicodeString::UnicodeString_Impl__obj::get_length(styled) > 0)){
+HXLINE(  10)			 ::Dynamic result = ::snikket::XEP0393_obj::parseBlock(styled);
+HXLINE(  11)			styled = ( (::String)(result->__Field(HX_("rest",14,5b,a7,4b),::hx::paccDynamic)) );
+HXLINE(  12)			blocks->push( ::Dynamic(result->__Field(HX_("block",4d,75,fc,b4),::hx::paccDynamic)));
             		}
-HXLINE(  18)		return blocks;
+HXLINE(  14)		return blocks;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0393_obj,parse,return )
 
 ::String XEP0393_obj::render( ::snikket::Stanza xhtml){
-            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_21_render)
-HXLINE(  22)		if ((xhtml->name == HX_("br",d0,55,00,00))) {
-HXLINE(  23)			return HX_("\n",0a,00,00,00);
+            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_17_render)
+HXLINE(  18)		if ((xhtml->name == HX_("br",d0,55,00,00))) {
+HXLINE(  19)			return HX_("\n",0a,00,00,00);
             		}
-HXLINE(  26)		if ((xhtml->name == HX_("img",03,0c,50,00))) {
-HXLINE(  27)			::String tmp = ( (::String)(::Reflect_obj::field(xhtml->attr,HX_("alt",29,f9,49,00))) );
-HXDLIN(  27)			if (::hx::IsNotNull( tmp )) {
-HXLINE(  27)				return tmp;
+HXLINE(  22)		if ((xhtml->name == HX_("img",03,0c,50,00))) {
+HXLINE(  23)			::String tmp = ( (::String)(::Reflect_obj::field(xhtml->attr,HX_("alt",29,f9,49,00))) );
+HXDLIN(  23)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  23)				return tmp;
             			}
             			else {
-HXLINE(  27)				return HX_("",00,00,00,00);
+HXLINE(  23)				return HX_("",00,00,00,00);
+            			}
+            		}
+HXLINE(  26)		 ::StringBuf s =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE(  28)		if ((xhtml->name == HX_("pre",23,60,55,00))) {
+HXLINE(  29)			if (::hx::IsNotNull( s->charBuf )) {
+HXLINE(  29)				s->flush();
             			}
+HXDLIN(  29)			if (::hx::IsNull( s->b )) {
+HXLINE(  29)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_4,1);
+            			}
+            			else {
+HXLINE(  29)				s->b->push(HX_("\n```\n",b4,74,bf,01));
+            			}
+            		}
+HXLINE(  32)		bool _hx_tmp;
+HXDLIN(  32)		if ((xhtml->name != HX_("b",62,00,00,00))) {
+HXLINE(  32)			_hx_tmp = (xhtml->name == HX_("strong",57,b6,34,11));
+            		}
+            		else {
+HXLINE(  32)			_hx_tmp = true;
             		}
-HXLINE(  30)		 ::StringBuf s =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE(  32)		if ((xhtml->name == HX_("pre",23,60,55,00))) {
+HXDLIN(  32)		if (_hx_tmp) {
 HXLINE(  33)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  33)				s->flush();
             			}
 HXDLIN(  33)			if (::hx::IsNull( s->b )) {
-HXLINE(  33)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_4,1);
+HXLINE(  33)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_5,1);
             			}
             			else {
-HXLINE(  33)				s->b->push(HX_("\n```\n",b4,74,bf,01));
+HXLINE(  33)				s->b->push(HX_("*",2a,00,00,00));
             			}
             		}
-HXLINE(  36)		bool _hx_tmp;
-HXDLIN(  36)		if ((xhtml->name != HX_("b",62,00,00,00))) {
-HXLINE(  36)			_hx_tmp = (xhtml->name == HX_("strong",57,b6,34,11));
+HXLINE(  36)		bool _hx_tmp1;
+HXDLIN(  36)		if ((xhtml->name != HX_("i",69,00,00,00))) {
+HXLINE(  36)			_hx_tmp1 = (xhtml->name == HX_("em",68,58,00,00));
             		}
             		else {
-HXLINE(  36)			_hx_tmp = true;
+HXLINE(  36)			_hx_tmp1 = true;
             		}
-HXDLIN(  36)		if (_hx_tmp) {
+HXDLIN(  36)		if (_hx_tmp1) {
 HXLINE(  37)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  37)				s->flush();
             			}
 HXDLIN(  37)			if (::hx::IsNull( s->b )) {
-HXLINE(  37)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_5,1);
+HXLINE(  37)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_6,1);
             			}
             			else {
-HXLINE(  37)				s->b->push(HX_("*",2a,00,00,00));
+HXLINE(  37)				s->b->push(HX_("_",5f,00,00,00));
             			}
             		}
-HXLINE(  40)		bool _hx_tmp1;
-HXDLIN(  40)		if ((xhtml->name != HX_("i",69,00,00,00))) {
-HXLINE(  40)			_hx_tmp1 = (xhtml->name == HX_("em",68,58,00,00));
+HXLINE(  40)		bool _hx_tmp2;
+HXDLIN(  40)		if ((xhtml->name != HX_("s",73,00,00,00))) {
+HXLINE(  40)			_hx_tmp2 = (xhtml->name == HX_("del",cb,39,4c,00));
             		}
             		else {
-HXLINE(  40)			_hx_tmp1 = true;
+HXLINE(  40)			_hx_tmp2 = true;
             		}
-HXDLIN(  40)		if (_hx_tmp1) {
+HXDLIN(  40)		if (_hx_tmp2) {
 HXLINE(  41)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  41)				s->flush();
             			}
 HXDLIN(  41)			if (::hx::IsNull( s->b )) {
-HXLINE(  41)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_6,1);
+HXLINE(  41)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_7,1);
             			}
             			else {
-HXLINE(  41)				s->b->push(HX_("_",5f,00,00,00));
+HXLINE(  41)				s->b->push(HX_("~",7e,00,00,00));
             			}
             		}
-HXLINE(  44)		bool _hx_tmp2;
-HXDLIN(  44)		if ((xhtml->name != HX_("s",73,00,00,00))) {
-HXLINE(  44)			_hx_tmp2 = (xhtml->name == HX_("del",cb,39,4c,00));
-            		}
-            		else {
-HXLINE(  44)			_hx_tmp2 = true;
-            		}
-HXDLIN(  44)		if (_hx_tmp2) {
+HXLINE(  44)		if ((xhtml->name == HX_("tt",80,65,00,00))) {
 HXLINE(  45)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  45)				s->flush();
             			}
 HXDLIN(  45)			if (::hx::IsNull( s->b )) {
-HXLINE(  45)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_7,1);
-            			}
-            			else {
-HXLINE(  45)				s->b->push(HX_("~",7e,00,00,00));
-            			}
-            		}
-HXLINE(  48)		if ((xhtml->name == HX_("tt",80,65,00,00))) {
-HXLINE(  49)			if (::hx::IsNotNull( s->charBuf )) {
-HXLINE(  49)				s->flush();
-            			}
-HXDLIN(  49)			if (::hx::IsNull( s->b )) {
-HXLINE(  49)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_8,1);
+HXLINE(  45)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_8,1);
             			}
             			else {
-HXLINE(  49)				s->b->push(HX_("`",60,00,00,00));
-            			}
-            		}
-HXLINE(  52)		{
-HXLINE(  52)			int _g = 0;
-HXDLIN(  52)			::Array< ::Dynamic> _g1 = xhtml->children;
-HXDLIN(  52)			while((_g < _g1->length)){
-HXLINE(  52)				 ::snikket::Node child = _g1->__get(_g).StaticCast<  ::snikket::Node >();
-HXDLIN(  52)				_g = (_g + 1);
-HXLINE(  53)				{
-HXLINE(  53)					::String x = ::snikket::XEP0393_obj::renderNode(child);
-HXDLIN(  53)					if (::hx::IsNotNull( s->charBuf )) {
-HXLINE(  53)						s->flush();
+HXLINE(  45)				s->b->push(HX_("`",60,00,00,00));
+            			}
+            		}
+HXLINE(  48)		{
+HXLINE(  48)			int _g = 0;
+HXDLIN(  48)			::Array< ::Dynamic> _g1 = xhtml->children;
+HXDLIN(  48)			while((_g < _g1->length)){
+HXLINE(  48)				 ::snikket::Node child = _g1->__get(_g).StaticCast<  ::snikket::Node >();
+HXDLIN(  48)				_g = (_g + 1);
+HXLINE(  49)				{
+HXLINE(  49)					::String x = ::snikket::XEP0393_obj::renderNode(child);
+HXDLIN(  49)					if (::hx::IsNotNull( s->charBuf )) {
+HXLINE(  49)						s->flush();
             					}
-HXDLIN(  53)					if (::hx::IsNull( s->b )) {
-HXLINE(  53)						s->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
+HXDLIN(  49)					if (::hx::IsNull( s->b )) {
+HXLINE(  49)						s->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
             					}
             					else {
-HXLINE(  53)						::Array< ::String > s1 = s->b;
-HXDLIN(  53)						s1->push(::Std_obj::string(x));
+HXLINE(  49)						::Array< ::String > s1 = s->b;
+HXDLIN(  49)						s1->push(::Std_obj::string(x));
             					}
             				}
             			}
             		}
-HXLINE(  56)		bool _hx_tmp3;
-HXDLIN(  56)		if ((xhtml->name != HX_("b",62,00,00,00))) {
-HXLINE(  56)			_hx_tmp3 = (xhtml->name == HX_("strong",57,b6,34,11));
+HXLINE(  52)		bool _hx_tmp3;
+HXDLIN(  52)		if ((xhtml->name != HX_("b",62,00,00,00))) {
+HXLINE(  52)			_hx_tmp3 = (xhtml->name == HX_("strong",57,b6,34,11));
             		}
             		else {
-HXLINE(  56)			_hx_tmp3 = true;
+HXLINE(  52)			_hx_tmp3 = true;
             		}
-HXDLIN(  56)		if (_hx_tmp3) {
+HXDLIN(  52)		if (_hx_tmp3) {
+HXLINE(  53)			if (::hx::IsNotNull( s->charBuf )) {
+HXLINE(  53)				s->flush();
+            			}
+HXDLIN(  53)			if (::hx::IsNull( s->b )) {
+HXLINE(  53)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_9,1);
+            			}
+            			else {
+HXLINE(  53)				s->b->push(HX_("*",2a,00,00,00));
+            			}
+            		}
+HXLINE(  56)		bool _hx_tmp4;
+HXDLIN(  56)		if ((xhtml->name != HX_("i",69,00,00,00))) {
+HXLINE(  56)			_hx_tmp4 = (xhtml->name == HX_("em",68,58,00,00));
+            		}
+            		else {
+HXLINE(  56)			_hx_tmp4 = true;
+            		}
+HXDLIN(  56)		if (_hx_tmp4) {
 HXLINE(  57)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  57)				s->flush();
             			}
 HXDLIN(  57)			if (::hx::IsNull( s->b )) {
-HXLINE(  57)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_9,1);
+HXLINE(  57)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_10,1);
             			}
             			else {
-HXLINE(  57)				s->b->push(HX_("*",2a,00,00,00));
+HXLINE(  57)				s->b->push(HX_("_",5f,00,00,00));
             			}
             		}
-HXLINE(  60)		bool _hx_tmp4;
-HXDLIN(  60)		if ((xhtml->name != HX_("i",69,00,00,00))) {
-HXLINE(  60)			_hx_tmp4 = (xhtml->name == HX_("em",68,58,00,00));
+HXLINE(  60)		bool _hx_tmp5;
+HXDLIN(  60)		if ((xhtml->name != HX_("s",73,00,00,00))) {
+HXLINE(  60)			_hx_tmp5 = (xhtml->name == HX_("del",cb,39,4c,00));
             		}
             		else {
-HXLINE(  60)			_hx_tmp4 = true;
+HXLINE(  60)			_hx_tmp5 = true;
             		}
-HXDLIN(  60)		if (_hx_tmp4) {
+HXDLIN(  60)		if (_hx_tmp5) {
 HXLINE(  61)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  61)				s->flush();
             			}
 HXDLIN(  61)			if (::hx::IsNull( s->b )) {
-HXLINE(  61)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_10,1);
+HXLINE(  61)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_11,1);
             			}
             			else {
-HXLINE(  61)				s->b->push(HX_("_",5f,00,00,00));
+HXLINE(  61)				s->b->push(HX_("~",7e,00,00,00));
             			}
             		}
-HXLINE(  64)		bool _hx_tmp5;
-HXDLIN(  64)		if ((xhtml->name != HX_("s",73,00,00,00))) {
-HXLINE(  64)			_hx_tmp5 = (xhtml->name == HX_("del",cb,39,4c,00));
-            		}
-            		else {
-HXLINE(  64)			_hx_tmp5 = true;
-            		}
-HXDLIN(  64)		if (_hx_tmp5) {
+HXLINE(  64)		if ((xhtml->name == HX_("tt",80,65,00,00))) {
 HXLINE(  65)			if (::hx::IsNotNull( s->charBuf )) {
 HXLINE(  65)				s->flush();
             			}
 HXDLIN(  65)			if (::hx::IsNull( s->b )) {
-HXLINE(  65)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_11,1);
-            			}
-            			else {
-HXLINE(  65)				s->b->push(HX_("~",7e,00,00,00));
-            			}
-            		}
-HXLINE(  68)		if ((xhtml->name == HX_("tt",80,65,00,00))) {
-HXLINE(  69)			if (::hx::IsNotNull( s->charBuf )) {
-HXLINE(  69)				s->flush();
-            			}
-HXDLIN(  69)			if (::hx::IsNull( s->b )) {
-HXLINE(  69)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_12,1);
+HXLINE(  65)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_12,1);
             			}
             			else {
-HXLINE(  69)				s->b->push(HX_("`",60,00,00,00));
+HXLINE(  65)				s->b->push(HX_("`",60,00,00,00));
             			}
             		}
-HXLINE(  72)		bool _hx_tmp6;
-HXDLIN(  72)		bool _hx_tmp7;
-HXDLIN(  72)		bool _hx_tmp8;
-HXDLIN(  72)		if ((xhtml->name != HX_("blockquote",cf,56,28,a2))) {
-HXLINE(  72)			_hx_tmp8 = (xhtml->name == HX_("p",70,00,00,00));
+HXLINE(  68)		bool _hx_tmp6;
+HXDLIN(  68)		bool _hx_tmp7;
+HXDLIN(  68)		bool _hx_tmp8;
+HXDLIN(  68)		if ((xhtml->name != HX_("blockquote",cf,56,28,a2))) {
+HXLINE(  68)			_hx_tmp8 = (xhtml->name == HX_("p",70,00,00,00));
             		}
             		else {
-HXLINE(  72)			_hx_tmp8 = true;
+HXLINE(  68)			_hx_tmp8 = true;
             		}
-HXDLIN(  72)		if (!(_hx_tmp8)) {
-HXLINE(  72)			_hx_tmp7 = (xhtml->name == HX_("div",51,3d,4c,00));
+HXDLIN(  68)		if (!(_hx_tmp8)) {
+HXLINE(  68)			_hx_tmp7 = (xhtml->name == HX_("div",51,3d,4c,00));
             		}
             		else {
-HXLINE(  72)			_hx_tmp7 = true;
+HXLINE(  68)			_hx_tmp7 = true;
             		}
-HXDLIN(  72)		if (!(_hx_tmp7)) {
-HXLINE(  72)			_hx_tmp6 = (xhtml->name == HX_("pre",23,60,55,00));
+HXDLIN(  68)		if (!(_hx_tmp7)) {
+HXLINE(  68)			_hx_tmp6 = (xhtml->name == HX_("pre",23,60,55,00));
             		}
             		else {
-HXLINE(  72)			_hx_tmp6 = true;
+HXLINE(  68)			_hx_tmp6 = true;
             		}
-HXDLIN(  72)		if (_hx_tmp6) {
-HXLINE(  73)			if (::hx::IsNotNull( s->charBuf )) {
-HXLINE(  73)				s->flush();
+HXDLIN(  68)		if (_hx_tmp6) {
+HXLINE(  69)			if (::hx::IsNotNull( s->charBuf )) {
+HXLINE(  69)				s->flush();
             			}
-HXDLIN(  73)			if (::hx::IsNull( s->b )) {
-HXLINE(  73)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_13,1);
+HXDLIN(  69)			if (::hx::IsNull( s->b )) {
+HXLINE(  69)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_13,1);
             			}
             			else {
-HXLINE(  73)				s->b->push(HX_("\n",0a,00,00,00));
+HXLINE(  69)				s->b->push(HX_("\n",0a,00,00,00));
             			}
             		}
-HXLINE(  76)		if ((xhtml->name == HX_("pre",23,60,55,00))) {
-HXLINE(  77)			if (::hx::IsNotNull( s->charBuf )) {
-HXLINE(  77)				s->flush();
+HXLINE(  72)		if ((xhtml->name == HX_("pre",23,60,55,00))) {
+HXLINE(  73)			if (::hx::IsNotNull( s->charBuf )) {
+HXLINE(  73)				s->flush();
             			}
-HXDLIN(  77)			if (::hx::IsNull( s->b )) {
-HXLINE(  77)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_14,1);
+HXDLIN(  73)			if (::hx::IsNull( s->b )) {
+HXLINE(  73)				s->b = ::Array_obj< ::String >::fromData( _hx_array_data_533559ef_14,1);
             			}
             			else {
-HXLINE(  77)				s->b->push(HX_("```\n",aa,a7,bd,3f));
+HXLINE(  73)				s->b->push(HX_("```\n",aa,a7,bd,3f));
             			}
             		}
-HXLINE(  80)		if ((xhtml->name == HX_("blockquote",cf,56,28,a2))) {
-HXLINE(  81)			 ::EReg _hx_tmp9 =  ::EReg_obj::__alloc( HX_CTX ,HX_("^",5e,00,00,00),HX_("gm",26,5a,00,00));
-HXDLIN(  81)			return _hx_tmp9->replace(s->toString(),HX_("> ",22,36,00,00));
+HXLINE(  76)		if ((xhtml->name == HX_("blockquote",cf,56,28,a2))) {
+HXLINE(  77)			 ::EReg _hx_tmp9 =  ::EReg_obj::__alloc( HX_CTX ,HX_("^",5e,00,00,00),HX_("gm",26,5a,00,00));
+HXDLIN(  77)			return _hx_tmp9->replace(s->toString(),HX_("> ",22,36,00,00));
             		}
-HXLINE(  84)		return s->toString();
+HXLINE(  80)		return s->toString();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0393_obj,render,return )
 
 ::String XEP0393_obj::renderNode( ::snikket::Node xhtml){
-            	HX_STACKFRAME(&_hx_pos_100c160c0c16a433_88_renderNode)
-HXDLIN(  88)		switch((int)(xhtml->_hx_getIndex())){
+            	HX_STACKFRAME(&_hx_pos_100c160c0c16a433_84_renderNode)
+HXDLIN(  84)		switch((int)(xhtml->_hx_getIndex())){
             			case (int)0: {
-HXLINE(  89)				 ::snikket::Stanza c = xhtml->_hx_getObject(0).StaticCast<  ::snikket::Stanza >();
-HXDLIN(  89)				return ::snikket::XEP0393_obj::render(c);
+HXLINE(  85)				 ::snikket::Stanza c = xhtml->_hx_getObject(0).StaticCast<  ::snikket::Stanza >();
+HXDLIN(  85)				return ::snikket::XEP0393_obj::render(c);
             			}
             			break;
             			case (int)1: {
-HXLINE(  90)				 ::snikket::TextNode c1 = xhtml->_hx_getObject(0).StaticCast<  ::snikket::TextNode >();
-HXDLIN(  90)				return c1->content;
+HXLINE(  86)				 ::snikket::TextNode c1 = xhtml->_hx_getObject(0).StaticCast<  ::snikket::TextNode >();
+HXDLIN(  86)				return c1->content;
             			}
             			break;
             		}
-HXLINE(  88)		return null();
+HXLINE(  84)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0393_obj,renderNode,return )
 
  ::Dynamic XEP0393_obj::parseSpans(::String styled){
-            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_94_parseSpans)
-HXLINE(  95)		::Array< ::Dynamic> spans = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(  96)		int start = 0;
-HXLINE(  97)		 ::Dynamic nextLink = null();
-HXLINE(  98)		while((start < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))){
-HXLINE(  99)			if (::StringTools_obj::isSpace(styled,(start + 1))) {
-HXLINE( 101)				spans->push(::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,::_UnicodeString::UnicodeString_Impl__obj::substr(styled,start,2))));
-HXLINE( 102)				start = (start + 2);
+            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_90_parseSpans)
+HXLINE(  91)		::Array< ::Dynamic> spans = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(  92)		int start = 0;
+HXLINE(  93)		 ::Dynamic nextLink = null();
+HXLINE(  94)		while((start < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))){
+HXLINE(  95)			if (::StringTools_obj::isSpace(styled,(start + 1))) {
+HXLINE(  97)				spans->push(::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,::_UnicodeString::UnicodeString_Impl__obj::substr(styled,start,2))));
+HXLINE(  98)				start = (start + 2);
             			}
             			else {
-HXLINE( 103)				bool _hx_tmp;
-HXDLIN( 103)				if ((start != 0)) {
-HXLINE( 103)					_hx_tmp = !(::StringTools_obj::isSpace(styled,(start - 1)));
+HXLINE(  99)				bool _hx_tmp;
+HXDLIN(  99)				if ((start != 0)) {
+HXLINE(  99)					_hx_tmp = !(::StringTools_obj::isSpace(styled,(start - 1)));
             				}
             				else {
-HXLINE( 103)					_hx_tmp = false;
+HXLINE(  99)					_hx_tmp = false;
             				}
-HXDLIN( 103)				if (_hx_tmp) {
-HXLINE( 105)					spans->push(::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start))));
-HXLINE( 106)					start = (start + 1);
+HXDLIN(  99)				if (_hx_tmp) {
+HXLINE( 101)					spans->push(::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start))));
+HXLINE( 102)					start = (start + 1);
             				}
             				else {
-HXLINE( 107)					if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("*",2a,00,00,00))) {
-HXLINE( 108)						 ::Dynamic parsed = ::snikket::XEP0393_obj::parseSpan(HX_("strong",57,b6,34,11),HX_("*",2a,00,00,00),styled,start);
-HXLINE( 109)						spans->push( ::Dynamic(parsed->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
-HXLINE( 110)						start = ( (int)(parsed->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
+HXLINE( 103)					if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("*",2a,00,00,00))) {
+HXLINE( 104)						 ::Dynamic parsed = ::snikket::XEP0393_obj::parseSpan(HX_("strong",57,b6,34,11),HX_("*",2a,00,00,00),styled,start);
+HXLINE( 105)						spans->push( ::Dynamic(parsed->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
+HXLINE( 106)						start = ( (int)(parsed->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
             					}
             					else {
-HXLINE( 111)						if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("_",5f,00,00,00))) {
-HXLINE( 112)							 ::Dynamic parsed1 = ::snikket::XEP0393_obj::parseSpan(HX_("em",68,58,00,00),HX_("_",5f,00,00,00),styled,start);
-HXLINE( 113)							spans->push( ::Dynamic(parsed1->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
-HXLINE( 114)							start = ( (int)(parsed1->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
+HXLINE( 107)						if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("_",5f,00,00,00))) {
+HXLINE( 108)							 ::Dynamic parsed1 = ::snikket::XEP0393_obj::parseSpan(HX_("em",68,58,00,00),HX_("_",5f,00,00,00),styled,start);
+HXLINE( 109)							spans->push( ::Dynamic(parsed1->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
+HXLINE( 110)							start = ( (int)(parsed1->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
             						}
             						else {
-HXLINE( 115)							if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("~",7e,00,00,00))) {
-HXLINE( 116)								 ::Dynamic parsed2 = ::snikket::XEP0393_obj::parseSpan(HX_("s",73,00,00,00),HX_("~",7e,00,00,00),styled,start);
-HXLINE( 117)								spans->push( ::Dynamic(parsed2->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
-HXLINE( 118)								start = ( (int)(parsed2->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
+HXLINE( 111)							if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("~",7e,00,00,00))) {
+HXLINE( 112)								 ::Dynamic parsed2 = ::snikket::XEP0393_obj::parseSpan(HX_("s",73,00,00,00),HX_("~",7e,00,00,00),styled,start);
+HXLINE( 113)								spans->push( ::Dynamic(parsed2->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
+HXLINE( 114)								start = ( (int)(parsed2->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
             							}
             							else {
-HXLINE( 119)								if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("`",60,00,00,00))) {
-HXLINE( 121)									 ::Dynamic parsed3 = ::snikket::XEP0393_obj::parseSpan(HX_("tt",80,65,00,00),HX_("`",60,00,00,00),styled,start);
-HXLINE( 122)									spans->push( ::Dynamic(parsed3->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
-HXLINE( 123)									start = ( (int)(parsed3->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
+HXLINE( 115)								if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start) == HX_("`",60,00,00,00))) {
+HXLINE( 117)									 ::Dynamic parsed3 = ::snikket::XEP0393_obj::parseSpan(HX_("tt",80,65,00,00),HX_("`",60,00,00,00),styled,start);
+HXLINE( 118)									spans->push( ::Dynamic(parsed3->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
+HXLINE( 119)									start = ( (int)(parsed3->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
             								}
             								else {
-HXLINE( 125)									bool _hx_tmp1;
-HXDLIN( 125)									if (::hx::IsNotNull( nextLink )) {
-HXLINE( 125)										_hx_tmp1 = ::hx::IsGreater( start,nextLink->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic) );
+HXLINE( 121)									bool _hx_tmp1;
+HXDLIN( 121)									if (::hx::IsNotNull( nextLink )) {
+HXLINE( 121)										_hx_tmp1 = ::hx::IsGreater( start,nextLink->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic) );
             									}
             									else {
-HXLINE( 125)										_hx_tmp1 = true;
+HXLINE( 121)										_hx_tmp1 = true;
             									}
-HXDLIN( 125)									if (_hx_tmp1) {
-HXLINE( 126)										nextLink = ::snikket::Autolink_obj::one(styled,start);
+HXDLIN( 121)									if (_hx_tmp1) {
+HXLINE( 122)										nextLink = ::snikket::Autolink_obj::one(styled,start);
             									}
-HXLINE( 128)									bool _hx_tmp2;
-HXDLIN( 128)									bool _hx_tmp3;
-HXDLIN( 128)									if (::hx::IsNotNull( nextLink )) {
-HXLINE( 128)										_hx_tmp3 = ::hx::IsEq( nextLink->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic),start );
+HXLINE( 124)									bool _hx_tmp2;
+HXDLIN( 124)									bool _hx_tmp3;
+HXDLIN( 124)									if (::hx::IsNotNull( nextLink )) {
+HXLINE( 124)										_hx_tmp3 = ::hx::IsEq( nextLink->__Field(HX_("start",62,74,0b,84),::hx::paccDynamic),start );
             									}
             									else {
-HXLINE( 128)										_hx_tmp3 = false;
+HXLINE( 124)										_hx_tmp3 = false;
             									}
-HXDLIN( 128)									if (_hx_tmp3) {
-HXLINE( 128)										_hx_tmp2 = ::hx::IsNotNull( nextLink->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic) );
+HXDLIN( 124)									if (_hx_tmp3) {
+HXLINE( 124)										_hx_tmp2 = ::hx::IsNotNull( nextLink->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic) );
             									}
             									else {
-HXLINE( 128)										_hx_tmp2 = false;
+HXLINE( 124)										_hx_tmp2 = false;
             									}
-HXDLIN( 128)									if (_hx_tmp2) {
-HXLINE( 129)										spans->push( ::Dynamic(nextLink->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
-HXLINE( 130)										start = ( (int)(nextLink->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
+HXDLIN( 124)									if (_hx_tmp2) {
+HXLINE( 125)										spans->push( ::Dynamic(nextLink->__Field(HX_("span",ca,da,58,4c),::hx::paccDynamic)));
+HXLINE( 126)										start = ( (int)(nextLink->__Field(HX_("end",db,03,4d,00),::hx::paccDynamic)) );
             									}
             									else {
-HXLINE( 132)										spans->push(::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start))));
-HXLINE( 133)										start = (start + 1);
+HXLINE( 128)										spans->push(::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,start))));
+HXLINE( 129)										start = (start + 1);
             									}
             								}
             							}
@@ -472,167 +448,167 @@ HXLINE( 133)										start = (start + 1);
             				}
             			}
             		}
-HXLINE( 137)		return spans;
+HXLINE( 133)		return spans;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0393_obj,parseSpans,return )
 
  ::Dynamic XEP0393_obj::parseSpan(::String tagName,::String marker,::String styled,int start){
-            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_140_parseSpan)
-HXLINE( 141)		int end = (start + 1);
-HXLINE( 142)		while(true){
-HXLINE( 142)			bool _hx_tmp;
-HXDLIN( 142)			if ((end < styled.length)) {
-HXLINE( 142)				_hx_tmp = (styled.charAt(end) != marker);
+            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_136_parseSpan)
+HXLINE( 137)		int end = (start + 1);
+HXLINE( 138)		while(true){
+HXLINE( 138)			bool _hx_tmp;
+HXDLIN( 138)			if ((end < styled.length)) {
+HXLINE( 138)				_hx_tmp = (styled.charAt(end) != marker);
             			}
             			else {
-HXLINE( 142)				_hx_tmp = false;
+HXLINE( 138)				_hx_tmp = false;
             			}
-HXDLIN( 142)			if (!(_hx_tmp)) {
-HXLINE( 142)				goto _hx_goto_18;
+HXDLIN( 138)			if (!(_hx_tmp)) {
+HXLINE( 138)				goto _hx_goto_18;
             			}
-HXLINE( 143)			if (::StringTools_obj::isSpace(styled,end)) {
-HXLINE( 143)				end = (end + 1);
+HXLINE( 139)			if (::StringTools_obj::isSpace(styled,end)) {
+HXLINE( 139)				end = (end + 1);
             			}
-HXLINE( 144)			end = (end + 1);
+HXLINE( 140)			end = (end + 1);
             		}
             		_hx_goto_18:;
-HXLINE( 146)		if ((end == (start + 1))) {
-HXLINE( 148)			return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 142)		if ((end == (start + 1))) {
+HXLINE( 144)			return  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("end",db,03,4d,00),(end + 1))
             				->setFixed(1,HX_("span",ca,da,58,4c),::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,styled.substr(start,2)))));
             		}
             		else {
-HXLINE( 149)			if ((styled.charAt(end) != marker)) {
-HXLINE( 151)				return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 145)			if ((styled.charAt(end) != marker)) {
+HXLINE( 147)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("end",db,03,4d,00),end)
             					->setFixed(1,HX_("span",ca,da,58,4c),::snikket::Node_obj::CData( ::snikket::TextNode_obj::__alloc( HX_CTX ,styled.substr(start,(end - start))))));
             			}
             			else {
-HXLINE( 152)				if ((marker == HX_("`",60,00,00,00))) {
-HXLINE( 153)					 ::snikket::Stanza _hx_tmp1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,tagName,null());
-HXDLIN( 153)					return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 148)				if ((marker == HX_("`",60,00,00,00))) {
+HXLINE( 149)					 ::snikket::Stanza _hx_tmp1 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,tagName,null());
+HXDLIN( 149)					return  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("end",db,03,4d,00),(end + 1))
             						->setFixed(1,HX_("span",ca,da,58,4c),::snikket::Node_obj::Element(_hx_tmp1->text(styled.substr((start + 1),((end - start) - 1))))));
             				}
             				else {
-HXLINE( 155)					 ::snikket::Stanza _hx_tmp2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,tagName,null());
-HXDLIN( 155)					return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 151)					 ::snikket::Stanza _hx_tmp2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,tagName,null());
+HXDLIN( 151)					return  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("end",db,03,4d,00),(end + 1))
             						->setFixed(1,HX_("span",ca,da,58,4c),::snikket::Node_obj::Element(_hx_tmp2->addChildNodes(::snikket::XEP0393_obj::parseSpans(styled.substr((start + 1),((end - start) - 1)))))));
             				}
             			}
             		}
-HXLINE( 146)		return null();
+HXLINE( 142)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC4(XEP0393_obj,parseSpan,return )
 
  ::Dynamic XEP0393_obj::parseBlock(::String styled){
-            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_160_parseBlock)
-HXDLIN( 160)		if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,0) == HX_(">",3e,00,00,00))) {
-HXLINE( 161)			return ::snikket::XEP0393_obj::parseQuote(styled);
+            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_156_parseBlock)
+HXDLIN( 156)		if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,0) == HX_(">",3e,00,00,00))) {
+HXLINE( 157)			return ::snikket::XEP0393_obj::parseQuote(styled);
             		}
             		else {
-HXLINE( 162)			if ((::_UnicodeString::UnicodeString_Impl__obj::substr(styled,0,3) == HX_("```",60,2c,49,00))) {
-HXLINE( 163)				return ::snikket::XEP0393_obj::parsePreformatted(styled);
+HXLINE( 158)			if ((::_UnicodeString::UnicodeString_Impl__obj::substr(styled,0,3) == HX_("```",60,2c,49,00))) {
+HXLINE( 159)				return ::snikket::XEP0393_obj::parsePreformatted(styled);
             			}
             			else {
-HXLINE( 165)				int end = 0;
-HXLINE( 166)				while(true){
-HXLINE( 166)					bool _hx_tmp;
-HXDLIN( 166)					if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
-HXLINE( 166)						_hx_tmp = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00));
+HXLINE( 161)				int end = 0;
+HXLINE( 162)				while(true){
+HXLINE( 162)					bool _hx_tmp;
+HXDLIN( 162)					if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
+HXLINE( 162)						_hx_tmp = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00));
             					}
             					else {
-HXLINE( 166)						_hx_tmp = false;
+HXLINE( 162)						_hx_tmp = false;
             					}
-HXDLIN( 166)					if (!(_hx_tmp)) {
-HXLINE( 166)						goto _hx_goto_20;
+HXDLIN( 162)					if (!(_hx_tmp)) {
+HXLINE( 162)						goto _hx_goto_20;
             					}
-HXDLIN( 166)					end = (end + 1);
+HXDLIN( 162)					end = (end + 1);
             				}
             				_hx_goto_20:;
-HXLINE( 167)				bool _hx_tmp1;
-HXDLIN( 167)				if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
-HXLINE( 167)					_hx_tmp1 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00));
+HXLINE( 163)				bool _hx_tmp1;
+HXDLIN( 163)				if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
+HXLINE( 163)					_hx_tmp1 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00));
             				}
             				else {
-HXLINE( 167)					_hx_tmp1 = false;
+HXLINE( 163)					_hx_tmp1 = false;
             				}
-HXDLIN( 167)				if (_hx_tmp1) {
-HXLINE( 167)					end = (end + 1);
+HXDLIN( 163)				if (_hx_tmp1) {
+HXLINE( 163)					end = (end + 1);
             				}
-HXLINE( 168)				 ::snikket::Stanza _hx_tmp2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("div",51,3d,4c,00),null());
-HXDLIN( 168)				 ::snikket::Stanza _hx_tmp3 = _hx_tmp2->addChildNodes(::snikket::XEP0393_obj::parseSpans(::_UnicodeString::UnicodeString_Impl__obj::substr(styled,0,end)));
-HXDLIN( 168)				return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 164)				 ::snikket::Stanza _hx_tmp2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("div",51,3d,4c,00),null());
+HXDLIN( 164)				 ::snikket::Stanza _hx_tmp3 = _hx_tmp2->addChildNodes(::snikket::XEP0393_obj::parseSpans(::_UnicodeString::UnicodeString_Impl__obj::substr(styled,0,end)));
+HXDLIN( 164)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("block",4d,75,fc,b4),_hx_tmp3)
             					->setFixed(1,HX_("rest",14,5b,a7,4b),::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,null())));
             			}
             		}
-HXLINE( 160)		return null();
+HXLINE( 156)		return null();
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0393_obj,parseBlock,return )
 
  ::Dynamic XEP0393_obj::parseQuote(::String styled){
-            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_172_parseQuote)
-HXLINE( 173)		::Array< ::String > lines = ::Array_obj< ::String >::__new(0);
-HXLINE( 174)		::String line = HX_("",00,00,00,00);
-HXLINE( 175)		int end = 1;
-HXLINE( 176)		int spaceAfter = 0;
-HXLINE( 177)		while((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))){
-HXLINE( 178)			bool _hx_tmp;
-HXDLIN( 178)			if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00))) {
-HXLINE( 178)				_hx_tmp = ::StringTools_obj::isSpace(styled,end);
+            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_168_parseQuote)
+HXLINE( 169)		::Array< ::String > lines = ::Array_obj< ::String >::__new(0);
+HXLINE( 170)		::String line = HX_("",00,00,00,00);
+HXLINE( 171)		int end = 1;
+HXLINE( 172)		int spaceAfter = 0;
+HXLINE( 173)		while((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))){
+HXLINE( 174)			bool _hx_tmp;
+HXDLIN( 174)			if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00))) {
+HXLINE( 174)				_hx_tmp = ::StringTools_obj::isSpace(styled,end);
             			}
             			else {
-HXLINE( 178)				_hx_tmp = false;
+HXLINE( 174)				_hx_tmp = false;
             			}
-HXDLIN( 178)			if (_hx_tmp) {
-HXLINE( 178)				end = (end + 1);
+HXDLIN( 174)			if (_hx_tmp) {
+HXLINE( 174)				end = (end + 1);
             			}
-HXLINE( 179)			while(true){
-HXLINE( 179)				bool _hx_tmp1;
-HXDLIN( 179)				if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
-HXLINE( 179)					_hx_tmp1 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00));
+HXLINE( 175)			while(true){
+HXLINE( 175)				bool _hx_tmp1;
+HXDLIN( 175)				if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
+HXLINE( 175)					_hx_tmp1 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00));
             				}
             				else {
-HXLINE( 179)					_hx_tmp1 = false;
+HXLINE( 175)					_hx_tmp1 = false;
             				}
-HXDLIN( 179)				if (!(_hx_tmp1)) {
-HXLINE( 179)					goto _hx_goto_23;
+HXDLIN( 175)				if (!(_hx_tmp1)) {
+HXLINE( 175)					goto _hx_goto_23;
             				}
-HXLINE( 180)				line = (line + ::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end));
-HXLINE( 181)				end = (end + 1);
+HXLINE( 176)				line = (line + ::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end));
+HXLINE( 177)				end = (end + 1);
             			}
             			_hx_goto_23:;
-HXLINE( 183)			bool _hx_tmp2;
-HXDLIN( 183)			if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
-HXLINE( 183)				_hx_tmp2 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00));
+HXLINE( 179)			bool _hx_tmp2;
+HXDLIN( 179)			if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
+HXLINE( 179)				_hx_tmp2 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00));
             			}
             			else {
-HXLINE( 183)				_hx_tmp2 = false;
+HXLINE( 179)				_hx_tmp2 = false;
             			}
-HXDLIN( 183)			if (_hx_tmp2) {
-HXLINE( 184)				end = (end + 1);
+HXDLIN( 179)			if (_hx_tmp2) {
+HXLINE( 180)				end = (end + 1);
             			}
-HXLINE( 186)			lines->push((line + HX_("\n",0a,00,00,00)));
-HXLINE( 187)			line = HX_("",00,00,00,00);
-HXLINE( 188)			if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_(">",3e,00,00,00))) {
-HXLINE( 189)				end = (end + 1);
+HXLINE( 182)			lines->push((line + HX_("\n",0a,00,00,00)));
+HXLINE( 183)			line = HX_("",00,00,00,00);
+HXLINE( 184)			if ((::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_(">",3e,00,00,00))) {
+HXLINE( 185)				end = (end + 1);
             			}
             			else {
-HXLINE( 191)				goto _hx_goto_22;
+HXLINE( 187)				goto _hx_goto_22;
             			}
             		}
             		_hx_goto_22:;
-HXLINE( 195)		 ::snikket::Stanza _hx_tmp3 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("blockquote",cf,56,28,a2),null());
-HXDLIN( 195)		 ::snikket::Stanza _hx_tmp4 = _hx_tmp3->addChildren(::snikket::XEP0393_obj::parse(lines->join(HX_("",00,00,00,00))));
-HXDLIN( 195)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 191)		 ::snikket::Stanza _hx_tmp3 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("blockquote",cf,56,28,a2),null());
+HXDLIN( 191)		 ::snikket::Stanza _hx_tmp4 = _hx_tmp3->addChildren(::snikket::XEP0393_obj::parse(lines->join(HX_("",00,00,00,00))));
+HXDLIN( 191)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("block",4d,75,fc,b4),_hx_tmp4)
             			->setFixed(1,HX_("rest",14,5b,a7,4b),::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,null())));
             	}
@@ -641,58 +617,58 @@ HXDLIN( 195)		return  ::Dynamic(::hx::Anon_obj::Create(2)
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XEP0393_obj,parseQuote,return )
 
  ::Dynamic XEP0393_obj::parsePreformatted(::String styled){
-            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_199_parsePreformatted)
-HXLINE( 200)		::Array< ::String > lines = ::Array_obj< ::String >::__new(0);
-HXLINE( 201)		::String line = null();
-HXLINE( 202)		int end = 0;
-HXLINE( 203)		while((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))){
-HXLINE( 204)			while(true){
-HXLINE( 204)				bool _hx_tmp;
-HXDLIN( 204)				if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
-HXLINE( 204)					_hx_tmp = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_100c160c0c16a433_195_parsePreformatted)
+HXLINE( 196)		::Array< ::String > lines = ::Array_obj< ::String >::__new(0);
+HXLINE( 197)		::String line = null();
+HXLINE( 198)		int end = 0;
+HXLINE( 199)		while((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))){
+HXLINE( 200)			while(true){
+HXLINE( 200)				bool _hx_tmp;
+HXDLIN( 200)				if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
+HXLINE( 200)					_hx_tmp = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) != HX_("\n",0a,00,00,00));
             				}
             				else {
-HXLINE( 204)					_hx_tmp = false;
+HXLINE( 200)					_hx_tmp = false;
             				}
-HXDLIN( 204)				if (!(_hx_tmp)) {
-HXLINE( 204)					goto _hx_goto_26;
+HXDLIN( 200)				if (!(_hx_tmp)) {
+HXLINE( 200)					goto _hx_goto_26;
             				}
-HXLINE( 205)				if (::hx::IsNotNull( line )) {
-HXLINE( 205)					line = (line + ::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end));
+HXLINE( 201)				if (::hx::IsNotNull( line )) {
+HXLINE( 201)					line = (line + ::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end));
             				}
-HXLINE( 206)				end = (end + 1);
+HXLINE( 202)				end = (end + 1);
             			}
             			_hx_goto_26:;
-HXLINE( 208)			bool _hx_tmp1;
-HXDLIN( 208)			if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
-HXLINE( 208)				_hx_tmp1 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00));
+HXLINE( 204)			bool _hx_tmp1;
+HXDLIN( 204)			if ((end < ::_UnicodeString::UnicodeString_Impl__obj::get_length(styled))) {
+HXLINE( 204)				_hx_tmp1 = (::_UnicodeString::UnicodeString_Impl__obj::charAt(styled,end) == HX_("\n",0a,00,00,00));
             			}
             			else {
-HXLINE( 208)				_hx_tmp1 = false;
+HXLINE( 204)				_hx_tmp1 = false;
             			}
-HXDLIN( 208)			if (_hx_tmp1) {
-HXLINE( 209)				end = (end + 1);
+HXDLIN( 204)			if (_hx_tmp1) {
+HXLINE( 205)				end = (end + 1);
             			}
-HXLINE( 211)			if (::hx::IsNotNull( line )) {
-HXLINE( 211)				lines->push((line + HX_("\n",0a,00,00,00)));
+HXLINE( 207)			if (::hx::IsNotNull( line )) {
+HXLINE( 207)				lines->push((line + HX_("\n",0a,00,00,00)));
             			}
-HXLINE( 212)			line = HX_("",00,00,00,00);
-HXLINE( 213)			bool _hx_tmp2;
-HXDLIN( 213)			if ((::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,4) != HX_("```\n",aa,a7,bd,3f))) {
-HXLINE( 213)				_hx_tmp2 = (::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,null()) == HX_("```",60,2c,49,00));
+HXLINE( 208)			line = HX_("",00,00,00,00);
+HXLINE( 209)			bool _hx_tmp2;
+HXDLIN( 209)			if ((::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,4) != HX_("```\n",aa,a7,bd,3f))) {
+HXLINE( 209)				_hx_tmp2 = (::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,null()) == HX_("```",60,2c,49,00));
             			}
             			else {
-HXLINE( 213)				_hx_tmp2 = true;
+HXLINE( 209)				_hx_tmp2 = true;
             			}
-HXDLIN( 213)			if (_hx_tmp2) {
-HXLINE( 214)				end = (end + 4);
-HXLINE( 215)				goto _hx_goto_25;
+HXDLIN( 209)			if (_hx_tmp2) {
+HXLINE( 210)				end = (end + 4);
+HXLINE( 211)				goto _hx_goto_25;
             			}
             		}
             		_hx_goto_25:;
-HXLINE( 219)		 ::snikket::Stanza _hx_tmp3 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("pre",23,60,55,00),null());
-HXDLIN( 219)		 ::snikket::Stanza _hx_tmp4 = _hx_tmp3->text(lines->join(HX_("",00,00,00,00)));
-HXDLIN( 219)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 215)		 ::snikket::Stanza _hx_tmp3 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("pre",23,60,55,00),null());
+HXDLIN( 215)		 ::snikket::Stanza _hx_tmp4 = _hx_tmp3->text(lines->join(HX_("",00,00,00,00)));
+HXDLIN( 215)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("block",4d,75,fc,b4),_hx_tmp4)
             			->setFixed(1,HX_("rest",14,5b,a7,4b),::_UnicodeString::UnicodeString_Impl__obj::substr(styled,end,null())));
             	}
diff --git a/Sources/c_snikket/src/snikket/_Push/Push_Fields_.cpp b/Sources/c_snikket/src/snikket/_Push/Push_Fields_.cpp
index 8d8d739..bbf73c4 100644
--- a/Sources/c_snikket/src/snikket/_Push/Push_Fields_.cpp
+++ b/Sources/c_snikket/src/snikket/_Push/Push_Fields_.cpp
@@ -29,7 +29,7 @@
 #include <snikket/_Stanza/NodeInterface.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_652706ec70509782_12_receive,"snikket._Push.Push_Fields_","receive",0xad903c9c,"snikket._Push.Push_Fields_.receive","snikket/Push.hx",12,0xbce40632)
+HX_LOCAL_STACK_FRAME(_hx_pos_652706ec70509782_20_receive,"snikket._Push.Push_Fields_","receive",0xad903c9c,"snikket._Push.Push_Fields_.receive","snikket/Push.hx",20,0xbce40632)
 namespace snikket{
 namespace _Push{
 
@@ -51,42 +51,42 @@ bool Push_Fields__obj::_hx_isInstanceOf(int inClassId) {
 }
 
  ::snikket::Notification Push_Fields__obj::receive(::String data,::Dynamic persistence){
-            	HX_STACKFRAME(&_hx_pos_652706ec70509782_12_receive)
-HXLINE(  13)		 ::snikket::Stanza stanza = ::snikket::Stanza_obj::parse(data);
-HXLINE(  14)		if (::hx::IsNull( stanza )) {
-HXLINE(  14)			return null();
+            	HX_STACKFRAME(&_hx_pos_652706ec70509782_20_receive)
+HXLINE(  21)		 ::snikket::Stanza stanza = ::snikket::Stanza_obj::parse(data);
+HXLINE(  22)		if (::hx::IsNull( stanza )) {
+HXLINE(  22)			return null();
             		}
-HXLINE(  15)		bool _hx_tmp;
-HXDLIN(  15)		if ((stanza->name == HX_("envelope",10,df,6c,0c))) {
-HXLINE(  15)			_hx_tmp = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:sce:1",30,c6,40,50));
+HXLINE(  23)		bool _hx_tmp;
+HXDLIN(  23)		if ((stanza->name == HX_("envelope",10,df,6c,0c))) {
+HXLINE(  23)			_hx_tmp = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:sce:1",30,c6,40,50));
             		}
             		else {
-HXLINE(  15)			_hx_tmp = false;
+HXLINE(  23)			_hx_tmp = false;
             		}
-HXDLIN(  15)		if (_hx_tmp) {
-HXLINE(  16)			stanza = stanza->getChild(HX_("content",39,8d,77,19),null())->getFirstChild();
+HXDLIN(  23)		if (_hx_tmp) {
+HXLINE(  24)			stanza = stanza->getChild(HX_("content",39,8d,77,19),null())->getFirstChild();
             		}
-HXLINE(  18)		bool _hx_tmp1;
-HXDLIN(  18)		if ((stanza->name == HX_("forwarded",64,f5,9a,17))) {
-HXLINE(  18)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+HXLINE(  26)		bool _hx_tmp1;
+HXDLIN(  26)		if ((stanza->name == HX_("forwarded",64,f5,9a,17))) {
+HXLINE(  26)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
             		}
             		else {
-HXLINE(  18)			_hx_tmp1 = false;
+HXLINE(  26)			_hx_tmp1 = false;
             		}
-HXDLIN(  18)		if (_hx_tmp1) {
-HXLINE(  19)			stanza = stanza->getChild(HX_("message",c7,35,11,9a),HX_("jabber:client",21,64,c5,e4));
+HXDLIN(  26)		if (_hx_tmp1) {
+HXLINE(  27)			stanza = stanza->getChild(HX_("message",c7,35,11,9a),HX_("jabber:client",21,64,c5,e4));
             		}
-HXLINE(  21)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ) )) {
-HXLINE(  21)			return null();
+HXLINE(  29)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ) )) {
+HXLINE(  29)			return null();
             		}
-HXLINE(  23)		 ::snikket::ChatMessage message = ::snikket::ChatMessage_obj::fromStanza(stanza,::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ))->asBare(),null());
-HXLINE(  24)		if (::hx::IsNotNull( message )) {
-HXLINE(  25)			return ::snikket::Notification_obj::fromChatMessage(message);
+HXLINE(  31)		 ::snikket::ChatMessage message = ::snikket::ChatMessage_obj::fromStanza(stanza,::snikket::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) ))->asBare(),null());
+HXLINE(  32)		if (::hx::IsNotNull( message )) {
+HXLINE(  33)			return ::snikket::Notification_obj::fromChatMessage(message);
             		}
             		else {
-HXLINE(  27)			return ::snikket::Notification_obj::fromThinStanza(stanza);
+HXLINE(  35)			return ::snikket::Notification_obj::fromThinStanza(stanza);
             		}
-HXLINE(  24)		return null();
+HXLINE(  32)		return null();
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/jingle/Attribute.cpp b/Sources/c_snikket/src/snikket/jingle/Attribute.cpp
index c84f911..154ba97 100644
--- a/Sources/c_snikket/src/snikket/jingle/Attribute.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/Attribute.cpp
@@ -5,16 +5,16 @@
 #include <snikket/jingle/Attribute.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_624_new,"snikket.jingle.Attribute","new",0x05dd0082,"snikket.jingle.Attribute.new","snikket/jingle/SessionDescription.hx",624,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_639_toSdp,"snikket.jingle.Attribute","toSdp",0x726848a6,"snikket.jingle.Attribute.toSdp","snikket/jingle/SessionDescription.hx",639,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_629_parse,"snikket.jingle.Attribute","parse",0x1ba48cd5,"snikket.jingle.Attribute.parse","snikket/jingle/SessionDescription.hx",629,0x68af748c)
+HX_DEFINE_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_626_new,"snikket.jingle.Attribute","new",0x05dd0082,"snikket.jingle.Attribute.new","snikket/jingle/SessionDescription.hx",626,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_641_toSdp,"snikket.jingle.Attribute","toSdp",0x726848a6,"snikket.jingle.Attribute.toSdp","snikket/jingle/SessionDescription.hx",641,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_3dd2db7f2124ae96_631_parse,"snikket.jingle.Attribute","parse",0x1ba48cd5,"snikket.jingle.Attribute.parse","snikket/jingle/SessionDescription.hx",631,0x68af748c)
 namespace snikket{
 namespace jingle{
 
 void Attribute_obj::__construct(::String key,::String value){
-            	HX_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_624_new)
-HXLINE( 625)		this->key = key;
-HXLINE( 626)		this->value = value;
+            	HX_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_626_new)
+HXLINE( 627)		this->key = key;
+HXLINE( 628)		this->value = value;
             	}
 
 Dynamic Attribute_obj::__CreateEmpty() { return new Attribute_obj; }
@@ -33,38 +33,38 @@ bool Attribute_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Attribute_obj::toSdp(){
-            	HX_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_639_toSdp)
-HXDLIN( 639)		::String _hx_tmp;
-HXDLIN( 639)		bool _hx_tmp1;
-HXDLIN( 639)		if (::hx::IsNotNull( this->value )) {
-HXDLIN( 639)			_hx_tmp1 = (this->value == HX_("",00,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_641_toSdp)
+HXDLIN( 641)		::String _hx_tmp;
+HXDLIN( 641)		bool _hx_tmp1;
+HXDLIN( 641)		if (::hx::IsNotNull( this->value )) {
+HXDLIN( 641)			_hx_tmp1 = (this->value == HX_("",00,00,00,00));
             		}
             		else {
-HXDLIN( 639)			_hx_tmp1 = true;
+HXDLIN( 641)			_hx_tmp1 = true;
             		}
-HXDLIN( 639)		if (_hx_tmp1) {
-HXDLIN( 639)			_hx_tmp = HX_("",00,00,00,00);
+HXDLIN( 641)		if (_hx_tmp1) {
+HXDLIN( 641)			_hx_tmp = HX_("",00,00,00,00);
             		}
             		else {
-HXDLIN( 639)			_hx_tmp = (HX_(":",3a,00,00,00) + this->value);
+HXDLIN( 641)			_hx_tmp = (HX_(":",3a,00,00,00) + this->value);
             		}
-HXDLIN( 639)		return (((HX_("a=",bc,54,00,00) + this->key) + _hx_tmp) + HX_("\r\n",5d,0b,00,00));
+HXDLIN( 641)		return (((HX_("a=",bc,54,00,00) + this->key) + _hx_tmp) + HX_("\r\n",5d,0b,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Attribute_obj,toSdp,return )
 
  ::snikket::jingle::Attribute Attribute_obj::parse(::String input){
-            	HX_GC_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_629_parse)
-HXLINE( 630)		int pos = input.indexOf(HX_(":",3a,00,00,00),null());
-HXLINE( 631)		if ((pos < 0)) {
-HXLINE( 632)			return  ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,input,HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_3dd2db7f2124ae96_631_parse)
+HXLINE( 632)		int pos = input.indexOf(HX_(":",3a,00,00,00),null());
+HXLINE( 633)		if ((pos < 0)) {
+HXLINE( 634)			return  ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,input,HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 634)			::String _hx_tmp = input.substr(0,pos);
-HXDLIN( 634)			return  ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,_hx_tmp,input.substr((pos + 1),null()));
+HXLINE( 636)			::String _hx_tmp = input.substr(0,pos);
+HXDLIN( 636)			return  ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,_hx_tmp,input.substr((pos + 1),null()));
             		}
-HXLINE( 631)		return null();
+HXLINE( 633)		return null();
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/jingle/AudioFormat.cpp b/Sources/c_snikket/src/snikket/jingle/AudioFormat.cpp
index 976e46b..e55fae7 100644
--- a/Sources/c_snikket/src/snikket/jingle/AudioFormat.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/AudioFormat.cpp
@@ -6,8 +6,8 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_1f09f7dcf750977c_327_new,"snikket.jingle.AudioFormat","new",0xa853b293,"snikket.jingle.AudioFormat.new","snikket/jingle/PeerConnection.cpp.hx",327,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8af94bd41e18171d_307_clockRate__fromC,"snikket.jingle.AudioFormat","clockRate__fromC",0x4ad11858,"snikket.jingle.AudioFormat.clockRate__fromC","HaxeCBridge.hx",307,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8af94bd41e18171d_307_channels__fromC,"snikket.jingle.AudioFormat","channels__fromC",0xbdee92dc,"snikket.jingle.AudioFormat.channels__fromC","HaxeCBridge.hx",307,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8af94bd41e18171d_355_clockRate__fromC,"snikket.jingle.AudioFormat","clockRate__fromC",0x4ad11858,"snikket.jingle.AudioFormat.clockRate__fromC","HaxeCBridge.hx",355,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8af94bd41e18171d_355_channels__fromC,"snikket.jingle.AudioFormat","channels__fromC",0xbdee92dc,"snikket.jingle.AudioFormat.channels__fromC","HaxeCBridge.hx",355,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_1f09f7dcf750977c_320_boot,"snikket.jingle.AudioFormat","boot",0x99018e9f,"snikket.jingle.AudioFormat.boot","snikket/jingle/PeerConnection.cpp.hx",320,0xf9fab71d)
 namespace snikket{
 namespace jingle{
@@ -36,16 +36,16 @@ bool AudioFormat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 int AudioFormat_obj::clockRate__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8af94bd41e18171d_307_clockRate__fromC)
-HXDLIN( 307)		return this->clockRate;
+            	HX_STACKFRAME(&_hx_pos_8af94bd41e18171d_355_clockRate__fromC)
+HXDLIN( 355)		return this->clockRate;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AudioFormat_obj,clockRate__fromC,return )
 
 int AudioFormat_obj::channels__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8af94bd41e18171d_307_channels__fromC)
-HXDLIN( 307)		return this->channels;
+            	HX_STACKFRAME(&_hx_pos_8af94bd41e18171d_355_channels__fromC)
+HXDLIN( 355)		return this->channels;
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/jingle/IceCandidate.cpp b/Sources/c_snikket/src/snikket/jingle/IceCandidate.cpp
index 477334e..4a054f0 100644
--- a/Sources/c_snikket/src/snikket/jingle/IceCandidate.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/IceCandidate.cpp
@@ -23,27 +23,27 @@
 #include <snikket/jingle/IceCandidate.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_8555847178bd1d0f_505_new,"snikket.jingle.IceCandidate","new",0x23693b76,"snikket.jingle.IceCandidate.new","snikket/jingle/SessionDescription.hx",505,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_575_toElement,"snikket.jingle.IceCandidate","toElement",0x6238c617,"snikket.jingle.IceCandidate.toElement","snikket/jingle/SessionDescription.hx",575,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_593_toSdp,"snikket.jingle.IceCandidate","toSdp",0x37b0289a,"snikket.jingle.IceCandidate.toSdp","snikket/jingle/SessionDescription.hx",593,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_517_fromElement,"snikket.jingle.IceCandidate","fromElement",0x664c8388,"snikket.jingle.IceCandidate.fromElement","snikket/jingle/SessionDescription.hx",517,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_539_fromTransport,"snikket.jingle.IceCandidate","fromTransport",0x795eef75,"snikket.jingle.IceCandidate.fromTransport","snikket/jingle/SessionDescription.hx",539,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_542_fromStanza,"snikket.jingle.IceCandidate","fromStanza",0xe2cf26a9,"snikket.jingle.IceCandidate.fromStanza","snikket/jingle/SessionDescription.hx",542,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_550_parse,"snikket.jingle.IceCandidate","parse",0xe0ec6cc9,"snikket.jingle.IceCandidate.parse","snikket/jingle/SessionDescription.hx",550,0x68af748c)
+HX_DEFINE_STACK_FRAME(_hx_pos_8555847178bd1d0f_507_new,"snikket.jingle.IceCandidate","new",0x23693b76,"snikket.jingle.IceCandidate.new","snikket/jingle/SessionDescription.hx",507,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_577_toElement,"snikket.jingle.IceCandidate","toElement",0x6238c617,"snikket.jingle.IceCandidate.toElement","snikket/jingle/SessionDescription.hx",577,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_595_toSdp,"snikket.jingle.IceCandidate","toSdp",0x37b0289a,"snikket.jingle.IceCandidate.toSdp","snikket/jingle/SessionDescription.hx",595,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_519_fromElement,"snikket.jingle.IceCandidate","fromElement",0x664c8388,"snikket.jingle.IceCandidate.fromElement","snikket/jingle/SessionDescription.hx",519,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_541_fromTransport,"snikket.jingle.IceCandidate","fromTransport",0x795eef75,"snikket.jingle.IceCandidate.fromTransport","snikket/jingle/SessionDescription.hx",541,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_544_fromStanza,"snikket.jingle.IceCandidate","fromStanza",0xe2cf26a9,"snikket.jingle.IceCandidate.fromStanza","snikket/jingle/SessionDescription.hx",544,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_8555847178bd1d0f_552_parse,"snikket.jingle.IceCandidate","parse",0xe0ec6cc9,"snikket.jingle.IceCandidate.parse","snikket/jingle/SessionDescription.hx",552,0x68af748c)
 namespace snikket{
 namespace jingle{
 
 void IceCandidate_obj::__construct(::String sdpMid,::String ufrag,::String foundation,::String component,::String transport,::String priority,::String connectionAddress,::String port, ::haxe::ds::StringMap parameters){
-            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_505_new)
-HXLINE( 506)		this->sdpMid = sdpMid;
-HXLINE( 507)		this->ufrag = ufrag;
-HXLINE( 508)		this->foundation = foundation;
-HXLINE( 509)		this->component = component;
-HXLINE( 510)		this->transport = transport;
-HXLINE( 511)		this->priority = priority;
-HXLINE( 512)		this->connectionAddress = connectionAddress;
-HXLINE( 513)		this->port = port;
-HXLINE( 514)		this->parameters = parameters;
+            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_507_new)
+HXLINE( 508)		this->sdpMid = sdpMid;
+HXLINE( 509)		this->ufrag = ufrag;
+HXLINE( 510)		this->foundation = foundation;
+HXLINE( 511)		this->component = component;
+HXLINE( 512)		this->transport = transport;
+HXLINE( 513)		this->priority = priority;
+HXLINE( 514)		this->connectionAddress = connectionAddress;
+HXLINE( 515)		this->port = port;
+HXLINE( 516)		this->parameters = parameters;
             	}
 
 Dynamic IceCandidate_obj::__CreateEmpty() { return new IceCandidate_obj; }
@@ -62,29 +62,29 @@ bool IceCandidate_obj::_hx_isInstanceOf(int inClassId) {
 }
 
  ::snikket::Stanza IceCandidate_obj::toElement(){
-            	HX_GC_STACKFRAME(&_hx_pos_8555847178bd1d0f_575_toElement)
-HXLINE( 577)		::String attrs;
-HXDLIN( 577)		if (::hx::IsNull( this->parameters->get(HX_("tcptype",5b,73,f8,36)) )) {
-HXLINE( 577)			attrs = HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53);
+            	HX_GC_STACKFRAME(&_hx_pos_8555847178bd1d0f_577_toElement)
+HXLINE( 579)		::String attrs;
+HXDLIN( 579)		if (::hx::IsNull( this->parameters->get(HX_("tcptype",5b,73,f8,36)) )) {
+HXLINE( 579)			attrs = HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53);
             		}
             		else {
-HXLINE( 577)			attrs = HX_("urn:xmpp:jingle:transports:ice:0",be,d5,ad,6e);
+HXLINE( 579)			attrs = HX_("urn:xmpp:jingle:transports:ice:0",be,d5,ad,6e);
             		}
-HXLINE( 578)		::String attrs1 = this->foundation;
-HXLINE( 579)		::String attrs2 = this->component;
-HXLINE( 580)		::String attrs3 = this->transport.toLowerCase();
-HXLINE( 581)		::String attrs4 = this->priority;
-HXLINE( 582)		::String attrs5 = this->connectionAddress;
-HXLINE( 583)		::String attrs6 = this->port;
-HXLINE( 584)		::String tmp = this->parameters->get_string(HX_("generation",98,c0,63,4e));
-HXDLIN( 584)		::String attrs7;
-HXDLIN( 584)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 584)			attrs7 = tmp;
+HXLINE( 580)		::String attrs1 = this->foundation;
+HXLINE( 581)		::String attrs2 = this->component;
+HXLINE( 582)		::String attrs3 = this->transport.toLowerCase();
+HXLINE( 583)		::String attrs4 = this->priority;
+HXLINE( 584)		::String attrs5 = this->connectionAddress;
+HXLINE( 585)		::String attrs6 = this->port;
+HXLINE( 586)		::String tmp = this->parameters->get_string(HX_("generation",98,c0,63,4e));
+HXDLIN( 586)		::String attrs7;
+HXDLIN( 586)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 586)			attrs7 = tmp;
             		}
             		else {
-HXLINE( 584)			attrs7 = HX_("0",30,00,00,00);
+HXLINE( 586)			attrs7 = HX_("0",30,00,00,00);
             		}
-HXLINE( 576)		 ::Dynamic attrs8 =  ::Dynamic(::hx::Anon_obj::Create(8)
+HXLINE( 578)		 ::Dynamic attrs8 =  ::Dynamic(::hx::Anon_obj::Create(8)
             			->setFixed(0,HX_("priority",64,7b,3e,bb),attrs4)
             			->setFixed(1,HX_("ip",e7,5b,00,00),attrs5)
             			->setFixed(2,HX_("protocol",58,56,63,00),attrs3)
@@ -93,182 +93,182 @@ HXLINE( 576)		 ::Dynamic attrs8 =  ::Dynamic(::hx::Anon_obj::Create(8)
             			->setFixed(5,HX_("port",81,83,5c,4a),attrs6)
             			->setFixed(6,HX_("generation",98,c0,63,4e),attrs7)
             			->setFixed(7,HX_("xmlns",dc,31,74,60),attrs));
-HXLINE( 586)		if (::hx::IsNotNull( this->parameters->get(HX_("typ",4b,6f,58,00)) )) {
-HXLINE( 586)			::String value = this->parameters->get_string(HX_("typ",4b,6f,58,00));
-HXDLIN( 586)			::Reflect_obj::setField(attrs8,HX_("type",ba,f2,08,4d),value);
+HXLINE( 588)		if (::hx::IsNotNull( this->parameters->get(HX_("typ",4b,6f,58,00)) )) {
+HXLINE( 588)			::String value = this->parameters->get_string(HX_("typ",4b,6f,58,00));
+HXDLIN( 588)			::Reflect_obj::setField(attrs8,HX_("type",ba,f2,08,4d),value);
             		}
-HXLINE( 587)		if (::hx::IsNotNull( this->parameters->get(HX_("raddr",a3,0c,18,e4)) )) {
-HXLINE( 587)			::String value1 = this->parameters->get_string(HX_("raddr",a3,0c,18,e4));
-HXDLIN( 587)			::Reflect_obj::setField(attrs8,HX_("rel-addr",e5,a9,6b,38),value1);
+HXLINE( 589)		if (::hx::IsNotNull( this->parameters->get(HX_("raddr",a3,0c,18,e4)) )) {
+HXLINE( 589)			::String value1 = this->parameters->get_string(HX_("raddr",a3,0c,18,e4));
+HXDLIN( 589)			::Reflect_obj::setField(attrs8,HX_("rel-addr",e5,a9,6b,38),value1);
             		}
-HXLINE( 588)		if (::hx::IsNotNull( this->parameters->get(HX_("rport",f3,a4,0a,ee)) )) {
-HXLINE( 588)			::String value2 = this->parameters->get_string(HX_("rport",f3,a4,0a,ee));
-HXDLIN( 588)			::Reflect_obj::setField(attrs8,HX_("rel-port",35,42,5e,42),value2);
+HXLINE( 590)		if (::hx::IsNotNull( this->parameters->get(HX_("rport",f3,a4,0a,ee)) )) {
+HXLINE( 590)			::String value2 = this->parameters->get_string(HX_("rport",f3,a4,0a,ee));
+HXDLIN( 590)			::Reflect_obj::setField(attrs8,HX_("rel-port",35,42,5e,42),value2);
             		}
-HXLINE( 589)		if (::hx::IsNotNull( this->parameters->get(HX_("tcptype",5b,73,f8,36)) )) {
-HXLINE( 589)			::String value3 = this->parameters->get_string(HX_("tcptype",5b,73,f8,36));
-HXDLIN( 589)			::Reflect_obj::setField(attrs8,HX_("tcptype",5b,73,f8,36),value3);
+HXLINE( 591)		if (::hx::IsNotNull( this->parameters->get(HX_("tcptype",5b,73,f8,36)) )) {
+HXLINE( 591)			::String value3 = this->parameters->get_string(HX_("tcptype",5b,73,f8,36));
+HXDLIN( 591)			::Reflect_obj::setField(attrs8,HX_("tcptype",5b,73,f8,36),value3);
             		}
-HXLINE( 590)		return  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("candidate",43,34,d8,d0),attrs8);
+HXLINE( 592)		return  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("candidate",43,34,d8,d0),attrs8);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IceCandidate_obj,toElement,return )
 
 ::String IceCandidate_obj::toSdp(){
-            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_593_toSdp)
-HXLINE( 594)		::String result = (((((((((((HX_("candidate:",97,86,55,ec) + this->foundation) + HX_(" ",20,00,00,00)) + this->component) + HX_(" ",20,00,00,00)) + this->transport) + HX_(" ",20,00,00,00)) + this->priority) + HX_(" ",20,00,00,00)) + this->connectionAddress) + HX_(" ",20,00,00,00)) + this->port);
-HXLINE( 602)		if (this->parameters->exists(HX_("typ",4b,6f,58,00))) {
-HXLINE( 603)			result = (result + (HX_(" typ ",95,82,db,b9) + this->parameters->get(HX_("typ",4b,6f,58,00))));
+            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_595_toSdp)
+HXLINE( 596)		::String result = (((((((((((HX_("candidate:",97,86,55,ec) + this->foundation) + HX_(" ",20,00,00,00)) + this->component) + HX_(" ",20,00,00,00)) + this->transport) + HX_(" ",20,00,00,00)) + this->priority) + HX_(" ",20,00,00,00)) + this->connectionAddress) + HX_(" ",20,00,00,00)) + this->port);
+HXLINE( 604)		if (this->parameters->exists(HX_("typ",4b,6f,58,00))) {
+HXLINE( 605)			result = (result + (HX_(" typ ",95,82,db,b9) + this->parameters->get(HX_("typ",4b,6f,58,00))));
             		}
-HXLINE( 605)		if (this->parameters->exists(HX_("raddr",a3,0c,18,e4))) {
-HXLINE( 606)			result = (result + (HX_(" raddr ",3d,da,a1,e3) + this->parameters->get(HX_("raddr",a3,0c,18,e4))));
+HXLINE( 607)		if (this->parameters->exists(HX_("raddr",a3,0c,18,e4))) {
+HXLINE( 608)			result = (result + (HX_(" raddr ",3d,da,a1,e3) + this->parameters->get(HX_("raddr",a3,0c,18,e4))));
             		}
-HXLINE( 608)		if (this->parameters->exists(HX_("rport",f3,a4,0a,ee))) {
-HXLINE( 609)			result = (result + (HX_(" rport ",ed,87,f4,8d) + this->parameters->get(HX_("rport",f3,a4,0a,ee))));
+HXLINE( 610)		if (this->parameters->exists(HX_("rport",f3,a4,0a,ee))) {
+HXLINE( 611)			result = (result + (HX_(" rport ",ed,87,f4,8d) + this->parameters->get(HX_("rport",f3,a4,0a,ee))));
             		}
-HXLINE( 611)		{
-HXLINE( 611)			::Dynamic map = this->parameters;
-HXDLIN( 611)			::Dynamic entry_map = map;
-HXDLIN( 611)			 ::Dynamic entry_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 611)			while(( (bool)(entry_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 611)				::String key = ( (::String)(entry_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 611)				::String entry_value = ( (::String)(::haxe::IMap_obj::get(entry_map,key)) );
-HXDLIN( 611)				::String entry_key = key;
-HXLINE( 612)				bool _hx_tmp;
-HXDLIN( 612)				bool _hx_tmp1;
-HXDLIN( 612)				if ((entry_key != HX_("typ",4b,6f,58,00))) {
-HXLINE( 612)					_hx_tmp1 = (entry_key != HX_("raddr",a3,0c,18,e4));
+HXLINE( 613)		{
+HXLINE( 613)			::Dynamic map = this->parameters;
+HXDLIN( 613)			::Dynamic entry_map = map;
+HXDLIN( 613)			 ::Dynamic entry_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 613)			while(( (bool)(entry_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 613)				::String key = ( (::String)(entry_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 613)				::String entry_value = ( (::String)(::haxe::IMap_obj::get(entry_map,key)) );
+HXDLIN( 613)				::String entry_key = key;
+HXLINE( 614)				bool _hx_tmp;
+HXDLIN( 614)				bool _hx_tmp1;
+HXDLIN( 614)				if ((entry_key != HX_("typ",4b,6f,58,00))) {
+HXLINE( 614)					_hx_tmp1 = (entry_key != HX_("raddr",a3,0c,18,e4));
             				}
             				else {
-HXLINE( 612)					_hx_tmp1 = false;
+HXLINE( 614)					_hx_tmp1 = false;
             				}
-HXDLIN( 612)				if (_hx_tmp1) {
-HXLINE( 612)					_hx_tmp = (entry_key != HX_("rport",f3,a4,0a,ee));
+HXDLIN( 614)				if (_hx_tmp1) {
+HXLINE( 614)					_hx_tmp = (entry_key != HX_("rport",f3,a4,0a,ee));
             				}
             				else {
-HXLINE( 612)					_hx_tmp = false;
+HXLINE( 614)					_hx_tmp = false;
             				}
-HXDLIN( 612)				if (_hx_tmp) {
-HXLINE( 613)					result = (result + (((HX_(" ",20,00,00,00) + entry_key) + HX_(" ",20,00,00,00)) + entry_value));
+HXDLIN( 614)				if (_hx_tmp) {
+HXLINE( 615)					result = (result + (((HX_(" ",20,00,00,00) + entry_key) + HX_(" ",20,00,00,00)) + entry_value));
             				}
             			}
             		}
-HXLINE( 616)		return result;
+HXLINE( 618)		return result;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IceCandidate_obj,toSdp,return )
 
  ::snikket::jingle::IceCandidate IceCandidate_obj::fromElement( ::snikket::Stanza candidate,::String sdpMid,::String ufrag){
-            	HX_GC_STACKFRAME(&_hx_pos_8555847178bd1d0f_517_fromElement)
-HXLINE( 518)		 ::haxe::ds::StringMap parameters =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 519)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("type",ba,f2,08,4d))) ) )) {
-HXLINE( 519)			parameters->set(HX_("typ",4b,6f,58,00),( (::String)(::Reflect_obj::field(candidate->attr,HX_("type",ba,f2,08,4d))) ));
+            	HX_GC_STACKFRAME(&_hx_pos_8555847178bd1d0f_519_fromElement)
+HXLINE( 520)		 ::haxe::ds::StringMap parameters =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 521)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("type",ba,f2,08,4d))) ) )) {
+HXLINE( 521)			parameters->set(HX_("typ",4b,6f,58,00),( (::String)(::Reflect_obj::field(candidate->attr,HX_("type",ba,f2,08,4d))) ));
             		}
-HXLINE( 520)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-addr",e5,a9,6b,38))) ) )) {
-HXLINE( 520)			parameters->set(HX_("raddr",a3,0c,18,e4),( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-addr",e5,a9,6b,38))) ));
+HXLINE( 522)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-addr",e5,a9,6b,38))) ) )) {
+HXLINE( 522)			parameters->set(HX_("raddr",a3,0c,18,e4),( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-addr",e5,a9,6b,38))) ));
             		}
-HXLINE( 521)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-port",35,42,5e,42))) ) )) {
-HXLINE( 521)			parameters->set(HX_("rport",f3,a4,0a,ee),( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-port",35,42,5e,42))) ));
+HXLINE( 523)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-port",35,42,5e,42))) ) )) {
+HXLINE( 523)			parameters->set(HX_("rport",f3,a4,0a,ee),( (::String)(::Reflect_obj::field(candidate->attr,HX_("rel-port",35,42,5e,42))) ));
             		}
-HXLINE( 522)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("generation",98,c0,63,4e))) ) )) {
-HXLINE( 522)			parameters->set(HX_("generation",98,c0,63,4e),( (::String)(::Reflect_obj::field(candidate->attr,HX_("generation",98,c0,63,4e))) ));
+HXLINE( 524)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("generation",98,c0,63,4e))) ) )) {
+HXLINE( 524)			parameters->set(HX_("generation",98,c0,63,4e),( (::String)(::Reflect_obj::field(candidate->attr,HX_("generation",98,c0,63,4e))) ));
             		}
-HXLINE( 523)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("tcptype",5b,73,f8,36))) ) )) {
-HXLINE( 523)			parameters->set(HX_("tcptype",5b,73,f8,36),( (::String)(::Reflect_obj::field(candidate->attr,HX_("tcptype",5b,73,f8,36))) ));
+HXLINE( 525)		if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(candidate->attr,HX_("tcptype",5b,73,f8,36))) ) )) {
+HXLINE( 525)			parameters->set(HX_("tcptype",5b,73,f8,36),( (::String)(::Reflect_obj::field(candidate->attr,HX_("tcptype",5b,73,f8,36))) ));
             		}
-HXLINE( 524)		if (::hx::IsNotNull( ufrag )) {
-HXLINE( 524)			parameters->set(HX_("ufrag",27,78,a4,a1),ufrag);
+HXLINE( 526)		if (::hx::IsNotNull( ufrag )) {
+HXLINE( 526)			parameters->set(HX_("ufrag",27,78,a4,a1),ufrag);
             		}
-HXLINE( 528)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("foundation",33,a1,2a,39))) );
-HXLINE( 529)		::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("component",bd,f0,53,0f))) );
-HXLINE( 530)		::String _hx_tmp2 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("protocol",58,56,63,00))) ).toLowerCase();
-HXLINE( 531)		::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("priority",64,7b,3e,bb))) );
-HXLINE( 532)		::String _hx_tmp4 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("ip",e7,5b,00,00))) );
-HXLINE( 525)		return  ::snikket::jingle::IceCandidate_obj::__alloc( HX_CTX ,sdpMid,ufrag,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,_hx_tmp4,( (::String)(::Reflect_obj::field(candidate->attr,HX_("port",81,83,5c,4a))) ),parameters);
+HXLINE( 530)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("foundation",33,a1,2a,39))) );
+HXLINE( 531)		::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("component",bd,f0,53,0f))) );
+HXLINE( 532)		::String _hx_tmp2 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("protocol",58,56,63,00))) ).toLowerCase();
+HXLINE( 533)		::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("priority",64,7b,3e,bb))) );
+HXLINE( 534)		::String _hx_tmp4 = ( (::String)(::Reflect_obj::field(candidate->attr,HX_("ip",e7,5b,00,00))) );
+HXLINE( 527)		return  ::snikket::jingle::IceCandidate_obj::__alloc( HX_CTX ,sdpMid,ufrag,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,_hx_tmp4,( (::String)(::Reflect_obj::field(candidate->attr,HX_("port",81,83,5c,4a))) ),parameters);
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC3(IceCandidate_obj,fromElement,return )
 
 ::Array< ::Dynamic> IceCandidate_obj::fromTransport( ::snikket::Stanza transport,::String sdpMid){
-            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_539_fromTransport)
-HXDLIN( 539)		::Array< ::Dynamic> _this = transport->allTags(HX_("candidate",43,34,d8,d0),null());
-HXDLIN( 539)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 539)		{
-HXDLIN( 539)			int _g = 0;
-HXDLIN( 539)			int _g1 = _this->length;
-HXDLIN( 539)			while((_g < _g1)){
-HXDLIN( 539)				_g = (_g + 1);
-HXDLIN( 539)				int i = (_g - 1);
-HXDLIN( 539)				{
-HXDLIN( 539)					 ::snikket::Stanza el = ( ( ::snikket::Stanza)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 539)					 ::snikket::jingle::IceCandidate inValue = ::snikket::jingle::IceCandidate_obj::fromElement(el,sdpMid,( (::String)(::Reflect_obj::field(transport->attr,HX_("ufrag",27,78,a4,a1))) ));
-HXDLIN( 539)					result->__unsafe_set(i,inValue);
+            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_541_fromTransport)
+HXDLIN( 541)		::Array< ::Dynamic> _this = transport->allTags(HX_("candidate",43,34,d8,d0),null());
+HXDLIN( 541)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 541)		{
+HXDLIN( 541)			int _g = 0;
+HXDLIN( 541)			int _g1 = _this->length;
+HXDLIN( 541)			while((_g < _g1)){
+HXDLIN( 541)				_g = (_g + 1);
+HXDLIN( 541)				int i = (_g - 1);
+HXDLIN( 541)				{
+HXDLIN( 541)					 ::snikket::Stanza el = ( ( ::snikket::Stanza)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 541)					 ::snikket::jingle::IceCandidate inValue = ::snikket::jingle::IceCandidate_obj::fromElement(el,sdpMid,( (::String)(::Reflect_obj::field(transport->attr,HX_("ufrag",27,78,a4,a1))) ));
+HXDLIN( 541)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 539)		return result;
+HXDLIN( 541)		return result;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC2(IceCandidate_obj,fromTransport,return )
 
 ::Array< ::Dynamic> IceCandidate_obj::fromStanza( ::snikket::Stanza iq){
-            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_542_fromStanza)
-HXLINE( 543)		 ::snikket::Stanza jingle = iq->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
-HXLINE( 544)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 544)		{
-HXLINE( 544)			 ::Dynamic x = jingle->allTags(HX_("content",39,8d,77,19),null())->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 544)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 544)				 ::snikket::Stanza x1 = ( ( ::snikket::Stanza)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 545)				 ::snikket::Stanza transport = x1->getChild(HX_("transport",a9,4f,2f,4c),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53));
-HXLINE( 544)				_g->push(::snikket::jingle::IceCandidate_obj::fromTransport(transport,( (::String)(::Reflect_obj::field(x1->attr,HX_("name",4b,72,ff,48))) )));
+            	HX_STACKFRAME(&_hx_pos_8555847178bd1d0f_544_fromStanza)
+HXLINE( 545)		 ::snikket::Stanza jingle = iq->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
+HXLINE( 546)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 546)		{
+HXLINE( 546)			 ::Dynamic x = jingle->allTags(HX_("content",39,8d,77,19),null())->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 546)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 546)				 ::snikket::Stanza x1 = ( ( ::snikket::Stanza)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 547)				 ::snikket::Stanza transport = x1->getChild(HX_("transport",a9,4f,2f,4c),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53));
+HXLINE( 546)				_g->push(::snikket::jingle::IceCandidate_obj::fromTransport(transport,( (::String)(::Reflect_obj::field(x1->attr,HX_("name",4b,72,ff,48))) )));
             			}
             		}
-HXDLIN( 544)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 544)		{
-HXLINE( 544)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 544)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 544)				 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 544)				{
-HXLINE( 544)					 ::Dynamic x2 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 544)					while(( (bool)(x2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 544)						 ::snikket::jingle::IceCandidate x3 = ( ( ::snikket::jingle::IceCandidate)(x2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 544)						_g1->push(x3);
+HXDLIN( 546)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 546)		{
+HXLINE( 546)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 546)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 546)				 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 546)				{
+HXLINE( 546)					 ::Dynamic x2 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 546)					while(( (bool)(x2->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 546)						 ::snikket::jingle::IceCandidate x3 = ( ( ::snikket::jingle::IceCandidate)(x2->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 546)						_g1->push(x3);
             					}
             				}
             			}
             		}
-HXDLIN( 544)		return _g1;
+HXDLIN( 546)		return _g1;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(IceCandidate_obj,fromStanza,return )
 
  ::snikket::jingle::IceCandidate IceCandidate_obj::parse(::String input,::String sdpMid,::String ufrag){
-            	HX_GC_STACKFRAME(&_hx_pos_8555847178bd1d0f_550_parse)
-HXLINE( 551)		if ((input.substr(0,10) == HX_("candidate:",97,86,55,ec))) {
-HXLINE( 552)			input = input.substr(11,null());
+            	HX_GC_STACKFRAME(&_hx_pos_8555847178bd1d0f_552_parse)
+HXLINE( 553)		if ((input.substr(0,10) == HX_("candidate:",97,86,55,ec))) {
+HXLINE( 554)			input = input.substr(11,null());
             		}
-HXLINE( 554)		::Array< ::String > segments = input.split(HX_(" ",20,00,00,00));
-HXLINE( 555)		::Array< ::String > paramSegs = segments->slice(6,null());
-HXLINE( 556)		int paramLength = ::Std_obj::_hx_int((( (Float)(paramSegs->length) ) / ( (Float)(2) )));
-HXLINE( 557)		 ::haxe::ds::StringMap parameters =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 558)		{
-HXLINE( 558)			int _g = 0;
-HXDLIN( 558)			int _g1 = paramLength;
-HXDLIN( 558)			while((_g < _g1)){
-HXLINE( 558)				_g = (_g + 1);
-HXDLIN( 558)				int i = (_g - 1);
-HXLINE( 559)				parameters->set(paramSegs->__get((i * 2)),paramSegs->__get(((i * 2) + 1)));
+HXLINE( 556)		::Array< ::String > segments = input.split(HX_(" ",20,00,00,00));
+HXLINE( 557)		::Array< ::String > paramSegs = segments->slice(6,null());
+HXLINE( 558)		int paramLength = ::Std_obj::_hx_int((( (Float)(paramSegs->length) ) / ( (Float)(2) )));
+HXLINE( 559)		 ::haxe::ds::StringMap parameters =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 560)		{
+HXLINE( 560)			int _g = 0;
+HXDLIN( 560)			int _g1 = paramLength;
+HXDLIN( 560)			while((_g < _g1)){
+HXLINE( 560)				_g = (_g + 1);
+HXDLIN( 560)				int i = (_g - 1);
+HXLINE( 561)				parameters->set(paramSegs->__get((i * 2)),paramSegs->__get(((i * 2) + 1)));
             			}
             		}
-HXLINE( 561)		if (::hx::IsNotNull( ufrag )) {
-HXLINE( 561)			parameters->set(HX_("ufrag",27,78,a4,a1),ufrag);
+HXLINE( 563)		if (::hx::IsNotNull( ufrag )) {
+HXLINE( 563)			parameters->set(HX_("ufrag",27,78,a4,a1),ufrag);
             		}
-HXLINE( 562)		return  ::snikket::jingle::IceCandidate_obj::__alloc( HX_CTX ,sdpMid,ufrag,segments->__get(0),segments->__get(1),segments->__get(2),segments->__get(3),segments->__get(4),segments->__get(5),parameters);
+HXLINE( 564)		return  ::snikket::jingle::IceCandidate_obj::__alloc( HX_CTX ,sdpMid,ufrag,segments->__get(0),segments->__get(1),segments->__get(2),segments->__get(3),segments->__get(4),segments->__get(5),parameters);
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/jingle/InitiatedSession.cpp b/Sources/c_snikket/src/snikket/jingle/InitiatedSession.cpp
index f726ffc..8440f99 100644
--- a/Sources/c_snikket/src/snikket/jingle/InitiatedSession.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/InitiatedSession.cpp
@@ -108,7 +108,7 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_de51993dbb06b02d_278_new,"snikket.jingle.InitiatedSession","new",0x32cfb629,"snikket.jingle.InitiatedSession.new","snikket/jingle/Session.hx",278,0x6db2dd54)
-HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_271_sid__fromC,"snikket.jingle.InitiatedSession","sid__fromC",0x9aaf4482,"snikket.jingle.InitiatedSession.sid__fromC","HaxeCBridge.hx",271,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_308_sid__fromC,"snikket.jingle.InitiatedSession","sid__fromC",0x9aaf4482,"snikket.jingle.InitiatedSession.sid__fromC","HaxeCBridge.hx",308,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_317_get_sid,"snikket.jingle.InitiatedSession","get_sid",0x312965ee,"snikket.jingle.InitiatedSession.get_sid","snikket/jingle/Session.hx",317,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_322_ring,"snikket.jingle.InitiatedSession","ring",0x459789c7,"snikket.jingle.InitiatedSession.ring","snikket/jingle/Session.hx",322,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_327_retract,"snikket.jingle.InitiatedSession","retract",0x0716e04a,"snikket.jingle.InitiatedSession.retract","snikket/jingle/Session.hx",327,0x6db2dd54)
@@ -135,10 +135,10 @@ HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_418_contentAccept,"snikket.jingle.
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_445_transportInfo,"snikket.jingle.InitiatedSession","transportInfo",0x159d97c0,"snikket.jingle.InitiatedSession.transportInfo","snikket/jingle/Session.hx",445,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_431_transportInfo,"snikket.jingle.InitiatedSession","transportInfo",0x159d97c0,"snikket.jingle.InitiatedSession.transportInfo","snikket/jingle/Session.hx",431,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_448_addMedia,"snikket.jingle.InitiatedSession","addMedia",0x861aac9a,"snikket.jingle.InitiatedSession.addMedia","snikket/jingle/Session.hx",448,0x6db2dd54)
-HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_244_addMedia__fromC,"snikket.jingle.InitiatedSession","addMedia__fromC",0x8f17eb1f,"snikket.jingle.InitiatedSession.addMedia__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_252_addMedia__fromC,"snikket.jingle.InitiatedSession","addMedia__fromC",0x8f17eb1f,"snikket.jingle.InitiatedSession.addMedia__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_462_callStatus,"snikket.jingle.InitiatedSession","callStatus",0x1cc213c7,"snikket.jingle.InitiatedSession.callStatus","snikket/jingle/Session.hx",462,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_465_videoTracks,"snikket.jingle.InitiatedSession","videoTracks",0xf619192c,"snikket.jingle.InitiatedSession.videoTracks","snikket/jingle/Session.hx",465,0x6db2dd54)
-HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_242_videoTracks__fromC,"snikket.jingle.InitiatedSession","videoTracks__fromC",0x21c414cd,"snikket.jingle.InitiatedSession.videoTracks__fromC","HaxeCBridge.hx",242,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_250_videoTracks__fromC,"snikket.jingle.InitiatedSession","videoTracks__fromC",0x21c414cd,"snikket.jingle.InitiatedSession.videoTracks__fromC","HaxeCBridge.hx",250,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_474_dtmf,"snikket.jingle.InitiatedSession","dtmf",0x3c5ee500,"snikket.jingle.InitiatedSession.dtmf","snikket/jingle/Session.hx",474,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_472_dtmf,"snikket.jingle.InitiatedSession","dtmf",0x3c5ee500,"snikket.jingle.InitiatedSession.dtmf","snikket/jingle/Session.hx",472,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_489_sendIceCandidate,"snikket.jingle.InitiatedSession","sendIceCandidate",0x8f88e577,"snikket.jingle.InitiatedSession.sendIceCandidate","snikket/jingle/Session.hx",489,0x6db2dd54)
@@ -148,7 +148,7 @@ HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_502_sendIceCandidate,"snikket.jing
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_514_supplyMedia,"snikket.jingle.InitiatedSession","supplyMedia",0xd2bd62fe,"snikket.jingle.InitiatedSession.supplyMedia","snikket/jingle/Session.hx",514,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_522_supplyMedia,"snikket.jingle.InitiatedSession","supplyMedia",0xd2bd62fe,"snikket.jingle.InitiatedSession.supplyMedia","snikket/jingle/Session.hx",522,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_513_supplyMedia,"snikket.jingle.InitiatedSession","supplyMedia",0xd2bd62fe,"snikket.jingle.InitiatedSession.supplyMedia","snikket/jingle/Session.hx",513,0x6db2dd54)
-HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_244_supplyMedia__fromC,"snikket.jingle.InitiatedSession","supplyMedia__fromC",0x2f8c893b,"snikket.jingle.InitiatedSession.supplyMedia__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_042a82ddefcd0233_252_supplyMedia__fromC,"snikket.jingle.InitiatedSession","supplyMedia__fromC",0x2f8c893b,"snikket.jingle.InitiatedSession.supplyMedia__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_540_setupPeerConnection,"snikket.jingle.InitiatedSession","setupPeerConnection",0xb3182f86,"snikket.jingle.InitiatedSession.setupPeerConnection","snikket/jingle/Session.hx",540,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_542_setupPeerConnection,"snikket.jingle.InitiatedSession","setupPeerConnection",0xb3182f86,"snikket.jingle.InitiatedSession.setupPeerConnection","snikket/jingle/Session.hx",542,0x6db2dd54)
 HX_LOCAL_STACK_FRAME(_hx_pos_de51993dbb06b02d_544_setupPeerConnection,"snikket.jingle.InitiatedSession","setupPeerConnection",0xb3182f86,"snikket.jingle.InitiatedSession.setupPeerConnection","snikket/jingle/Session.hx",544,0x6db2dd54)
@@ -235,8 +235,8 @@ void *InitiatedSession_obj::_hx_getInterface(int inHash) {
 }
 
 ::String InitiatedSession_obj::sid__fromC(){
-            	HX_STACKFRAME(&_hx_pos_042a82ddefcd0233_271_sid__fromC)
-HXDLIN( 271)		return this->get_sid();
+            	HX_STACKFRAME(&_hx_pos_042a82ddefcd0233_308_sid__fromC)
+HXDLIN( 308)		return this->get_sid();
             	}
 
 
@@ -642,12 +642,19 @@ HXLINE( 458)		this->setupLocalDescription(HX_("content-add",cd,a9,a1,10),oldMids
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,addMedia,(void))
 
 void InitiatedSession_obj::addMedia__fromC(::cpp::Pointer< void* > streams,size_t streams__len){
-            	HX_STACKFRAME(&_hx_pos_042a82ddefcd0233_244_addMedia__fromC)
-HXLINE( 224)		::cpp::Pointer<  ::snikket::jingle::MediaStream > _this = streams->reinterpret();
-HXDLIN( 224)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
-HXDLIN( 224)		::cpp::Pointer<  ::snikket::jingle::MediaStream > tmp = _this;
-HXDLIN( 224)		result->setUnmanagedData(tmp,( (int)(streams__len) ));
-HXLINE( 244)		this->addMedia(result->copy());
+            	HX_STACKFRAME(&_hx_pos_042a82ddefcd0233_252_addMedia__fromC)
+HXLINE( 231)		::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 231)		if (::hx::IsNull( streams )) {
+HXLINE( 231)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 231)			::cpp::Pointer<  ::snikket::jingle::MediaStream > _this = streams->reinterpret();
+HXDLIN( 231)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 231)			::cpp::Pointer<  ::snikket::jingle::MediaStream > tmp = _this;
+HXDLIN( 231)			result->setUnmanagedData(tmp,( (int)(streams__len) ));
+HXDLIN( 231)			_hx_tmp = result->copy();
+            		}
+HXLINE( 252)		this->addMedia(_hx_tmp);
             	}
 
 
@@ -720,49 +727,49 @@ HXDLIN( 467)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,videoTracks,return )
 
 size_t InitiatedSession_obj::videoTracks__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_042a82ddefcd0233_242_videoTracks__fromC)
-HXDLIN( 242)		::Array< ::Dynamic> out = this->videoTracks();
-HXDLIN( 242)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 242)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 242)			{
-HXDLIN( 242)				int _g = 0;
-HXDLIN( 242)				while((_g < out->length)){
-HXDLIN( 242)					 ::snikket::jingle::MediaStreamTrack el = out->__get(_g).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
-HXDLIN( 242)					_g = (_g + 1);
-HXDLIN( 242)					{
-HXDLIN( 242)						 ::Dynamic haxeObject = el;
-HXDLIN( 242)						void* ptr = haxeObject.mPtr;
-HXDLIN( 242)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 242)						{
-HXDLIN( 242)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 242)							int high = ptrInt64 >> 32;
-HXDLIN( 242)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 242)							if (::hx::IsNull( highMap )) {
-HXDLIN( 242)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_042a82ddefcd0233_250_videoTracks__fromC)
+HXDLIN( 250)		::Array< ::Dynamic> out = this->videoTracks();
+HXDLIN( 250)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 250)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 250)			{
+HXDLIN( 250)				int _g = 0;
+HXDLIN( 250)				while((_g < out->length)){
+HXDLIN( 250)					 ::snikket::jingle::MediaStreamTrack el = out->__get(_g).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
+HXDLIN( 250)					_g = (_g + 1);
+HXDLIN( 250)					{
+HXDLIN( 250)						 ::Dynamic haxeObject = el;
+HXDLIN( 250)						void* ptr = haxeObject.mPtr;
+HXDLIN( 250)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 250)						{
+HXDLIN( 250)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 250)							int high = ptrInt64 >> 32;
+HXDLIN( 250)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 250)							if (::hx::IsNull( highMap )) {
+HXDLIN( 250)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)								this1->set(low,highMap);
             							}
-HXDLIN( 242)							highMap->set(high,haxeObject);
+HXDLIN( 250)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 242)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 242)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 242)			{
-HXDLIN( 242)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 242)				int high1 = ptrInt641 >> 32;
-HXDLIN( 242)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 242)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 242)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)					this2->set(low1,highMap1);
+HXDLIN( 250)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 250)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 250)			{
+HXDLIN( 250)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 250)				int high1 = ptrInt641 >> 32;
+HXDLIN( 250)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 250)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 250)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)					this2->set(low1,highMap1);
             				}
-HXDLIN( 242)				highMap1->set(high1,out);
+HXDLIN( 250)				highMap1->set(high1,out);
             			}
-HXDLIN( 242)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 250)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 242)		return ( (size_t)(out->length) );
+HXDLIN( 250)		return ( (size_t)(out->length) );
             	}
 
 
@@ -948,12 +955,19 @@ HXLINE( 514)		this->setupPeerConnection( ::Dynamic(new _hx_Closure_1(_gthis,stre
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,supplyMedia,(void))
 
 void InitiatedSession_obj::supplyMedia__fromC(::cpp::Pointer< void* > streams,size_t streams__len){
-            	HX_STACKFRAME(&_hx_pos_042a82ddefcd0233_244_supplyMedia__fromC)
-HXLINE( 224)		::cpp::Pointer<  ::snikket::jingle::MediaStream > _this = streams->reinterpret();
-HXDLIN( 224)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
-HXDLIN( 224)		::cpp::Pointer<  ::snikket::jingle::MediaStream > tmp = _this;
-HXDLIN( 224)		result->setUnmanagedData(tmp,( (int)(streams__len) ));
-HXLINE( 244)		this->supplyMedia(result->copy());
+            	HX_STACKFRAME(&_hx_pos_042a82ddefcd0233_252_supplyMedia__fromC)
+HXLINE( 231)		::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 231)		if (::hx::IsNull( streams )) {
+HXLINE( 231)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 231)			::cpp::Pointer<  ::snikket::jingle::MediaStream > _this = streams->reinterpret();
+HXDLIN( 231)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 231)			::cpp::Pointer<  ::snikket::jingle::MediaStream > tmp = _this;
+HXDLIN( 231)			result->setUnmanagedData(tmp,( (int)(streams__len) ));
+HXDLIN( 231)			_hx_tmp = result->copy();
+            		}
+HXLINE( 252)		this->supplyMedia(_hx_tmp);
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/jingle/Media.cpp b/Sources/c_snikket/src/snikket/jingle/Media.cpp
index 984940b..b6dbc2c 100644
--- a/Sources/c_snikket/src/snikket/jingle/Media.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/Media.cpp
@@ -42,17 +42,18 @@ HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_367_contentElement,"snikket.jingle
 HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_371_contentElement,"snikket.jingle.Media","contentElement",0xbe6c47d9,"snikket.jingle.Media.contentElement","snikket/jingle/SessionDescription.hx",371,0x68af748c)
 HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_373_contentElement,"snikket.jingle.Media","contentElement",0xbe6c47d9,"snikket.jingle.Media.contentElement","snikket/jingle/SessionDescription.hx",373,0x68af748c)
 HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_442_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",442,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_457_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",457,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_460_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",460,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_444_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",444,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_459_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",459,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_462_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",462,0x68af748c)
 HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_379_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",379,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_446_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",446,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_451_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",451,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_448_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",448,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_453_toElement,"snikket.jingle.Media","toElement",0x4671f0eb,"snikket.jingle.Media.toElement","snikket/jingle/SessionDescription.hx",453,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_472_getUfragPwd,"snikket.jingle.Media","getUfragPwd",0x9b1eb236,"snikket.jingle.Media.getUfragPwd","snikket/jingle/SessionDescription.hx",472,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_473_getUfragPwd,"snikket.jingle.Media","getUfragPwd",0x9b1eb236,"snikket.jingle.Media.getUfragPwd","snikket/jingle/SessionDescription.hx",473,0x68af748c)
 HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_470_getUfragPwd,"snikket.jingle.Media","getUfragPwd",0x9b1eb236,"snikket.jingle.Media.getUfragPwd","snikket/jingle/SessionDescription.hx",470,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_471_getUfragPwd,"snikket.jingle.Media","getUfragPwd",0x9b1eb236,"snikket.jingle.Media.getUfragPwd","snikket/jingle/SessionDescription.hx",471,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_468_getUfragPwd,"snikket.jingle.Media","getUfragPwd",0x9b1eb236,"snikket.jingle.Media.getUfragPwd","snikket/jingle/SessionDescription.hx",468,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_482_toTransportElement,"snikket.jingle.Media","toTransportElement",0x23b23e04,"snikket.jingle.Media.toTransportElement","snikket/jingle/SessionDescription.hx",482,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_483_toTransportElement,"snikket.jingle.Media","toTransportElement",0x23b23e04,"snikket.jingle.Media.toTransportElement","snikket/jingle/SessionDescription.hx",483,0x68af748c)
-HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_476_toTransportElement,"snikket.jingle.Media","toTransportElement",0x23b23e04,"snikket.jingle.Media.toTransportElement","snikket/jingle/SessionDescription.hx",476,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_484_toTransportElement,"snikket.jingle.Media","toTransportElement",0x23b23e04,"snikket.jingle.Media.toTransportElement","snikket/jingle/SessionDescription.hx",484,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_485_toTransportElement,"snikket.jingle.Media","toTransportElement",0x23b23e04,"snikket.jingle.Media.toTransportElement","snikket/jingle/SessionDescription.hx",485,0x68af748c)
+HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_478_toTransportElement,"snikket.jingle.Media","toTransportElement",0x23b23e04,"snikket.jingle.Media.toTransportElement","snikket/jingle/SessionDescription.hx",478,0x68af748c)
 HX_LOCAL_STACK_FRAME(_hx_pos_4daf6b6064f97b22_236_fromElement,"snikket.jingle.Media","fromElement",0xab450b5c,"snikket.jingle.Media.fromElement","snikket/jingle/SessionDescription.hx",236,0x68af748c)
 namespace snikket{
 namespace jingle{
@@ -169,28 +170,39 @@ HXLINE( 376)		return  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("content",39,8
 HX_DEFINE_DYNAMIC_FUNC1(Media_obj,contentElement,return )
 
  ::snikket::Stanza Media_obj::toElement(::Array< ::Dynamic> sessionAttributes,bool initiator){
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
-            		bool _hx_run( ::snikket::jingle::Attribute attr){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::jingle::Media,_gthis) HXARGC(2)
+            		int _hx_run( ::snikket::Stanza a, ::snikket::Stanza b){
             			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_442_toElement)
-HXLINE( 442)			return (attr->key == HX_("extmap-allow-mixed",05,91,99,44));
+HXLINE( 442)			::Array< int > _gthis1 = _gthis->formats;
+HXDLIN( 442)			int _hx_tmp = _gthis1->indexOf(::Std_obj::parseInt(( (::String)(::Reflect_obj::field(a->attr,HX_("id",db,5b,00,00))) )),null());
+HXDLIN( 442)			::Array< int > _gthis2 = _gthis->formats;
+HXDLIN( 442)			return (_hx_tmp - _gthis2->indexOf(::Std_obj::parseInt(( (::String)(::Reflect_obj::field(b->attr,HX_("id",db,5b,00,00))) )),null()));
             		}
-            		HX_END_LOCAL_FUNC1(return)
+            		HX_END_LOCAL_FUNC2(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::snikket::jingle::Attribute attr){
-            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_457_toElement)
-HXLINE( 457)			return (attr->key == HX_("rtcp-mux",72,08,78,80));
+            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_444_toElement)
+HXLINE( 444)			return (attr->key == HX_("extmap-allow-mixed",05,91,99,44));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             		bool _hx_run( ::snikket::jingle::Attribute attr){
-            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_460_toElement)
-HXLINE( 460)			return (attr->key == HX_("ice-lite",b0,64,44,1d));
+            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_459_toElement)
+HXLINE( 459)			return (attr->key == HX_("rtcp-mux",72,08,78,80));
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(1)
+            		bool _hx_run( ::snikket::jingle::Attribute attr){
+            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_462_toElement)
+HXLINE( 462)			return (attr->key == HX_("ice-lite",b0,64,44,1d));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             	HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_379_toElement)
+HXDLIN( 379)		 ::snikket::jingle::Media _gthis = ::hx::ObjectPtr<OBJ_>(this);
 HXLINE( 380)		 ::snikket::Stanza content = this->contentElement(initiator);
 HXLINE( 381)		 ::snikket::Stanza description = content->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("media",e4,04,bc,05),this->media)
@@ -477,74 +489,76 @@ HXDLIN( 429)					result3->__unsafe_set(i3,inValue7);
             				}
             			}
             		}
-HXDLIN( 429)		description->addChildren(result3);
-HXLINE( 442)		bool _hx_tmp4;
-HXDLIN( 442)		if (!(::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_0())))) {
-            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
+HXDLIN( 429)		::Array< ::Dynamic> rtpmaps = result3;
+HXLINE( 442)		rtpmaps->sort( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 443)		description->addChildren(rtpmaps);
+HXLINE( 444)		bool _hx_tmp4;
+HXDLIN( 444)		if (!(::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_1())))) {
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::snikket::jingle::Attribute attr){
-            				HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_442_toElement)
-HXLINE( 442)				return (attr->key == HX_("extmap-allow-mixed",05,91,99,44));
+            				HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_444_toElement)
+HXLINE( 444)				return (attr->key == HX_("extmap-allow-mixed",05,91,99,44));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 442)			_hx_tmp4 = ::Lambda_obj::exists(sessionAttributes, ::Dynamic(new _hx_Closure_1()));
+HXLINE( 444)			_hx_tmp4 = ::Lambda_obj::exists(sessionAttributes, ::Dynamic(new _hx_Closure_2()));
             		}
             		else {
-HXLINE( 442)			_hx_tmp4 = true;
+HXLINE( 444)			_hx_tmp4 = true;
             		}
-HXDLIN( 442)		if (_hx_tmp4) {
-HXLINE( 443)			description->tag(HX_("extmap-allow-mixed",05,91,99,44), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN( 444)		if (_hx_tmp4) {
+HXLINE( 445)			description->tag(HX_("extmap-allow-mixed",05,91,99,44), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",c7,33,ab,6d))))->up();
             		}
-HXLINE( 445)		{
-HXLINE( 445)			::Dynamic map = ssrc;
-HXDLIN( 445)			::Dynamic entry_map = map;
-HXDLIN( 445)			 ::Dynamic entry_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 445)			while(( (bool)(entry_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-            				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
+HXLINE( 447)		{
+HXLINE( 447)			::Dynamic map = ssrc;
+HXDLIN( 447)			::Dynamic entry_map = map;
+HXDLIN( 447)			 ::Dynamic entry_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 447)			while(( (bool)(entry_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+            				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             				bool _hx_run( ::snikket::jingle::Attribute attr){
-            					HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_446_toElement)
-HXLINE( 446)					return (attr->key == HX_("msid",c1,e0,63,48));
+            					HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_448_toElement)
+HXLINE( 448)					return (attr->key == HX_("msid",c1,e0,63,48));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 445)				::String key1 = ( (::String)(entry_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 445)				::Array< ::Dynamic> entry_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(entry_map,key1)) );
-HXDLIN( 445)				::String entry_key = key1;
-HXLINE( 446)				 ::snikket::jingle::Attribute msid = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(this->attributes, ::Dynamic(new _hx_Closure_2()))) );
-HXLINE( 451)				bool _hx_tmp5;
-HXDLIN( 451)				if (::hx::IsNotNull( msid )) {
-            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
+HXLINE( 447)				::String key1 = ( (::String)(entry_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 447)				::Array< ::Dynamic> entry_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(entry_map,key1)) );
+HXDLIN( 447)				::String entry_key = key1;
+HXLINE( 448)				 ::snikket::jingle::Attribute msid = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(this->attributes, ::Dynamic(new _hx_Closure_3()))) );
+HXLINE( 453)				bool _hx_tmp5;
+HXDLIN( 453)				if (::hx::IsNotNull( msid )) {
+            					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             					bool _hx_run( ::snikket::Stanza param){
-            						HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_451_toElement)
-HXLINE( 451)						return (( (::String)(::Reflect_obj::field(param->attr,HX_("name",4b,72,ff,48))) ) == HX_("msid",c1,e0,63,48));
+            						HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_453_toElement)
+HXLINE( 453)						return (( (::String)(::Reflect_obj::field(param->attr,HX_("name",4b,72,ff,48))) ) == HX_("msid",c1,e0,63,48));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 451)					_hx_tmp5 = !(::Lambda_obj::exists(entry_value, ::Dynamic(new _hx_Closure_3())));
+HXLINE( 453)					_hx_tmp5 = !(::Lambda_obj::exists(entry_value, ::Dynamic(new _hx_Closure_4())));
             				}
             				else {
-HXLINE( 451)					_hx_tmp5 = false;
+HXLINE( 453)					_hx_tmp5 = false;
             				}
-HXDLIN( 451)				if (_hx_tmp5) {
-HXLINE( 452)					entry_value->push( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 453)				if (_hx_tmp5) {
+HXLINE( 454)					entry_value->push( ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("parameter",a9,35,b0,48), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("value",71,7f,b8,31),msid->value)
             						->setFixed(1,HX_("name",4b,72,ff,48),HX_("msid",c1,e0,63,48)))));
             				}
-HXLINE( 454)				description->tag(HX_("source",db,b0,31,32), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 456)				description->tag(HX_("source",db,b0,31,32), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("ssrc",51,30,5b,4c),entry_key)
             					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:ssma:0",51,23,31,6f))))->addChildren(entry_value)->up();
             			}
             		}
-HXLINE( 457)		if (::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_4()))) {
-HXLINE( 458)			description->tag(HX_("rtcp-mux",72,08,78,80),null())->up();
+HXLINE( 459)		if (::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_5()))) {
+HXLINE( 460)			description->tag(HX_("rtcp-mux",72,08,78,80),null())->up();
             		}
-HXLINE( 460)		if (::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_5()))) {
-HXLINE( 461)			description->tag(HX_("ice-lite",b0,64,44,1d),null())->up();
+HXLINE( 462)		if (::Lambda_obj::exists(this->attributes, ::Dynamic(new _hx_Closure_6()))) {
+HXLINE( 463)			description->tag(HX_("ice-lite",b0,64,44,1d),null())->up();
             		}
-HXLINE( 463)		description->up();
-HXLINE( 464)		content->addChild(this->toTransportElement(sessionAttributes))->up();
-HXLINE( 465)		return content;
+HXLINE( 465)		description->up();
+HXLINE( 466)		content->addChild(this->toTransportElement(sessionAttributes))->up();
+HXLINE( 467)		return content;
             	}
 
 
@@ -553,41 +567,41 @@ HX_DEFINE_DYNAMIC_FUNC2(Media_obj,toElement,return )
  ::Dynamic Media_obj::getUfragPwd(::Array< ::Dynamic> sessionAttributes){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::snikket::jingle::Attribute attr){
-            			HX_STACKFRAME(&_hx_pos_4daf6b6064f97b22_470_getUfragPwd)
-HXLINE( 470)			return (attr->key == HX_("ice-ufrag",65,c2,31,ab));
+            			HX_STACKFRAME(&_hx_pos_4daf6b6064f97b22_472_getUfragPwd)
+HXLINE( 472)			return (attr->key == HX_("ice-ufrag",65,c2,31,ab));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::snikket::jingle::Attribute attr){
-            			HX_STACKFRAME(&_hx_pos_4daf6b6064f97b22_471_getUfragPwd)
-HXLINE( 471)			return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
+            			HX_STACKFRAME(&_hx_pos_4daf6b6064f97b22_473_getUfragPwd)
+HXLINE( 473)			return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4daf6b6064f97b22_468_getUfragPwd)
-HXLINE( 469)		::Array< ::Dynamic> tmp = sessionAttributes;
-HXDLIN( 469)		::Array< ::Dynamic> allAttributes;
-HXDLIN( 469)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 469)			allAttributes = tmp;
+            	HX_STACKFRAME(&_hx_pos_4daf6b6064f97b22_470_getUfragPwd)
+HXLINE( 471)		::Array< ::Dynamic> tmp = sessionAttributes;
+HXDLIN( 471)		::Array< ::Dynamic> allAttributes;
+HXDLIN( 471)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 471)			allAttributes = tmp;
             		}
             		else {
-HXLINE( 469)			allAttributes = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 471)			allAttributes = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 469)		::Array< ::Dynamic> allAttributes1 = this->attributes->concat(allAttributes);
-HXLINE( 470)		 ::snikket::jingle::Attribute ufrag = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(allAttributes1, ::Dynamic(new _hx_Closure_0()))) );
-HXLINE( 471)		 ::snikket::jingle::Attribute pwd = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(allAttributes1, ::Dynamic(new _hx_Closure_1()))) );
-HXLINE( 472)		bool _hx_tmp;
-HXDLIN( 472)		if (::hx::IsNotNull( ufrag )) {
-HXLINE( 472)			_hx_tmp = ::hx::IsNull( pwd );
+HXDLIN( 471)		::Array< ::Dynamic> allAttributes1 = this->attributes->concat(allAttributes);
+HXLINE( 472)		 ::snikket::jingle::Attribute ufrag = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(allAttributes1, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE( 473)		 ::snikket::jingle::Attribute pwd = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(allAttributes1, ::Dynamic(new _hx_Closure_1()))) );
+HXLINE( 474)		bool _hx_tmp;
+HXDLIN( 474)		if (::hx::IsNotNull( ufrag )) {
+HXLINE( 474)			_hx_tmp = ::hx::IsNull( pwd );
             		}
             		else {
-HXLINE( 472)			_hx_tmp = true;
+HXLINE( 474)			_hx_tmp = true;
             		}
-HXDLIN( 472)		if (_hx_tmp) {
-HXLINE( 472)			HX_STACK_DO_THROW(HX_("transport is missing ufrag or pwd",52,c9,01,1c));
+HXDLIN( 474)		if (_hx_tmp) {
+HXLINE( 474)			HX_STACK_DO_THROW(HX_("transport is missing ufrag or pwd",52,c9,01,1c));
             		}
-HXLINE( 473)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 475)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("ufrag",27,78,a4,a1),ufrag->value)
             			->setFixed(1,HX_("pwd",7d,64,55,00),pwd->value));
             	}
@@ -598,87 +612,87 @@ HX_DEFINE_DYNAMIC_FUNC1(Media_obj,getUfragPwd,return )
  ::snikket::Stanza Media_obj::toTransportElement(::Array< ::Dynamic> sessionAttributes){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::snikket::jingle::Attribute attr){
-            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_482_toTransportElement)
-HXLINE( 482)			return (attr->key == HX_("fingerprint",e4,43,63,a3));
+            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_484_toTransportElement)
+HXLINE( 484)			return (attr->key == HX_("fingerprint",e4,43,63,a3));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::snikket::jingle::Attribute attr){
-            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_483_toTransportElement)
-HXLINE( 483)			return (attr->key == HX_("setup",7d,ae,2f,7a));
+            			HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_485_toTransportElement)
+HXLINE( 485)			return (attr->key == HX_("setup",7d,ae,2f,7a));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_476_toTransportElement)
-HXDLIN( 476)		 ::snikket::jingle::Media _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 477)		 ::Dynamic transportAttr =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_4daf6b6064f97b22_478_toTransportElement)
+HXDLIN( 478)		 ::snikket::jingle::Media _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 479)		 ::Dynamic transportAttr =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53)));
-HXLINE( 478)		 ::Dynamic ufragPwd = this->getUfragPwd(sessionAttributes);
-HXLINE( 479)		{
-HXLINE( 479)			::String value = ( (::String)(ufragPwd->__Field(HX_("ufrag",27,78,a4,a1),::hx::paccDynamic)) );
-HXDLIN( 479)			::Reflect_obj::setField(transportAttr,HX_("ufrag",27,78,a4,a1),value);
+HXLINE( 480)		 ::Dynamic ufragPwd = this->getUfragPwd(sessionAttributes);
+HXLINE( 481)		{
+HXLINE( 481)			::String value = ( (::String)(ufragPwd->__Field(HX_("ufrag",27,78,a4,a1),::hx::paccDynamic)) );
+HXDLIN( 481)			::Reflect_obj::setField(transportAttr,HX_("ufrag",27,78,a4,a1),value);
             		}
-HXLINE( 480)		{
-HXLINE( 480)			::String value1 = ( (::String)(ufragPwd->__Field(HX_("pwd",7d,64,55,00),::hx::paccDynamic)) );
-HXDLIN( 480)			::Reflect_obj::setField(transportAttr,HX_("pwd",7d,64,55,00),value1);
+HXLINE( 482)		{
+HXLINE( 482)			::String value1 = ( (::String)(ufragPwd->__Field(HX_("pwd",7d,64,55,00),::hx::paccDynamic)) );
+HXDLIN( 482)			::Reflect_obj::setField(transportAttr,HX_("pwd",7d,64,55,00),value1);
             		}
-HXLINE( 481)		 ::snikket::Stanza transport =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("transport",a9,4f,2f,4c),transportAttr);
-HXLINE( 482)		 ::snikket::jingle::Attribute fingerprint = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(this->attributes->concat(sessionAttributes), ::Dynamic(new _hx_Closure_0()))) );
-HXLINE( 483)		 ::snikket::jingle::Attribute setup = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(this->attributes->concat(sessionAttributes), ::Dynamic(new _hx_Closure_1()))) );
-HXLINE( 484)		bool _hx_tmp;
-HXDLIN( 484)		bool _hx_tmp1;
-HXDLIN( 484)		if (::hx::IsNotNull( fingerprint )) {
-HXLINE( 484)			_hx_tmp1 = ::hx::IsNotNull( setup );
+HXLINE( 483)		 ::snikket::Stanza transport =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("transport",a9,4f,2f,4c),transportAttr);
+HXLINE( 484)		 ::snikket::jingle::Attribute fingerprint = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(this->attributes->concat(sessionAttributes), ::Dynamic(new _hx_Closure_0()))) );
+HXLINE( 485)		 ::snikket::jingle::Attribute setup = ( ( ::snikket::jingle::Attribute)(::Lambda_obj::find(this->attributes->concat(sessionAttributes), ::Dynamic(new _hx_Closure_1()))) );
+HXLINE( 486)		bool _hx_tmp;
+HXDLIN( 486)		bool _hx_tmp1;
+HXDLIN( 486)		if (::hx::IsNotNull( fingerprint )) {
+HXLINE( 486)			_hx_tmp1 = ::hx::IsNotNull( setup );
             		}
             		else {
-HXLINE( 484)			_hx_tmp1 = false;
+HXLINE( 486)			_hx_tmp1 = false;
             		}
-HXDLIN( 484)		if (_hx_tmp1) {
-HXLINE( 484)			_hx_tmp = (fingerprint->value.indexOf(HX_(" ",20,00,00,00),null()) > 0);
+HXDLIN( 486)		if (_hx_tmp1) {
+HXLINE( 486)			_hx_tmp = (fingerprint->value.indexOf(HX_(" ",20,00,00,00),null()) > 0);
             		}
             		else {
-HXLINE( 484)			_hx_tmp = false;
+HXLINE( 486)			_hx_tmp = false;
             		}
-HXDLIN( 484)		if (_hx_tmp) {
-HXLINE( 485)			int pos = fingerprint->value.indexOf(HX_(" ",20,00,00,00),null());
-HXLINE( 486)			::String _hx_tmp2 = fingerprint->value.substr((pos + 1),null());
-HXDLIN( 486)			::String _hx_tmp3 = fingerprint->value.substr(0,pos);
-HXDLIN( 486)			transport->textTag(HX_("fingerprint",e4,43,63,a3),_hx_tmp2, ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 486)		if (_hx_tmp) {
+HXLINE( 487)			int pos = fingerprint->value.indexOf(HX_(" ",20,00,00,00),null());
+HXLINE( 488)			::String _hx_tmp2 = fingerprint->value.substr((pos + 1),null());
+HXDLIN( 488)			::String _hx_tmp3 = fingerprint->value.substr(0,pos);
+HXDLIN( 488)			transport->textTag(HX_("fingerprint",e4,43,63,a3),_hx_tmp2, ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("hash",ce,2f,08,45),_hx_tmp3)
             				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:dtls:0",a8,cb,02,66))
             				->setFixed(2,HX_("setup",7d,ae,2f,7a),setup->value)));
             		}
-HXLINE( 488)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 488)		{
-HXLINE( 488)			int _g1 = 0;
-HXDLIN( 488)			::Array< ::Dynamic> _g2 = this->attributes;
-HXDLIN( 488)			while((_g1 < _g2->length)){
-HXLINE( 488)				 ::snikket::jingle::Attribute v = _g2->__get(_g1).StaticCast<  ::snikket::jingle::Attribute >();
-HXDLIN( 488)				_g1 = (_g1 + 1);
-HXDLIN( 488)				if ((v->key == HX_("candidate",43,34,d8,d0))) {
-HXLINE( 488)					_g->push(v);
+HXLINE( 490)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 490)		{
+HXLINE( 490)			int _g1 = 0;
+HXDLIN( 490)			::Array< ::Dynamic> _g2 = this->attributes;
+HXDLIN( 490)			while((_g1 < _g2->length)){
+HXLINE( 490)				 ::snikket::jingle::Attribute v = _g2->__get(_g1).StaticCast<  ::snikket::jingle::Attribute >();
+HXDLIN( 490)				_g1 = (_g1 + 1);
+HXDLIN( 490)				if ((v->key == HX_("candidate",43,34,d8,d0))) {
+HXLINE( 490)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 488)		::Array< ::Dynamic> _this = _g;
-HXDLIN( 488)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 488)		{
-HXLINE( 488)			int _g3 = 0;
-HXDLIN( 488)			int _g4 = _this->length;
-HXDLIN( 488)			while((_g3 < _g4)){
-HXLINE( 488)				_g3 = (_g3 + 1);
-HXDLIN( 488)				int i = (_g3 - 1);
-HXDLIN( 488)				{
-HXLINE( 488)					 ::snikket::jingle::Attribute attr = ( ( ::snikket::jingle::Attribute)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 488)					 ::snikket::Stanza inValue = ::snikket::jingle::IceCandidate_obj::parse(attr->value,_gthis->mid,( (::String)(ufragPwd->__Field(HX_("ufrag",27,78,a4,a1),::hx::paccDynamic)) ))->toElement();
-HXDLIN( 488)					result->__unsafe_set(i,inValue);
+HXDLIN( 490)		::Array< ::Dynamic> _this = _g;
+HXDLIN( 490)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 490)		{
+HXLINE( 490)			int _g3 = 0;
+HXDLIN( 490)			int _g4 = _this->length;
+HXDLIN( 490)			while((_g3 < _g4)){
+HXLINE( 490)				_g3 = (_g3 + 1);
+HXDLIN( 490)				int i = (_g3 - 1);
+HXDLIN( 490)				{
+HXLINE( 490)					 ::snikket::jingle::Attribute attr = ( ( ::snikket::jingle::Attribute)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 490)					 ::snikket::Stanza inValue = ::snikket::jingle::IceCandidate_obj::parse(attr->value,_gthis->mid,( (::String)(ufragPwd->__Field(HX_("ufrag",27,78,a4,a1),::hx::paccDynamic)) ))->toElement();
+HXDLIN( 490)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 488)		transport->addChildren(result);
-HXLINE( 489)		transport->up();
-HXLINE( 490)		return transport;
+HXDLIN( 490)		transport->addChildren(result);
+HXLINE( 491)		transport->up();
+HXLINE( 492)		return transport;
             	}
 
 
@@ -940,11 +954,11 @@ HXLINE( 327)						mediaAttributes->push( ::snikket::jingle::Attribute_obj::__all
             					else {
 HXLINE( 329)						mediaAttributes->push( ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,HX_("recvonly",92,5d,be,b0),HX_("",00,00,00,00)));
             					}
-HXLINE( 326)					goto _hx_goto_45;
+HXLINE( 326)					goto _hx_goto_46;
             				}
             				if (  (_hx_switch_0==HX_("none",b8,12,0a,49)) ){
 HXLINE( 324)					mediaAttributes->push( ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a),HX_("",00,00,00,00)));
-HXDLIN( 324)					goto _hx_goto_45;
+HXDLIN( 324)					goto _hx_goto_46;
             				}
             				if (  (_hx_switch_0==HX_("responder",02,a1,00,29)) ){
 HXLINE( 332)					if (initiator) {
@@ -953,12 +967,12 @@ HXLINE( 333)						mediaAttributes->push( ::snikket::jingle::Attribute_obj::__all
             					else {
 HXLINE( 335)						mediaAttributes->push( ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,HX_("sendonly",b4,56,a7,f2),HX_("",00,00,00,00)));
             					}
-HXLINE( 332)					goto _hx_goto_45;
+HXLINE( 332)					goto _hx_goto_46;
             				}
             				/* default */{
 HXLINE( 338)					mediaAttributes->push( ::snikket::jingle::Attribute_obj::__alloc( HX_CTX ,HX_("sendrecv",6e,1e,9c,f4),HX_("",00,00,00,00)));
             				}
-            				_hx_goto_45:;
+            				_hx_goto_46:;
             			}
             		}
 HXLINE( 340)		bool _hx_tmp17;
diff --git a/Sources/c_snikket/src/snikket/jingle/MediaStream.cpp b/Sources/c_snikket/src/snikket/jingle/MediaStream.cpp
index b81f97a..e76c48d 100644
--- a/Sources/c_snikket/src/snikket/jingle/MediaStream.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/MediaStream.cpp
@@ -28,18 +28,18 @@
 #include <snikket/jingle/MediaStreamTrack.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_73a4884454ac5ac3_626_new,"snikket.jingle.MediaStream","new",0xfb2579ea,"snikket.jingle.MediaStream.new","snikket/jingle/PeerConnection.cpp.hx",626,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_646_addTrack,"snikket.jingle.MediaStream","addTrack",0x3c4636e0,"snikket.jingle.MediaStream.addTrack","snikket/jingle/PeerConnection.cpp.hx",646,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_650_getTracks,"snikket.jingle.MediaStream","getTracks",0x455c21c8,"snikket.jingle.MediaStream.getTracks","snikket/jingle/PeerConnection.cpp.hx",650,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_fa9a1f555469415a_242_getTracks__fromC,"snikket.jingle.MediaStream","getTracks__fromC",0xff2f97b1,"snikket.jingle.MediaStream.getTracks__fromC","HaxeCBridge.hx",242,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_631_makeAudio,"snikket.jingle.MediaStream","makeAudio",0x7ea15d12,"snikket.jingle.MediaStream.makeAudio","snikket/jingle/PeerConnection.cpp.hx",631,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_625_boot,"snikket.jingle.MediaStream","boot",0xbdbe3368,"snikket.jingle.MediaStream.boot","snikket/jingle/PeerConnection.cpp.hx",625,0xf9fab71d)
+HX_DEFINE_STACK_FRAME(_hx_pos_73a4884454ac5ac3_633_new,"snikket.jingle.MediaStream","new",0xfb2579ea,"snikket.jingle.MediaStream.new","snikket/jingle/PeerConnection.cpp.hx",633,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_653_addTrack,"snikket.jingle.MediaStream","addTrack",0x3c4636e0,"snikket.jingle.MediaStream.addTrack","snikket/jingle/PeerConnection.cpp.hx",653,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_657_getTracks,"snikket.jingle.MediaStream","getTracks",0x455c21c8,"snikket.jingle.MediaStream.getTracks","snikket/jingle/PeerConnection.cpp.hx",657,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_fa9a1f555469415a_250_getTracks__fromC,"snikket.jingle.MediaStream","getTracks__fromC",0xff2f97b1,"snikket.jingle.MediaStream.getTracks__fromC","HaxeCBridge.hx",250,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_638_makeAudio,"snikket.jingle.MediaStream","makeAudio",0x7ea15d12,"snikket.jingle.MediaStream.makeAudio","snikket/jingle/PeerConnection.cpp.hx",638,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_73a4884454ac5ac3_632_boot,"snikket.jingle.MediaStream","boot",0xbdbe3368,"snikket.jingle.MediaStream.boot","snikket/jingle/PeerConnection.cpp.hx",632,0xf9fab71d)
 namespace snikket{
 namespace jingle{
 
 void MediaStream_obj::__construct(){
-            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_626_new)
-HXDLIN( 626)		this->tracks = ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_633_new)
+HXDLIN( 633)		this->tracks = ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 Dynamic MediaStream_obj::__CreateEmpty() { return new MediaStream_obj; }
@@ -58,79 +58,79 @@ bool MediaStream_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void MediaStream_obj::addTrack( ::snikket::jingle::MediaStreamTrack track){
-            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_646_addTrack)
-HXDLIN( 646)		this->tracks->push(track);
+            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_653_addTrack)
+HXDLIN( 653)		this->tracks->push(track);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStream_obj,addTrack,(void))
 
 ::Array< ::Dynamic> MediaStream_obj::getTracks(){
-            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_650_getTracks)
-HXDLIN( 650)		return this->tracks;
+            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_657_getTracks)
+HXDLIN( 657)		return this->tracks;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStream_obj,getTracks,return )
 
 size_t MediaStream_obj::getTracks__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_fa9a1f555469415a_242_getTracks__fromC)
-HXDLIN( 242)		::Array< ::Dynamic> out = this->getTracks();
-HXDLIN( 242)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 242)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 242)			{
-HXDLIN( 242)				int _g = 0;
-HXDLIN( 242)				while((_g < out->length)){
-HXDLIN( 242)					 ::snikket::jingle::MediaStreamTrack el = out->__get(_g).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
-HXDLIN( 242)					_g = (_g + 1);
-HXDLIN( 242)					{
-HXDLIN( 242)						 ::Dynamic haxeObject = el;
-HXDLIN( 242)						void* ptr = haxeObject.mPtr;
-HXDLIN( 242)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 242)						{
-HXDLIN( 242)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 242)							int high = ptrInt64 >> 32;
-HXDLIN( 242)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 242)							if (::hx::IsNull( highMap )) {
-HXDLIN( 242)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_fa9a1f555469415a_250_getTracks__fromC)
+HXDLIN( 250)		::Array< ::Dynamic> out = this->getTracks();
+HXDLIN( 250)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 250)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 250)			{
+HXDLIN( 250)				int _g = 0;
+HXDLIN( 250)				while((_g < out->length)){
+HXDLIN( 250)					 ::snikket::jingle::MediaStreamTrack el = out->__get(_g).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
+HXDLIN( 250)					_g = (_g + 1);
+HXDLIN( 250)					{
+HXDLIN( 250)						 ::Dynamic haxeObject = el;
+HXDLIN( 250)						void* ptr = haxeObject.mPtr;
+HXDLIN( 250)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 250)						{
+HXDLIN( 250)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 250)							int high = ptrInt64 >> 32;
+HXDLIN( 250)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 250)							if (::hx::IsNull( highMap )) {
+HXDLIN( 250)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)								this1->set(low,highMap);
             							}
-HXDLIN( 242)							highMap->set(high,haxeObject);
+HXDLIN( 250)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 242)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 242)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 242)			{
-HXDLIN( 242)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 242)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 242)				int high1 = ptrInt641 >> 32;
-HXDLIN( 242)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 242)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 242)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 242)					this2->set(low1,highMap1);
+HXDLIN( 250)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 250)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 250)			{
+HXDLIN( 250)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 250)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 250)				int high1 = ptrInt641 >> 32;
+HXDLIN( 250)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 250)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 250)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 250)					this2->set(low1,highMap1);
             				}
-HXDLIN( 242)				highMap1->set(high1,out);
+HXDLIN( 250)				highMap1->set(high1,out);
             			}
-HXDLIN( 242)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 250)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 242)		return ( (size_t)(out->length) );
+HXDLIN( 250)		return ( (size_t)(out->length) );
             	}
 
 
  ::snikket::jingle::MediaStream MediaStream_obj::makeAudio(){
-            	HX_GC_STACKFRAME(&_hx_pos_73a4884454ac5ac3_631_makeAudio)
-HXLINE( 632)		 rtc::Description::Audio audio =  rtc::Description::Audio(::hx::StdString(::snikket::ID_obj::tiny()),cpp::Struct(rtc::Description::Direction::SendRecv));
-HXLINE( 633)		audio.addOpusCodec(107);
-HXLINE( 634)		audio.addPCMUCodec(0);
-HXLINE( 635)		audio.addAudioCodec(101,::hx::StdString(HX_("telephone-event/8000",36,ae,10,93)));
-HXLINE( 636)		 ::snikket::jingle::MediaStreamTrack media =  ::snikket::jingle::MediaStreamTrack_obj::__alloc( HX_CTX );
-HXLINE( 637)		media->media =  std::optional<  rtc::Description::Media >(audio);
-HXLINE( 638)		 ::snikket::jingle::MediaStream stream =  ::snikket::jingle::MediaStream_obj::__alloc( HX_CTX );
-HXLINE( 639)		stream->addTrack(media);
-HXLINE( 640)		return stream;
+            	HX_GC_STACKFRAME(&_hx_pos_73a4884454ac5ac3_638_makeAudio)
+HXLINE( 639)		 rtc::Description::Audio audio =  rtc::Description::Audio(::hx::StdString(::snikket::ID_obj::tiny()),cpp::Struct(rtc::Description::Direction::SendRecv));
+HXLINE( 640)		audio.addOpusCodec(107);
+HXLINE( 641)		audio.addPCMUCodec(0);
+HXLINE( 642)		audio.addAudioCodec(101,::hx::StdString(HX_("telephone-event/8000",36,ae,10,93)));
+HXLINE( 643)		 ::snikket::jingle::MediaStreamTrack media =  ::snikket::jingle::MediaStreamTrack_obj::__alloc( HX_CTX );
+HXLINE( 644)		media->media =  std::optional<  rtc::Description::Media >(audio);
+HXLINE( 645)		 ::snikket::jingle::MediaStream stream =  ::snikket::jingle::MediaStream_obj::__alloc( HX_CTX );
+HXLINE( 646)		stream->addTrack(media);
+HXLINE( 647)		return stream;
             	}
 
 
@@ -252,8 +252,8 @@ void MediaStream_obj::__register()
 void MediaStream_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_625_boot)
-HXDLIN( 625)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_73a4884454ac5ac3_632_boot)
+HXDLIN( 632)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("getTracks",be,b4,d3,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
diff --git a/Sources/c_snikket/src/snikket/jingle/MediaStreamTrack.cpp b/Sources/c_snikket/src/snikket/jingle/MediaStreamTrack.cpp
index 3187a92..b549f78 100644
--- a/Sources/c_snikket/src/snikket/jingle/MediaStreamTrack.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/MediaStreamTrack.cpp
@@ -68,10 +68,10 @@
 HX_DEFINE_STACK_FRAME(_hx_pos_199cfc803453bfcf_371_new,"snikket.jingle.MediaStreamTrack","new",0x86a854e5,"snikket.jingle.MediaStreamTrack.new","snikket/jingle/PeerConnection.cpp.hx",371,0xf9fab71d)
 HX_DEFINE_STACK_FRAME(_hx_pos_199cfc803453bfcf_375_new,"snikket.jingle.MediaStreamTrack","new",0x86a854e5,"snikket.jingle.MediaStreamTrack.new","snikket/jingle/PeerConnection.cpp.hx",375,0xf9fab71d)
 HX_DEFINE_STACK_FRAME(_hx_pos_199cfc803453bfcf_337_new,"snikket.jingle.MediaStreamTrack","new",0x86a854e5,"snikket.jingle.MediaStreamTrack.new","snikket/jingle/PeerConnection.cpp.hx",337,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_271_id__fromC,"snikket.jingle.MediaStreamTrack","id__fromC",0xf6db4c43,"snikket.jingle.MediaStreamTrack.id__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_271_muted__fromC,"snikket.jingle.MediaStreamTrack","muted__fromC",0x6371b749,"snikket.jingle.MediaStreamTrack.muted__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_271_kind__fromC,"snikket.jingle.MediaStreamTrack","kind__fromC",0x33c2332a,"snikket.jingle.MediaStreamTrack.kind__fromC","HaxeCBridge.hx",271,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_260_supportedAudioFormats__fromC,"snikket.jingle.MediaStreamTrack","supportedAudioFormats__fromC",0xed795960,"snikket.jingle.MediaStreamTrack.supportedAudioFormats__fromC","HaxeCBridge.hx",260,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_308_id__fromC,"snikket.jingle.MediaStreamTrack","id__fromC",0xf6db4c43,"snikket.jingle.MediaStreamTrack.id__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_308_muted__fromC,"snikket.jingle.MediaStreamTrack","muted__fromC",0x6371b749,"snikket.jingle.MediaStreamTrack.muted__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_308_kind__fromC,"snikket.jingle.MediaStreamTrack","kind__fromC",0x33c2332a,"snikket.jingle.MediaStreamTrack.kind__fromC","HaxeCBridge.hx",308,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_297_supportedAudioFormats__fromC,"snikket.jingle.MediaStreamTrack","supportedAudioFormats__fromC",0xed795960,"snikket.jingle.MediaStreamTrack.supportedAudioFormats__fromC","HaxeCBridge.hx",297,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_398_get_media,"snikket.jingle.MediaStreamTrack","get_media",0xf29b9780,"snikket.jingle.MediaStreamTrack.get_media","snikket/jingle/PeerConnection.cpp.hx",398,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_406_get_id,"snikket.jingle.MediaStreamTrack","get_id",0x616f4fbf,"snikket.jingle.MediaStreamTrack.get_id","snikket/jingle/PeerConnection.cpp.hx",406,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_413_get_kind,"snikket.jingle.MediaStreamTrack","get_kind",0x19089638,"snikket.jingle.MediaStreamTrack.get_kind","snikket/jingle/PeerConnection.cpp.hx",413,0xf9fab71d)
@@ -80,21 +80,21 @@ HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_416_get_supportedAudioFormats,"sni
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_434_set_track,"snikket.jingle.MediaStreamTrack","set_track",0xe6500d33,"snikket.jingle.MediaStreamTrack.set_track","snikket/jingle/PeerConnection.cpp.hx",434,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_467_addPCMListener,"snikket.jingle.MediaStreamTrack","addPCMListener",0xde4994a8,"snikket.jingle.MediaStreamTrack.addPCMListener","snikket/jingle/PeerConnection.cpp.hx",467,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_221_addPCMListener__fromC,"snikket.jingle.MediaStreamTrack","addPCMListener__fromC",0x90d840d1,"snikket.jingle.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_244_addPCMListener__fromC,"snikket.jingle.MediaStreamTrack","addPCMListener__fromC",0x90d840d1,"snikket.jingle.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_252_addPCMListener__fromC,"snikket.jingle.MediaStreamTrack","addPCMListener__fromC",0x90d840d1,"snikket.jingle.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_492_onFrame,"snikket.jingle.MediaStreamTrack","onFrame",0x55f2c193,"snikket.jingle.MediaStreamTrack.onFrame","snikket/jingle/PeerConnection.cpp.hx",492,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_521_addReadyForPCMListener,"snikket.jingle.MediaStreamTrack","addReadyForPCMListener",0x339e25e2,"snikket.jingle.MediaStreamTrack.addReadyForPCMListener","snikket/jingle/PeerConnection.cpp.hx",521,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_221_addReadyForPCMListener__fromC,"snikket.jingle.MediaStreamTrack","addReadyForPCMListener__fromC",0xd615aad7,"snikket.jingle.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_244_addReadyForPCMListener__fromC,"snikket.jingle.MediaStreamTrack","addReadyForPCMListener__fromC",0xd615aad7,"snikket.jingle.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_252_addReadyForPCMListener__fromC,"snikket.jingle.MediaStreamTrack","addReadyForPCMListener__fromC",0xd615aad7,"snikket.jingle.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_528_notifyReadyForData,"snikket.jingle.MediaStreamTrack","notifyReadyForData",0x61f3b534,"snikket.jingle.MediaStreamTrack.notifyReadyForData","snikket/jingle/PeerConnection.cpp.hx",528,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_532_notifyReadyForData,"snikket.jingle.MediaStreamTrack","notifyReadyForData",0x61f3b534,"snikket.jingle.MediaStreamTrack.notifyReadyForData","snikket/jingle/PeerConnection.cpp.hx",532,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_552_writePCM,"snikket.jingle.MediaStreamTrack","writePCM",0x763990d6,"snikket.jingle.MediaStreamTrack.writePCM","snikket/jingle/PeerConnection.cpp.hx",552,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_554_writePCM,"snikket.jingle.MediaStreamTrack","writePCM",0x763990d6,"snikket.jingle.MediaStreamTrack.writePCM","snikket/jingle/PeerConnection.cpp.hx",554,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_551_writePCM,"snikket.jingle.MediaStreamTrack","writePCM",0x763990d6,"snikket.jingle.MediaStreamTrack.writePCM","snikket/jingle/PeerConnection.cpp.hx",551,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_244_writePCM__fromC,"snikket.jingle.MediaStreamTrack","writePCM__fromC",0x54304663,"snikket.jingle.MediaStreamTrack.writePCM__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_591_onAudioLoop,"snikket.jingle.MediaStreamTrack","onAudioLoop",0x959462c0,"snikket.jingle.MediaStreamTrack.onAudioLoop","snikket/jingle/PeerConnection.cpp.hx",591,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_595_write,"snikket.jingle.MediaStreamTrack","write",0xf83bdca4,"snikket.jingle.MediaStreamTrack.write","snikket/jingle/PeerConnection.cpp.hx",595,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_607_advanceTimestamp,"snikket.jingle.MediaStreamTrack","advanceTimestamp",0xa8dad84f,"snikket.jingle.MediaStreamTrack.advanceTimestamp","snikket/jingle/PeerConnection.cpp.hx",607,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_610_stop,"snikket.jingle.MediaStreamTrack","stop",0x4ffb5fdd,"snikket.jingle.MediaStreamTrack.stop","snikket/jingle/PeerConnection.cpp.hx",610,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_6a2465e57550c9c8_252_writePCM__fromC,"snikket.jingle.MediaStreamTrack","writePCM__fromC",0x54304663,"snikket.jingle.MediaStreamTrack.writePCM__fromC","HaxeCBridge.hx",252,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_598_onAudioLoop,"snikket.jingle.MediaStreamTrack","onAudioLoop",0x959462c0,"snikket.jingle.MediaStreamTrack.onAudioLoop","snikket/jingle/PeerConnection.cpp.hx",598,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_602_write,"snikket.jingle.MediaStreamTrack","write",0xf83bdca4,"snikket.jingle.MediaStreamTrack.write","snikket/jingle/PeerConnection.cpp.hx",602,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_614_advanceTimestamp,"snikket.jingle.MediaStreamTrack","advanceTimestamp",0xa8dad84f,"snikket.jingle.MediaStreamTrack.advanceTimestamp","snikket/jingle/PeerConnection.cpp.hx",614,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_617_stop,"snikket.jingle.MediaStreamTrack","stop",0x4ffb5fdd,"snikket.jingle.MediaStreamTrack.stop","snikket/jingle/PeerConnection.cpp.hx",617,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_362_fromTrack,"snikket.jingle.MediaStreamTrack","fromTrack",0x73deaf06,"snikket.jingle.MediaStreamTrack.fromTrack","snikket/jingle/PeerConnection.cpp.hx",362,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_473_pcmToUlaw,"snikket.jingle.MediaStreamTrack","pcmToUlaw",0x7deff727,"snikket.jingle.MediaStreamTrack.pcmToUlaw","snikket/jingle/PeerConnection.cpp.hx",473,0xf9fab71d)
 HX_LOCAL_STACK_FRAME(_hx_pos_199cfc803453bfcf_337_boot,"snikket.jingle.MediaStreamTrack","boot",0x44baf40d,"snikket.jingle.MediaStreamTrack.boot","snikket/jingle/PeerConnection.cpp.hx",337,0xf9fab71d)
@@ -150,8 +150,7 @@ HXLINE( 385)				_hx_tmp1 = false;
 HXDLIN( 385)			if (_hx_tmp1) {
 HXLINE( 386)				 ::Dynamic packet = _gthis->audioQ->pop();
 HXLINE( 387)				_gthis->write(( (::Array< unsigned char >)(packet->__Field(HX_("payload",8e,bf,35,ed),::hx::paccDynamic)) ),( (unsigned char)(packet->__Field(HX_("payloadType",68,bd,49,af),::hx::paccDynamic)) ),( (int)(packet->__Field(HX_("clockRate",ce,87,24,24),::hx::paccDynamic)) ));
-HXLINE( 388)				 ::snikket::jingle::MediaStreamTrack _gthis2 = _gthis;
-HXDLIN( 388)				_gthis2->advanceTimestamp(::Std_obj::_hx_int((( (Float)(( (::Array< unsigned char >)(packet->__Field(HX_("payload",8e,bf,35,ed),::hx::paccDynamic)) )->length) ) / ( (Float)(packet->__Field(HX_("channels",50,aa,ee,6a),::hx::paccDynamic)) ))));
+HXLINE( 388)				_gthis->advanceTimestamp(( (int)(packet->__Field(HX_("samples",09,c5,c9,83),::hx::paccDynamic)) ));
             			}
 HXLINE( 390)			bool _hx_tmp2;
 HXDLIN( 390)			if (_gthis->waitForQ) {
@@ -198,73 +197,73 @@ bool MediaStreamTrack_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String MediaStreamTrack_obj::id__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_271_id__fromC)
-HXDLIN( 271)		return this->get_id();
+            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_308_id__fromC)
+HXDLIN( 308)		return this->get_id();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,id__fromC,return )
 
 bool MediaStreamTrack_obj::muted__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_271_muted__fromC)
-HXDLIN( 271)		return this->get_muted();
+            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_308_muted__fromC)
+HXDLIN( 308)		return this->get_muted();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,muted__fromC,return )
 
 ::String MediaStreamTrack_obj::kind__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_271_kind__fromC)
-HXDLIN( 271)		return this->get_kind();
+            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_308_kind__fromC)
+HXDLIN( 308)		return this->get_kind();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,kind__fromC,return )
 
 size_t MediaStreamTrack_obj::supportedAudioFormats__fromC(void*** outPtr){
-            	HX_GC_STACKFRAME(&_hx_pos_6a2465e57550c9c8_260_supportedAudioFormats__fromC)
-HXDLIN( 260)		::Array< ::Dynamic> x = this->get_supportedAudioFormats();
-HXDLIN( 260)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 260)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 260)			{
-HXDLIN( 260)				int _g = 0;
-HXDLIN( 260)				while((_g < x->length)){
-HXDLIN( 260)					 ::snikket::jingle::AudioFormat el = x->__get(_g).StaticCast<  ::snikket::jingle::AudioFormat >();
-HXDLIN( 260)					_g = (_g + 1);
-HXDLIN( 260)					{
-HXDLIN( 260)						 ::Dynamic haxeObject = el;
-HXDLIN( 260)						void* ptr = haxeObject.mPtr;
-HXDLIN( 260)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 260)						{
-HXDLIN( 260)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 260)							int low = ptrInt64 & 0xffffffff;
-HXDLIN( 260)							int high = ptrInt64 >> 32;
-HXDLIN( 260)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
-HXDLIN( 260)							if (::hx::IsNull( highMap )) {
-HXDLIN( 260)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 260)								this1->set(low,highMap);
+            	HX_GC_STACKFRAME(&_hx_pos_6a2465e57550c9c8_297_supportedAudioFormats__fromC)
+HXDLIN( 297)		::Array< ::Dynamic> x = this->get_supportedAudioFormats();
+HXDLIN( 297)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 297)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 297)			{
+HXDLIN( 297)				int _g = 0;
+HXDLIN( 297)				while((_g < x->length)){
+HXDLIN( 297)					 ::snikket::jingle::AudioFormat el = x->__get(_g).StaticCast<  ::snikket::jingle::AudioFormat >();
+HXDLIN( 297)					_g = (_g + 1);
+HXDLIN( 297)					{
+HXDLIN( 297)						 ::Dynamic haxeObject = el;
+HXDLIN( 297)						void* ptr = haxeObject.mPtr;
+HXDLIN( 297)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 297)						{
+HXDLIN( 297)							 ::haxe::ds::IntMap this1 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 297)							int low = ptrInt64 & 0xffffffff;
+HXDLIN( 297)							int high = ptrInt64 >> 32;
+HXDLIN( 297)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
+HXDLIN( 297)							if (::hx::IsNull( highMap )) {
+HXDLIN( 297)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 297)								this1->set(low,highMap);
             							}
-HXDLIN( 260)							highMap->set(high,haxeObject);
+HXDLIN( 297)							highMap->set(high,haxeObject);
             						}
             					}
             				}
             			}
-HXDLIN( 260)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 260)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 260)			{
-HXDLIN( 260)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
-HXDLIN( 260)				int low1 = ptrInt641 & 0xffffffff;
-HXDLIN( 260)				int high1 = ptrInt641 >> 32;
-HXDLIN( 260)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
-HXDLIN( 260)				if (::hx::IsNull( highMap1 )) {
-HXDLIN( 260)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
-HXDLIN( 260)					this2->set(low1,highMap1);
+HXDLIN( 297)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 297)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 297)			{
+HXDLIN( 297)				 ::haxe::ds::IntMap this2 = ::_HaxeCBridge::Internal_obj::gcRetainMap;
+HXDLIN( 297)				int low1 = ptrInt641 & 0xffffffff;
+HXDLIN( 297)				int high1 = ptrInt641 >> 32;
+HXDLIN( 297)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
+HXDLIN( 297)				if (::hx::IsNull( highMap1 )) {
+HXDLIN( 297)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXDLIN( 297)					this2->set(low1,highMap1);
             				}
-HXDLIN( 260)				highMap1->set(high1,x);
+HXDLIN( 297)				highMap1->set(high1,x);
             			}
-HXDLIN( 260)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 297)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 260)		return ( (size_t)(x->length) );
+HXDLIN( 297)		return ( (size_t)(x->length) );
             	}
 
 
@@ -429,8 +428,8 @@ HXLINE( 221)			callback1(( (short*)(ptr) ),( (size_t)(a0->length) ),a1,a2,callba
             		}
             		HX_END_LOCAL_FUNC3((void))
 
-            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_244_addPCMListener__fromC)
-HXDLIN( 244)		this->addPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_252_addPCMListener__fromC)
+HXDLIN( 252)		this->addPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
@@ -523,8 +522,8 @@ HXLINE( 221)			callback(callback__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_244_addReadyForPCMListener__fromC)
-HXDLIN( 244)		this->addReadyForPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_252_addReadyForPCMListener__fromC)
+HXDLIN( 252)		this->addReadyForPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
@@ -572,84 +571,101 @@ HXDLIN( 552)			return false;
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1,::Array< short >,pcm, ::snikket::jingle::MediaStreamTrack,_gthis,int,channels,int,clockRate, ::snikket::jingle::AudioFormat,format) HXARGC(0)
             		void _hx_run(){
             			HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_554_writePCM)
-HXLINE( 555)			_gthis->mutex->acquire();
-HXLINE( 556)			Float stamp;
-HXDLIN( 556)			if ((_gthis->audioQ->length < 1)) {
-HXLINE( 557)				_gthis->bufferSizeInSeconds = ::Math_obj::max(_gthis->bufferSizeInSeconds,(_gthis->bufferSizeInSeconds + ((Float)0.1)));
-HXLINE( 558)				Float stamp1 =  ::__time_stamp();
-HXLINE( 556)				stamp = (stamp1 + _gthis->bufferSizeInSeconds);
+HXLINE( 555)			int samples = ::Std_obj::_hx_int((( (Float)(pcm->length) ) / ( (Float)(channels) )));
+HXLINE( 556)			_gthis->mutex->acquire();
+HXLINE( 557)			Float stamp;
+HXDLIN( 557)			if ((_gthis->audioQ->length < 1)) {
+HXLINE( 558)				_gthis->bufferSizeInSeconds = ::Math_obj::max(_gthis->bufferSizeInSeconds,(_gthis->bufferSizeInSeconds + ((Float)0.1)));
+HXLINE( 559)				Float stamp1 =  ::__time_stamp();
+HXLINE( 557)				stamp = (stamp1 + _gthis->bufferSizeInSeconds);
             			}
             			else {
-HXLINE( 556)				stamp = ( (Float)((_gthis->audioQ->__get(0)->__Field(HX_("stamp",03,70,0b,84),::hx::paccDynamic) + ((( (Float)(pcm->length) ) / (( (Float)(clockRate) ) / ( (Float)(1000) ))) / ((Float)1000.0)))) );
+HXLINE( 557)				stamp = ( (Float)((_gthis->audioQ->__get(0)->__Field(HX_("stamp",03,70,0b,84),::hx::paccDynamic) + ((( (Float)(samples) ) / (( (Float)(clockRate) ) / ( (Float)(1000) ))) / ((Float)1000.0)))) );
             			}
-HXLINE( 562)			_gthis->mutex->release();
-HXLINE( 563)			if ((format->format == HX_("PCMU",1b,2c,14,35))) {
-HXLINE( 564)				int channels1 = channels;
-HXDLIN( 564)				unsigned char format1 = format->payloadType;
-HXDLIN( 564)				int clockRate1 = clockRate;
-HXDLIN( 564)				 ::Dynamic f = ::snikket::jingle::MediaStreamTrack_obj::pcmToUlaw_dyn();
-HXDLIN( 564)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new(pcm->length);
-HXDLIN( 564)				{
-HXLINE( 564)					int _g = 0;
-HXDLIN( 564)					int _g1 = pcm->length;
-HXDLIN( 564)					while((_g < _g1)){
-HXLINE( 564)						_g = (_g + 1);
-HXDLIN( 564)						int i = (_g - 1);
-HXDLIN( 564)						{
-HXLINE( 564)							unsigned char inValue = ( (unsigned char)(f(_hx_array_unsafe_get(pcm,i))) );
-HXDLIN( 564)							result->__unsafe_set(i,inValue);
+HXLINE( 563)			_gthis->mutex->release();
+HXLINE( 564)			if ((format->format == HX_("PCMU",1b,2c,14,35))) {
+HXLINE( 565)				int channels1 = channels;
+HXDLIN( 565)				unsigned char format1 = format->payloadType;
+HXDLIN( 565)				int clockRate1 = clockRate;
+HXDLIN( 565)				 ::Dynamic f = ::snikket::jingle::MediaStreamTrack_obj::pcmToUlaw_dyn();
+HXDLIN( 565)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new(pcm->length);
+HXDLIN( 565)				{
+HXLINE( 565)					int _g = 0;
+HXDLIN( 565)					int _g1 = pcm->length;
+HXDLIN( 565)					while((_g < _g1)){
+HXLINE( 565)						_g = (_g + 1);
+HXDLIN( 565)						int i = (_g - 1);
+HXDLIN( 565)						{
+HXLINE( 565)							unsigned char inValue = ( (unsigned char)(f(_hx_array_unsafe_get(pcm,i))) );
+HXDLIN( 565)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN( 564)				 ::Dynamic packet =  ::Dynamic(::hx::Anon_obj::Create(5)
-            					->setFixed(0,HX_("stamp",03,70,0b,84),stamp)
-            					->setFixed(1,HX_("payloadType",68,bd,49,af),format1)
-            					->setFixed(2,HX_("payload",8e,bf,35,ed),result)
-            					->setFixed(3,HX_("clockRate",ce,87,24,24),clockRate1)
-            					->setFixed(4,HX_("channels",50,aa,ee,6a),channels1));
-HXLINE( 565)				_gthis->mutex->acquire();
-HXLINE( 566)				_gthis->audioQ->unshift(packet);
-HXLINE( 567)				_gthis->mutex->release();
+HXDLIN( 565)				 ::Dynamic packet =  ::Dynamic(::hx::Anon_obj::Create(6)
+            					->setFixed(0,HX_("samples",09,c5,c9,83),samples)
+            					->setFixed(1,HX_("stamp",03,70,0b,84),stamp)
+            					->setFixed(2,HX_("payloadType",68,bd,49,af),format1)
+            					->setFixed(3,HX_("payload",8e,bf,35,ed),result)
+            					->setFixed(4,HX_("clockRate",ce,87,24,24),clockRate1)
+            					->setFixed(5,HX_("channels",50,aa,ee,6a),channels1));
+HXLINE( 566)				_gthis->mutex->acquire();
+HXLINE( 567)				_gthis->audioQ->unshift(packet);
+HXLINE( 568)				_gthis->mutex->release();
             			}
             			else {
-HXLINE( 568)				if ((format->format == HX_("opus",bf,11,b4,49))) {
-HXLINE( 569)					if (!_gthis->opusEncoder) {
-HXLINE( 570)						::cpp::Pointer< int > tmp = null();
-HXDLIN( 570)						int clockRate2 = clockRate;
-HXDLIN( 570)						int channels2 = channels;
-HXDLIN( 570)						int _hx_tmp = OPUS_APPLICATION_VOIP;
-HXDLIN( 570)						_gthis->opusEncoder = opus_encoder_create(clockRate2,channels2,_hx_tmp,tmp);
-HXLINE( 571)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_BITRATE(24));
-HXLINE( 572)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_PACKET_LOSS_PERC(5));
-HXLINE( 573)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_INBAND_FEC(1));
+HXLINE( 569)				if ((format->format == HX_("opus",bf,11,b4,49))) {
+HXLINE( 570)					if (!_gthis->opusEncoder) {
+HXLINE( 571)						::cpp::Pointer< int > tmp = null();
+HXDLIN( 571)						int clockRate2 = clockRate;
+HXDLIN( 571)						int channels2 = channels;
+HXDLIN( 571)						int _hx_tmp = OPUS_APPLICATION_VOIP;
+HXDLIN( 571)						_gthis->opusEncoder = opus_encoder_create(clockRate2,channels2,_hx_tmp,tmp);
+HXLINE( 572)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_BITRATE(24000));
+HXLINE( 573)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_PACKET_LOSS_PERC(5));
+HXLINE( 574)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_INBAND_FEC(1));
+            					}
+HXLINE( 576)					::Array< unsigned char > rawOpus = ::Array_obj< unsigned char >::__new((pcm->length * 2));
+HXLINE( 578)					::cpp::Pointer< short > tmp1 = ( (::cpp::Pointer< short >)(::cpp::Pointer_obj::ofArray(pcm)) );
+HXDLIN( 578)					::cpp::Pointer< unsigned char > tmp2 = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(rawOpus)) );
+HXDLIN( 578)					int encoded = opus_encode(_gthis->opusEncoder,tmp1,samples,tmp2,rawOpus->length);
+HXLINE( 579)					if ((encoded < 0)) {
+HXLINE( 580)						::haxe::Log_obj::trace(HX_("Opus encode failed",86,4c,9a,50), ::Dynamic(::hx::Anon_obj::Create(5)
+            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.jingle.MediaStreamTrack",73,fe,80,a9))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,encoded))
+            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("writePCM",7b,97,f5,23))
+            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/jingle/PeerConnection.cpp.hx",1d,b7,fa,f9))
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),580)));
+            					}
+            					else {
+HXLINE( 582)						rawOpus->resize(encoded);
+HXLINE( 583)						::haxe::Log_obj::trace(HX_("opus write",be,63,df,17), ::Dynamic(::hx::Anon_obj::Create(5)
+            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.jingle.MediaStreamTrack",73,fe,80,a9))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,encoded)->init(1,rawOpus))
+            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("writePCM",7b,97,f5,23))
+            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/jingle/PeerConnection.cpp.hx",1d,b7,fa,f9))
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),583)));
+HXLINE( 584)						 ::Dynamic packet1 =  ::Dynamic(::hx::Anon_obj::Create(6)
+            							->setFixed(0,HX_("samples",09,c5,c9,83),samples)
+            							->setFixed(1,HX_("stamp",03,70,0b,84),stamp)
+            							->setFixed(2,HX_("payloadType",68,bd,49,af),format->payloadType)
+            							->setFixed(3,HX_("payload",8e,bf,35,ed),rawOpus)
+            							->setFixed(4,HX_("clockRate",ce,87,24,24),clockRate)
+            							->setFixed(5,HX_("channels",50,aa,ee,6a),channels));
+HXLINE( 585)						_gthis->mutex->acquire();
+HXLINE( 586)						_gthis->audioQ->unshift(packet1);
+HXLINE( 587)						_gthis->mutex->release();
             					}
-HXLINE( 575)					::Array< unsigned char > rawOpus = ::Array_obj< unsigned char >::__new((pcm->length * 2));
-HXLINE( 576)					::cpp::Pointer< short > tmp1 = ( (::cpp::Pointer< short >)(::cpp::Pointer_obj::ofArray(pcm)) );
-HXDLIN( 576)					::cpp::Pointer< unsigned char > tmp2 = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(rawOpus)) );
-HXDLIN( 576)					cpp::Struct<  OpusEncoder* > _gthis1 = _gthis->opusEncoder;
-HXDLIN( 576)					int encoded = ::Std_obj::_hx_int((( (Float)(pcm->length) ) / ( (Float)(channels) )));
-HXDLIN( 576)					int encoded1 = opus_encode(_gthis1,tmp1,encoded,tmp2,rawOpus->length);
-HXLINE( 577)					rawOpus->resize(encoded1);
-HXLINE( 578)					 ::Dynamic packet1 =  ::Dynamic(::hx::Anon_obj::Create(5)
-            						->setFixed(0,HX_("stamp",03,70,0b,84),stamp)
-            						->setFixed(1,HX_("payloadType",68,bd,49,af),format->payloadType)
-            						->setFixed(2,HX_("payload",8e,bf,35,ed),rawOpus)
-            						->setFixed(3,HX_("clockRate",ce,87,24,24),clockRate)
-            						->setFixed(4,HX_("channels",50,aa,ee,6a),channels));
-HXLINE( 579)					_gthis->mutex->acquire();
-HXLINE( 580)					_gthis->audioQ->unshift(packet1);
-HXLINE( 581)					_gthis->mutex->release();
             				}
             				else {
-HXLINE( 583)					::haxe::Log_obj::trace(HX_("Ignoring audio meant to go out as",e3,e7,4f,55), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 590)					::haxe::Log_obj::trace(HX_("Ignoring audio meant to go out as",e3,e7,4f,55), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.jingle.MediaStreamTrack",73,fe,80,a9))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(3)->init(0,format->format)->init(1,format->clockRate)->init(2,format->channels))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("writePCM",7b,97,f5,23))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/jingle/PeerConnection.cpp.hx",1d,b7,fa,f9))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),583)));
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),590)));
             				}
             			}
-HXLINE( 585)			_gthis->notifyReadyForData(false);
+HXLINE( 592)			_gthis->notifyReadyForData(false);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
@@ -666,67 +682,74 @@ HXLINE( 554)		this->eventLoop->run( ::Dynamic(new _hx_Closure_1(pcm,_gthis,chann
 HX_DEFINE_DYNAMIC_FUNC3(MediaStreamTrack_obj,writePCM,(void))
 
 void MediaStreamTrack_obj::writePCM__fromC(::cpp::Pointer< short > pcm,size_t pcm__len,int clockRate,int channels){
-            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_244_writePCM__fromC)
-HXLINE( 224)		::cpp::Pointer< short > _this = pcm->reinterpret();
-HXDLIN( 224)		::Array< short > result = ::Array_obj< short >::__new();
-HXDLIN( 224)		::cpp::Pointer< short > tmp = _this;
-HXDLIN( 224)		result->setUnmanagedData(tmp,( (int)(pcm__len) ));
-HXLINE( 244)		this->writePCM(result->copy(),clockRate,channels);
+            	HX_STACKFRAME(&_hx_pos_6a2465e57550c9c8_252_writePCM__fromC)
+HXLINE( 231)		::Array< short > _hx_tmp;
+HXDLIN( 231)		if (::hx::IsNull( pcm )) {
+HXLINE( 231)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 231)			::cpp::Pointer< short > _this = pcm->reinterpret();
+HXDLIN( 231)			::Array< short > result = ::Array_obj< short >::__new();
+HXDLIN( 231)			::cpp::Pointer< short > tmp = _this;
+HXDLIN( 231)			result->setUnmanagedData(tmp,( (int)(pcm__len) ));
+HXDLIN( 231)			_hx_tmp = result->copy();
+            		}
+HXLINE( 252)		this->writePCM(_hx_tmp,clockRate,channels);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(MediaStreamTrack_obj,writePCM__fromC,(void))
 
 void MediaStreamTrack_obj::onAudioLoop( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_591_onAudioLoop)
-HXDLIN( 591)		this->eventLoop->run(callback);
+            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_598_onAudioLoop)
+HXDLIN( 598)		this->eventLoop->run(callback);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,onAudioLoop,(void))
 
 void MediaStreamTrack_obj::write(::Array< unsigned char > payload,unsigned char payloadType,int clockRate){
-            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_595_write)
-HXLINE( 596)		bool _hx_tmp;
-HXDLIN( 596)		if (!(!track)) {
-HXLINE( 596)			_hx_tmp = !(this->track->isOpen());
+            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_602_write)
+HXLINE( 603)		bool _hx_tmp;
+HXDLIN( 603)		if (!(!track)) {
+HXLINE( 603)			_hx_tmp = !(this->track->isOpen());
             		}
             		else {
-HXLINE( 596)			_hx_tmp = true;
+HXLINE( 603)			_hx_tmp = true;
             		}
-HXDLIN( 596)		if (_hx_tmp) {
-HXLINE( 596)			return;
+HXDLIN( 603)		if (_hx_tmp) {
+HXLINE( 603)			return;
             		}
-HXLINE( 598)		this->rtpPacketizationConfig->payloadType = payloadType;
-HXLINE( 599)		this->rtpPacketizationConfig->clockRate = ( (unsigned int)(clockRate) );
-HXLINE( 600)		::cpp::Pointer<  std::byte > tmp = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(payload)) )->reinterpret();
-HXDLIN( 600)		this->track->send(tmp,( (size_t)(payload->length) ));
+HXLINE( 605)		this->rtpPacketizationConfig->payloadType = payloadType;
+HXLINE( 606)		this->rtpPacketizationConfig->clockRate = ( (unsigned int)(clockRate) );
+HXLINE( 607)		::cpp::Pointer<  std::byte > tmp = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(payload)) )->reinterpret();
+HXDLIN( 607)		this->track->send(tmp,( (size_t)(payload->length) ));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(MediaStreamTrack_obj,write,(void))
 
 void MediaStreamTrack_obj::advanceTimestamp(int samples){
-            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_607_advanceTimestamp)
-HXDLIN( 607)		this->rtpPacketizationConfig->timestamp = (this->rtpPacketizationConfig->timestamp + samples);
+            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_614_advanceTimestamp)
+HXDLIN( 614)		this->rtpPacketizationConfig->timestamp = (this->rtpPacketizationConfig->timestamp + samples);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,advanceTimestamp,(void))
 
 void MediaStreamTrack_obj::stop(){
-            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_610_stop)
-HXLINE( 611)		this->timer->stop();
-HXLINE( 612)		this->mutex->acquire();
-HXLINE( 613)		this->alive = false;
-HXLINE( 614)		if (this->track->isOpen()) {
-HXLINE( 614)			this->track->close();
+            	HX_STACKFRAME(&_hx_pos_199cfc803453bfcf_617_stop)
+HXLINE( 618)		this->timer->stop();
+HXLINE( 619)		this->mutex->acquire();
+HXLINE( 620)		this->alive = false;
+HXLINE( 621)		if (this->track->isOpen()) {
+HXLINE( 621)			this->track->close();
             		}
-HXLINE( 615)		if (opus) {
-HXLINE( 616)			opus_decoder_destroy(this->opus);
-HXLINE( 617)			this->opus = null();
+HXLINE( 622)		if (opus) {
+HXLINE( 623)			opus_decoder_destroy(this->opus);
+HXLINE( 624)			this->opus = null();
             		}
-HXLINE( 619)		this->mutex->release();
+HXLINE( 626)		this->mutex->release();
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/jingle/PeerConnection.cpp b/Sources/c_snikket/src/snikket/jingle/PeerConnection.cpp
index 018c92e..842c408 100644
--- a/Sources/c_snikket/src/snikket/jingle/PeerConnection.cpp
+++ b/Sources/c_snikket/src/snikket/jingle/PeerConnection.cpp
@@ -49,104 +49,104 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_8cd3f69017bd5103_768_new,"snikket.jingle.PeerConnection","new",0x0e347f5e,"snikket.jingle.PeerConnection.new","snikket/jingle/PeerConnection.cpp.hx",768,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_816_onLocalDescription,"snikket.jingle.PeerConnection","onLocalDescription",0x9c63d352,"snikket.jingle.PeerConnection.onLocalDescription","snikket/jingle/PeerConnection.cpp.hx",816,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_814_onLocalDescription,"snikket.jingle.PeerConnection","onLocalDescription",0x9c63d352,"snikket.jingle.PeerConnection.onLocalDescription","snikket/jingle/PeerConnection.cpp.hx",814,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_828_onLocalCandidate,"snikket.jingle.PeerConnection","onLocalCandidate",0xfc129d19,"snikket.jingle.PeerConnection.onLocalCandidate","snikket/jingle/PeerConnection.cpp.hx",828,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_825_onLocalCandidate,"snikket.jingle.PeerConnection","onLocalCandidate",0xfc129d19,"snikket.jingle.PeerConnection.onLocalCandidate","snikket/jingle/PeerConnection.cpp.hx",825,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_843_onStateChange,"snikket.jingle.PeerConnection","onStateChange",0xc45a9400,"snikket.jingle.PeerConnection.onStateChange","snikket/jingle/PeerConnection.cpp.hx",843,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_840_onStateChange,"snikket.jingle.PeerConnection","onStateChange",0xc45a9400,"snikket.jingle.PeerConnection.onStateChange","snikket/jingle/PeerConnection.cpp.hx",840,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_851_onGatheringStateChange,"snikket.jingle.PeerConnection","onGatheringStateChange",0x35b9a25b,"snikket.jingle.PeerConnection.onGatheringStateChange","snikket/jingle/PeerConnection.cpp.hx",851,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_856_onGatheringStateChange,"snikket.jingle.PeerConnection","onGatheringStateChange",0x35b9a25b,"snikket.jingle.PeerConnection.onGatheringStateChange","snikket/jingle/PeerConnection.cpp.hx",856,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_868_onTrack,"snikket.jingle.PeerConnection","onTrack",0x22f432ea,"snikket.jingle.PeerConnection.onTrack","snikket/jingle/PeerConnection.cpp.hx",868,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_867_onTrack,"snikket.jingle.PeerConnection","onTrack",0x22f432ea,"snikket.jingle.PeerConnection.onTrack","snikket/jingle/PeerConnection.cpp.hx",867,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_865_onTrack,"snikket.jingle.PeerConnection","onTrack",0x22f432ea,"snikket.jingle.PeerConnection.onTrack","snikket/jingle/PeerConnection.cpp.hx",865,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_885_get_connectionState,"snikket.jingle.PeerConnection","get_connectionState",0x98e8f328,"snikket.jingle.PeerConnection.get_connectionState","snikket/jingle/PeerConnection.cpp.hx",885,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_888_get_localDescription,"snikket.jingle.PeerConnection","get_localDescription",0xf881419c,"snikket.jingle.PeerConnection.get_localDescription","snikket/jingle/PeerConnection.cpp.hx",888,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_898_setLocalDescription,"snikket.jingle.PeerConnection","setLocalDescription",0xc3beb011,"snikket.jingle.PeerConnection.setLocalDescription","snikket/jingle/PeerConnection.cpp.hx",898,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_897_setLocalDescription,"snikket.jingle.PeerConnection","setLocalDescription",0xc3beb011,"snikket.jingle.PeerConnection.setLocalDescription","snikket/jingle/PeerConnection.cpp.hx",897,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_905_setRemoteDescription,"snikket.jingle.PeerConnection","setRemoteDescription",0x03bc2956,"snikket.jingle.PeerConnection.setRemoteDescription","snikket/jingle/PeerConnection.cpp.hx",905,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_911_addIceCandidate,"snikket.jingle.PeerConnection","addIceCandidate",0x0c0d6f37,"snikket.jingle.PeerConnection.addIceCandidate","snikket/jingle/PeerConnection.cpp.hx",911,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_916_addPendingTracks,"snikket.jingle.PeerConnection","addPendingTracks",0xfb3dbaa0,"snikket.jingle.PeerConnection.addPendingTracks","snikket/jingle/PeerConnection.cpp.hx",916,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_925_addTrack,"snikket.jingle.PeerConnection","addTrack",0xdd0aecec,"snikket.jingle.PeerConnection.addTrack","snikket/jingle/PeerConnection.cpp.hx",925,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_933_getTransceivers,"snikket.jingle.PeerConnection","getTransceivers",0x24b14243,"snikket.jingle.PeerConnection.getTransceivers","snikket/jingle/PeerConnection.cpp.hx",933,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_946_close,"snikket.jingle.PeerConnection","close",0x130c0236,"snikket.jingle.PeerConnection.close","snikket/jingle/PeerConnection.cpp.hx",946,0xf9fab71d)
-HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_949_addEventListener,"snikket.jingle.PeerConnection","addEventListener",0xae27560f,"snikket.jingle.PeerConnection.addEventListener","snikket/jingle/PeerConnection.cpp.hx",949,0xf9fab71d)
+HX_DEFINE_STACK_FRAME(_hx_pos_8cd3f69017bd5103_775_new,"snikket.jingle.PeerConnection","new",0x0e347f5e,"snikket.jingle.PeerConnection.new","snikket/jingle/PeerConnection.cpp.hx",775,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_823_onLocalDescription,"snikket.jingle.PeerConnection","onLocalDescription",0x9c63d352,"snikket.jingle.PeerConnection.onLocalDescription","snikket/jingle/PeerConnection.cpp.hx",823,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_821_onLocalDescription,"snikket.jingle.PeerConnection","onLocalDescription",0x9c63d352,"snikket.jingle.PeerConnection.onLocalDescription","snikket/jingle/PeerConnection.cpp.hx",821,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_835_onLocalCandidate,"snikket.jingle.PeerConnection","onLocalCandidate",0xfc129d19,"snikket.jingle.PeerConnection.onLocalCandidate","snikket/jingle/PeerConnection.cpp.hx",835,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_832_onLocalCandidate,"snikket.jingle.PeerConnection","onLocalCandidate",0xfc129d19,"snikket.jingle.PeerConnection.onLocalCandidate","snikket/jingle/PeerConnection.cpp.hx",832,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_850_onStateChange,"snikket.jingle.PeerConnection","onStateChange",0xc45a9400,"snikket.jingle.PeerConnection.onStateChange","snikket/jingle/PeerConnection.cpp.hx",850,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_847_onStateChange,"snikket.jingle.PeerConnection","onStateChange",0xc45a9400,"snikket.jingle.PeerConnection.onStateChange","snikket/jingle/PeerConnection.cpp.hx",847,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_858_onGatheringStateChange,"snikket.jingle.PeerConnection","onGatheringStateChange",0x35b9a25b,"snikket.jingle.PeerConnection.onGatheringStateChange","snikket/jingle/PeerConnection.cpp.hx",858,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_863_onGatheringStateChange,"snikket.jingle.PeerConnection","onGatheringStateChange",0x35b9a25b,"snikket.jingle.PeerConnection.onGatheringStateChange","snikket/jingle/PeerConnection.cpp.hx",863,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_875_onTrack,"snikket.jingle.PeerConnection","onTrack",0x22f432ea,"snikket.jingle.PeerConnection.onTrack","snikket/jingle/PeerConnection.cpp.hx",875,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_874_onTrack,"snikket.jingle.PeerConnection","onTrack",0x22f432ea,"snikket.jingle.PeerConnection.onTrack","snikket/jingle/PeerConnection.cpp.hx",874,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_872_onTrack,"snikket.jingle.PeerConnection","onTrack",0x22f432ea,"snikket.jingle.PeerConnection.onTrack","snikket/jingle/PeerConnection.cpp.hx",872,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_892_get_connectionState,"snikket.jingle.PeerConnection","get_connectionState",0x98e8f328,"snikket.jingle.PeerConnection.get_connectionState","snikket/jingle/PeerConnection.cpp.hx",892,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_895_get_localDescription,"snikket.jingle.PeerConnection","get_localDescription",0xf881419c,"snikket.jingle.PeerConnection.get_localDescription","snikket/jingle/PeerConnection.cpp.hx",895,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_905_setLocalDescription,"snikket.jingle.PeerConnection","setLocalDescription",0xc3beb011,"snikket.jingle.PeerConnection.setLocalDescription","snikket/jingle/PeerConnection.cpp.hx",905,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_904_setLocalDescription,"snikket.jingle.PeerConnection","setLocalDescription",0xc3beb011,"snikket.jingle.PeerConnection.setLocalDescription","snikket/jingle/PeerConnection.cpp.hx",904,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_912_setRemoteDescription,"snikket.jingle.PeerConnection","setRemoteDescription",0x03bc2956,"snikket.jingle.PeerConnection.setRemoteDescription","snikket/jingle/PeerConnection.cpp.hx",912,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_918_addIceCandidate,"snikket.jingle.PeerConnection","addIceCandidate",0x0c0d6f37,"snikket.jingle.PeerConnection.addIceCandidate","snikket/jingle/PeerConnection.cpp.hx",918,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_923_addPendingTracks,"snikket.jingle.PeerConnection","addPendingTracks",0xfb3dbaa0,"snikket.jingle.PeerConnection.addPendingTracks","snikket/jingle/PeerConnection.cpp.hx",923,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_932_addTrack,"snikket.jingle.PeerConnection","addTrack",0xdd0aecec,"snikket.jingle.PeerConnection.addTrack","snikket/jingle/PeerConnection.cpp.hx",932,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_940_getTransceivers,"snikket.jingle.PeerConnection","getTransceivers",0x24b14243,"snikket.jingle.PeerConnection.getTransceivers","snikket/jingle/PeerConnection.cpp.hx",940,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_953_close,"snikket.jingle.PeerConnection","close",0x130c0236,"snikket.jingle.PeerConnection.close","snikket/jingle/PeerConnection.cpp.hx",953,0xf9fab71d)
+HX_LOCAL_STACK_FRAME(_hx_pos_8cd3f69017bd5103_956_addEventListener,"snikket.jingle.PeerConnection","addEventListener",0xae27560f,"snikket.jingle.PeerConnection.addEventListener","snikket/jingle/PeerConnection.cpp.hx",956,0xf9fab71d)
 namespace snikket{
 namespace jingle{
 
 void PeerConnection_obj::__construct( ::Dynamic configuration, ::Dynamic constraints){
-            	HX_GC_STACKFRAME(&_hx_pos_8cd3f69017bd5103_768_new)
-HXLINE( 782)		this->pendingTracks = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 781)		this->hasRemote = false;
-HXLINE( 780)		this->hasLocal = false;
-HXLINE( 778)		this->stateChangeListeners = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 777)		this->localCandidateListeners = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 776)		this->trackListeners = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 775)		this->tracks =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 774)		this->waitingOnLocal = null();
-HXLINE( 785)		if (::hx::IsNotNull( ::Sys_obj::getEnv(HX_("SNIKKET_WEBRTC_DEBUG",e3,43,ef,ce)) )) {
-HXLINE( 786)			rtc::InitLogger(rtc::LogLevel::Verbose);;
+            	HX_GC_STACKFRAME(&_hx_pos_8cd3f69017bd5103_775_new)
+HXLINE( 789)		this->pendingTracks = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 788)		this->hasRemote = false;
+HXLINE( 787)		this->hasLocal = false;
+HXLINE( 785)		this->stateChangeListeners = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 784)		this->localCandidateListeners = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 783)		this->trackListeners = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 782)		this->tracks =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 781)		this->waitingOnLocal = null();
+HXLINE( 792)		if (::hx::IsNotNull( ::Sys_obj::getEnv(HX_("SNIKKET_WEBRTC_DEBUG",e3,43,ef,ce)) )) {
+HXLINE( 793)			rtc::InitLogger(rtc::LogLevel::Verbose);;
             		}
-HXLINE( 788)		this->mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE( 789)		rtc::Configuration configRaw;;
-HXLINE( 790)		::cpp::Pointer<  rtc::Configuration > config = &configRaw;
-HXLINE( 791)		bool _hx_tmp;
-HXDLIN( 791)		if (::hx::IsNotNull( configuration )) {
-HXLINE( 791)			_hx_tmp = ::hx::IsNotNull( configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic) );
+HXLINE( 795)		this->mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE( 796)		rtc::Configuration configRaw;;
+HXLINE( 797)		::cpp::Pointer<  rtc::Configuration > config = &configRaw;
+HXLINE( 798)		bool _hx_tmp;
+HXDLIN( 798)		if (::hx::IsNotNull( configuration )) {
+HXLINE( 798)			_hx_tmp = ::hx::IsNotNull( configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 791)			_hx_tmp = false;
+HXLINE( 798)			_hx_tmp = false;
             		}
-HXDLIN( 791)		if (_hx_tmp) {
-HXLINE( 792)			int _g = 0;
-HXDLIN( 792)			::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic)) );
-HXDLIN( 792)			while((_g < _g1->length)){
-HXLINE( 792)				 ::Dynamic server = _g1->__get(_g);
-HXDLIN( 792)				_g = (_g + 1);
-HXLINE( 793)				bool _hx_tmp1;
-HXDLIN( 793)				bool _hx_tmp2;
-HXDLIN( 793)				if (::hx::IsNotNull( server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic) )) {
-HXLINE( 793)					_hx_tmp2 = (( (::Array< ::String >)(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic)) )->length == 1);
+HXDLIN( 798)		if (_hx_tmp) {
+HXLINE( 799)			int _g = 0;
+HXDLIN( 799)			::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic)) );
+HXDLIN( 799)			while((_g < _g1->length)){
+HXLINE( 799)				 ::Dynamic server = _g1->__get(_g);
+HXDLIN( 799)				_g = (_g + 1);
+HXLINE( 800)				bool _hx_tmp1;
+HXDLIN( 800)				bool _hx_tmp2;
+HXDLIN( 800)				if (::hx::IsNotNull( server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic) )) {
+HXLINE( 800)					_hx_tmp2 = (( (::Array< ::String >)(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic)) )->length == 1);
             				}
             				else {
-HXLINE( 793)					_hx_tmp2 = false;
+HXLINE( 800)					_hx_tmp2 = false;
             				}
-HXDLIN( 793)				if (_hx_tmp2) {
-HXLINE( 793)					_hx_tmp1 = (( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ).indexOf(HX_("stuns",f9,9d,1a,84),null()) != 0);
+HXDLIN( 800)				if (_hx_tmp2) {
+HXLINE( 800)					_hx_tmp1 = (( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ).indexOf(HX_("stuns",f9,9d,1a,84),null()) != 0);
             				}
             				else {
-HXLINE( 793)					_hx_tmp1 = false;
+HXLINE( 800)					_hx_tmp1 = false;
             				}
-HXDLIN( 793)				if (_hx_tmp1) {
-HXLINE( 794)					 hx::StdString url = ::hx::StdString(( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ));
-HXLINE( 795)					rtc::IceServer iceServerRaw(url);;
-HXLINE( 796)					::cpp::Pointer<  rtc::IceServer > iceServer = &iceServerRaw;
-HXLINE( 797)					if (::hx::IsNotNull( server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic) )) {
-HXLINE( 797)						iceServer->get_ref().username = ::hx::StdString(( (::String)(server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic)) ));
+HXDLIN( 800)				if (_hx_tmp1) {
+HXLINE( 801)					 hx::StdString url = ::hx::StdString(( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ));
+HXLINE( 802)					rtc::IceServer iceServerRaw(url);;
+HXLINE( 803)					::cpp::Pointer<  rtc::IceServer > iceServer = &iceServerRaw;
+HXLINE( 804)					if (::hx::IsNotNull( server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic) )) {
+HXLINE( 804)						iceServer->get_ref().username = ::hx::StdString(( (::String)(server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic)) ));
             					}
-HXLINE( 798)					if (::hx::IsNotNull( server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic) )) {
-HXLINE( 798)						iceServer->get_ref().password = ::hx::StdString(( (::String)(server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic)) ));
+HXLINE( 805)					if (::hx::IsNotNull( server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic) )) {
+HXLINE( 805)						iceServer->get_ref().password = ::hx::StdString(( (::String)(server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic)) ));
             					}
-HXLINE( 799)					::cpp::Pointer<  std::vector<  rtc::IceServer > > iceServers = &configRaw.iceServers;
-HXLINE( 800)					 std::vector<  rtc::IceServer > & _hx_tmp3 = iceServers->get_ref();
-HXDLIN( 800)					 rtc::IceServer & _hx_tmp4 = iceServer->get_ref();
-HXDLIN( 800)					_hx_tmp3.push_back(_hx_tmp4);
+HXLINE( 806)					::cpp::Pointer<  std::vector<  rtc::IceServer > > iceServers = &configRaw.iceServers;
+HXLINE( 807)					 std::vector<  rtc::IceServer > & _hx_tmp3 = iceServers->get_ref();
+HXDLIN( 807)					 rtc::IceServer & _hx_tmp4 = iceServer->get_ref();
+HXDLIN( 807)					_hx_tmp3.push_back(_hx_tmp4);
             				}
             			}
             		}
-HXLINE( 804)		this->_pc = std::make_shared<rtc::PeerConnection>(config->get_ref());
-HXLINE( 805)		this->pc = ::cpp::Pointer_obj::fromRaw(this->_pc.get());
-HXLINE( 806)		 rtc::PeerConnection & _hx_tmp5 = this->pc->get_ref();
-HXDLIN( 806)		_hx_tmp5.onLocalDescription([this](auto d) { this->onLocalDescription(); });
-HXLINE( 807)		 rtc::PeerConnection & _hx_tmp6 = this->pc->get_ref();
-HXDLIN( 807)		_hx_tmp6.onTrack([this](auto t) { this->onTrack(t); });
-HXLINE( 808)		 rtc::PeerConnection & _hx_tmp7 = this->pc->get_ref();
-HXDLIN( 808)		_hx_tmp7.onLocalCandidate([this](auto c) { this->onLocalCandidate(c); });
-HXLINE( 809)		 rtc::PeerConnection & _hx_tmp8 = this->pc->get_ref();
-HXDLIN( 809)		_hx_tmp8.onStateChange([this](auto s) { this->onStateChange(s); });
-HXLINE( 810)		 rtc::PeerConnection & _hx_tmp9 = this->pc->get_ref();
-HXDLIN( 810)		_hx_tmp9.onGatheringStateChange([this](auto s) { this->onGatheringStateChange(s); });
+HXLINE( 811)		this->_pc = std::make_shared<rtc::PeerConnection>(config->get_ref());
+HXLINE( 812)		this->pc = ::cpp::Pointer_obj::fromRaw(this->_pc.get());
+HXLINE( 813)		 rtc::PeerConnection & _hx_tmp5 = this->pc->get_ref();
+HXDLIN( 813)		_hx_tmp5.onLocalDescription([this](auto d) { this->onLocalDescription(); });
+HXLINE( 814)		 rtc::PeerConnection & _hx_tmp6 = this->pc->get_ref();
+HXDLIN( 814)		_hx_tmp6.onTrack([this](auto t) { this->onTrack(t); });
+HXLINE( 815)		 rtc::PeerConnection & _hx_tmp7 = this->pc->get_ref();
+HXDLIN( 815)		_hx_tmp7.onLocalCandidate([this](auto c) { this->onLocalCandidate(c); });
+HXLINE( 816)		 rtc::PeerConnection & _hx_tmp8 = this->pc->get_ref();
+HXDLIN( 816)		_hx_tmp8.onStateChange([this](auto s) { this->onStateChange(s); });
+HXLINE( 817)		 rtc::PeerConnection & _hx_tmp9 = this->pc->get_ref();
+HXDLIN( 817)		_hx_tmp9.onGatheringStateChange([this](auto s) { this->onGatheringStateChange(s); });
             	}
 
 Dynamic PeerConnection_obj::__CreateEmpty() { return new PeerConnection_obj; }
@@ -167,20 +167,20 @@ bool PeerConnection_obj::_hx_isInstanceOf(int inClassId) {
 void PeerConnection_obj::onLocalDescription(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::jingle::PeerConnection,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_816_onLocalDescription)
-HXLINE( 817)			_gthis->addPendingTracks();
-HXLINE( 818)			if (::hx::IsNotNull( _gthis->waitingOnLocal )) {
-HXLINE( 818)				_gthis->waitingOnLocal(null());
+            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_823_onLocalDescription)
+HXLINE( 824)			_gthis->addPendingTracks();
+HXLINE( 825)			if (::hx::IsNotNull( _gthis->waitingOnLocal )) {
+HXLINE( 825)				_gthis->waitingOnLocal(null());
             			}
-HXLINE( 819)			_gthis->waitingOnLocal = null();
+HXLINE( 826)			_gthis->waitingOnLocal = null();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_814_onLocalDescription)
-HXDLIN( 814)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 815)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 816)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 821)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_821_onLocalDescription)
+HXDLIN( 821)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 822)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 823)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 828)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
@@ -189,18 +189,18 @@ HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,onLocalDescription,(void))
 void PeerConnection_obj::onLocalCandidate( rtc::Candidate candidate){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::jingle::PeerConnection,_gthis, rtc::Candidate,candidate) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_828_onLocalCandidate)
-HXLINE( 828)			int _g = 0;
-HXDLIN( 828)			::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
-HXDLIN( 828)			while((_g < _g1->length)){
-HXLINE( 828)				 ::Dynamic cb = _g1->__get(_g);
-HXDLIN( 828)				_g = (_g + 1);
-HXLINE( 830)				 std::string this1 = candidate.candidate();
-HXDLIN( 830)				::String _hx_tmp = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
-HXLINE( 831)				 std::string this2 = candidate.mid();
-HXDLIN( 831)				::String _hx_tmp1 = ( ( hx::StdString)(::hx::StdString(this2)) ).toString();
-HXLINE( 832)				 std::string this3 = ( ( std::string)(( (cpp::Struct<  std::string >)(( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(_gthis->pc->get_ref().localDescription().value()) )) ).iceUfrag().value()) )) );
-HXLINE( 829)				cb( ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_835_onLocalCandidate)
+HXLINE( 835)			int _g = 0;
+HXDLIN( 835)			::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
+HXDLIN( 835)			while((_g < _g1->length)){
+HXLINE( 835)				 ::Dynamic cb = _g1->__get(_g);
+HXDLIN( 835)				_g = (_g + 1);
+HXLINE( 837)				 std::string this1 = candidate.candidate();
+HXDLIN( 837)				::String _hx_tmp = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
+HXLINE( 838)				 std::string this2 = candidate.mid();
+HXDLIN( 838)				::String _hx_tmp1 = ( ( hx::StdString)(::hx::StdString(this2)) ).toString();
+HXLINE( 839)				 std::string this3 = ( ( std::string)(( (cpp::Struct<  std::string >)(( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(_gthis->pc->get_ref().localDescription().value()) )) ).iceUfrag().value()) )) );
+HXLINE( 836)				cb( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("candidate",43,34,d8,d0), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("usernameFragment",06,a8,37,89),( ( hx::StdString)(::hx::StdString(this3)) ).toString())
             						->setFixed(1,HX_("candidate",43,34,d8,d0),_hx_tmp)
@@ -209,61 +209,61 @@ HXLINE( 829)				cb( ::Dynamic(::hx::Anon_obj::Create(1)
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_825_onLocalCandidate)
-HXDLIN( 825)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 826)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 827)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis,candidate)));
-HXLINE( 836)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_832_onLocalCandidate)
+HXDLIN( 832)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 833)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 834)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis,candidate)));
+HXLINE( 843)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 void PeerConnection_obj::onStateChange(cpp::Struct<  rtc::PeerConnection::State > state){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::jingle::PeerConnection,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_843_onStateChange)
-HXLINE( 843)			int _g = 0;
-HXDLIN( 843)			::Array< ::Dynamic> _g1 = _gthis->stateChangeListeners;
-HXDLIN( 843)			while((_g < _g1->length)){
-HXLINE( 843)				 ::Dynamic cb = _g1->__get(_g);
-HXDLIN( 843)				_g = (_g + 1);
-HXLINE( 844)				cb(null());
+            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_850_onStateChange)
+HXLINE( 850)			int _g = 0;
+HXDLIN( 850)			::Array< ::Dynamic> _g1 = _gthis->stateChangeListeners;
+HXDLIN( 850)			while((_g < _g1->length)){
+HXLINE( 850)				 ::Dynamic cb = _g1->__get(_g);
+HXDLIN( 850)				_g = (_g + 1);
+HXLINE( 851)				cb(null());
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_840_onStateChange)
-HXDLIN( 840)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 841)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 842)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 847)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_847_onStateChange)
+HXDLIN( 847)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 848)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 849)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 854)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,onStateChange,(void))
 
 void PeerConnection_obj::onGatheringStateChange(cpp::Struct<  rtc::PeerConnection::GatheringState > state){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_851_onGatheringStateChange)
-HXDLIN( 851)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 852)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 853)		cpp::Struct<  rtc::PeerConnection::GatheringState > c = rtc::PeerConnection::GatheringState::Complete;
-HXLINE( 854)		if (::hx::IsEq( state,c )) {
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_858_onGatheringStateChange)
+HXDLIN( 858)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 859)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 860)		cpp::Struct<  rtc::PeerConnection::GatheringState > c = rtc::PeerConnection::GatheringState::Complete;
+HXLINE( 861)		if (::hx::IsEq( state,c )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::jingle::PeerConnection,_gthis) HXARGC(0)
             			void _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_856_onGatheringStateChange)
-HXLINE( 856)				int _g = 0;
-HXDLIN( 856)				::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
-HXDLIN( 856)				while((_g < _g1->length)){
-HXLINE( 856)					 ::Dynamic cb = _g1->__get(_g);
-HXDLIN( 856)					_g = (_g + 1);
-HXLINE( 857)					cb( ::Dynamic(::hx::Anon_obj::Create(1)
+            				HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_863_onGatheringStateChange)
+HXLINE( 863)				int _g = 0;
+HXDLIN( 863)				::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
+HXDLIN( 863)				while((_g < _g1->length)){
+HXLINE( 863)					 ::Dynamic cb = _g1->__get(_g);
+HXDLIN( 863)					_g = (_g + 1);
+HXLINE( 864)					cb( ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("candidate",43,34,d8,d0),null())));
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 855)			this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 862)			this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
             		}
-HXLINE( 861)		hx::SetTopOfStack((int*)0, true);;
+HXLINE( 868)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
@@ -274,48 +274,48 @@ void PeerConnection_obj::onTrack( std::shared_ptr<  rtc::Track > track){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, std::shared_ptr<  rtc::Track >,track) HXARGC(1)
             			bool _hx_run( ::snikket::jingle::MediaStreamTrack t){
-            				HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_868_onTrack)
-HXLINE( 868)				::String matchingTrack = t->get_kind();
-HXDLIN( 868)				 std::string this1 = track->description().type();
-HXDLIN( 868)				return (matchingTrack == ( ( hx::StdString)(::hx::StdString(this1)) ).toString());
+            				HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_875_onTrack)
+HXLINE( 875)				::String matchingTrack = t->get_kind();
+HXDLIN( 875)				 std::string this1 = track->description().type();
+HXDLIN( 875)				return (matchingTrack == ( ( hx::StdString)(::hx::StdString(this1)) ).toString());
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_867_onTrack)
-HXLINE( 868)			 ::snikket::jingle::MediaStreamTrack matchingTrack = ( ( ::snikket::jingle::MediaStreamTrack)(::Lambda_obj::find(_gthis->pendingTracks, ::Dynamic(new _hx_Closure_0(track)))) );
-HXLINE( 869)			 ::snikket::jingle::MediaStreamTrack media;
-HXDLIN( 869)			if (::hx::IsNull( matchingTrack )) {
-HXLINE( 869)				media = ::snikket::jingle::MediaStreamTrack_obj::fromTrack(track);
+            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_874_onTrack)
+HXLINE( 875)			 ::snikket::jingle::MediaStreamTrack matchingTrack = ( ( ::snikket::jingle::MediaStreamTrack)(::Lambda_obj::find(_gthis->pendingTracks, ::Dynamic(new _hx_Closure_0(track)))) );
+HXLINE( 876)			 ::snikket::jingle::MediaStreamTrack media;
+HXDLIN( 876)			if (::hx::IsNull( matchingTrack )) {
+HXLINE( 876)				media = ::snikket::jingle::MediaStreamTrack_obj::fromTrack(track);
             			}
             			else {
-HXLINE( 872)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 872)				{
-HXLINE( 872)					int _g1 = 0;
-HXDLIN( 872)					::Array< ::Dynamic> _g2 = _gthis->pendingTracks;
-HXDLIN( 872)					while((_g1 < _g2->length)){
-HXLINE( 872)						 ::snikket::jingle::MediaStreamTrack v = _g2->__get(_g1).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
-HXDLIN( 872)						_g1 = (_g1 + 1);
-HXDLIN( 872)						::String media1 = v->get_id();
-HXDLIN( 872)						if ((media1 != matchingTrack->get_id())) {
-HXLINE( 872)							_g->push(v);
+HXLINE( 879)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 879)				{
+HXLINE( 879)					int _g1 = 0;
+HXDLIN( 879)					::Array< ::Dynamic> _g2 = _gthis->pendingTracks;
+HXDLIN( 879)					while((_g1 < _g2->length)){
+HXLINE( 879)						 ::snikket::jingle::MediaStreamTrack v = _g2->__get(_g1).StaticCast<  ::snikket::jingle::MediaStreamTrack >();
+HXDLIN( 879)						_g1 = (_g1 + 1);
+HXDLIN( 879)						::String media1 = v->get_id();
+HXDLIN( 879)						if ((media1 != matchingTrack->get_id())) {
+HXLINE( 879)							_g->push(v);
             						}
             					}
             				}
-HXDLIN( 872)				_gthis->pendingTracks = _g;
-HXLINE( 873)				matchingTrack->set_track(track);
-HXLINE( 869)				media = matchingTrack;
+HXDLIN( 879)				_gthis->pendingTracks = _g;
+HXLINE( 880)				matchingTrack->set_track(track);
+HXLINE( 876)				media = matchingTrack;
             			}
-HXLINE( 876)			{
-HXLINE( 876)				::Dynamic this1 = _gthis->tracks;
-HXDLIN( 876)				( ( ::haxe::ds::StringMap)(this1) )->set(media->get_id(),media);
+HXLINE( 883)			{
+HXLINE( 883)				::Dynamic this1 = _gthis->tracks;
+HXDLIN( 883)				( ( ::haxe::ds::StringMap)(this1) )->set(media->get_id(),media);
             			}
-HXLINE( 877)			{
-HXLINE( 877)				int _g3 = 0;
-HXDLIN( 877)				::Array< ::Dynamic> _g4 = _gthis->trackListeners;
-HXDLIN( 877)				while((_g3 < _g4->length)){
-HXLINE( 877)					 ::Dynamic cb = _g4->__get(_g3);
-HXDLIN( 877)					_g3 = (_g3 + 1);
-HXLINE( 878)					cb( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 884)			{
+HXLINE( 884)				int _g3 = 0;
+HXDLIN( 884)				::Array< ::Dynamic> _g4 = _gthis->trackListeners;
+HXDLIN( 884)				while((_g3 < _g4->length)){
+HXLINE( 884)					 ::Dynamic cb = _g4->__get(_g3);
+HXDLIN( 884)					_g3 = (_g3 + 1);
+HXLINE( 885)					cb( ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("streams",f3,db,44,f6),::cpp::VirtualArray_obj::__new(0))
             						->setFixed(1,HX_("track",8b,8e,1f,16),media)));
             				}
@@ -323,60 +323,60 @@ HXLINE( 878)					cb( ::Dynamic(::hx::Anon_obj::Create(2)
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_865_onTrack)
-HXDLIN( 865)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 866)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 867)		this->mainLoop->run( ::Dynamic(new _hx_Closure_1(_gthis,track)));
-HXLINE( 881)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_872_onTrack)
+HXDLIN( 872)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 873)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 874)		this->mainLoop->run( ::Dynamic(new _hx_Closure_1(_gthis,track)));
+HXLINE( 888)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 ::String PeerConnection_obj::get_connectionState(){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_885_get_connectionState)
-HXDLIN( 885)		 rtc::PeerConnection::State _hx_switch_0 = this->pc->get_ref().state();
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_892_get_connectionState)
+HXDLIN( 892)		 rtc::PeerConnection::State _hx_switch_0 = this->pc->get_ref().state();
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Closed) ){
-HXDLIN( 885)			return HX_("closed",ac,a9,51,0e);
-HXDLIN( 885)			goto _hx_goto_18;
+HXDLIN( 892)			return HX_("closed",ac,a9,51,0e);
+HXDLIN( 892)			goto _hx_goto_18;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Connected) ){
-HXDLIN( 885)			return HX_("connected",c9,e2,f6,a2);
-HXDLIN( 885)			goto _hx_goto_18;
+HXDLIN( 892)			return HX_("connected",c9,e2,f6,a2);
+HXDLIN( 892)			goto _hx_goto_18;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Connecting) ){
-HXDLIN( 885)			return HX_("connecting",38,9f,12,f5);
-HXDLIN( 885)			goto _hx_goto_18;
+HXDLIN( 892)			return HX_("connecting",38,9f,12,f5);
+HXDLIN( 892)			goto _hx_goto_18;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Disconnected) ){
-HXDLIN( 885)			return HX_("disconnected",bb,8b,6b,8e);
-HXDLIN( 885)			goto _hx_goto_18;
+HXDLIN( 892)			return HX_("disconnected",bb,8b,6b,8e);
+HXDLIN( 892)			goto _hx_goto_18;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Failed) ){
-HXDLIN( 885)			return HX_("failed",bd,c5,fe,e7);
-HXDLIN( 885)			goto _hx_goto_18;
+HXDLIN( 892)			return HX_("failed",bd,c5,fe,e7);
+HXDLIN( 892)			goto _hx_goto_18;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::New) ){
-HXDLIN( 885)			return HX_("new",60,d0,53,00);
-HXDLIN( 885)			goto _hx_goto_18;
+HXDLIN( 892)			return HX_("new",60,d0,53,00);
+HXDLIN( 892)			goto _hx_goto_18;
             		}
             		_hx_goto_18:;
-HXDLIN( 885)		return null();
+HXDLIN( 892)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,get_connectionState,return )
 
  ::Dynamic PeerConnection_obj::get_localDescription(){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_888_get_localDescription)
-HXLINE( 889)		 std::optional<  rtc::Description > desc = this->pc->get_ref().localDescription();
-HXLINE( 890)		if (desc.has_value()) {
-HXLINE( 891)			 std::string this1 = ( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(desc.value()) )) ).generateSdp();
-HXDLIN( 891)			return  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_895_get_localDescription)
+HXLINE( 896)		 std::optional<  rtc::Description > desc = this->pc->get_ref().localDescription();
+HXLINE( 897)		if (desc.has_value()) {
+HXLINE( 898)			 std::string this1 = ( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(desc.value()) )) ).generateSdp();
+HXDLIN( 898)			return  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("sdp",bf,9a,57,00),( ( hx::StdString)(::hx::StdString(this1)) ).toString()));
             		}
             		else {
-HXLINE( 893)			return null();
+HXLINE( 900)			return null();
             		}
-HXLINE( 890)		return null();
+HXLINE( 897)		return null();
             	}
 
 
@@ -385,66 +385,66 @@ HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,get_localDescription,return )
 ::Dynamic PeerConnection_obj::setLocalDescription(cpp::Struct<  rtc::Description::Type > sdpType){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::jingle::PeerConnection,_gthis,cpp::Struct<  rtc::Description::Type >,sdpType) HXARGC(2)
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_898_setLocalDescription)
-HXLINE( 899)			_gthis->waitingOnLocal = resolve;
-HXLINE( 900)			if (!(_gthis->hasRemote)) {
-HXLINE( 900)				_gthis->addPendingTracks();
+            			HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_905_setLocalDescription)
+HXLINE( 906)			_gthis->waitingOnLocal = resolve;
+HXLINE( 907)			if (!(_gthis->hasRemote)) {
+HXLINE( 907)				_gthis->addPendingTracks();
             			}
-HXLINE( 901)			 rtc::PeerConnection & _hx_tmp = _gthis->pc->get_ref();
-HXDLIN( 901)			cpp::Struct<  rtc::Description::Type > tmp = sdpType;
-HXDLIN( 901)			cpp::Struct<  rtc::Description::Type > _hx_tmp1;
-HXDLIN( 901)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 901)				_hx_tmp1 = tmp;
+HXLINE( 908)			 rtc::PeerConnection & _hx_tmp = _gthis->pc->get_ref();
+HXDLIN( 908)			cpp::Struct<  rtc::Description::Type > tmp = sdpType;
+HXDLIN( 908)			cpp::Struct<  rtc::Description::Type > _hx_tmp1;
+HXDLIN( 908)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 908)				_hx_tmp1 = tmp;
             			}
             			else {
-HXLINE( 901)				_hx_tmp1 = cpp::Struct(rtc::Description::Type::Unspec);
+HXLINE( 908)				_hx_tmp1 = cpp::Struct(rtc::Description::Type::Unspec);
             			}
-HXDLIN( 901)			_hx_tmp.setLocalDescription(_hx_tmp1);
+HXDLIN( 908)			_hx_tmp.setLocalDescription(_hx_tmp1);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_897_setLocalDescription)
-HXDLIN( 897)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 898)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis,sdpType)));
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_904_setLocalDescription)
+HXDLIN( 904)		 ::snikket::jingle::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 905)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis,sdpType)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,setLocalDescription,return )
 
 ::Dynamic PeerConnection_obj::setRemoteDescription( ::Dynamic description){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_905_setRemoteDescription)
-HXLINE( 906)		 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
-HXDLIN( 906)		 hx::StdString _hx_tmp1 = ::hx::StdString(( (::String)(description->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
-HXDLIN( 906)		_hx_tmp.setRemoteDescription( rtc::Description(_hx_tmp1,::hx::TCast< cpp::Struct<  rtc::Description::Type > >::cast(description->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic))));
-HXLINE( 907)		this->hasRemote = true;
-HXLINE( 908)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_912_setRemoteDescription)
+HXLINE( 913)		 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
+HXDLIN( 913)		 hx::StdString _hx_tmp1 = ::hx::StdString(( (::String)(description->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
+HXDLIN( 913)		_hx_tmp.setRemoteDescription( rtc::Description(_hx_tmp1,::hx::TCast< cpp::Struct<  rtc::Description::Type > >::cast(description->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic))));
+HXLINE( 914)		this->hasRemote = true;
+HXLINE( 915)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,setRemoteDescription,return )
 
 ::Dynamic PeerConnection_obj::addIceCandidate( ::Dynamic candidate){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_911_addIceCandidate)
-HXLINE( 912)		 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
-HXDLIN( 912)		 hx::StdString _hx_tmp1 = ::hx::StdString(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
-HXDLIN( 912)		 hx::StdString _hx_tmp2 = ::hx::StdString(( (::String)(candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic)) ));
-HXDLIN( 912)		_hx_tmp.addRemoteCandidate( rtc::Candidate(_hx_tmp1,_hx_tmp2));
-HXLINE( 913)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_918_addIceCandidate)
+HXLINE( 919)		 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
+HXDLIN( 919)		 hx::StdString _hx_tmp1 = ::hx::StdString(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
+HXDLIN( 919)		 hx::StdString _hx_tmp2 = ::hx::StdString(( (::String)(candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic)) ));
+HXDLIN( 919)		_hx_tmp.addRemoteCandidate( rtc::Candidate(_hx_tmp1,_hx_tmp2));
+HXLINE( 920)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,addIceCandidate,return )
 
 void PeerConnection_obj::addPendingTracks(){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_916_addPendingTracks)
-HXLINE( 917)		this->hasLocal = true;
-HXLINE( 918)		 ::snikket::jingle::MediaStreamTrack track;
-HXLINE( 919)		while(true){
-HXLINE( 919)			track = this->pendingTracks->shift().StaticCast<  ::snikket::jingle::MediaStreamTrack >();
-HXDLIN( 919)			if (!(::hx::IsNotNull( track ))) {
-HXLINE( 919)				goto _hx_goto_25;
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_923_addPendingTracks)
+HXLINE( 924)		this->hasLocal = true;
+HXLINE( 925)		 ::snikket::jingle::MediaStreamTrack track;
+HXLINE( 926)		while(true){
+HXLINE( 926)			track = this->pendingTracks->shift().StaticCast<  ::snikket::jingle::MediaStreamTrack >();
+HXDLIN( 926)			if (!(::hx::IsNotNull( track ))) {
+HXLINE( 926)				goto _hx_goto_25;
             			}
-HXLINE( 920)			this->addTrack(track,null());
+HXLINE( 927)			this->addTrack(track,null());
             		}
             		_hx_goto_25:;
             	}
@@ -453,18 +453,18 @@ HXLINE( 920)			this->addTrack(track,null());
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,addPendingTracks,(void))
 
 void PeerConnection_obj::addTrack( ::snikket::jingle::MediaStreamTrack track, ::snikket::jingle::MediaStream stream){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_925_addTrack)
-HXDLIN( 925)		if (this->hasLocal) {
-HXLINE( 926)			 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
-HXDLIN( 926)			 rtc::Description::Media _hx_tmp1 = ( ( rtc::Description::Media)(( (cpp::Struct<  rtc::Description::Media >)(track->get_media().value()) )) );
-HXDLIN( 926)			track->set_track(_hx_tmp.addTrack(_hx_tmp1));
-HXLINE( 927)			{
-HXLINE( 927)				::Dynamic this1 = this->tracks;
-HXDLIN( 927)				( ( ::haxe::ds::StringMap)(this1) )->set(track->get_id(),track);
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_932_addTrack)
+HXDLIN( 932)		if (this->hasLocal) {
+HXLINE( 933)			 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
+HXDLIN( 933)			 rtc::Description::Media _hx_tmp1 = ( ( rtc::Description::Media)(( (cpp::Struct<  rtc::Description::Media >)(track->get_media().value()) )) );
+HXDLIN( 933)			track->set_track(_hx_tmp.addTrack(_hx_tmp1));
+HXLINE( 934)			{
+HXLINE( 934)				::Dynamic this1 = this->tracks;
+HXDLIN( 934)				( ( ::haxe::ds::StringMap)(this1) )->set(track->get_id(),track);
             			}
             		}
             		else {
-HXLINE( 929)			this->pendingTracks->push(track);
+HXLINE( 936)			this->pendingTracks->push(track);
             		}
             	}
 
@@ -472,19 +472,19 @@ HXLINE( 929)			this->pendingTracks->push(track);
 HX_DEFINE_DYNAMIC_FUNC2(PeerConnection_obj,addTrack,(void))
 
 ::Array< ::Dynamic> PeerConnection_obj::getTransceivers(){
-            	HX_GC_STACKFRAME(&_hx_pos_8cd3f69017bd5103_933_getTransceivers)
-HXLINE( 935)		::Array< ::Dynamic> ts = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 936)		{
-HXLINE( 936)			::Dynamic map = this->tracks;
-HXDLIN( 936)			::Dynamic _g_map = map;
-HXDLIN( 936)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 936)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 936)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 936)				 ::snikket::jingle::MediaStreamTrack _g_value = ( ( ::snikket::jingle::MediaStreamTrack)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 936)				::String _g_key = key;
-HXDLIN( 936)				::String mid = _g_key;
-HXDLIN( 936)				 ::snikket::jingle::MediaStreamTrack track = _g_value;
-HXLINE( 937)				ts->push( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_8cd3f69017bd5103_940_getTransceivers)
+HXLINE( 942)		::Array< ::Dynamic> ts = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 943)		{
+HXLINE( 943)			::Dynamic map = this->tracks;
+HXDLIN( 943)			::Dynamic _g_map = map;
+HXDLIN( 943)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 943)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 943)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 943)				 ::snikket::jingle::MediaStreamTrack _g_value = ( ( ::snikket::jingle::MediaStreamTrack)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 943)				::String _g_key = key;
+HXDLIN( 943)				::String mid = _g_key;
+HXDLIN( 943)				 ::snikket::jingle::MediaStreamTrack track = _g_value;
+HXLINE( 944)				ts->push( ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("receiver",2f,45,fd,e2), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("track",8b,8e,1f,16),track)))
             					->setFixed(1,HX_("sender",b5,c7,84,6b), ::Dynamic(::hx::Anon_obj::Create(2)
@@ -492,30 +492,30 @@ HXLINE( 937)				ts->push( ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(1,HX_("dtmf",e9,ba,71,42), ::snikket::jingle::DTMFSender_obj::__alloc( HX_CTX ,track))))));
             			}
             		}
-HXLINE( 942)		return ts;
+HXLINE( 949)		return ts;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,getTransceivers,return )
 
 void PeerConnection_obj::close(){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_946_close)
-HXDLIN( 946)		this->pc->get_ref().close();
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_953_close)
+HXDLIN( 953)		this->pc->get_ref().close();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,close,(void))
 
 void PeerConnection_obj::addEventListener(::String event, ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_949_addEventListener)
-HXLINE( 950)		if ((event == HX_("track",8b,8e,1f,16))) {
-HXLINE( 950)			this->trackListeners->push(callback);
+            	HX_STACKFRAME(&_hx_pos_8cd3f69017bd5103_956_addEventListener)
+HXLINE( 957)		if ((event == HX_("track",8b,8e,1f,16))) {
+HXLINE( 957)			this->trackListeners->push(callback);
             		}
-HXLINE( 951)		if ((event == HX_("icecandidate",98,ef,c0,7b))) {
-HXLINE( 951)			this->localCandidateListeners->push(callback);
+HXLINE( 958)		if ((event == HX_("icecandidate",98,ef,c0,7b))) {
+HXLINE( 958)			this->localCandidateListeners->push(callback);
             		}
-HXLINE( 952)		if ((event == HX_("connectionstatechange",e3,a2,87,36))) {
-HXLINE( 952)			this->stateChangeListeners->push(callback);
+HXLINE( 959)		if ((event == HX_("connectionstatechange",e3,a2,87,36))) {
+HXLINE( 959)			this->stateChangeListeners->push(callback);
             		}
             	}
 
diff --git a/Sources/c_snikket/src/snikket/persistence/MediaStoreFS.cpp b/Sources/c_snikket/src/snikket/persistence/MediaStoreFS.cpp
index 067178a..ee5793f 100644
--- a/Sources/c_snikket/src/snikket/persistence/MediaStoreFS.cpp
+++ b/Sources/c_snikket/src/snikket/persistence/MediaStoreFS.cpp
@@ -46,7 +46,7 @@ HX_LOCAL_STACK_FRAME(_hx_pos_563dc7a3a6261986_26_setKV,"snikket.persistence.Medi
 HX_LOCAL_STACK_FRAME(_hx_pos_563dc7a3a6261986_29_getMediaPath,"snikket.persistence.MediaStoreFS","getMediaPath",0x37f9e697,"snikket.persistence.MediaStoreFS.getMediaPath","snikket/persistence/MediaStoreFS.hx",29,0x66ae6c32)
 HX_LOCAL_STACK_FRAME(_hx_pos_563dc7a3a6261986_39_getMediaPath,"snikket.persistence.MediaStoreFS","getMediaPath",0x37f9e697,"snikket.persistence.MediaStoreFS.getMediaPath","snikket/persistence/MediaStoreFS.hx",39,0x66ae6c32)
 HX_LOCAL_STACK_FRAME(_hx_pos_01cf80b813798682_221_getMediaPath__fromC,"snikket.persistence.MediaStoreFS","getMediaPath__fromC",0x295c9ac2,"snikket.persistence.MediaStoreFS.getMediaPath__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_01cf80b813798682_244_getMediaPath__fromC,"snikket.persistence.MediaStoreFS","getMediaPath__fromC",0x295c9ac2,"snikket.persistence.MediaStoreFS.getMediaPath__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_01cf80b813798682_252_getMediaPath__fromC,"snikket.persistence.MediaStoreFS","getMediaPath__fromC",0x295c9ac2,"snikket.persistence.MediaStoreFS.getMediaPath__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_563dc7a3a6261986_53_hasMedia,"snikket.persistence.MediaStoreFS","hasMedia",0x55acbe8e,"snikket.persistence.MediaStoreFS.hasMedia","snikket/persistence/MediaStoreFS.hx",53,0x66ae6c32)
 HX_LOCAL_STACK_FRAME(_hx_pos_563dc7a3a6261986_51_hasMedia,"snikket.persistence.MediaStoreFS","hasMedia",0x55acbe8e,"snikket.persistence.MediaStoreFS.hasMedia","snikket/persistence/MediaStoreFS.hx",51,0x66ae6c32)
 HX_LOCAL_STACK_FRAME(_hx_pos_563dc7a3a6261986_60_removeMedia,"snikket.persistence.MediaStoreFS","removeMedia",0x3020291c,"snikket.persistence.MediaStoreFS.removeMedia","snikket/persistence/MediaStoreFS.hx",60,0x66ae6c32)
@@ -174,8 +174,8 @@ HXLINE( 221)			callback1(cStrPtr,callback__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_01cf80b813798682_244_getMediaPath__fromC)
-HXDLIN( 244)		this->getMediaPath(uri, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_01cf80b813798682_252_getMediaPath__fromC)
+HXDLIN( 252)		this->getMediaPath(uri, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/persistence/Sqlite.cpp b/Sources/c_snikket/src/snikket/persistence/Sqlite.cpp
index 4591e3a..fb36438 100644
--- a/Sources/c_snikket/src/snikket/persistence/Sqlite.cpp
+++ b/Sources/c_snikket/src/snikket/persistence/Sqlite.cpp
@@ -22,9 +22,6 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
-#ifndef INCLUDED_haxe_Log
-#include <haxe/Log.h>
-#endif
 #ifndef INCLUDED_haxe_Timer
 #include <haxe/Timer.h>
 #endif
@@ -79,6 +76,9 @@
 #ifndef INCLUDED_snikket_JID
 #include <snikket/JID.h>
 #endif
+#ifndef INCLUDED_snikket_JsonPrinter
+#include <snikket/JsonPrinter.h>
+#endif
 #ifndef INCLUDED_snikket_Persistence
 #include <snikket/Persistence.h>
 #endif
@@ -132,55 +132,54 @@ static const ::String _hx_array_data_e415cb6c_1[] = {
 static const ::String _hx_array_data_e415cb6c_2[] = {
 	HX_("ALTER TABLE chats ADD COLUMN notifications_filtered INTEGER;",e5,d7,a4,6f),HX_("ALTER TABLE chats ADD COLUMN notify_mention INTEGER NOT NULL DEFAULT 0;",52,d4,13,7f),HX_("ALTER TABLE chats ADD COLUMN notify_reply INTEGER NOT NULL DEFAULT 0;",92,b1,9f,14),HX_("PRAGMA user_version = 2;",24,c3,55,a9),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_5b1a6b524efab4db_123_new,"snikket.persistence.Sqlite","new",0xb859925e,"snikket.persistence.Sqlite.new","snikket/persistence/Sqlite.hx",123,0x917a2510)
 HX_DEFINE_STACK_FRAME(_hx_pos_5b1a6b524efab4db_24_new,"snikket.persistence.Sqlite","new",0xb859925e,"snikket.persistence.Sqlite.new","snikket/persistence/Sqlite.hx",24,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_128_get,"snikket.persistence.Sqlite","get",0xb8544294,"snikket.persistence.Sqlite.get","snikket/persistence/Sqlite.hx",128,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_139_set,"snikket.persistence.Sqlite","set",0xb85d5da0,"snikket.persistence.Sqlite.set","snikket/persistence/Sqlite.hx",139,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_141_set,"snikket.persistence.Sqlite","set",0xb85d5da0,"snikket.persistence.Sqlite.set","snikket/persistence/Sqlite.hx",141,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_145_set,"snikket.persistence.Sqlite","set",0xb85d5da0,"snikket.persistence.Sqlite.set","snikket/persistence/Sqlite.hx",145,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_162_lastId,"snikket.persistence.Sqlite","lastId",0xe7f21c93,"snikket.persistence.Sqlite.lastId","snikket/persistence/Sqlite.hx",162,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_151_lastId,"snikket.persistence.Sqlite","lastId",0xe7f21c93,"snikket.persistence.Sqlite.lastId","snikket/persistence/Sqlite.hx",151,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_179_storeChats,"snikket.persistence.Sqlite","storeChats",0xcde3e4bc,"snikket.persistence.Sqlite.storeChats","snikket/persistence/Sqlite.hx",179,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_127_get,"snikket.persistence.Sqlite","get",0xb8544294,"snikket.persistence.Sqlite.get","snikket/persistence/Sqlite.hx",127,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_138_set,"snikket.persistence.Sqlite","set",0xb85d5da0,"snikket.persistence.Sqlite.set","snikket/persistence/Sqlite.hx",138,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_140_set,"snikket.persistence.Sqlite","set",0xb85d5da0,"snikket.persistence.Sqlite.set","snikket/persistence/Sqlite.hx",140,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_144_set,"snikket.persistence.Sqlite","set",0xb85d5da0,"snikket.persistence.Sqlite.set","snikket/persistence/Sqlite.hx",144,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_161_lastId,"snikket.persistence.Sqlite","lastId",0xe7f21c93,"snikket.persistence.Sqlite.lastId","snikket/persistence/Sqlite.hx",161,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_150_lastId,"snikket.persistence.Sqlite","lastId",0xe7f21c93,"snikket.persistence.Sqlite.lastId","snikket/persistence/Sqlite.hx",150,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_178_storeChats,"snikket.persistence.Sqlite","storeChats",0xcde3e4bc,"snikket.persistence.Sqlite.storeChats","snikket/persistence/Sqlite.hx",178,0x917a2510)
-static const ::String _hx_array_data_e415cb6c_23[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_177_storeChats,"snikket.persistence.Sqlite","storeChats",0xcde3e4bc,"snikket.persistence.Sqlite.storeChats","snikket/persistence/Sqlite.hx",177,0x917a2510)
+static const ::String _hx_array_data_e415cb6c_21[] = {
 	HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4),
 };
-static const ::String _hx_array_data_e415cb6c_24[] = {
+static const ::String _hx_array_data_e415cb6c_22[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_25[] = {
+static const ::String _hx_array_data_e415cb6c_23[] = {
 	HX_("(?,?,?,?,?,?,?,?,?,?,?,jsonb(?),?,?,?,?)",4e,16,2e,3d),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_169_storeChats,"snikket.persistence.Sqlite","storeChats",0xcde3e4bc,"snikket.persistence.Sqlite.storeChats","snikket/persistence/Sqlite.hx",169,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_241_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",241,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_168_storeChats,"snikket.persistence.Sqlite","storeChats",0xcde3e4bc,"snikket.persistence.Sqlite.storeChats","snikket/persistence/Sqlite.hx",168,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_240_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",240,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_244_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",244,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_227_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",227,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_232_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",232,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_245_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",245,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_228_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",228,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_233_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",233,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_246_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",246,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_250_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",250,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_224_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",224,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_305_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",305,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_320_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",320,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_249_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",249,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_223_getChats,"snikket.persistence.Sqlite","getChats",0x2aaef367,"snikket.persistence.Sqlite.getChats","snikket/persistence/Sqlite.hx",223,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_304_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",304,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_319_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",319,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_269_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",269,0x917a2510)
-static const ::String _hx_array_data_e415cb6c_51[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_318_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",318,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_268_storeMessages,"snikket.persistence.Sqlite","storeMessages",0x458d5d4b,"snikket.persistence.Sqlite.storeMessages","snikket/persistence/Sqlite.hx",268,0x917a2510)
+static const ::String _hx_array_data_e415cb6c_49[] = {
 	HX_("DELETE FROM messages WHERE account_id=? AND direction=? AND chat_id IN (",a1,9c,a2,06),
 };
-static const ::String _hx_array_data_e415cb6c_52[] = {
+static const ::String _hx_array_data_e415cb6c_50[] = {
 	HX_(") AND stanza_id IN (",e8,da,d3,eb),
 };
-static const ::String _hx_array_data_e415cb6c_53[] = {
+static const ::String _hx_array_data_e415cb6c_51[] = {
 	HX_(")",29,00,00,00),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_328_updateMessage,"snikket.persistence.Sqlite","updateMessage",0xc14f063c,"snikket.persistence.Sqlite.updateMessage","snikket/persistence/Sqlite.hx",328,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_342_getMessage,"snikket.persistence.Sqlite","getMessage",0x34245593,"snikket.persistence.Sqlite.getMessage","snikket/persistence/Sqlite.hx",342,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_348_getMessage,"snikket.persistence.Sqlite","getMessage",0x34245593,"snikket.persistence.Sqlite.getMessage","snikket/persistence/Sqlite.hx",348,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_331_getMessage,"snikket.persistence.Sqlite","getMessage",0x34245593,"snikket.persistence.Sqlite.getMessage","snikket/persistence/Sqlite.hx",331,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_327_updateMessage,"snikket.persistence.Sqlite","updateMessage",0xc14f063c,"snikket.persistence.Sqlite.updateMessage","snikket/persistence/Sqlite.hx",327,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_341_getMessage,"snikket.persistence.Sqlite","getMessage",0x34245593,"snikket.persistence.Sqlite.getMessage","snikket/persistence/Sqlite.hx",341,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_347_getMessage,"snikket.persistence.Sqlite","getMessage",0x34245593,"snikket.persistence.Sqlite.getMessage","snikket/persistence/Sqlite.hx",347,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_330_getMessage,"snikket.persistence.Sqlite","getMessage",0x34245593,"snikket.persistence.Sqlite.getMessage","snikket/persistence/Sqlite.hx",330,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_45dcb523da764b50_221_getMessage__fromC,"snikket.persistence.Sqlite","getMessage__fromC",0x61244346,"snikket.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_45dcb523da764b50_244_getMessage__fromC,"snikket.persistence.Sqlite","getMessage__fromC",0x61244346,"snikket.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_45dcb523da764b50_252_getMessage__fromC,"snikket.persistence.Sqlite","getMessage__fromC",0x61244346,"snikket.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_380_getMessages,"snikket.persistence.Sqlite","getMessages",0x6ba68b80,"snikket.persistence.Sqlite.getMessages","snikket/persistence/Sqlite.hx",380,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_393_getMessages,"snikket.persistence.Sqlite","getMessages",0x6ba68b80,"snikket.persistence.Sqlite.getMessages","snikket/persistence/Sqlite.hx",393,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_355_getMessages,"snikket.persistence.Sqlite","getMessages",0x6ba68b80,"snikket.persistence.Sqlite.getMessages","snikket/persistence/Sqlite.hx",355,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_354_getMessages,"snikket.persistence.Sqlite","getMessages",0x6ba68b80,"snikket.persistence.Sqlite.getMessages","snikket/persistence/Sqlite.hx",354,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_398_getMessagesBefore,"snikket.persistence.Sqlite","getMessagesBefore",0x6d22f41f,"snikket.persistence.Sqlite.getMessagesBefore","snikket/persistence/Sqlite.hx",398,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_403_getMessagesAfter,"snikket.persistence.Sqlite","getMessagesAfter",0x143f9a7c,"snikket.persistence.Sqlite.getMessagesAfter","snikket/persistence/Sqlite.hx",403,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_419_getMessagesAround,"snikket.persistence.Sqlite","getMessagesAround",0x88f497ed,"snikket.persistence.Sqlite.getMessagesAround","snikket/persistence/Sqlite.hx",419,0x917a2510)
@@ -193,43 +192,43 @@ HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_471_getChatsUnreadDetails,"snikket
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_472_getChatsUnreadDetails,"snikket.persistence.Sqlite","getChatsUnreadDetails",0x81deee6c,"snikket.persistence.Sqlite.getChatsUnreadDetails","snikket/persistence/Sqlite.hx",472,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_469_getChatsUnreadDetails,"snikket.persistence.Sqlite","getChatsUnreadDetails",0x81deee6c,"snikket.persistence.Sqlite.getChatsUnreadDetails","snikket/persistence/Sqlite.hx",469,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_429_getChatsUnreadDetails,"snikket.persistence.Sqlite","getChatsUnreadDetails",0x81deee6c,"snikket.persistence.Sqlite.getChatsUnreadDetails","snikket/persistence/Sqlite.hx",429,0x917a2510)
-static const ::String _hx_array_data_e415cb6c_89[] = {
+static const ::String _hx_array_data_e415cb6c_87[] = {
 	HX_("SELECT chat_id, ROWID as row, MAX(created_at) AS created_at FROM messages WHERE account_id=?",d0,69,08,92),
 };
-static const ::String _hx_array_data_e415cb6c_90[] = {
+static const ::String _hx_array_data_e415cb6c_88[] = {
 	HX_(" AND chat_id IN (",14,bd,7b,de),
 };
-static const ::String _hx_array_data_e415cb6c_91[] = {
+static const ::String _hx_array_data_e415cb6c_89[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_92[] = {
+static const ::String _hx_array_data_e415cb6c_90[] = {
 	HX_("?",3f,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_93[] = {
+static const ::String _hx_array_data_e415cb6c_91[] = {
 	HX_(") AND (mam_id IN (",64,f4,1c,69),
 };
-static const ::String _hx_array_data_e415cb6c_94[] = {
+static const ::String _hx_array_data_e415cb6c_92[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_95[] = {
+static const ::String _hx_array_data_e415cb6c_93[] = {
 	HX_("?",3f,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_96[] = {
+static const ::String _hx_array_data_e415cb6c_94[] = {
 	HX_(") OR direction=?) GROUP BY chat_id",cc,ab,94,e3),
 };
-static const ::String _hx_array_data_e415cb6c_97[] = {
-	HX_("SELECT chat_id AS chatId, stanza, direction, type, sender_id, mam_id, mam_by, sync_point, CASE WHEN subq.created_at IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages LEFT JOIN (",04,fc,16,f0),
+static const ::String _hx_array_data_e415cb6c_95[] = {
+	HX_("SELECT chat_id AS chatId, stanza, direction, type, status, sender_id, mam_id, mam_by, sync_point, CASE WHEN subq.created_at IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages LEFT JOIN (",2a,b0,45,a6),
 };
-static const ::String _hx_array_data_e415cb6c_98[] = {
+static const ::String _hx_array_data_e415cb6c_96[] = {
 	HX_(") subq USING (chat_id) WHERE account_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND chat_id IN (",e7,a1,32,e5),
 };
-static const ::String _hx_array_data_e415cb6c_99[] = {
+static const ::String _hx_array_data_e415cb6c_97[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_100[] = {
+static const ::String _hx_array_data_e415cb6c_98[] = {
 	HX_("?",3f,00,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_101[] = {
+static const ::String _hx_array_data_e415cb6c_99[] = {
 	HX_(") AND (subq.created_at IS NULL OR messages.created_at > subq.created_at OR (messages.created_at=subq.created_at AND messages.ROWID >= subq.row)) GROUP BY chat_id;",58,6f,52,ea),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_495_storeReaction,"snikket.persistence.Sqlite","storeReaction",0x07446c28,"snikket.persistence.Sqlite.storeReaction","snikket/persistence/Sqlite.hx",495,0x917a2510)
@@ -247,41 +246,40 @@ HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_555_getCaps,"snikket.persistence.S
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_558_getCaps,"snikket.persistence.Sqlite","getCaps",0x487e64d5,"snikket.persistence.Sqlite.getCaps","snikket/persistence/Sqlite.hx",558,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_545_getCaps,"snikket.persistence.Sqlite","getCaps",0x487e64d5,"snikket.persistence.Sqlite.getCaps","snikket/persistence/Sqlite.hx",545,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_566_storeLogin,"snikket.persistence.Sqlite","storeLogin",0x01241f8a,"snikket.persistence.Sqlite.storeLogin","snikket/persistence/Sqlite.hx",566,0x917a2510)
-static const ::String _hx_array_data_e415cb6c_120[] = {
+static const ::String _hx_array_data_e415cb6c_118[] = {
 	HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b),
 };
-static const ::String _hx_array_data_e415cb6c_121[] = {
+static const ::String _hx_array_data_e415cb6c_119[] = {
 	HX_(", token, fast_count",a5,56,e4,ae),
 };
-static const ::String _hx_array_data_e415cb6c_122[] = {
+static const ::String _hx_array_data_e415cb6c_120[] = {
 	HX_(") VALUES (?,?,?",c4,1c,e3,67),
 };
-static const ::String _hx_array_data_e415cb6c_123[] = {
+static const ::String _hx_array_data_e415cb6c_121[] = {
 	HX_(",?",93,26,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_124[] = {
+static const ::String _hx_array_data_e415cb6c_122[] = {
 	HX_(",0",84,26,00,00),
 };
-static const ::String _hx_array_data_e415cb6c_125[] = {
+static const ::String _hx_array_data_e415cb6c_123[] = {
 	HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96),
 };
-static const ::String _hx_array_data_e415cb6c_126[] = {
+static const ::String _hx_array_data_e415cb6c_124[] = {
 	HX_(", display_name=?",7e,ad,5b,0f),
 };
-static const ::String _hx_array_data_e415cb6c_127[] = {
+static const ::String _hx_array_data_e415cb6c_125[] = {
 	HX_(", token=?",a7,78,19,80),
 };
-static const ::String _hx_array_data_e415cb6c_128[] = {
+static const ::String _hx_array_data_e415cb6c_126[] = {
 	HX_(", fast_count=0",73,a8,4f,82),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_596_getLogin,"snikket.persistence.Sqlite","getLogin",0x5def2e35,"snikket.persistence.Sqlite.getLogin","snikket/persistence/Sqlite.hx",596,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_606_getLogin,"snikket.persistence.Sqlite","getLogin",0x5def2e35,"snikket.persistence.Sqlite.getLogin","snikket/persistence/Sqlite.hx",606,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_592_getLogin,"snikket.persistence.Sqlite","getLogin",0x5def2e35,"snikket.persistence.Sqlite.getLogin","snikket/persistence/Sqlite.hx",592,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_609_removeAccount,"snikket.persistence.Sqlite","removeAccount",0xd5e3c447,"snikket.persistence.Sqlite.removeAccount","snikket/persistence/Sqlite.hx",609,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_622_listAccounts,"snikket.persistence.Sqlite","listAccounts",0x83858fe6,"snikket.persistence.Sqlite.listAccounts","snikket/persistence/Sqlite.hx",622,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_621_listAccounts,"snikket.persistence.Sqlite","listAccounts",0x83858fe6,"snikket.persistence.Sqlite.listAccounts","snikket/persistence/Sqlite.hx",621,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_45dcb523da764b50_221_listAccounts__fromC,"snikket.persistence.Sqlite","listAccounts__fromC",0x29194953,"snikket.persistence.Sqlite.listAccounts__fromC","HaxeCBridge.hx",221,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_45dcb523da764b50_244_listAccounts__fromC,"snikket.persistence.Sqlite","listAccounts__fromC",0x29194953,"snikket.persistence.Sqlite.listAccounts__fromC","HaxeCBridge.hx",244,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_45dcb523da764b50_252_listAccounts__fromC,"snikket.persistence.Sqlite","listAccounts__fromC",0x29194953,"snikket.persistence.Sqlite.listAccounts__fromC","HaxeCBridge.hx",252,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_629_storeStreamManagement,"snikket.persistence.Sqlite","storeStreamManagement",0x8a3c36a2,"snikket.persistence.Sqlite.storeStreamManagement","snikket/persistence/Sqlite.hx",629,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_636_storeStreamManagement,"snikket.persistence.Sqlite","storeStreamManagement",0x8a3c36a2,"snikket.persistence.Sqlite.storeStreamManagement","snikket/persistence/Sqlite.hx",636,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_645_getStreamManagement,"snikket.persistence.Sqlite","getStreamManagement",0xfe2e21d7,"snikket.persistence.Sqlite.getStreamManagement","snikket/persistence/Sqlite.hx",645,0x917a2510)
@@ -289,42 +287,42 @@ HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_656_storeService,"snikket.persiste
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_671_findServicesWithFeature,"snikket.persistence.Sqlite","findServicesWithFeature",0x83994397,"snikket.persistence.Sqlite.findServicesWithFeature","snikket/persistence/Sqlite.hx",671,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_668_findServicesWithFeature,"snikket.persistence.Sqlite","findServicesWithFeature",0x83994397,"snikket.persistence.Sqlite.findServicesWithFeature","snikket/persistence/Sqlite.hx",668,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_690_hydrateReactions,"snikket.persistence.Sqlite","hydrateReactions",0xe3b51cd9,"snikket.persistence.Sqlite.hydrateReactions","snikket/persistence/Sqlite.hx",690,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_692_hydrateReactions,"snikket.persistence.Sqlite","hydrateReactions",0xe3b51cd9,"snikket.persistence.Sqlite.hydrateReactions","snikket/persistence/Sqlite.hx",692,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_714_fetchReactions,"snikket.persistence.Sqlite","fetchReactions",0x5819e3d2,"snikket.persistence.Sqlite.fetchReactions","snikket/persistence/Sqlite.hx",714,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_699_fetchReactions,"snikket.persistence.Sqlite","fetchReactions",0x5819e3d2,"snikket.persistence.Sqlite.fetchReactions","snikket/persistence/Sqlite.hx",699,0x917a2510)
-static const ::String _hx_array_data_e415cb6c_165[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_693_hydrateReactions,"snikket.persistence.Sqlite","hydrateReactions",0xe3b51cd9,"snikket.persistence.Sqlite.hydrateReactions","snikket/persistence/Sqlite.hx",693,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_718_fetchReactions,"snikket.persistence.Sqlite","fetchReactions",0x5819e3d2,"snikket.persistence.Sqlite.fetchReactions","snikket/persistence/Sqlite.hx",718,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_702_fetchReactions,"snikket.persistence.Sqlite","fetchReactions",0x5819e3d2,"snikket.persistence.Sqlite.fetchReactions","snikket/persistence/Sqlite.hx",702,0x917a2510)
+static const ::String _hx_array_data_e415cb6c_162[] = {
 	HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3),
 };
-static const ::String _hx_array_data_e415cb6c_166[] = {
+static const ::String _hx_array_data_e415cb6c_163[] = {
 	HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5),
 };
-static const ::String _hx_array_data_e415cb6c_167[] = {
+static const ::String _hx_array_data_e415cb6c_164[] = {
 	HX_(" OR stanza_id=?",6a,1d,f2,5b),
 };
-static const ::String _hx_array_data_e415cb6c_168[] = {
+static const ::String _hx_array_data_e415cb6c_165[] = {
 	HX_(" ORDER BY created_at, ROWID",00,65,8d,0e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_771_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",771,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_773_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",773,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_776_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",776,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_751_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",751,0x917a2510)
-static const ::String _hx_array_data_e415cb6c_175[] = {
-	HX_("SELECT chat_id, stanza_id, stanza, direction, type, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND (",3c,df,23,3e),
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_775_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",775,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_777_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",777,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_780_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",780,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_755_hydrateReplyTo,"snikket.persistence.Sqlite","hydrateReplyTo",0x94f407b4,"snikket.persistence.Sqlite.hydrateReplyTo","snikket/persistence/Sqlite.hx",755,0x917a2510)
+static const ::String _hx_array_data_e415cb6c_172[] = {
+	HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND (",56,f2,9f,31),
 };
-static const ::String _hx_array_data_e415cb6c_176[] = {
+static const ::String _hx_array_data_e415cb6c_173[] = {
 	HX_(")",29,00,00,00),
 };
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_789_hydrateMessages,"snikket.persistence.Sqlite","hydrateMessages",0xcda7e37d,"snikket.persistence.Sqlite.hydrateMessages","snikket/persistence/Sqlite.hx",789,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_792_hydrateMessages,"snikket.persistence.Sqlite","hydrateMessages",0xcda7e37d,"snikket.persistence.Sqlite.hydrateMessages","snikket/persistence/Sqlite.hx",792,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_821_hydrateMessages,"snikket.persistence.Sqlite","hydrateMessages",0xcda7e37d,"snikket.persistence.Sqlite.hydrateMessages","snikket/persistence/Sqlite.hx",821,0x917a2510)
-HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_811_hydrateMessages,"snikket.persistence.Sqlite","hydrateMessages",0xcda7e37d,"snikket.persistence.Sqlite.hydrateMessages","snikket/persistence/Sqlite.hx",811,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_822_hydrateMessages,"snikket.persistence.Sqlite","hydrateMessages",0xcda7e37d,"snikket.persistence.Sqlite.hydrateMessages","snikket/persistence/Sqlite.hx",822,0x917a2510)
+HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_812_hydrateMessages,"snikket.persistence.Sqlite","hydrateMessages",0xcda7e37d,"snikket.persistence.Sqlite.hydrateMessages","snikket/persistence/Sqlite.hx",812,0x917a2510)
 HX_LOCAL_STACK_FRAME(_hx_pos_5b1a6b524efab4db_24_boot,"snikket.persistence.Sqlite","boot",0x8e1f8074,"snikket.persistence.Sqlite.boot","snikket/persistence/Sqlite.hx",24,0x917a2510)
 namespace snikket{
 namespace persistence{
 
 void Sqlite_obj::__construct(::String dbfile,::Dynamic media){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::persistence::Sqlite,_gthis) HXARGC(1)
-            		::Dynamic _hx_run(::Dynamic iter){
+            		void _hx_run(::Dynamic iter){
             			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_39_new)
 HXLINE(  40)			int version;
 HXDLIN(  40)			 ::Dynamic tmp = ::sys::db::ResultSet_obj::next(iter);
@@ -343,57 +341,24 @@ HXLINE(  40)				version = ( (int)(tmp2) );
 HXLINE(  40)				version = 0;
             			}
 HXLINE(  41)			if ((version < 1)) {
-HXLINE(  42)				return _gthis->db->exec(::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_1,10),null());
+HXLINE(  42)				_gthis->db->exec(::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_1,10),null());
             			}
-            			else {
-HXLINE( 115)				if ((version < 2)) {
-HXLINE( 116)					return _gthis->db->exec(::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_2,4),null());
-            				}
-            				else {
-HXLINE( 121)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
-            				}
+HXLINE( 116)			if ((version < 2)) {
+HXLINE( 117)				_gthis->db->exec(::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_2,4),null());
             			}
             		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
-            		::Dynamic _hx_run(::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_123_new)
-HXLINE( 123)			return null();
-            		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
-            		::Dynamic _hx_run( ::Dynamic err){
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_123_new)
-HXLINE( 123)			 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 123)			::String _hx_tmp1;
-HXDLIN( 123)			if (::hx::IsNull( err )) {
-HXLINE( 123)				_hx_tmp1 = HX_("null",87,9e,0e,49);
-            			}
-            			else {
-HXLINE( 123)				_hx_tmp1 = ::Std_obj::string(err);
-            			}
-HXDLIN( 123)			_hx_tmp(HX_("ERR1",4c,39,da,2d), ::Dynamic(::hx::Anon_obj::Create(5)
-            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.persistence.Sqlite",6c,cb,15,e4))
-            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
-            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
-            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/persistence/Sqlite.hx",10,25,7a,91))
-            				->setFixed(4,HX_("lineNumber",dd,81,22,76),123)));
-HXDLIN( 123)			return null();
-            		}
-            		HX_END_LOCAL_FUNC1(return)
+            		HX_END_LOCAL_FUNC1((void))
 
             	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_24_new)
 HXLINE( 627)		this->smStoreNext = null();
 HXLINE( 626)		this->smStoreInProgress = false;
-HXLINE( 166)		this->storeChatTimer = null();
-HXLINE( 165)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 165)		this->storeChatTimer = null();
+HXLINE( 164)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
 HXLINE(  35)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
 HXLINE(  36)		this->media = media;
 HXLINE(  37)		::snikket::persistence::MediaStore_obj::setKV(media,::hx::ObjectPtr<OBJ_>(this));
 HXLINE(  38)		this->db =  ::snikket::persistence::SqliteDriver_obj::__alloc( HX_CTX ,dbfile);
-HXLINE(  39)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("PRAGMA user_version;",73,bf,dc,ae),null()), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2()));
+HXLINE(  39)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("PRAGMA user_version;",73,bf,dc,ae),null()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             	}
 
 Dynamic Sqlite_obj::__CreateEmpty() { return new Sqlite_obj; }
@@ -459,47 +424,47 @@ void *Sqlite_obj::_hx_getInterface(int inHash) {
 void Sqlite_obj::get(::String k, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,callback) HXARGC(1)
             		void _hx_run(::Dynamic iter){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_128_get)
-HXLINE( 129)			{
-HXLINE( 129)				::Dynamic row = iter;
-HXDLIN( 129)				while(::sys::db::ResultSet_obj::hasNext(row)){
-HXLINE( 129)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
-HXLINE( 130)					callback( ::Dynamic(row1->__Field(HX_("v",76,00,00,00),::hx::paccDynamic)));
-HXLINE( 131)					return;
+            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_127_get)
+HXLINE( 128)			{
+HXLINE( 128)				::Dynamic row = iter;
+HXDLIN( 128)				while(::sys::db::ResultSet_obj::hasNext(row)){
+HXLINE( 128)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
+HXLINE( 129)					callback( ::Dynamic(row1->__Field(HX_("v",76,00,00,00),::hx::paccDynamic)));
+HXLINE( 130)					return;
             				}
             			}
-HXLINE( 133)			callback(null());
+HXLINE( 132)			callback(null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_128_get)
-HXDLIN( 128)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT v FROM keyvaluepairs WHERE k=? LIMIT 1",5f,f1,14,07),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0(callback)),null());
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_127_get)
+HXDLIN( 127)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT v FROM keyvaluepairs WHERE k=? LIMIT 1",5f,f1,14,07),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0(callback)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,get,(void))
 
 void Sqlite_obj::set(::String k,::String v, ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_139_set)
-HXDLIN( 139)		if (::hx::IsNull( v )) {
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_138_set)
+HXDLIN( 138)		if (::hx::IsNull( v )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::Dynamic _){
-            				HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_141_set)
-HXLINE( 141)				callback();
+            				HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_140_set)
+HXLINE( 140)				callback();
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 140)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM keyvaluepairs WHERE k=?",1a,ab,19,78),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0(callback)),null());
+HXLINE( 139)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM keyvaluepairs WHERE k=?",1a,ab,19,78),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0(callback)),null());
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::Dynamic _){
-            				HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_145_set)
-HXLINE( 145)				callback();
+            				HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_144_set)
+HXLINE( 144)				callback();
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 144)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("INSERT OR REPLACE INTO keyvaluepairs VALUES (?,?)",18,81,b5,d3),::cpp::VirtualArray_obj::__new(2)->init(0,k)->init(1,v)), ::Dynamic(new _hx_Closure_1(callback)),null());
+HXLINE( 143)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("INSERT OR REPLACE INTO keyvaluepairs VALUES (?,?)",18,81,b5,d3),::cpp::VirtualArray_obj::__new(2)->init(0,k)->init(1,v)), ::Dynamic(new _hx_Closure_1(callback)),null());
             		}
             	}
 
@@ -509,40 +474,40 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,set,(void))
 void Sqlite_obj::lastId(::String accountId,::String chatId, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,callback) HXARGC(1)
             		void _hx_run(::Dynamic iter){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_162_lastId)
-HXLINE( 162)			 ::Dynamic callback1 = callback;
-HXDLIN( 162)			 ::Dynamic tmp = ::sys::db::ResultSet_obj::next(iter);
-HXDLIN( 162)			 ::Dynamic _hx_tmp;
-HXDLIN( 162)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 162)				_hx_tmp =  ::Dynamic(tmp->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic));
+            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_161_lastId)
+HXLINE( 161)			 ::Dynamic callback1 = callback;
+HXDLIN( 161)			 ::Dynamic tmp = ::sys::db::ResultSet_obj::next(iter);
+HXDLIN( 161)			 ::Dynamic _hx_tmp;
+HXDLIN( 161)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 161)				_hx_tmp =  ::Dynamic(tmp->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic));
             			}
             			else {
-HXLINE( 162)				_hx_tmp = null();
+HXLINE( 161)				_hx_tmp = null();
             			}
-HXDLIN( 162)			callback1(_hx_tmp);
+HXDLIN( 161)			callback1(_hx_tmp);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_162_lastId)
-HXLINE( 162)			callback(null());
+            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_161_lastId)
+HXLINE( 161)			callback(null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_151_lastId)
-HXLINE( 152)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE( 153)		::String q = HX_("SELECT mam_id FROM messages WHERE mam_id IS NOT NULL AND sync_point AND account_id=?",20,14,35,bc);
-HXLINE( 154)		if (::hx::IsNull( chatId )) {
-HXLINE( 155)			q = (q + HX_(" AND mam_by=?",48,20,9b,c4));
-HXLINE( 156)			params->push(accountId);
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_150_lastId)
+HXLINE( 151)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE( 152)		::String q = HX_("SELECT mam_id FROM messages WHERE mam_id IS NOT NULL AND sync_point AND account_id=?",20,14,35,bc);
+HXLINE( 153)		if (::hx::IsNull( chatId )) {
+HXLINE( 154)			q = (q + HX_(" AND mam_by=?",48,20,9b,c4));
+HXLINE( 155)			params->push(accountId);
             		}
             		else {
-HXLINE( 158)			q = (q + HX_(" AND chat_id=?",3b,95,e7,43));
-HXLINE( 159)			params->push(chatId);
+HXLINE( 157)			q = (q + HX_(" AND chat_id=?",3b,95,e7,43));
+HXLINE( 158)			params->push(chatId);
             		}
-HXLINE( 161)		q = (q + HX_(" ORDER BY ROWID DESC LIMIT 1",1f,5d,e2,de));
-HXLINE( 162)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(callback)), ::Dynamic(new _hx_Closure_1(callback)));
+HXLINE( 160)		q = (q + HX_(" ORDER BY ROWID DESC LIMIT 1",1f,5d,e2,de));
+HXLINE( 161)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(callback)), ::Dynamic(new _hx_Closure_1(callback)));
             	}
 
 
@@ -553,184 +518,184 @@ void Sqlite_obj::storeChats(::String accountId,::Array< ::Dynamic> chats){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::persistence::Sqlite,_gthis) HXARGC(1)
             			 ::Dynamic _hx_run( ::snikket::Chat chat){
-            				HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_179_storeChats)
-HXLINE( 180)				 ::Dynamic storePresence =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 181)				{
-HXLINE( 181)					::Dynamic map = chat->presence;
-HXDLIN( 181)					::Dynamic _g_map = map;
-HXDLIN( 181)					 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 181)					while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 181)						::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 181)						 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 181)						::String _g_key = key;
-HXDLIN( 181)						::String resource = _g_key;
-HXDLIN( 181)						 ::snikket::Presence presence = _g_value;
-HXDLIN( 181)						{
-HXLINE( 182)							{
-HXLINE( 182)								 ::Dynamic value =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXDLIN( 182)								::String tmp = resource;
-HXDLIN( 182)								::String mapPresence;
-HXDLIN( 182)								if (::hx::IsNotNull( tmp )) {
-HXLINE( 182)									mapPresence = tmp;
+            				HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_178_storeChats)
+HXLINE( 179)				 ::Dynamic storePresence =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 180)				{
+HXLINE( 180)					::Dynamic map = chat->presence;
+HXDLIN( 180)					::Dynamic _g_map = map;
+HXDLIN( 180)					 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 180)					while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 180)						::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 180)						 ::snikket::Presence _g_value = ( ( ::snikket::Presence)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 180)						::String _g_key = key;
+HXDLIN( 180)						::String resource = _g_key;
+HXDLIN( 180)						 ::snikket::Presence presence = _g_value;
+HXDLIN( 180)						{
+HXLINE( 181)							{
+HXLINE( 181)								 ::Dynamic value =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXDLIN( 181)								::String tmp = resource;
+HXDLIN( 181)								::String mapPresence;
+HXDLIN( 181)								if (::hx::IsNotNull( tmp )) {
+HXLINE( 181)									mapPresence = tmp;
             								}
             								else {
-HXLINE( 182)									mapPresence = HX_("",00,00,00,00);
+HXLINE( 181)									mapPresence = HX_("",00,00,00,00);
             								}
-HXDLIN( 182)								::Reflect_obj::setField(storePresence,mapPresence,value);
+HXDLIN( 181)								::Reflect_obj::setField(storePresence,mapPresence,value);
             							}
-HXLINE( 183)							if (::hx::IsNotNull( presence->caps )) {
-HXLINE( 184)								_gthis->storeCaps(presence->caps);
-HXLINE( 185)								::String tmp1 = resource;
-HXDLIN( 185)								::String mapPresence1;
-HXDLIN( 185)								if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 185)									mapPresence1 = tmp1;
+HXLINE( 182)							if (::hx::IsNotNull( presence->caps )) {
+HXLINE( 183)								_gthis->storeCaps(presence->caps);
+HXLINE( 184)								::String tmp1 = resource;
+HXDLIN( 184)								::String mapPresence1;
+HXDLIN( 184)								if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 184)									mapPresence1 = tmp1;
             								}
             								else {
-HXLINE( 185)									mapPresence1 = HX_("",00,00,00,00);
+HXLINE( 184)									mapPresence1 = HX_("",00,00,00,00);
             								}
-HXDLIN( 185)								::Reflect_obj::field(storePresence,mapPresence1)->__SetField(HX_("caps",21,1c,ba,41),presence->caps->ver(),::hx::paccDynamic);
+HXDLIN( 184)								::Reflect_obj::field(storePresence,mapPresence1)->__SetField(HX_("caps",21,1c,ba,41),presence->caps->ver(),::hx::paccDynamic);
             							}
-HXLINE( 187)							if (::hx::IsNotNull( presence->mucUser )) {
-HXLINE( 188)								::String tmp2 = resource;
-HXDLIN( 188)								::String mapPresence2;
-HXDLIN( 188)								if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 188)									mapPresence2 = tmp2;
+HXLINE( 186)							if (::hx::IsNotNull( presence->mucUser )) {
+HXLINE( 187)								::String tmp2 = resource;
+HXDLIN( 187)								::String mapPresence2;
+HXDLIN( 187)								if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 187)									mapPresence2 = tmp2;
             								}
             								else {
-HXLINE( 188)									mapPresence2 = HX_("",00,00,00,00);
+HXLINE( 187)									mapPresence2 = HX_("",00,00,00,00);
             								}
-HXDLIN( 188)								::Reflect_obj::field(storePresence,mapPresence2)->__SetField(HX_("mucUser",e6,f3,96,b5),presence->mucUser->toString(),::hx::paccDynamic);
+HXDLIN( 187)								::Reflect_obj::field(storePresence,mapPresence2)->__SetField(HX_("mucUser",e6,f3,96,b5),presence->mucUser->toString(),::hx::paccDynamic);
             							}
             						}
             					}
             				}
-HXLINE( 191)				return storePresence;
+HXLINE( 190)				return storePresence;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_178_storeChats)
-HXLINE( 179)			 ::Dynamic mapPresence =  ::Dynamic(new _hx_Closure_0(_gthis));
-HXLINE( 193)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 194)			{
-HXLINE( 194)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 194)					q->flush();
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_177_storeChats)
+HXLINE( 178)			 ::Dynamic mapPresence =  ::Dynamic(new _hx_Closure_0(_gthis));
+HXLINE( 192)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 193)			{
+HXLINE( 193)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 193)					q->flush();
             				}
-HXDLIN( 194)				if (::hx::IsNull( q->b )) {
-HXLINE( 194)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_23,1);
+HXDLIN( 193)				if (::hx::IsNull( q->b )) {
+HXLINE( 193)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_21,1);
             				}
             				else {
-HXLINE( 194)					q->b->push(HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4));
+HXLINE( 193)					q->b->push(HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4));
             				}
             			}
-HXLINE( 195)			bool first = true;
-HXLINE( 196)			{
-HXLINE( 196)				 ::Dynamic _ = _gthis->storeChatBuffer->iterator();
-HXDLIN( 196)				while(( (bool)(_->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 196)					 ::snikket::Chat _1 = ( ( ::snikket::Chat)(_->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 197)					if (!(first)) {
-HXLINE( 197)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 197)							q->flush();
+HXLINE( 194)			bool first = true;
+HXLINE( 195)			{
+HXLINE( 195)				 ::Dynamic _ = _gthis->storeChatBuffer->iterator();
+HXDLIN( 195)				while(( (bool)(_->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 195)					 ::snikket::Chat _1 = ( ( ::snikket::Chat)(_->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 196)					if (!(first)) {
+HXLINE( 196)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 196)							q->flush();
             						}
-HXDLIN( 197)						if (::hx::IsNull( q->b )) {
-HXLINE( 197)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_24,1);
+HXDLIN( 196)						if (::hx::IsNull( q->b )) {
+HXLINE( 196)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_22,1);
             						}
             						else {
-HXLINE( 197)							q->b->push(HX_(",",2c,00,00,00));
+HXLINE( 196)							q->b->push(HX_(",",2c,00,00,00));
             						}
             					}
-HXLINE( 198)					first = false;
-HXLINE( 199)					{
-HXLINE( 199)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 199)							q->flush();
+HXLINE( 197)					first = false;
+HXLINE( 198)					{
+HXLINE( 198)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 198)							q->flush();
             						}
-HXDLIN( 199)						if (::hx::IsNull( q->b )) {
-HXLINE( 199)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_25,1);
+HXDLIN( 198)						if (::hx::IsNull( q->b )) {
+HXLINE( 198)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_23,1);
             						}
             						else {
-HXLINE( 199)							q->b->push(HX_("(?,?,?,?,?,?,?,?,?,?,?,jsonb(?),?,?,?,?)",4e,16,2e,3d));
+HXLINE( 198)							q->b->push(HX_("(?,?,?,?,?,?,?,?,?,?,?,jsonb(?),?,?,?,?)",4e,16,2e,3d));
             						}
             					}
             				}
             			}
-HXLINE( 202)			 ::snikket::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 203)			::String _hx_tmp = q->toString();
-HXLINE( 204)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 204)			{
-HXLINE( 204)				 ::Dynamic x = _gthis->storeChatBuffer->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 204)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 204)					 ::snikket::Chat x1 = ( ( ::snikket::Chat)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 205)					 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(x1,::hx::ClassOf< ::snikket::Channel >())) );
-HXLINE( 206)					if (::hx::IsNotNull( channel )) {
-HXLINE( 206)						_gthis->storeCaps(channel->disco);
-            					}
-HXLINE( 208)					::String accountId1 = accountId;
-HXDLIN( 208)					::String x2 = x1->chatId;
-HXDLIN( 208)					bool row = x1->isTrusted();
-HXDLIN( 208)					::Array< unsigned char > x3 = x1->avatarSha1;
-HXLINE( 209)					::String row1 = x1->getDisplayName();
-HXDLIN( 209)					int x4 = x1->uiState;
-HXDLIN( 209)					bool x5 = x1->isBlocked;
-HXLINE( 210)					::String row2 = x1->extensions->toString();
-HXDLIN( 210)					::String row3 = x1->readUpTo();
-HXDLIN( 210)					::String x6 = x1->readUpToBy;
-HXLINE( 211)					 ::snikket::Caps tmp;
-HXDLIN( 211)					if (::hx::IsNotNull( channel )) {
-HXLINE( 211)						tmp = channel->disco;
+HXLINE( 201)			 ::snikket::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 202)			::String _hx_tmp = q->toString();
+HXLINE( 203)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 203)			{
+HXLINE( 203)				 ::Dynamic x = _gthis->storeChatBuffer->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 203)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 203)					 ::snikket::Chat x1 = ( ( ::snikket::Chat)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 204)					 ::snikket::Channel channel = ( ( ::snikket::Channel)(::Std_obj::downcast(x1,::hx::ClassOf< ::snikket::Channel >())) );
+HXLINE( 205)					if (::hx::IsNotNull( channel )) {
+HXLINE( 205)						_gthis->storeCaps(channel->disco);
+            					}
+HXLINE( 207)					::String accountId1 = accountId;
+HXDLIN( 207)					::String x2 = x1->chatId;
+HXDLIN( 207)					bool row = x1->isTrusted();
+HXDLIN( 207)					::Array< unsigned char > x3 = x1->avatarSha1;
+HXLINE( 208)					::String row1 = x1->getDisplayName();
+HXDLIN( 208)					int x4 = x1->uiState;
+HXDLIN( 208)					bool x5 = x1->isBlocked;
+HXLINE( 209)					::String row2 = x1->extensions->toString();
+HXDLIN( 209)					::String row3 = x1->readUpTo();
+HXDLIN( 209)					::String x6 = x1->readUpToBy;
+HXLINE( 210)					 ::snikket::Caps tmp;
+HXDLIN( 210)					if (::hx::IsNotNull( channel )) {
+HXLINE( 210)						tmp = channel->disco;
             					}
             					else {
-HXLINE( 211)						tmp = null();
+HXLINE( 210)						tmp = null();
             					}
-HXDLIN( 211)					::Array< unsigned char > row4;
-HXDLIN( 211)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 211)						row4 = tmp->verRaw()->hash;
+HXDLIN( 210)					::Array< unsigned char > row4;
+HXDLIN( 210)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 210)						row4 = tmp->verRaw()->hash;
             					}
             					else {
-HXLINE( 211)						row4 = null();
-            					}
-HXDLIN( 211)					 ::Dynamic replacer = null();
-HXDLIN( 211)					::String space = null();
-HXDLIN( 211)					::String row5 = ::haxe::format::JsonPrinter_obj::print(mapPresence(x1),replacer,space);
-HXLINE( 212)					::String row6 = ( (::String)(::Type_obj::getClassName(::Type_obj::getClass(x1)).split(HX_(".",2e,00,00,00))->pop()) );
-HXLINE( 213)					bool row7 = x1->notificationsFiltered();
-HXDLIN( 213)					bool row8 = x1->notifyMention();
-HXLINE( 207)					::cpp::VirtualArray row9 = ::cpp::VirtualArray_obj::__new(16)->init(0,accountId1)->init(1,x2)->init(2,row)->init(3,x3)->init(4,row1)->init(5,x4)->init(6,x5)->init(7,row2)->init(8,row3)->init(9,x6)->init(10,row4)->init(11,row5)->init(12,row6)->init(13,row7)->init(14,row8)->init(15,x1->notifyReply());
-HXLINE( 204)					_g->push(row9);
-            				}
-            			}
-HXDLIN( 204)			::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 204)			{
-HXLINE( 204)				 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 204)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 204)					 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 204)					{
-HXLINE( 204)						 ::Dynamic x7 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 204)						while(( (bool)(x7->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 204)							 ::Dynamic x8 = x7->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 204)							_g1->push(x8);
+HXLINE( 210)						row4 = null();
+            					}
+HXDLIN( 210)					 ::Dynamic replacer = null();
+HXDLIN( 210)					::String space = null();
+HXDLIN( 210)					::String row5 = ::haxe::format::JsonPrinter_obj::print(mapPresence(x1),replacer,space);
+HXLINE( 211)					::String row6 = ( (::String)(::Type_obj::getClassName(::Type_obj::getClass(x1)).split(HX_(".",2e,00,00,00))->pop()) );
+HXLINE( 212)					bool row7 = x1->notificationsFiltered();
+HXDLIN( 212)					bool row8 = x1->notifyMention();
+HXLINE( 206)					::cpp::VirtualArray row9 = ::cpp::VirtualArray_obj::__new(16)->init(0,accountId1)->init(1,x2)->init(2,row)->init(3,x3)->init(4,row1)->init(5,x4)->init(6,x5)->init(7,row2)->init(8,row3)->init(9,x6)->init(10,row4)->init(11,row5)->init(12,row6)->init(13,row7)->init(14,row8)->init(15,x1->notifyReply());
+HXLINE( 203)					_g->push(row9);
+            				}
+            			}
+HXDLIN( 203)			::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 203)			{
+HXLINE( 203)				 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 203)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 203)					 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 203)					{
+HXLINE( 203)						 ::Dynamic x7 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 203)						while(( (bool)(x7->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 203)							 ::Dynamic x8 = x7->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 203)							_g1->push(x8);
             						}
             					}
             				}
             			}
-HXLINE( 202)			_gthis1->exec(_hx_tmp,_g1);
-HXLINE( 218)			_gthis->storeChatTimer = null();
-HXLINE( 219)			_gthis->storeChatBuffer->clear();
+HXLINE( 201)			_gthis1->exec(_hx_tmp,_g1);
+HXLINE( 217)			_gthis->storeChatTimer = null();
+HXLINE( 218)			_gthis->storeChatBuffer->clear();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_169_storeChats)
-HXDLIN( 169)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 170)		if (::hx::IsNotNull( this->storeChatTimer )) {
-HXLINE( 171)			this->storeChatTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_168_storeChats)
+HXDLIN( 168)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 169)		if (::hx::IsNotNull( this->storeChatTimer )) {
+HXLINE( 170)			this->storeChatTimer->stop();
             		}
-HXLINE( 174)		{
-HXLINE( 174)			int _g = 0;
-HXDLIN( 174)			while((_g < chats->length)){
-HXLINE( 174)				 ::snikket::Chat chat = chats->__get(_g).StaticCast<  ::snikket::Chat >();
-HXDLIN( 174)				_g = (_g + 1);
-HXLINE( 175)				this->storeChatBuffer->set(((accountId + HX_("\n",0a,00,00,00)) + chat->chatId),chat);
+HXLINE( 173)		{
+HXLINE( 173)			int _g = 0;
+HXDLIN( 173)			while((_g < chats->length)){
+HXLINE( 173)				 ::snikket::Chat chat = chats->__get(_g).StaticCast<  ::snikket::Chat >();
+HXDLIN( 173)				_g = (_g + 1);
+HXLINE( 174)				this->storeChatBuffer->set(((accountId + HX_("\n",0a,00,00,00)) + chat->chatId),chat);
             			}
             		}
-HXLINE( 178)		this->storeChatTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,accountId)),100);
+HXLINE( 177)		this->storeChatTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,accountId)),100);
             	}
 
 
@@ -741,189 +706,189 @@ void Sqlite_obj::getChats(::String accountId, ::Dynamic callback){
             		::Dynamic _hx_run(::Dynamic result){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::haxe::ds::ObjectMap,fetchCaps) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_241_getChats)
-HXLINE( 241)				return fetchCaps->keys();
+            				HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_240_getChats)
+HXLINE( 240)				return fetchCaps->keys();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2,::cpp::VirtualArray,chats) HXARGC(1)
             			 ::Dynamic _hx_run(::Dynamic capsResult){
-            				HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_245_getChats)
-HXLINE( 245)				return  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_244_getChats)
+HXLINE( 244)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("caps",21,1c,ba,41),capsResult)
             					->setFixed(1,HX_("chats",9b,9e,b3,45),chats));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_228_getChats)
-HXLINE( 229)			 ::haxe::ds::ObjectMap fetchCaps =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
-HXLINE( 230)			::cpp::VirtualArray chats = ::cpp::VirtualArray_obj::__new(0);
-HXLINE( 231)			{
-HXLINE( 231)				::Dynamic row = result;
-HXDLIN( 231)				while(::sys::db::ResultSet_obj::hasNext(row)){
-HXLINE( 231)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
-HXLINE( 232)					 ::Dynamic capsJson;
-HXDLIN( 232)					if (::hx::IsNull( row1->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
-HXLINE( 232)						capsJson = null();
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_227_getChats)
+HXLINE( 228)			 ::haxe::ds::ObjectMap fetchCaps =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
+HXLINE( 229)			::cpp::VirtualArray chats = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 230)			{
+HXLINE( 230)				::Dynamic row = result;
+HXDLIN( 230)				while(::sys::db::ResultSet_obj::hasNext(row)){
+HXLINE( 230)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
+HXLINE( 231)					 ::Dynamic capsJson;
+HXDLIN( 231)					if (::hx::IsNull( row1->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
+HXLINE( 231)						capsJson = null();
             					}
             					else {
-HXLINE( 232)						capsJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 231)						capsJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
             					}
-HXLINE( 233)					 ::snikket::Caps _hx_tmp;
-HXDLIN( 233)					if (::hx::IsNull( capsJson )) {
-HXLINE( 233)						_hx_tmp = null();
+HXLINE( 232)					 ::snikket::Caps _hx_tmp;
+HXDLIN( 232)					if (::hx::IsNull( capsJson )) {
+HXLINE( 232)						_hx_tmp = null();
             					}
             					else {
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             						 ::snikket::Identity _hx_run( ::Dynamic i){
-            							HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_233_getChats)
-HXLINE( 233)							return  ::snikket::Identity_obj::__alloc( HX_CTX ,( (::String)(i->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ));
+            							HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_232_getChats)
+HXLINE( 232)							return  ::snikket::Identity_obj::__alloc( HX_CTX ,( (::String)(i->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ));
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 233)						::String capsJson1 = ( (::String)(capsJson->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXDLIN( 233)						::Array< ::Dynamic> _hx_tmp1 = ( (::Array< ::Dynamic>)( ::Dynamic(capsJson->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic))->__Field(HX_("map",9c,0a,53,00),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_0()))) );
-HXDLIN( 233)						_hx_tmp =  ::snikket::Caps_obj::__alloc( HX_CTX ,capsJson1,_hx_tmp1,( (::Array< ::String >)(capsJson->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) ));
-            					}
-HXDLIN( 233)					row1->__SetField(HX_("capsObj",56,b6,8b,a6),_hx_tmp,::hx::paccDynamic);
-HXLINE( 234)					 ::Dynamic presenceJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ))->doParse();
-HXLINE( 235)					row1->__SetField(HX_("presenceJson",03,fa,cd,23),presenceJson,::hx::paccDynamic);
-HXLINE( 236)					{
-HXLINE( 236)						 ::Dynamic access = presenceJson;
-HXDLIN( 236)						 ::Dynamic _g_access = access;
-HXDLIN( 236)						::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 236)						int _g_index = 0;
-HXDLIN( 236)						while((_g_index < _g_keys->length)){
-HXLINE( 236)							_g_index = (_g_index + 1);
-HXDLIN( 236)							::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 236)							 ::Dynamic _g_value = ::Reflect_obj::field(_g_access,key);
-HXDLIN( 236)							::String _g_key = key;
-HXDLIN( 236)							::String resource = _g_key;
-HXDLIN( 236)							 ::Dynamic presence = _g_value;
-HXLINE( 237)							if (( (bool)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) )) {
-HXLINE( 237)								::Array< unsigned char > k = ::haxe::crypto::Base64_obj::decode(( (::String)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ),null())->b;
-HXDLIN( 237)								fetchCaps->set(k,true);
+HXLINE( 232)						::String capsJson1 = ( (::String)(capsJson->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXDLIN( 232)						::Array< ::Dynamic> _hx_tmp1 = ( (::Array< ::Dynamic>)( ::Dynamic(capsJson->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic))->__Field(HX_("map",9c,0a,53,00),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN( 232)						_hx_tmp =  ::snikket::Caps_obj::__alloc( HX_CTX ,capsJson1,_hx_tmp1,( (::Array< ::String >)(capsJson->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) ));
+            					}
+HXDLIN( 232)					row1->__SetField(HX_("capsObj",56,b6,8b,a6),_hx_tmp,::hx::paccDynamic);
+HXLINE( 233)					 ::Dynamic presenceJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ))->doParse();
+HXLINE( 234)					row1->__SetField(HX_("presenceJson",03,fa,cd,23),presenceJson,::hx::paccDynamic);
+HXLINE( 235)					{
+HXLINE( 235)						 ::Dynamic access = presenceJson;
+HXDLIN( 235)						 ::Dynamic _g_access = access;
+HXDLIN( 235)						::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
+HXDLIN( 235)						int _g_index = 0;
+HXDLIN( 235)						while((_g_index < _g_keys->length)){
+HXLINE( 235)							_g_index = (_g_index + 1);
+HXDLIN( 235)							::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 235)							 ::Dynamic _g_value = ::Reflect_obj::field(_g_access,key);
+HXDLIN( 235)							::String _g_key = key;
+HXDLIN( 235)							::String resource = _g_key;
+HXDLIN( 235)							 ::Dynamic presence = _g_value;
+HXLINE( 236)							if (( (bool)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) )) {
+HXLINE( 236)								::Array< unsigned char > k = ::haxe::crypto::Base64_obj::decode(( (::String)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ),null())->b;
+HXDLIN( 236)								fetchCaps->set(k,true);
             							}
             						}
             					}
-HXLINE( 239)					chats->push(row1);
+HXLINE( 238)					chats->push(row1);
             				}
             			}
-HXLINE( 241)			::Array< ::Dynamic> fetchCapsSha1s = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 240)			::Array< ::Dynamic> fetchCapsSha1s = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_1(fetchCaps)))));
-HXLINE( 242)			 ::snikket::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 243)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(fetchCapsSha1s->length);
-HXDLIN( 243)			{
-HXLINE( 243)				int _g = 0;
-HXDLIN( 243)				int _g1 = fetchCapsSha1s->length;
-HXDLIN( 243)				while((_g < _g1)){
-HXLINE( 243)					_g = (_g + 1);
-HXDLIN( 243)					int i = (_g - 1);
-HXDLIN( 243)					{
-HXLINE( 243)						::Array< unsigned char > _ = ( (::Array< unsigned char >)(_hx_array_unsafe_get(fetchCapsSha1s,i)) );
-HXDLIN( 243)						result1->__unsafe_set(i,HX_("?",3f,00,00,00));
+HXLINE( 241)			 ::snikket::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 242)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(fetchCapsSha1s->length);
+HXDLIN( 242)			{
+HXLINE( 242)				int _g = 0;
+HXDLIN( 242)				int _g1 = fetchCapsSha1s->length;
+HXDLIN( 242)				while((_g < _g1)){
+HXLINE( 242)					_g = (_g + 1);
+HXDLIN( 242)					int i = (_g - 1);
+HXDLIN( 242)					{
+HXLINE( 242)						::Array< unsigned char > _ = ( (::Array< unsigned char >)(_hx_array_unsafe_get(fetchCapsSha1s,i)) );
+HXDLIN( 242)						result1->__unsafe_set(i,HX_("?",3f,00,00,00));
             					}
             				}
             			}
-HXLINE( 242)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(((HX_("SELECT sha1, json(caps) AS caps FROM caps WHERE sha1 IN (",5a,e4,9c,e2) + result1->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)),fetchCapsSha1s), ::Dynamic(new _hx_Closure_2(chats)),null());
+HXLINE( 241)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(((HX_("SELECT sha1, json(caps) AS caps FROM caps WHERE sha1 IN (",5a,e4,9c,e2) + result1->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)),fetchCapsSha1s), ::Dynamic(new _hx_Closure_2(chats)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::Dynamic result){
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_246_getChats)
-HXLINE( 247)			 ::haxe::ds::StringMap capsMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 248)			{
-HXLINE( 248)				::Dynamic row =  ::Dynamic(result->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic));
-HXDLIN( 248)				while(::sys::db::ResultSet_obj::hasNext(row)){
-HXLINE( 248)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
-HXLINE( 249)					 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE( 250)					{
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_245_getChats)
+HXLINE( 246)			 ::haxe::ds::StringMap capsMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 247)			{
+HXLINE( 247)				::Dynamic row =  ::Dynamic(result->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic));
+HXDLIN( 247)				while(::sys::db::ResultSet_obj::hasNext(row)){
+HXLINE( 247)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
+HXLINE( 248)					 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 249)					{
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             						 ::snikket::Identity _hx_run( ::Dynamic i){
-            							HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_250_getChats)
-HXLINE( 250)							return  ::snikket::Identity_obj::__alloc( HX_CTX ,( (::String)(i->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ));
+            							HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_249_getChats)
+HXLINE( 249)							return  ::snikket::Identity_obj::__alloc( HX_CTX ,( (::String)(i->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ));
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 250)						::String k = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(row1->__Field(HX_("sha1",85,c8,52,4c),::hx::paccDynamic)) )),null());
-HXDLIN( 250)						::String json1 = ( (::String)(json->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXDLIN( 250)						::Array< ::Dynamic> v = ( (::Array< ::Dynamic>)( ::Dynamic(json->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic))->__Field(HX_("map",9c,0a,53,00),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_4()))) );
-HXDLIN( 250)						 ::snikket::Caps v1 =  ::snikket::Caps_obj::__alloc( HX_CTX ,json1,v,( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) ));
-HXDLIN( 250)						capsMap->set(k,v1);
-            					}
-            				}
-            			}
-HXLINE( 252)			::Array< ::Dynamic> chats = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 253)			{
-HXLINE( 253)				int _g = 0;
-HXDLIN( 253)				::cpp::VirtualArray _g1 = ( (::cpp::VirtualArray)(result->__Field(HX_("chats",9b,9e,b3,45),::hx::paccDynamic)) );
-HXDLIN( 253)				while((_g < _g1->get_length())){
-HXLINE( 253)					 ::Dynamic row2 = _g1->__get(_g);
-HXDLIN( 253)					_g = (_g + 1);
-HXLINE( 254)					 ::haxe::ds::StringMap presenceMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 255)					 ::Dynamic presenceJson =  ::Dynamic(row2->__Field(HX_("presenceJson",03,fa,cd,23),::hx::paccDynamic));
-HXLINE( 256)					{
-HXLINE( 256)						 ::Dynamic access = presenceJson;
-HXDLIN( 256)						 ::Dynamic _g_access = access;
-HXDLIN( 256)						::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 256)						int _g_index = 0;
-HXDLIN( 256)						while((_g_index < _g_keys->length)){
-HXLINE( 256)							_g_index = (_g_index + 1);
-HXDLIN( 256)							::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 256)							 ::Dynamic _g_value = ::Reflect_obj::field(_g_access,key);
-HXDLIN( 256)							::String _g_key = key;
-HXDLIN( 256)							::String resource = _g_key;
-HXDLIN( 256)							 ::Dynamic presence = _g_value;
-HXLINE( 257)							{
-HXLINE( 258)								 ::snikket::Caps v2;
-HXDLIN( 258)								if (::hx::IsNull( presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
-HXLINE( 258)									v2 = null();
+HXLINE( 249)						::String k = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(row1->__Field(HX_("sha1",85,c8,52,4c),::hx::paccDynamic)) )),null());
+HXDLIN( 249)						::String json1 = ( (::String)(json->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXDLIN( 249)						::Array< ::Dynamic> v = ( (::Array< ::Dynamic>)( ::Dynamic(json->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic))->__Field(HX_("map",9c,0a,53,00),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_4()))) );
+HXDLIN( 249)						 ::snikket::Caps v1 =  ::snikket::Caps_obj::__alloc( HX_CTX ,json1,v,( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) ));
+HXDLIN( 249)						capsMap->set(k,v1);
+            					}
+            				}
+            			}
+HXLINE( 251)			::Array< ::Dynamic> chats = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 252)			{
+HXLINE( 252)				int _g = 0;
+HXDLIN( 252)				::cpp::VirtualArray _g1 = ( (::cpp::VirtualArray)(result->__Field(HX_("chats",9b,9e,b3,45),::hx::paccDynamic)) );
+HXDLIN( 252)				while((_g < _g1->get_length())){
+HXLINE( 252)					 ::Dynamic row2 = _g1->__get(_g);
+HXDLIN( 252)					_g = (_g + 1);
+HXLINE( 253)					 ::haxe::ds::StringMap presenceMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 254)					 ::Dynamic presenceJson =  ::Dynamic(row2->__Field(HX_("presenceJson",03,fa,cd,23),::hx::paccDynamic));
+HXLINE( 255)					{
+HXLINE( 255)						 ::Dynamic access = presenceJson;
+HXDLIN( 255)						 ::Dynamic _g_access = access;
+HXDLIN( 255)						::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
+HXDLIN( 255)						int _g_index = 0;
+HXDLIN( 255)						while((_g_index < _g_keys->length)){
+HXLINE( 255)							_g_index = (_g_index + 1);
+HXDLIN( 255)							::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 255)							 ::Dynamic _g_value = ::Reflect_obj::field(_g_access,key);
+HXDLIN( 255)							::String _g_key = key;
+HXDLIN( 255)							::String resource = _g_key;
+HXDLIN( 255)							 ::Dynamic presence = _g_value;
+HXLINE( 256)							{
+HXLINE( 257)								 ::snikket::Caps v2;
+HXDLIN( 257)								if (::hx::IsNull( presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
+HXLINE( 257)									v2 = null();
             								}
             								else {
-HXLINE( 258)									v2 = ( ( ::snikket::Caps)(capsMap->get(( (::String)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))) );
+HXLINE( 257)									v2 = ( ( ::snikket::Caps)(capsMap->get(( (::String)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))) );
             								}
-HXLINE( 259)								 ::snikket::Stanza v3;
-HXDLIN( 259)								if (::hx::IsNull( presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic) )) {
-HXLINE( 259)									v3 = null();
+HXLINE( 258)								 ::snikket::Stanza v3;
+HXDLIN( 258)								if (::hx::IsNull( presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic) )) {
+HXLINE( 258)									v3 = null();
             								}
             								else {
-HXLINE( 259)									v3 = ::snikket::Stanza_obj::parse(( (::String)(presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic)) ));
+HXLINE( 258)									v3 = ::snikket::Stanza_obj::parse(( (::String)(presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic)) ));
             								}
-HXLINE( 257)								 ::snikket::Presence v4 =  ::snikket::Presence_obj::__alloc( HX_CTX ,v2,v3);
-HXDLIN( 257)								presenceMap->set(resource,v4);
+HXLINE( 256)								 ::snikket::Presence v4 =  ::snikket::Presence_obj::__alloc( HX_CTX ,v2,v3);
+HXDLIN( 256)								presenceMap->set(resource,v4);
             							}
             						}
             					}
-HXLINE( 262)					 ::Dynamic row3 =  ::Dynamic(row2->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic));
-HXDLIN( 262)					bool _hx_tmp = ::hx::IsNotEq( row2->__Field(HX_("trusted",f7,b7,a6,16),::hx::paccDynamic),0 );
-HXDLIN( 262)					 ::Dynamic row4 =  ::Dynamic(row2->__Field(HX_("avatar_sha1",ab,69,a3,a4),::hx::paccDynamic));
-HXDLIN( 262)					 ::Dynamic row5 =  ::Dynamic(row2->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic));
-HXDLIN( 262)					 ::Dynamic row6 =  ::Dynamic(row2->__Field(HX_("ui_state",a6,9a,4e,b2),::hx::paccDynamic));
-HXDLIN( 262)					bool _hx_tmp1 = ::hx::IsNotEq( row2->__Field(HX_("blocked",ec,7a,fe,44),::hx::paccDynamic),0 );
-HXDLIN( 262)					 ::Dynamic row7 =  ::Dynamic(row2->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic));
-HXDLIN( 262)					 ::Dynamic row8 =  ::Dynamic(row2->__Field(HX_("read_up_to_id",84,60,ad,9e),::hx::paccDynamic));
-HXDLIN( 262)					 ::Dynamic row9 =  ::Dynamic(row2->__Field(HX_("read_up_to_by",80,5a,ad,9e),::hx::paccDynamic));
-HXDLIN( 262)					 ::Dynamic _hx_tmp2;
-HXDLIN( 262)					if (::hx::IsNull( row2->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic) )) {
-HXLINE( 262)						_hx_tmp2 = null();
+HXLINE( 261)					 ::Dynamic row3 =  ::Dynamic(row2->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic));
+HXDLIN( 261)					bool _hx_tmp = ::hx::IsNotEq( row2->__Field(HX_("trusted",f7,b7,a6,16),::hx::paccDynamic),0 );
+HXDLIN( 261)					 ::Dynamic row4 =  ::Dynamic(row2->__Field(HX_("avatar_sha1",ab,69,a3,a4),::hx::paccDynamic));
+HXDLIN( 261)					 ::Dynamic row5 =  ::Dynamic(row2->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic));
+HXDLIN( 261)					 ::Dynamic row6 =  ::Dynamic(row2->__Field(HX_("ui_state",a6,9a,4e,b2),::hx::paccDynamic));
+HXDLIN( 261)					bool _hx_tmp1 = ::hx::IsNotEq( row2->__Field(HX_("blocked",ec,7a,fe,44),::hx::paccDynamic),0 );
+HXDLIN( 261)					 ::Dynamic row7 =  ::Dynamic(row2->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic));
+HXDLIN( 261)					 ::Dynamic row8 =  ::Dynamic(row2->__Field(HX_("read_up_to_id",84,60,ad,9e),::hx::paccDynamic));
+HXDLIN( 261)					 ::Dynamic row9 =  ::Dynamic(row2->__Field(HX_("read_up_to_by",80,5a,ad,9e),::hx::paccDynamic));
+HXDLIN( 261)					 ::Dynamic _hx_tmp2;
+HXDLIN( 261)					if (::hx::IsNull( row2->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic) )) {
+HXLINE( 261)						_hx_tmp2 = null();
             					}
             					else {
-HXLINE( 262)						_hx_tmp2 = ::hx::IsNotEq( row2->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic),0 );
+HXLINE( 261)						_hx_tmp2 = ::hx::IsNotEq( row2->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic),0 );
             					}
-HXDLIN( 262)					bool _hx_tmp3 = ::hx::IsNotEq( row2->__Field(HX_("notify_mention",34,44,26,d0),::hx::paccDynamic),0 );
-HXDLIN( 262)					bool _hx_tmp4 = ::hx::IsNotEq( row2->__Field(HX_("notify_reply",f4,e7,df,1b),::hx::paccDynamic),0 );
-HXDLIN( 262)					 ::Dynamic row10 =  ::Dynamic(row2->__Field(HX_("capsObj",56,b6,8b,a6),::hx::paccDynamic));
-HXDLIN( 262)					chats->push( ::snikket::SerializedChat_obj::__alloc( HX_CTX ,( (::String)(row3) ),_hx_tmp,( (::Array< unsigned char >)(row4) ),presenceMap,( (::String)(row5) ),row6,_hx_tmp1,( (::String)(row7) ),( (::String)(row8) ),( (::String)(row9) ),_hx_tmp2,_hx_tmp3,_hx_tmp4,( ( ::snikket::Caps)(row10) ),( (::String)(::Reflect_obj::field(row2,HX_("class",38,78,58,48))) )));
+HXDLIN( 261)					bool _hx_tmp3 = ::hx::IsNotEq( row2->__Field(HX_("notify_mention",34,44,26,d0),::hx::paccDynamic),0 );
+HXDLIN( 261)					bool _hx_tmp4 = ::hx::IsNotEq( row2->__Field(HX_("notify_reply",f4,e7,df,1b),::hx::paccDynamic),0 );
+HXDLIN( 261)					 ::Dynamic row10 =  ::Dynamic(row2->__Field(HX_("capsObj",56,b6,8b,a6),::hx::paccDynamic));
+HXDLIN( 261)					chats->push( ::snikket::SerializedChat_obj::__alloc( HX_CTX ,( (::String)(row3) ),_hx_tmp,( (::Array< unsigned char >)(row4) ),presenceMap,( (::String)(row5) ),row6,_hx_tmp1,( (::String)(row7) ),( (::String)(row8) ),( (::String)(row9) ),_hx_tmp2,_hx_tmp3,_hx_tmp4,( ( ::snikket::Caps)(row10) ),( (::String)(::Reflect_obj::field(row2,HX_("class",38,78,58,48))) )));
             				}
             			}
-HXLINE( 264)			callback(chats);
+HXLINE( 263)			callback(chats);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_224_getChats)
-HXDLIN( 224)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 225)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT chat_id, trusted, avatar_sha1, fn, ui_state, blocked, extensions, read_up_to_id, read_up_to_by, notifications_filtered, notify_mention, notify_reply, json(caps) AS caps, json(presence) AS presence, class FROM chats LEFT JOIN caps ON chats.caps_ver=caps.sha1 WHERE account_id=?",f9,ff,8c,f1),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_3(_gthis)),null()), ::Dynamic(new _hx_Closure_5(callback)),null());
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_223_getChats)
+HXDLIN( 223)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 224)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT chat_id, trusted, avatar_sha1, fn, ui_state, blocked, extensions, read_up_to_id, read_up_to_by, notifications_filtered, notify_mention, notify_reply, json(caps) AS caps, json(presence) AS presence, class FROM chats LEFT JOIN caps ON chats.caps_ver=caps.sha1 WHERE account_id=?",f9,ff,8c,f1),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_3(_gthis)),null()), ::Dynamic(new _hx_Closure_5(callback)),null());
             	}
 
 
@@ -932,95 +897,95 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChats,(void))
 void Sqlite_obj::storeMessages(::String accountId,::Array< ::Dynamic> messages, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages, ::snikket::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_305_storeMessages)
-HXLINE( 305)			 ::snikket::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 306)			::Array< ::String > result = ::Array_obj< ::String >::__new(messages->length);
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_304_storeMessages)
+HXLINE( 304)			 ::snikket::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 305)			::Array< ::String > result = ::Array_obj< ::String >::__new(messages->length);
+HXDLIN( 305)			{
+HXLINE( 305)				int _g = 0;
+HXDLIN( 305)				int _g1 = messages->length;
+HXDLIN( 305)				while((_g < _g1)){
+HXLINE( 305)					_g = (_g + 1);
+HXDLIN( 305)					int i = (_g - 1);
+HXDLIN( 305)					{
+HXLINE( 305)						 ::snikket::ChatMessage _1 = ( ( ::snikket::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
+HXDLIN( 305)						result->__unsafe_set(i,HX_("(?,?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),?,?,?,?)",56,f5,42,e0));
+            					}
+            				}
+            			}
+HXDLIN( 305)			::String _hx_tmp = (HX_("INSERT OR REPLACE INTO messages VALUES ",28,32,a2,bc) + result->join(HX_(",",2c,00,00,00)));
+HXLINE( 306)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
 HXDLIN( 306)			{
-HXLINE( 306)				int _g = 0;
-HXDLIN( 306)				int _g1 = messages->length;
-HXDLIN( 306)				while((_g < _g1)){
-HXLINE( 306)					_g = (_g + 1);
-HXDLIN( 306)					int i = (_g - 1);
-HXDLIN( 306)					{
-HXLINE( 306)						 ::snikket::ChatMessage _1 = ( ( ::snikket::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN( 306)						result->__unsafe_set(i,HX_("(?,?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),?,?,?,?)",56,f5,42,e0));
-            					}
-            				}
-            			}
-HXDLIN( 306)			::String _hx_tmp = (HX_("INSERT OR REPLACE INTO messages VALUES ",28,32,a2,bc) + result->join(HX_(",",2c,00,00,00)));
-HXLINE( 307)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 307)			{
-HXLINE( 307)				int _g_current = 0;
-HXDLIN( 307)				::Array< ::Dynamic> _g_array = messages;
-HXDLIN( 307)				while((_g_current < _g_array->length)){
-HXLINE( 307)					_g_current = (_g_current + 1);
-HXDLIN( 307)					 ::snikket::ChatMessage x = _g_array->__get((_g_current - 1)).StaticCast<  ::snikket::ChatMessage >();
-HXLINE( 308)					 ::snikket::ChatMessage correctable = x;
-HXLINE( 309)					 ::snikket::ChatMessage message;
-HXDLIN( 309)					if ((x->versions->length == 1)) {
-HXLINE( 309)						message = x->versions->__get(0).StaticCast<  ::snikket::ChatMessage >();
+HXLINE( 306)				int _g_current = 0;
+HXDLIN( 306)				::Array< ::Dynamic> _g_array = messages;
+HXDLIN( 306)				while((_g_current < _g_array->length)){
+HXLINE( 306)					_g_current = (_g_current + 1);
+HXDLIN( 306)					 ::snikket::ChatMessage x = _g_array->__get((_g_current - 1)).StaticCast<  ::snikket::ChatMessage >();
+HXLINE( 307)					 ::snikket::ChatMessage correctable = x;
+HXLINE( 308)					 ::snikket::ChatMessage message;
+HXDLIN( 308)					if ((x->versions->length == 1)) {
+HXLINE( 308)						message = x->versions->__get(0).StaticCast<  ::snikket::ChatMessage >();
             					}
             					else {
-HXLINE( 309)						message = x;
+HXLINE( 308)						message = x;
             					}
-HXLINE( 311)					::String accountId1 = accountId;
-HXDLIN( 311)					::String _hx_tmp1;
-HXDLIN( 311)					::String tmp = message->serverId;
-HXDLIN( 311)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 311)						_hx_tmp1 = tmp;
+HXLINE( 310)					::String accountId1 = accountId;
+HXDLIN( 310)					::String _hx_tmp1;
+HXDLIN( 310)					::String tmp = message->serverId;
+HXDLIN( 310)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 310)						_hx_tmp1 = tmp;
             					}
             					else {
-HXLINE( 311)						_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE( 310)						_hx_tmp1 = HX_("",00,00,00,00);
             					}
-HXDLIN( 311)					::String _hx_tmp2;
-HXDLIN( 311)					::String tmp1 = message->serverIdBy;
-HXDLIN( 311)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 311)						_hx_tmp2 = tmp1;
+HXDLIN( 310)					::String _hx_tmp2;
+HXDLIN( 310)					::String tmp1 = message->serverIdBy;
+HXDLIN( 310)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 310)						_hx_tmp2 = tmp1;
             					}
             					else {
-HXLINE( 311)						_hx_tmp2 = HX_("",00,00,00,00);
+HXLINE( 310)						_hx_tmp2 = HX_("",00,00,00,00);
             					}
-HXLINE( 312)					::String _hx_tmp3;
-HXDLIN( 312)					::String tmp2 = message->localId;
-HXDLIN( 312)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 312)						_hx_tmp3 = tmp2;
+HXLINE( 311)					::String _hx_tmp3;
+HXDLIN( 311)					::String tmp2 = message->localId;
+HXDLIN( 311)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 311)						_hx_tmp3 = tmp2;
             					}
             					else {
-HXLINE( 312)						_hx_tmp3 = HX_("",00,00,00,00);
+HXLINE( 311)						_hx_tmp3 = HX_("",00,00,00,00);
             					}
-HXDLIN( 312)					::String _hx_tmp4;
-HXDLIN( 312)					::String tmp3 = correctable->localId;
-HXDLIN( 312)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 312)						_hx_tmp4 = tmp3;
+HXDLIN( 311)					::String _hx_tmp4;
+HXDLIN( 311)					::String tmp3 = correctable->localId;
+HXDLIN( 311)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 311)						_hx_tmp4 = tmp3;
             					}
             					else {
-HXLINE( 312)						_hx_tmp4 = correctable->serverId;
-            					}
-HXDLIN( 312)					bool correctable1 = correctable->syncPoint;
-HXLINE( 313)					::String _hx_tmp5 = correctable->chatId();
-HXDLIN( 313)					::String correctable2 = correctable->senderId;
-HXLINE( 314)					::String message1 = message->timestamp;
-HXDLIN( 314)					int message2 = message->status;
-HXDLIN( 314)					int message3 = message->direction;
-HXDLIN( 314)					int message4 = message->type;
-HXLINE( 307)					_g2->push(::cpp::VirtualArray_obj::__new(13)->init(0,accountId1)->init(1,_hx_tmp1)->init(2,_hx_tmp2)->init(3,_hx_tmp3)->init(4,_hx_tmp4)->init(5,correctable1)->init(6,_hx_tmp5)->init(7,correctable2)->init(8,message1)->init(9,message2)->init(10,message3)->init(11,message4)->init(12,message->asStanza()->toString()));
-            				}
-            			}
-HXDLIN( 307)			::cpp::VirtualArray _g3 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 307)			{
-HXLINE( 307)				 ::Dynamic e = _g2->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 307)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 307)					 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 307)					{
-HXLINE( 307)						 ::Dynamic x1 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 307)						while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 307)							 ::Dynamic x2 = x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 307)							_g3->push(x2);
+HXLINE( 311)						_hx_tmp4 = correctable->serverId;
+            					}
+HXDLIN( 311)					bool correctable1 = correctable->syncPoint;
+HXLINE( 312)					::String _hx_tmp5 = correctable->chatId();
+HXDLIN( 312)					::String correctable2 = correctable->senderId;
+HXLINE( 313)					::String message1 = message->timestamp;
+HXDLIN( 313)					int message2 = message->status;
+HXDLIN( 313)					int message3 = message->direction;
+HXDLIN( 313)					int message4 = message->type;
+HXLINE( 306)					_g2->push(::cpp::VirtualArray_obj::__new(13)->init(0,accountId1)->init(1,_hx_tmp1)->init(2,_hx_tmp2)->init(3,_hx_tmp3)->init(4,_hx_tmp4)->init(5,correctable1)->init(6,_hx_tmp5)->init(7,correctable2)->init(8,message1)->init(9,message2)->init(10,message3)->init(11,message4)->init(12,message->asStanza()->toString()));
+            				}
+            			}
+HXDLIN( 306)			::cpp::VirtualArray _g3 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 306)			{
+HXLINE( 306)				 ::Dynamic e = _g2->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 306)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 306)					 ::Dynamic e1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 306)					{
+HXLINE( 306)						 ::Dynamic x1 = e1->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 306)						while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 306)							 ::Dynamic x2 = x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 306)							_g3->push(x2);
             						}
             					}
             				}
             			}
-HXLINE( 305)			return _gthis1->exec(_hx_tmp,_g3);
+HXLINE( 304)			return _gthis1->exec(_hx_tmp,_g3);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -1028,192 +993,192 @@ HXLINE( 305)			return _gthis1->exec(_hx_tmp,_g3);
             		::Dynamic _hx_run(::Dynamic _){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::Dynamic> ms){
-            				HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_320_storeMessages)
-HXLINE( 320)				return _gthis->hydrateReactions(accountId,ms);
+            				HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_319_storeMessages)
+HXLINE( 319)				return _gthis->hydrateReactions(accountId,ms);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_319_storeMessages)
-HXLINE( 320)			::Dynamic _hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->hydrateReplyTo(accountId,messages,replyTos), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
-HXLINE( 319)			return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp,callback,null());
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_318_storeMessages)
+HXLINE( 319)			::Dynamic _hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->hydrateReplyTo(accountId,messages,replyTos), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
+HXLINE( 318)			return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp,callback,null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_269_storeMessages)
-HXDLIN( 269)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 270)		if ((messages->length < 1)) {
-HXLINE( 271)			callback(messages);
-HXLINE( 272)			return;
-            		}
-HXLINE( 275)		::Array< ::String > chatIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 276)		::Array< ::String > localIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 277)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 278)		{
-HXLINE( 278)			int _g = 0;
-HXDLIN( 278)			while((_g < messages->length)){
-HXLINE( 278)				 ::snikket::ChatMessage message = messages->__get(_g).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 278)				_g = (_g + 1);
-HXLINE( 279)				bool _hx_tmp;
-HXDLIN( 279)				if (::hx::IsNull( message->serverId )) {
-HXLINE( 279)					_hx_tmp = ::hx::IsNull( message->localId );
+            	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_268_storeMessages)
+HXDLIN( 268)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 269)		if ((messages->length < 1)) {
+HXLINE( 270)			callback(messages);
+HXLINE( 271)			return;
+            		}
+HXLINE( 274)		::Array< ::String > chatIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 275)		::Array< ::String > localIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 276)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 277)		{
+HXLINE( 277)			int _g = 0;
+HXDLIN( 277)			while((_g < messages->length)){
+HXLINE( 277)				 ::snikket::ChatMessage message = messages->__get(_g).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 277)				_g = (_g + 1);
+HXLINE( 278)				bool _hx_tmp;
+HXDLIN( 278)				if (::hx::IsNull( message->serverId )) {
+HXLINE( 278)					_hx_tmp = ::hx::IsNull( message->localId );
             				}
             				else {
-HXLINE( 279)					_hx_tmp = false;
+HXLINE( 278)					_hx_tmp = false;
             				}
-HXDLIN( 279)				if (_hx_tmp) {
-HXLINE( 279)					HX_STACK_DO_THROW(HX_("Cannot store a message with no id",54,e5,b0,de));
+HXDLIN( 278)				if (_hx_tmp) {
+HXLINE( 278)					HX_STACK_DO_THROW(HX_("Cannot store a message with no id",54,e5,b0,de));
             				}
-HXLINE( 280)				bool _hx_tmp1;
-HXDLIN( 280)				if (::hx::IsNull( message->serverId )) {
-HXLINE( 280)					_hx_tmp1 = message->isIncoming();
+HXLINE( 279)				bool _hx_tmp1;
+HXDLIN( 279)				if (::hx::IsNull( message->serverId )) {
+HXLINE( 279)					_hx_tmp1 = message->isIncoming();
             				}
             				else {
-HXLINE( 280)					_hx_tmp1 = false;
+HXLINE( 279)					_hx_tmp1 = false;
             				}
-HXDLIN( 280)				if (_hx_tmp1) {
-HXLINE( 280)					HX_STACK_DO_THROW(HX_("Cannot store an incoming message with no server id",d7,6d,19,fb));
+HXDLIN( 279)				if (_hx_tmp1) {
+HXLINE( 279)					HX_STACK_DO_THROW(HX_("Cannot store an incoming message with no server id",d7,6d,19,fb));
             				}
-HXLINE( 281)				bool _hx_tmp2;
-HXDLIN( 281)				if (::hx::IsNotNull( message->serverId )) {
-HXLINE( 281)					_hx_tmp2 = ::hx::IsNull( message->serverIdBy );
+HXLINE( 280)				bool _hx_tmp2;
+HXDLIN( 280)				if (::hx::IsNotNull( message->serverId )) {
+HXLINE( 280)					_hx_tmp2 = ::hx::IsNull( message->serverIdBy );
             				}
             				else {
-HXLINE( 281)					_hx_tmp2 = false;
+HXLINE( 280)					_hx_tmp2 = false;
             				}
-HXDLIN( 281)				if (_hx_tmp2) {
-HXLINE( 281)					HX_STACK_DO_THROW(HX_("Cannot store a message with a server id and no by",00,9f,b7,38));
+HXDLIN( 280)				if (_hx_tmp2) {
+HXLINE( 280)					HX_STACK_DO_THROW(HX_("Cannot store a message with a server id and no by",00,9f,b7,38));
             				}
-HXLINE( 283)				bool _hx_tmp3;
-HXDLIN( 283)				if (!(message->isIncoming())) {
-HXLINE( 283)					_hx_tmp3 = (message->versions->length < 1);
+HXLINE( 282)				bool _hx_tmp3;
+HXDLIN( 282)				if (!(message->isIncoming())) {
+HXLINE( 282)					_hx_tmp3 = (message->versions->length < 1);
             				}
             				else {
-HXLINE( 283)					_hx_tmp3 = false;
+HXLINE( 282)					_hx_tmp3 = false;
             				}
-HXDLIN( 283)				if (_hx_tmp3) {
-HXLINE( 286)					chatIds->push(message->chatId());
-HXLINE( 287)					localIds->push(message->localId);
+HXDLIN( 282)				if (_hx_tmp3) {
+HXLINE( 285)					chatIds->push(message->chatId());
+HXLINE( 286)					localIds->push(message->localId);
             				}
-HXLINE( 289)				bool _hx_tmp4;
-HXDLIN( 289)				if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 289)					_hx_tmp4 = ::hx::IsNull( message->replyToMessage->serverIdBy );
+HXLINE( 288)				bool _hx_tmp4;
+HXDLIN( 288)				if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 288)					_hx_tmp4 = ::hx::IsNull( message->replyToMessage->serverIdBy );
             				}
             				else {
-HXLINE( 289)					_hx_tmp4 = false;
+HXLINE( 288)					_hx_tmp4 = false;
             				}
-HXDLIN( 289)				if (_hx_tmp4) {
-HXLINE( 290)					::Array< ::Dynamic> replyTos1 = replyTos;
-HXDLIN( 290)					::String _hx_tmp5 = message->chatId();
-HXDLIN( 290)					replyTos1->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 288)				if (_hx_tmp4) {
+HXLINE( 289)					::Array< ::Dynamic> replyTos1 = replyTos;
+HXDLIN( 289)					::String _hx_tmp5 = message->chatId();
+HXDLIN( 289)					replyTos1->push( ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp5)
             						->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             						->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
             				}
             			}
             		}
-HXLINE( 294)		::Dynamic _hx_tmp6;
-HXDLIN( 294)		bool _hx_tmp7;
-HXDLIN( 294)		if ((chatIds->length > 0)) {
-HXLINE( 294)			_hx_tmp7 = (localIds->length > 0);
+HXLINE( 293)		::Dynamic _hx_tmp6;
+HXDLIN( 293)		bool _hx_tmp7;
+HXDLIN( 293)		if ((chatIds->length > 0)) {
+HXLINE( 293)			_hx_tmp7 = (localIds->length > 0);
             		}
             		else {
-HXLINE( 294)			_hx_tmp7 = false;
+HXLINE( 293)			_hx_tmp7 = false;
             		}
-HXDLIN( 294)		if (_hx_tmp7) {
-HXLINE( 295)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXDLIN( 293)		if (_hx_tmp7) {
+HXLINE( 294)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 295)			{
+HXLINE( 295)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 295)					q->flush();
+            				}
+HXDLIN( 295)				if (::hx::IsNull( q->b )) {
+HXLINE( 295)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_49,1);
+            				}
+            				else {
+HXLINE( 295)					q->b->push(HX_("DELETE FROM messages WHERE account_id=? AND direction=? AND chat_id IN (",a1,9c,a2,06));
+            				}
+            			}
 HXLINE( 296)			{
-HXLINE( 296)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 296)				::Array< ::String > result = ::Array_obj< ::String >::__new(chatIds->length);
+HXDLIN( 296)				{
+HXLINE( 296)					int _g1 = 0;
+HXDLIN( 296)					int _g2 = chatIds->length;
+HXDLIN( 296)					while((_g1 < _g2)){
+HXLINE( 296)						_g1 = (_g1 + 1);
+HXDLIN( 296)						int i = (_g1 - 1);
+HXDLIN( 296)						{
+HXLINE( 296)							::String _ = ( (::String)(_hx_array_unsafe_get(chatIds,i)) );
+HXDLIN( 296)							result->__unsafe_set(i,HX_("?",3f,00,00,00));
+            						}
+            					}
+            				}
+HXDLIN( 296)				::String x = result->join(HX_(",",2c,00,00,00));
+HXDLIN( 296)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 296)					q->flush();
             				}
 HXDLIN( 296)				if (::hx::IsNull( q->b )) {
-HXLINE( 296)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_51,1);
+HXLINE( 296)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
             				}
             				else {
-HXLINE( 296)					q->b->push(HX_("DELETE FROM messages WHERE account_id=? AND direction=? AND chat_id IN (",a1,9c,a2,06));
+HXLINE( 296)					::Array< ::String > q1 = q->b;
+HXDLIN( 296)					q1->push(::Std_obj::string(x));
             				}
             			}
 HXLINE( 297)			{
-HXLINE( 297)				::Array< ::String > result = ::Array_obj< ::String >::__new(chatIds->length);
-HXDLIN( 297)				{
-HXLINE( 297)					int _g1 = 0;
-HXDLIN( 297)					int _g2 = chatIds->length;
-HXDLIN( 297)					while((_g1 < _g2)){
-HXLINE( 297)						_g1 = (_g1 + 1);
-HXDLIN( 297)						int i = (_g1 - 1);
-HXDLIN( 297)						{
-HXLINE( 297)							::String _ = ( (::String)(_hx_array_unsafe_get(chatIds,i)) );
-HXDLIN( 297)							result->__unsafe_set(i,HX_("?",3f,00,00,00));
-            						}
-            					}
-            				}
-HXDLIN( 297)				::String x = result->join(HX_(",",2c,00,00,00));
-HXDLIN( 297)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 297)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 297)					q->flush();
             				}
 HXDLIN( 297)				if (::hx::IsNull( q->b )) {
-HXLINE( 297)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
+HXLINE( 297)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_50,1);
             				}
             				else {
-HXLINE( 297)					::Array< ::String > q1 = q->b;
-HXDLIN( 297)					q1->push(::Std_obj::string(x));
+HXLINE( 297)					q->b->push(HX_(") AND stanza_id IN (",e8,da,d3,eb));
             				}
             			}
 HXLINE( 298)			{
-HXLINE( 298)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 298)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(localIds->length);
+HXDLIN( 298)				{
+HXLINE( 298)					int _g3 = 0;
+HXDLIN( 298)					int _g4 = localIds->length;
+HXDLIN( 298)					while((_g3 < _g4)){
+HXLINE( 298)						_g3 = (_g3 + 1);
+HXDLIN( 298)						int i1 = (_g3 - 1);
+HXDLIN( 298)						{
+HXLINE( 298)							::String _1 = ( (::String)(_hx_array_unsafe_get(localIds,i1)) );
+HXDLIN( 298)							result1->__unsafe_set(i1,HX_("?",3f,00,00,00));
+            						}
+            					}
+            				}
+HXDLIN( 298)				::String x1 = result1->join(HX_(",",2c,00,00,00));
+HXDLIN( 298)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 298)					q->flush();
             				}
 HXDLIN( 298)				if (::hx::IsNull( q->b )) {
-HXLINE( 298)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_52,1);
+HXLINE( 298)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x1));
             				}
             				else {
-HXLINE( 298)					q->b->push(HX_(") AND stanza_id IN (",e8,da,d3,eb));
+HXLINE( 298)					::Array< ::String > q2 = q->b;
+HXDLIN( 298)					q2->push(::Std_obj::string(x1));
             				}
             			}
 HXLINE( 299)			{
-HXLINE( 299)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(localIds->length);
-HXDLIN( 299)				{
-HXLINE( 299)					int _g3 = 0;
-HXDLIN( 299)					int _g4 = localIds->length;
-HXDLIN( 299)					while((_g3 < _g4)){
-HXLINE( 299)						_g3 = (_g3 + 1);
-HXDLIN( 299)						int i1 = (_g3 - 1);
-HXDLIN( 299)						{
-HXLINE( 299)							::String _1 = ( (::String)(_hx_array_unsafe_get(localIds,i1)) );
-HXDLIN( 299)							result1->__unsafe_set(i1,HX_("?",3f,00,00,00));
-            						}
-            					}
-            				}
-HXDLIN( 299)				::String x1 = result1->join(HX_(",",2c,00,00,00));
-HXDLIN( 299)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 299)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 299)					q->flush();
             				}
 HXDLIN( 299)				if (::hx::IsNull( q->b )) {
-HXLINE( 299)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x1));
-            				}
-            				else {
-HXLINE( 299)					::Array< ::String > q2 = q->b;
-HXDLIN( 299)					q2->push(::Std_obj::string(x1));
-            				}
-            			}
-HXLINE( 300)			{
-HXLINE( 300)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 300)					q->flush();
-            				}
-HXDLIN( 300)				if (::hx::IsNull( q->b )) {
-HXLINE( 300)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_53,1);
+HXLINE( 299)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_51,1);
             				}
             				else {
-HXLINE( 300)					q->b->push(HX_(")",29,00,00,00));
+HXLINE( 299)					q->b->push(HX_(")",29,00,00,00));
             				}
             			}
-HXLINE( 301)			 ::snikket::persistence::SqliteDriver _hx_tmp8 = this->db;
-HXDLIN( 301)			::String _hx_tmp9 = q->toString();
-HXLINE( 294)			_hx_tmp6 = _hx_tmp8->exec(_hx_tmp9,::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,1)->concat(chatIds)->concat(localIds));
+HXLINE( 300)			 ::snikket::persistence::SqliteDriver _hx_tmp8 = this->db;
+HXDLIN( 300)			::String _hx_tmp9 = q->toString();
+HXLINE( 293)			_hx_tmp6 = _hx_tmp8->exec(_hx_tmp9,::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,1)->concat(chatIds)->concat(localIds));
             		}
             		else {
-HXLINE( 294)			_hx_tmp6 = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 293)			_hx_tmp6 = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXDLIN( 294)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp6, ::Dynamic(new _hx_Closure_0(messages,_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(messages,_gthis,replyTos,accountId,callback)),null());
+HXDLIN( 293)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp6, ::Dynamic(new _hx_Closure_0(messages,_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(messages,_gthis,replyTos,accountId,callback)),null());
             	}
 
 
@@ -1222,12 +1187,12 @@ HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,storeMessages,(void))
 void Sqlite_obj::updateMessage(::String accountId, ::snikket::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> _){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_328_updateMessage)
+            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_327_updateMessage)
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_328_updateMessage)
-HXDLIN( 328)		this->storeMessages(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message), ::Dynamic(new _hx_Closure_0()));
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_327_updateMessage)
+HXDLIN( 327)		this->storeMessages(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message), ::Dynamic(new _hx_Closure_0()));
             	}
 
 
@@ -1236,67 +1201,67 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,updateMessage,(void))
 void Sqlite_obj::getMessage(::String accountId,::String chatId,::String serverId,::String localId, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Dynamic result){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_342_getMessage)
-HXLINE( 342)			return _gthis->hydrateMessages(accountId,result);
+            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_341_getMessage)
+HXLINE( 341)			return _gthis->hydrateMessages(accountId,result);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_3, ::snikket::persistence::Sqlite,_gthis,::String,chatId,::String,accountId, ::Dynamic,callback) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_342_getMessage)
-HXLINE( 343)			{
-HXLINE( 343)				int _g = 0;
-HXDLIN( 343)				while((_g < messages->length)){
+            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_341_getMessage)
+HXLINE( 342)			{
+HXLINE( 342)				int _g = 0;
+HXDLIN( 342)				while((_g < messages->length)){
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::snikket::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             					::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            						HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_348_getMessage)
-HXLINE( 348)						return _gthis->hydrateReactions(accountId,messages);
+            						HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_347_getMessage)
+HXLINE( 347)						return _gthis->hydrateReactions(accountId,messages);
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,callback) HXARGC(1)
             					void _hx_run(::Array< ::Dynamic> hydrated){
-            						HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_348_getMessage)
-HXLINE( 348)						callback(hydrated->__get(0).StaticCast<  ::snikket::ChatMessage >());
+            						HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_347_getMessage)
+HXLINE( 347)						callback(hydrated->__get(0).StaticCast<  ::snikket::ChatMessage >());
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 343)					 ::snikket::ChatMessage message = messages->__get(_g).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 343)					_g = (_g + 1);
-HXLINE( 344)					::Dynamic _hx_tmp;
-HXDLIN( 344)					if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 344)						_hx_tmp = _gthis->hydrateReplyTo(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 342)					 ::snikket::ChatMessage message = messages->__get(_g).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 342)					_g = (_g + 1);
+HXLINE( 343)					::Dynamic _hx_tmp;
+HXDLIN( 343)					if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 343)						_hx_tmp = _gthis->hydrateReplyTo(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
             							->setFixed(0,HX_("chatId",d3,04,77,b7),chatId)
             							->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             							->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId))));
             					}
             					else {
-HXLINE( 344)						_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
+HXLINE( 343)						_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
             					}
-HXDLIN( 344)					::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(callback)),null());
-HXLINE( 349)					return;
+HXDLIN( 343)					::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(callback)),null());
+HXLINE( 348)					return;
             				}
             			}
-HXLINE( 351)			callback(null());
+HXLINE( 350)			callback(null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_331_getMessage)
-HXDLIN( 331)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 332)		::String q = HX_("SELECT stanza, direction, type, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",55,9b,7b,94);
-HXLINE( 333)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
-HXLINE( 334)		if (::hx::IsNotNull( serverId )) {
-HXLINE( 335)			q = (q + HX_(" AND mam_id=?",4c,af,2b,c9));
-HXLINE( 336)			params->push(serverId);
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_330_getMessage)
+HXDLIN( 330)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 331)		::String q = HX_("SELECT stanza, direction, type, status, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",6f,5d,49,f4);
+HXLINE( 332)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
+HXLINE( 333)		if (::hx::IsNotNull( serverId )) {
+HXLINE( 334)			q = (q + HX_(" AND mam_id=?",4c,af,2b,c9));
+HXLINE( 335)			params->push(serverId);
             		}
             		else {
-HXLINE( 337)			if (::hx::IsNotNull( localId )) {
-HXLINE( 338)				q = (q + HX_(" AND stanza_id=?",be,a8,32,e3));
-HXLINE( 339)				params->push(localId);
+HXLINE( 336)			if (::hx::IsNotNull( localId )) {
+HXLINE( 337)				q = (q + HX_(" AND stanza_id=?",be,a8,32,e3));
+HXLINE( 338)				params->push(localId);
             			}
             		}
-HXLINE( 341)		q = (q + HX_("LIMIT 1",ec,af,c7,0e));
-HXLINE( 342)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_3(_gthis,chatId,accountId,callback)),null());
+HXLINE( 340)		q = (q + HX_("LIMIT 1",ec,af,c7,0e));
+HXLINE( 341)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_3(_gthis,chatId,accountId,callback)),null());
             	}
 
 
@@ -1325,8 +1290,8 @@ HXLINE( 221)			callback1(ptr,callback__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_45dcb523da764b50_244_getMessage__fromC)
-HXDLIN( 244)		this->getMessage(accountId,chatId,serverId,localId, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_45dcb523da764b50_252_getMessage__fromC)
+HXDLIN( 252)		this->getMessage(accountId,chatId,serverId,localId, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
@@ -1386,9 +1351,9 @@ HXLINE( 393)			return _gthis->hydrateReactions(accountId,messages);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_355_getMessages)
-HXDLIN( 355)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 356)		::String q = HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id) WHERE (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id) AND messages.account_id=? AND messages.chat_id=?",fa,a3,84,17);
+            	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_354_getMessages)
+HXDLIN( 354)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 355)		::String q = HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id) WHERE (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id) AND messages.account_id=? AND messages.chat_id=?",23,4e,0b,77);
 HXLINE( 370)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
 HXLINE( 371)		if (::hx::IsNotNull( time )) {
 HXLINE( 372)			q = (q + ((HX_(" AND messages.created_at ",3d,a0,ae,bb) + op) + HX_("CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER)",17,de,5d,f8)));
@@ -1597,7 +1562,7 @@ HXLINE( 438)			if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 438)				subq->flush();
             			}
 HXDLIN( 438)			if (::hx::IsNull( subq->b )) {
-HXLINE( 438)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_89,1);
+HXLINE( 438)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_87,1);
             			}
             			else {
 HXLINE( 438)				subq->b->push(HX_("SELECT chat_id, ROWID as row, MAX(created_at) AS created_at FROM messages WHERE account_id=?",d0,69,08,92));
@@ -1608,7 +1573,7 @@ HXLINE( 439)			if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 439)				subq->flush();
             			}
 HXDLIN( 439)			if (::hx::IsNull( subq->b )) {
-HXLINE( 439)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_90,1);
+HXLINE( 439)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_88,1);
             			}
             			else {
 HXLINE( 439)				subq->b->push(HX_(" AND chat_id IN (",14,bd,7b,de));
@@ -1629,7 +1594,7 @@ HXLINE( 441)						if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 441)							subq->flush();
             						}
 HXDLIN( 441)						if (::hx::IsNull( subq->b )) {
-HXLINE( 441)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_91,1);
+HXLINE( 441)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_89,1);
             						}
             						else {
 HXLINE( 441)							subq->b->push(HX_(",",2c,00,00,00));
@@ -1640,7 +1605,7 @@ HXLINE( 442)						if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 442)							subq->flush();
             						}
 HXDLIN( 442)						if (::hx::IsNull( subq->b )) {
-HXLINE( 442)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_92,1);
+HXLINE( 442)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_90,1);
             						}
             						else {
 HXLINE( 442)							subq->b->push(HX_("?",3f,00,00,00));
@@ -1655,7 +1620,7 @@ HXLINE( 445)			if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 445)				subq->flush();
             			}
 HXDLIN( 445)			if (::hx::IsNull( subq->b )) {
-HXLINE( 445)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_93,1);
+HXLINE( 445)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_91,1);
             			}
             			else {
 HXLINE( 445)				subq->b->push(HX_(") AND (mam_id IN (",64,f4,1c,69));
@@ -1673,7 +1638,7 @@ HXLINE( 449)						if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 449)							subq->flush();
             						}
 HXDLIN( 449)						if (::hx::IsNull( subq->b )) {
-HXLINE( 449)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_94,1);
+HXLINE( 449)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_92,1);
             						}
             						else {
 HXLINE( 449)							subq->b->push(HX_(",",2c,00,00,00));
@@ -1684,7 +1649,7 @@ HXLINE( 450)						if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 450)							subq->flush();
             						}
 HXDLIN( 450)						if (::hx::IsNull( subq->b )) {
-HXLINE( 450)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_95,1);
+HXLINE( 450)							subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_93,1);
             						}
             						else {
 HXLINE( 450)							subq->b->push(HX_("?",3f,00,00,00));
@@ -1700,7 +1665,7 @@ HXLINE( 455)			if (::hx::IsNotNull( subq->charBuf )) {
 HXLINE( 455)				subq->flush();
             			}
 HXDLIN( 455)			if (::hx::IsNull( subq->b )) {
-HXLINE( 455)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_96,1);
+HXLINE( 455)				subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_94,1);
             			}
             			else {
 HXLINE( 455)				subq->b->push(HX_(") OR direction=?) GROUP BY chat_id",cc,ab,94,e3));
@@ -1713,10 +1678,10 @@ HXLINE( 459)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 459)				q->flush();
             			}
 HXDLIN( 459)			if (::hx::IsNull( q->b )) {
-HXLINE( 459)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_97,1);
+HXLINE( 459)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_95,1);
             			}
             			else {
-HXLINE( 459)				q->b->push(HX_("SELECT chat_id AS chatId, stanza, direction, type, sender_id, mam_id, mam_by, sync_point, CASE WHEN subq.created_at IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages LEFT JOIN (",04,fc,16,f0));
+HXLINE( 459)				q->b->push(HX_("SELECT chat_id AS chatId, stanza, direction, type, status, sender_id, mam_id, mam_by, sync_point, CASE WHEN subq.created_at IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages LEFT JOIN (",2a,b0,45,a6));
             			}
             		}
 HXLINE( 460)		{
@@ -1737,7 +1702,7 @@ HXLINE( 461)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 461)				q->flush();
             			}
 HXDLIN( 461)			if (::hx::IsNull( q->b )) {
-HXLINE( 461)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_98,1);
+HXLINE( 461)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_96,1);
             			}
             			else {
 HXLINE( 461)				q->b->push(HX_(") subq USING (chat_id) WHERE account_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND chat_id IN (",e7,a1,32,e5));
@@ -1759,7 +1724,7 @@ HXLINE( 464)						if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 464)							q->flush();
             						}
 HXDLIN( 464)						if (::hx::IsNull( q->b )) {
-HXLINE( 464)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_99,1);
+HXLINE( 464)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_97,1);
             						}
             						else {
 HXLINE( 464)							q->b->push(HX_(",",2c,00,00,00));
@@ -1770,7 +1735,7 @@ HXLINE( 465)						if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 465)							q->flush();
             						}
 HXDLIN( 465)						if (::hx::IsNull( q->b )) {
-HXLINE( 465)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_100,1);
+HXLINE( 465)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_98,1);
             						}
             						else {
 HXLINE( 465)							q->b->push(HX_("?",3f,00,00,00));
@@ -1785,7 +1750,7 @@ HXLINE( 468)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 468)				q->flush();
             			}
 HXDLIN( 468)			if (::hx::IsNull( q->b )) {
-HXLINE( 468)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_101,1);
+HXLINE( 468)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_99,1);
             			}
             			else {
 HXLINE( 468)				q->b->push(HX_(") AND (subq.created_at IS NULL OR messages.created_at > subq.created_at OR (messages.created_at=subq.created_at AND messages.ROWID >= subq.row)) GROUP BY chat_id;",58,6f,52,ea));
@@ -1817,9 +1782,7 @@ HXLINE( 491)		::String update4 = update->localId;
 HXDLIN( 491)		::String update5 = update->chatId;
 HXDLIN( 491)		::String update6 = update->senderId;
 HXDLIN( 491)		::String update7 = update->timestamp;
-HXLINE( 492)		 ::Dynamic replacer = null();
-HXDLIN( 492)		::String space = null();
-HXDLIN( 492)		::String _hx_tmp1 = ::haxe::format::JsonPrinter_obj::print(update->reactions,replacer,space);
+HXLINE( 492)		::String _hx_tmp1 = ::snikket::JsonPrinter_obj::print(update->reactions,null(),null());
 HXLINE( 487)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update,callback)),null());
             	}
 
@@ -1830,7 +1793,7 @@ void Sqlite_obj::updateMessageStatus(::String accountId,::String localId,int sta
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::snikket::persistence::Sqlite,_gthis,::String,localId,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Dynamic _){
             			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_505_updateMessageStatus)
-HXLINE( 505)			return _gthis->db->exec(HX_("SELECT stanza, direction, type, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND stanza_id=? AND direction=?",b0,23,ee,a5),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,localId)->init(2,1));
+HXLINE( 505)			return _gthis->db->exec(HX_("SELECT stanza, direction, type, status, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND stanza_id=? AND direction=?",4a,74,a8,69),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,localId)->init(2,1));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -1986,7 +1949,7 @@ HXLINE( 569)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 569)				q->flush();
             			}
 HXDLIN( 569)			if (::hx::IsNull( q->b )) {
-HXLINE( 569)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_120,1);
+HXLINE( 569)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_118,1);
             			}
             			else {
 HXLINE( 569)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b));
@@ -1997,7 +1960,7 @@ HXLINE( 571)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 571)				q->flush();
             			}
 HXDLIN( 571)			if (::hx::IsNull( q->b )) {
-HXLINE( 571)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_121,1);
+HXLINE( 571)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_119,1);
             			}
             			else {
 HXLINE( 571)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
@@ -2008,7 +1971,7 @@ HXLINE( 573)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 573)				q->flush();
             			}
 HXDLIN( 573)			if (::hx::IsNull( q->b )) {
-HXLINE( 573)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_122,1);
+HXLINE( 573)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_120,1);
             			}
             			else {
 HXLINE( 573)				q->b->push(HX_(") VALUES (?,?,?",c4,1c,e3,67));
@@ -2020,7 +1983,7 @@ HXLINE( 575)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 575)					q->flush();
             				}
 HXDLIN( 575)				if (::hx::IsNull( q->b )) {
-HXLINE( 575)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_123,1);
+HXLINE( 575)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_121,1);
             				}
             				else {
 HXLINE( 575)					q->b->push(HX_(",?",93,26,00,00));
@@ -2032,7 +1995,7 @@ HXLINE( 577)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 577)					q->flush();
             				}
 HXDLIN( 577)				if (::hx::IsNull( q->b )) {
-HXLINE( 577)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_124,1);
+HXLINE( 577)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_122,1);
             				}
             				else {
 HXLINE( 577)					q->b->push(HX_(",0",84,26,00,00));
@@ -2044,7 +2007,7 @@ HXLINE( 579)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 579)				q->flush();
             			}
 HXDLIN( 579)			if (::hx::IsNull( q->b )) {
-HXLINE( 579)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_125,1);
+HXLINE( 579)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_123,1);
             			}
             			else {
 HXLINE( 579)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
@@ -2056,7 +2019,7 @@ HXLINE( 581)			if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 581)				q->flush();
             			}
 HXDLIN( 581)			if (::hx::IsNull( q->b )) {
-HXLINE( 581)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_126,1);
+HXLINE( 581)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_124,1);
             			}
             			else {
 HXLINE( 581)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
@@ -2069,7 +2032,7 @@ HXLINE( 584)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 584)					q->flush();
             				}
 HXDLIN( 584)				if (::hx::IsNull( q->b )) {
-HXLINE( 584)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_127,1);
+HXLINE( 584)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_125,1);
             				}
             				else {
 HXLINE( 584)					q->b->push(HX_(", token=?",a7,78,19,80));
@@ -2081,7 +2044,7 @@ HXLINE( 586)				if (::hx::IsNotNull( q->charBuf )) {
 HXLINE( 586)					q->flush();
             				}
 HXDLIN( 586)				if (::hx::IsNull( q->b )) {
-HXLINE( 586)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_128,1);
+HXLINE( 586)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_126,1);
             				}
             				else {
 HXLINE( 586)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
@@ -2122,29 +2085,9 @@ HXLINE( 605)			callback(null(),null(),0,null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
-            		void _hx_run( ::Dynamic err){
-            			HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_606_getLogin)
-HXLINE( 606)			 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 606)			::String _hx_tmp1;
-HXDLIN( 606)			if (::hx::IsNull( err )) {
-HXLINE( 606)				_hx_tmp1 = HX_("null",87,9e,0e,49);
-            			}
-            			else {
-HXLINE( 606)				_hx_tmp1 = ::Std_obj::string(err);
-            			}
-HXDLIN( 606)			_hx_tmp(HX_("ERR",45,a3,34,00), ::Dynamic(::hx::Anon_obj::Create(5)
-            				->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.persistence.Sqlite",6c,cb,15,e4))
-            				->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
-            				->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("getLogin",f3,e8,ca,d8))
-            				->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/persistence/Sqlite.hx",10,25,7a,91))
-            				->setFixed(4,HX_("lineNumber",dd,81,22,76),606)));
-            		}
-            		HX_END_LOCAL_FUNC1((void))
-
             	HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_592_getLogin)
 HXDLIN( 592)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 593)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id, display_name, token, fast_count FROM accounts WHERE account_id=? LIMIT 1",fa,f8,24,9e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,callback)), ::Dynamic(new _hx_Closure_1()));
+HXLINE( 593)		::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id, display_name, token, fast_count FROM accounts WHERE account_id=? LIMIT 1",fa,f8,24,9e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,callback)),null());
             	}
 
 
@@ -2227,7 +2170,7 @@ HXDLIN( 211)							int low = ptrInt64 & 0xffffffff;
 HXDLIN( 211)							int high = ptrInt64 >> 32;
 HXDLIN( 211)							 ::haxe::ds::IntMap highMap = ( ( ::haxe::ds::IntMap)(this1->get(low)) );
 HXDLIN( 211)							if (::hx::IsNull( highMap )) {
-HXLINE(2083)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE(2131)								highMap =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
 HXLINE( 211)								this1->set(low,highMap);
             							}
 HXDLIN( 211)							highMap->set(high,el);
@@ -2245,7 +2188,7 @@ HXDLIN( 211)				int low1 = ptrInt641 & 0xffffffff;
 HXDLIN( 211)				int high1 = ptrInt641 >> 32;
 HXDLIN( 211)				 ::haxe::ds::IntMap highMap1 = ( ( ::haxe::ds::IntMap)(this2->get(low1)) );
 HXDLIN( 211)				if (::hx::IsNull( highMap1 )) {
-HXLINE(2083)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
+HXLINE(2131)					highMap1 =  ::haxe::ds::IntMap_obj::__alloc( HX_CTX );
 HXLINE( 211)					this2->set(low1,highMap1);
             				}
 HXDLIN( 211)				highMap1->set(high1,arr);
@@ -2254,8 +2197,8 @@ HXLINE( 221)			callback1(( (const char**)(ptr1) ),( (size_t)(a0->length) ),callb
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_45dcb523da764b50_244_listAccounts__fromC)
-HXDLIN( 244)		this->listAccounts( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_45dcb523da764b50_252_listAccounts__fromC)
+HXDLIN( 252)		this->listAccounts( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
@@ -2402,27 +2345,41 @@ HXDLIN( 691)					 ::haxe::ds::StringMap reactions = _g_value;
 HXDLIN( 691)					{
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::String,id) HXARGC(1)
             						bool _hx_run( ::snikket::ChatMessage m){
-            							HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_692_hydrateReactions)
-HXLINE( 692)							::String m1;
-HXDLIN( 692)							if (::hx::IsNull( m->serverId )) {
-HXLINE( 692)								m1 = m->localId;
+            							HX_STACKFRAME(&_hx_pos_5b1a6b524efab4db_693_hydrateReactions)
+HXLINE( 693)							::String m1;
+HXDLIN( 693)							if (::hx::IsNull( m->serverId )) {
+HXLINE( 693)								m1 = m->localId;
             							}
             							else {
-HXLINE( 692)								m1 = ((m->serverId + HX_("\n",0a,00,00,00)) + m->serverIdBy);
+HXLINE( 693)								m1 = ((m->serverId + HX_("\n",0a,00,00,00)) + m->serverIdBy);
             							}
-HXDLIN( 692)							::String m2 = ((m1 + HX_("\n",0a,00,00,00)) + m->chatId());
-HXDLIN( 692)							return (m2 == id);
+HXDLIN( 693)							::String m2 = ((m1 + HX_("\n",0a,00,00,00)) + m->chatId());
+HXDLIN( 693)							if ((m2 != id)) {
+HXLINE( 694)								::String m3;
+HXDLIN( 694)								if (::hx::IsNull( m->localId )) {
+HXLINE( 694)									m3 = ((m->serverId + HX_("\n",0a,00,00,00)) + m->serverIdBy);
+            								}
+            								else {
+HXLINE( 694)									m3 = m->localId;
+            								}
+HXDLIN( 694)								::String m4 = ((m3 + HX_("\n",0a,00,00,00)) + m->chatId());
+HXDLIN( 694)								return (m4 == id);
+            							}
+            							else {
+HXLINE( 693)								return true;
+            							}
+HXDLIN( 693)							return false;
             						}
             						HX_END_LOCAL_FUNC1(return)
 
 HXLINE( 692)						 ::snikket::ChatMessage m = ( ( ::snikket::ChatMessage)(::Lambda_obj::find(messages, ::Dynamic(new _hx_Closure_0(id)))) );
-HXLINE( 693)						if (::hx::IsNotNull( m )) {
-HXLINE( 693)							m->set_reactions(reactions);
+HXLINE( 696)						if (::hx::IsNotNull( m )) {
+HXLINE( 696)							m->set_reactions(reactions);
             						}
             					}
             				}
             			}
-HXLINE( 695)			return messages;
+HXLINE( 698)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -2454,179 +2411,179 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateReactions,return )
 ::Dynamic Sqlite_obj::fetchReactions(::String accountId,::Array< ::Dynamic> ids){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::haxe::ds::StringMap _hx_run(::Dynamic rows){
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_714_fetchReactions)
-HXLINE( 715)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 716)			{
-HXLINE( 716)				::Dynamic row = rows;
-HXDLIN( 716)				while(::sys::db::ResultSet_obj::hasNext(row)){
-HXLINE( 716)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
-HXLINE( 717)					::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
-HXLINE( 718)					::String mapId;
-HXDLIN( 718)					bool mapId1;
-HXDLIN( 718)					if (::hx::IsNotNull( row1->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
-HXLINE( 718)						mapId1 = ::hx::IsEq( row1->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_718_fetchReactions)
+HXLINE( 719)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 720)			{
+HXLINE( 720)				::Dynamic row = rows;
+HXDLIN( 720)				while(::sys::db::ResultSet_obj::hasNext(row)){
+HXLINE( 720)					 ::Dynamic row1 = ::sys::db::ResultSet_obj::next(row);
+HXLINE( 721)					::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row1->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
+HXLINE( 722)					::String mapId;
+HXDLIN( 722)					bool mapId1;
+HXDLIN( 722)					if (::hx::IsNotNull( row1->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
+HXLINE( 722)						mapId1 = ::hx::IsEq( row1->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
             					}
             					else {
-HXLINE( 718)						mapId1 = true;
+HXLINE( 722)						mapId1 = true;
             					}
-HXDLIN( 718)					if (mapId1) {
-HXLINE( 718)						mapId = ( (::String)(row1->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN( 722)					if (mapId1) {
+HXLINE( 722)						mapId = ( (::String)(row1->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             					}
             					else {
-HXLINE( 718)						mapId = ( (::String)(((row1->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row1->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
-            					}
-HXDLIN( 718)					::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row1->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
-HXLINE( 719)					if (!(agg->exists(mapId2))) {
-HXLINE( 719)						agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
-            					}
-HXLINE( 720)					 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
-HXLINE( 721)					if (!(map->exists(( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
-HXLINE( 721)						::cpp::VirtualArray v = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 721)						map->set(( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),v);
-            					}
-HXLINE( 722)					if (::hx::IsEq( row1->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
-HXLINE( 723)						int _g = 0;
-HXDLIN( 723)						while((_g < reactions->get_length())){
-HXLINE( 723)							 ::Dynamic reaction = reactions->__get(_g);
-HXDLIN( 723)							_g = (_g + 1);
-HXDLIN( 723)							( (::cpp::VirtualArray)(map->get( ::Dynamic(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
+HXLINE( 722)						mapId = ( (::String)(((row1->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row1->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
+            					}
+HXDLIN( 722)					::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row1->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
+HXLINE( 723)					if (!(agg->exists(mapId2))) {
+HXLINE( 723)						agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+            					}
+HXLINE( 724)					 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
+HXLINE( 725)					if (!(map->exists(( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
+HXLINE( 725)						::cpp::VirtualArray v = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 725)						map->set(( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),v);
+            					}
+HXLINE( 726)					if (::hx::IsEq( row1->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
+HXLINE( 727)						int _g = 0;
+HXDLIN( 727)						while((_g < reactions->get_length())){
+HXLINE( 727)							 ::Dynamic reaction = reactions->__get(_g);
+HXDLIN( 727)							_g = (_g + 1);
+HXDLIN( 727)							( (::cpp::VirtualArray)(map->get( ::Dynamic(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
             						}
             					}
             					else {
-HXLINE( 724)						if (::hx::IsEq( row1->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
-HXLINE( 725)							::String k = ( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXDLIN( 725)							::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 725)							{
-HXLINE( 725)								int _g2 = 0;
-HXDLIN( 725)								::cpp::VirtualArray _g3 = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
-HXDLIN( 725)								while((_g2 < _g3->get_length())){
-HXLINE( 725)									 ::Dynamic v1 = _g3->__get(_g2);
-HXDLIN( 725)									_g2 = (_g2 + 1);
-HXDLIN( 725)									if (::hx::IsNotNull( v1->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE( 725)										_g1->push(v1);
+HXLINE( 728)						if (::hx::IsEq( row1->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
+HXLINE( 729)							::String k = ( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXDLIN( 729)							::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 729)							{
+HXLINE( 729)								int _g2 = 0;
+HXDLIN( 729)								::cpp::VirtualArray _g3 = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
+HXDLIN( 729)								while((_g2 < _g3->get_length())){
+HXLINE( 729)									 ::Dynamic v1 = _g3->__get(_g2);
+HXDLIN( 729)									_g2 = (_g2 + 1);
+HXDLIN( 729)									if (::hx::IsNotNull( v1->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE( 729)										_g1->push(v1);
             									}
             								}
             							}
-HXDLIN( 725)							::cpp::VirtualArray v2 = reactions->concat(_g1);
-HXDLIN( 725)							map->set(k,v2);
+HXDLIN( 729)							::cpp::VirtualArray v2 = reactions->concat(_g1);
+HXDLIN( 729)							map->set(k,v2);
             						}
             						else {
-HXLINE( 726)							if (::hx::IsEq( row1->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
-HXLINE( 727)								map->set(( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
+HXLINE( 730)							if (::hx::IsEq( row1->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
+HXLINE( 731)								map->set(( (::String)(row1->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
             							}
             						}
             					}
             				}
             			}
-HXLINE( 730)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 731)			{
-HXLINE( 731)				::Dynamic map1 = agg;
-HXDLIN( 731)				::Dynamic _g_map = map1;
-HXDLIN( 731)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
-HXDLIN( 731)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 731)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 731)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(_g_map,key)) );
-HXDLIN( 731)					::String _g_key = key;
-HXDLIN( 731)					::String id = _g_key;
-HXDLIN( 731)					 ::haxe::ds::StringMap reactions1 = _g_value;
-HXDLIN( 731)					{
-HXLINE( 732)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 733)						{
-HXLINE( 733)							 ::Dynamic reactionsBySender = reactions1->iterator();
-HXDLIN( 733)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 733)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 734)								{
-HXLINE( 734)									int _g4 = 0;
-HXDLIN( 734)									while((_g4 < reactionsBySender1->get_length())){
-HXLINE( 734)										 ::Dynamic reactionD = reactionsBySender1->__get(_g4);
-HXDLIN( 734)										_g4 = (_g4 + 1);
-HXLINE( 735)										 ::snikket::Reaction reaction1;
-HXDLIN( 735)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE( 735)											reaction1 =  ::snikket::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
+HXLINE( 734)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 735)			{
+HXLINE( 735)				::Dynamic map1 = agg;
+HXDLIN( 735)				::Dynamic _g_map = map1;
+HXDLIN( 735)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
+HXDLIN( 735)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 735)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 735)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN( 735)					::String _g_key = key;
+HXDLIN( 735)					::String id = _g_key;
+HXDLIN( 735)					 ::haxe::ds::StringMap reactions1 = _g_value;
+HXDLIN( 735)					{
+HXLINE( 736)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 737)						{
+HXLINE( 737)							 ::Dynamic reactionsBySender = reactions1->iterator();
+HXDLIN( 737)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 737)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 738)								{
+HXLINE( 738)									int _g4 = 0;
+HXDLIN( 738)									while((_g4 < reactionsBySender1->get_length())){
+HXLINE( 738)										 ::Dynamic reactionD = reactionsBySender1->__get(_g4);
+HXDLIN( 738)										_g4 = (_g4 + 1);
+HXLINE( 739)										 ::snikket::Reaction reaction1;
+HXDLIN( 739)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE( 739)											reaction1 =  ::snikket::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
             										}
             										else {
-HXLINE( 735)											reaction1 =  ::snikket::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
+HXLINE( 739)											reaction1 =  ::snikket::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
             										}
-HXLINE( 741)										if (!(map2->exists(reaction1->key))) {
-HXLINE( 741)											::Array< ::Dynamic> v3 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 741)											map2->set(reaction1->key,v3);
+HXLINE( 745)										if (!(map2->exists(reaction1->key))) {
+HXLINE( 745)											::Array< ::Dynamic> v3 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 745)											map2->set(reaction1->key,v3);
             										}
-HXLINE( 742)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
+HXLINE( 746)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
             									}
             								}
             							}
             						}
-HXLINE( 745)						result->set(id,map2);
+HXLINE( 749)						result->set(id,map2);
             					}
             				}
             			}
-HXLINE( 747)			return result;
+HXLINE( 751)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_699_fetchReactions)
-HXLINE( 700)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 701)		{
-HXLINE( 701)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 701)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_702_fetchReactions)
+HXLINE( 703)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 704)		{
+HXLINE( 704)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 704)				q->flush();
             			}
-HXDLIN( 701)			if (::hx::IsNull( q->b )) {
-HXLINE( 701)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_165,1);
+HXDLIN( 704)			if (::hx::IsNull( q->b )) {
+HXLINE( 704)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_162,1);
             			}
             			else {
-HXLINE( 701)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
-            			}
-            		}
-HXLINE( 702)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
-HXLINE( 703)		{
-HXLINE( 703)			int _g = 0;
-HXDLIN( 703)			while((_g < ids->length)){
-HXLINE( 703)				 ::Dynamic item = ids->__get(_g);
-HXDLIN( 703)				_g = (_g + 1);
-HXLINE( 704)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE( 705)					{
-HXLINE( 705)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 705)							q->flush();
+HXLINE( 704)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
+            			}
+            		}
+HXLINE( 705)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
+HXLINE( 706)		{
+HXLINE( 706)			int _g = 0;
+HXDLIN( 706)			while((_g < ids->length)){
+HXLINE( 706)				 ::Dynamic item = ids->__get(_g);
+HXDLIN( 706)				_g = (_g + 1);
+HXLINE( 707)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE( 708)					{
+HXLINE( 708)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 708)							q->flush();
             						}
-HXDLIN( 705)						if (::hx::IsNull( q->b )) {
-HXLINE( 705)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_166,1);
+HXDLIN( 708)						if (::hx::IsNull( q->b )) {
+HXLINE( 708)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_163,1);
             						}
             						else {
-HXLINE( 705)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
+HXLINE( 708)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
             						}
             					}
-HXLINE( 706)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE( 707)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
+HXLINE( 709)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE( 710)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
             				}
-            				else {
-HXLINE( 709)					{
-HXLINE( 709)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 709)							q->flush();
+HXLINE( 712)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
+HXLINE( 713)					{
+HXLINE( 713)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 713)							q->flush();
             						}
-HXDLIN( 709)						if (::hx::IsNull( q->b )) {
-HXLINE( 709)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_167,1);
+HXDLIN( 713)						if (::hx::IsNull( q->b )) {
+HXLINE( 713)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_164,1);
             						}
             						else {
-HXLINE( 709)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
+HXLINE( 713)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
             						}
             					}
-HXLINE( 710)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE( 714)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
             				}
             			}
             		}
-HXLINE( 713)		{
-HXLINE( 713)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 713)				q->flush();
+HXLINE( 717)		{
+HXLINE( 717)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 717)				q->flush();
             			}
-HXDLIN( 713)			if (::hx::IsNull( q->b )) {
-HXLINE( 713)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_168,1);
+HXDLIN( 717)			if (::hx::IsNull( q->b )) {
+HXLINE( 717)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_165,1);
             			}
             			else {
-HXLINE( 713)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
+HXLINE( 717)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
             			}
             		}
-HXLINE( 714)		 ::snikket::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 714)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 718)		 ::snikket::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 718)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -2635,76 +2592,60 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,fetchReactions,return )
 ::Dynamic Sqlite_obj::hydrateReplyTo(::String accountId,::Array< ::Dynamic> messages,::Array< ::Dynamic> replyTos){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2,::Array< ::Dynamic>,messages, ::snikket::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Dynamic iter){
-            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_771_hydrateReplyTo)
-HXLINE( 772)			if (::hx::IsNotNull( iter )) {
+            			HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_775_hydrateReplyTo)
+HXLINE( 776)			if (::hx::IsNotNull( iter )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Dynamic,iter) HXARGC(0)
             				::Dynamic _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_773_hydrateReplyTo)
-HXLINE( 773)					return iter;
+            					HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_777_hydrateReplyTo)
+HXLINE( 777)					return iter;
             				}
             				HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 773)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 777)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(iter)))));
-HXLINE( 774)				{
-HXLINE( 774)					int _g = 0;
-HXDLIN( 774)					while((_g < messages->length)){
-HXLINE( 774)						 ::snikket::ChatMessage message = messages->__get(_g).StaticCast<  ::snikket::ChatMessage >();
-HXDLIN( 774)						_g = (_g + 1);
-HXLINE( 775)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 778)				{
+HXLINE( 778)					int _g = 0;
+HXDLIN( 778)					while((_g < messages->length)){
+HXLINE( 778)						 ::snikket::ChatMessage message = messages->__get(_g).StaticCast<  ::snikket::ChatMessage >();
+HXDLIN( 778)						_g = (_g + 1);
+HXLINE( 779)						if (::hx::IsNotNull( message->replyToMessage )) {
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::ChatMessage,message) HXARGC(1)
             							bool _hx_run( ::Dynamic p){
-            								HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_776_hydrateReplyTo)
-HXLINE( 776)								bool found;
-HXDLIN( 776)								::String p1 = ( (::String)(p->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXDLIN( 776)								if ((p1 == message->chatId())) {
-HXLINE( 776)									if (::hx::IsNotNull( message->replyToMessage->serverId )) {
-HXLINE( 776)										found = ::hx::IsEq( p->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
+            								HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_780_hydrateReplyTo)
+HXLINE( 780)								bool found;
+HXDLIN( 780)								::String p1 = ( (::String)(p->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXDLIN( 780)								if ((p1 == message->chatId())) {
+HXLINE( 780)									if (::hx::IsNotNull( message->replyToMessage->serverId )) {
+HXLINE( 780)										found = ::hx::IsEq( p->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
             									}
             									else {
-HXLINE( 776)										found = true;
+HXLINE( 780)										found = true;
             									}
             								}
             								else {
-HXLINE( 776)									found = false;
+HXLINE( 780)									found = false;
             								}
-HXDLIN( 776)								if (found) {
-HXLINE( 776)									if (::hx::IsNotNull( message->replyToMessage->localId )) {
-HXLINE( 776)										return ::hx::IsEq( p->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
+HXDLIN( 780)								if (found) {
+HXLINE( 780)									if (::hx::IsNotNull( message->replyToMessage->localId )) {
+HXLINE( 780)										return ::hx::IsEq( p->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
             									}
             									else {
-HXLINE( 776)										return true;
+HXLINE( 780)										return true;
             									}
             								}
             								else {
-HXLINE( 776)									return false;
+HXLINE( 780)									return false;
             								}
-HXDLIN( 776)								return false;
+HXDLIN( 780)								return false;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 776)							 ::Dynamic found = ::Lambda_obj::find(parents, ::Dynamic(new _hx_Closure_1(message)));
-HXLINE( 777)							if (::hx::IsNotNull( found )) {
-HXLINE( 777)								 ::snikket::ChatMessage message1 = message;
-HXDLIN( 777)								 ::snikket::persistence::Sqlite _gthis1 = _gthis;
-HXDLIN( 777)								::String accountId1 = accountId;
-HXDLIN( 777)								message1->set_replyToMessage(_gthis1->hydrateMessages(accountId1, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found)))->__get(0).StaticCast<  ::snikket::ChatMessage >());
-            							}
-HXLINE( 778)							if ((message->localId == HX_("E5A340C0-9732-46BB-AC56-F2822124AA6F",c4,de,e2,7a))) {
-HXLINE( 779)								::haxe::Log_obj::trace(HX_("FOUND",22,3a,85,82), ::Dynamic(::hx::Anon_obj::Create(5)
-            									->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.persistence.Sqlite",6c,cb,15,e4))
-            									->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,found))
-            									->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("hydrateReplyTo",f2,64,45,9b))
-            									->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/persistence/Sqlite.hx",10,25,7a,91))
-            									->setFixed(4,HX_("lineNumber",dd,81,22,76),779)));
-HXLINE( 780)								if (::hx::IsNotNull( found )) {
-HXLINE( 780)									::haxe::Log_obj::trace(HX_("HYDRATE",73,10,71,a5), ::Dynamic(::hx::Anon_obj::Create(5)
-            										->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.persistence.Sqlite",6c,cb,15,e4))
-            										->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,message->replyToMessage->senderId)->init(1,message->replyToMessage->localId))
-            										->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("hydrateReplyTo",f2,64,45,9b))
-            										->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/persistence/Sqlite.hx",10,25,7a,91))
-            										->setFixed(4,HX_("lineNumber",dd,81,22,76),780)));
-            								}
+HXLINE( 780)							 ::Dynamic found = ::Lambda_obj::find(parents, ::Dynamic(new _hx_Closure_1(message)));
+HXLINE( 781)							if (::hx::IsNotNull( found )) {
+HXLINE( 781)								 ::snikket::ChatMessage message1 = message;
+HXDLIN( 781)								 ::snikket::persistence::Sqlite _gthis1 = _gthis;
+HXDLIN( 781)								::String accountId1 = accountId;
+HXDLIN( 781)								message1->set_replyToMessage(_gthis1->hydrateMessages(accountId1, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found)))->__get(0).StaticCast<  ::snikket::ChatMessage >());
             							}
             						}
             					}
@@ -2714,78 +2655,78 @@ HXLINE( 785)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_751_hydrateReplyTo)
-HXDLIN( 751)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 752)		::Dynamic _hx_tmp;
-HXDLIN( 752)		if ((replyTos->length < 1)) {
-HXLINE( 752)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_755_hydrateReplyTo)
+HXDLIN( 755)		 ::snikket::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 756)		::Dynamic _hx_tmp;
+HXDLIN( 756)		if ((replyTos->length < 1)) {
+HXLINE( 756)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
             		else {
-HXLINE( 755)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE( 756)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 757)			{
-HXLINE( 757)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 757)					q->flush();
+HXLINE( 759)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE( 760)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 761)			{
+HXLINE( 761)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 761)					q->flush();
             				}
-HXDLIN( 757)				if (::hx::IsNull( q->b )) {
-HXLINE( 757)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_175,1);
+HXDLIN( 761)				if (::hx::IsNull( q->b )) {
+HXLINE( 761)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_172,1);
             				}
             				else {
-HXLINE( 757)					q->b->push(HX_("SELECT chat_id, stanza_id, stanza, direction, type, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND (",3c,df,23,3e));
-            				}
-            			}
-HXLINE( 758)			{
-HXLINE( 758)				::Array< ::String > result = ::Array_obj< ::String >::__new(replyTos->length);
-HXDLIN( 758)				{
-HXLINE( 758)					int _g = 0;
-HXDLIN( 758)					int _g1 = replyTos->length;
-HXDLIN( 758)					while((_g < _g1)){
-HXLINE( 758)						_g = (_g + 1);
-HXDLIN( 758)						int i = (_g - 1);
-HXDLIN( 758)						{
-HXLINE( 759)							 ::Dynamic parent = _hx_array_unsafe_get(replyTos,i);
-HXLINE( 758)							::String inValue;
-HXLINE( 759)							if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE( 760)								params->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE( 761)								params->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE( 758)								inValue = HX_(" (chat_id=? AND mam_id=?)",59,03,f2,84);
+HXLINE( 761)					q->b->push(HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND (",56,f2,9f,31));
+            				}
+            			}
+HXLINE( 762)			{
+HXLINE( 762)				::Array< ::String > result = ::Array_obj< ::String >::__new(replyTos->length);
+HXDLIN( 762)				{
+HXLINE( 762)					int _g = 0;
+HXDLIN( 762)					int _g1 = replyTos->length;
+HXDLIN( 762)					while((_g < _g1)){
+HXLINE( 762)						_g = (_g + 1);
+HXDLIN( 762)						int i = (_g - 1);
+HXDLIN( 762)						{
+HXLINE( 763)							 ::Dynamic parent = _hx_array_unsafe_get(replyTos,i);
+HXLINE( 762)							::String inValue;
+HXLINE( 763)							if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE( 764)								params->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE( 765)								params->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE( 762)								inValue = HX_(" (chat_id=? AND mam_id=?)",59,03,f2,84);
             							}
             							else {
-HXLINE( 764)								params->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE( 765)								params->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
-HXLINE( 758)								inValue = HX_(" (chat_id=? AND stanza_id=?)",2f,d3,29,86);
+HXLINE( 768)								params->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE( 769)								params->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE( 762)								inValue = HX_(" (chat_id=? AND stanza_id=?)",2f,d3,29,86);
             							}
-HXDLIN( 758)							result->__unsafe_set(i,inValue);
+HXDLIN( 762)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN( 758)				::String x = result->join(HX_(" OR ",7d,0d,63,15));
-HXDLIN( 758)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 758)					q->flush();
+HXDLIN( 762)				::String x = result->join(HX_(" OR ",7d,0d,63,15));
+HXDLIN( 762)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 762)					q->flush();
             				}
-HXDLIN( 758)				if (::hx::IsNull( q->b )) {
-HXLINE( 758)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
+HXDLIN( 762)				if (::hx::IsNull( q->b )) {
+HXLINE( 762)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
             				}
             				else {
-HXLINE( 758)					::Array< ::String > q1 = q->b;
-HXDLIN( 758)					q1->push(::Std_obj::string(x));
+HXLINE( 762)					::Array< ::String > q1 = q->b;
+HXDLIN( 762)					q1->push(::Std_obj::string(x));
             				}
             			}
-HXLINE( 769)			{
-HXLINE( 769)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 769)					q->flush();
+HXLINE( 773)			{
+HXLINE( 773)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 773)					q->flush();
             				}
-HXDLIN( 769)				if (::hx::IsNull( q->b )) {
-HXLINE( 769)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_176,1);
+HXDLIN( 773)				if (::hx::IsNull( q->b )) {
+HXLINE( 773)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_e415cb6c_173,1);
             				}
             				else {
-HXLINE( 769)					q->b->push(HX_(")",29,00,00,00));
+HXLINE( 773)					q->b->push(HX_(")",29,00,00,00));
             				}
             			}
-HXLINE( 770)			 ::snikket::persistence::SqliteDriver _hx_tmp1 = this->db;
-HXLINE( 752)			_hx_tmp = _hx_tmp1->exec(q->toString(),params);
+HXLINE( 774)			 ::snikket::persistence::SqliteDriver _hx_tmp1 = this->db;
+HXLINE( 756)			_hx_tmp = _hx_tmp1->exec(q->toString(),params);
             		}
-HXDLIN( 752)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_2(messages,_gthis,accountId)),null());
+HXDLIN( 756)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_2(messages,_gthis,accountId)),null());
             	}
 
 
@@ -2812,107 +2753,108 @@ HXDLIN( 792)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDy
 HXLINE( 793)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
 HXLINE( 794)					builder->timestamp = ( (::String)(row->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
 HXLINE( 795)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
-HXLINE( 796)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXLINE( 797)					::String _hx_tmp;
-HXDLIN( 797)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE( 797)						_hx_tmp = null();
+HXLINE( 796)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
+HXLINE( 797)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXLINE( 798)					::String _hx_tmp;
+HXDLIN( 798)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE( 798)						_hx_tmp = null();
             					}
             					else {
-HXLINE( 797)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
+HXLINE( 798)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN( 797)					builder->serverId = _hx_tmp;
-HXLINE( 798)					::String _hx_tmp1;
-HXDLIN( 798)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE( 798)						_hx_tmp1 = null();
+HXDLIN( 798)					builder->serverId = _hx_tmp;
+HXLINE( 799)					::String _hx_tmp1;
+HXDLIN( 799)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE( 799)						_hx_tmp1 = null();
             					}
             					else {
-HXLINE( 798)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
+HXLINE( 799)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN( 798)					builder->serverIdBy = _hx_tmp1;
-HXLINE( 799)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
-HXLINE( 800)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
-HXLINE( 801)						::Array< ::Dynamic> replyTo = builder->replyTo;
-HXLINE( 802)						builder->replyTo = builder->recipients;
-HXLINE( 803)						builder->recipients = replyTo;
+HXDLIN( 799)					builder->serverIdBy = _hx_tmp1;
+HXLINE( 800)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
+HXLINE( 801)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
+HXLINE( 802)						::Array< ::Dynamic> replyTo = builder->replyTo;
+HXLINE( 803)						builder->replyTo = builder->recipients;
+HXLINE( 804)						builder->recipients = replyTo;
             					}
-HXLINE( 805)					bool _hx_tmp2;
-HXDLIN( 805)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
-HXLINE( 805)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXLINE( 806)					bool _hx_tmp2;
+HXDLIN( 806)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
+HXLINE( 806)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
             					}
             					else {
-HXLINE( 805)						_hx_tmp2 = false;
+HXLINE( 806)						_hx_tmp2 = false;
             					}
-HXDLIN( 805)					if (_hx_tmp2) {
-HXLINE( 805)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN( 806)					if (_hx_tmp2) {
+HXLINE( 806)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             					}
-HXLINE( 806)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
-HXLINE( 807)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
-HXLINE( 808)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
-HXLINE( 809)						if ((::Reflect_obj::fields(versions)->length > 1)) {
+HXLINE( 807)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
+HXLINE( 808)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
+HXLINE( 809)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
+HXLINE( 810)						if ((::Reflect_obj::fields(versions)->length > 1)) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             							int _hx_run( ::snikket::ChatMessage a, ::snikket::ChatMessage b){
-            								HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_821_hydrateMessages)
-HXLINE( 821)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
+            								HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_822_hydrateMessages)
+HXLINE( 822)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
             							}
             							HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 810)							{
-HXLINE( 810)								 ::Dynamic access = versions;
-HXDLIN( 810)								 ::Dynamic _g_access = access;
-HXDLIN( 810)								::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 810)								int _g_index = 0;
-HXDLIN( 810)								while((_g_index < _g_keys->length)){
-HXLINE( 810)									_g_index = (_g_index + 1);
-HXDLIN( 810)									::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 810)									::String _g_value = ( (::String)(::Reflect_obj::field(_g_access,key)) );
-HXDLIN( 810)									::String _g_key = key;
-HXDLIN( 810)									::String versionId = _g_key;
-HXDLIN( 810)									::String version = _g_value;
-HXDLIN( 810)									{
+HXLINE( 811)							{
+HXLINE( 811)								 ::Dynamic access = versions;
+HXDLIN( 811)								 ::Dynamic _g_access = access;
+HXDLIN( 811)								::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
+HXDLIN( 811)								int _g_index = 0;
+HXDLIN( 811)								while((_g_index < _g_keys->length)){
+HXLINE( 811)									_g_index = (_g_index + 1);
+HXDLIN( 811)									::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 811)									::String _g_value = ( (::String)(::Reflect_obj::field(_g_access,key)) );
+HXDLIN( 811)									::String _g_key = key;
+HXDLIN( 811)									::String versionId = _g_key;
+HXDLIN( 811)									::String version = _g_value;
+HXDLIN( 811)									{
             										HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,versionTimes,::String,versionId) HXARGC(2)
             										 ::snikket::ChatMessageBuilder _hx_run( ::snikket::ChatMessageBuilder toPushB, ::snikket::Stanza _){
-            											HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_811_hydrateMessages)
-HXLINE( 812)											bool versionM;
-HXDLIN( 812)											if (::hx::IsNull( toPushB->serverId )) {
-HXLINE( 812)												versionM = (versionId != toPushB->localId);
+            											HX_GC_STACKFRAME(&_hx_pos_5b1a6b524efab4db_812_hydrateMessages)
+HXLINE( 813)											bool versionM;
+HXDLIN( 813)											if (::hx::IsNull( toPushB->serverId )) {
+HXLINE( 813)												versionM = (versionId != toPushB->localId);
             											}
             											else {
-HXLINE( 812)												versionM = false;
+HXLINE( 813)												versionM = false;
             											}
-HXDLIN( 812)											if (versionM) {
-HXLINE( 812)												toPushB->serverId = versionId;
+HXDLIN( 813)											if (versionM) {
+HXLINE( 813)												toPushB->serverId = versionId;
             											}
-HXLINE( 813)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
-HXLINE( 814)											return toPushB;
+HXLINE( 814)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
+HXLINE( 815)											return toPushB;
             										}
             										HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 811)										 ::snikket::Stanza versionM = ::snikket::Stanza_obj::parse(version);
-HXDLIN( 811)										 ::snikket::ChatMessage versionM1 = ::snikket::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
-HXLINE( 816)										 ::snikket::ChatMessage toPush;
-HXDLIN( 816)										bool toPush1;
-HXDLIN( 816)										if (::hx::IsNotNull( versionM1 )) {
-HXLINE( 816)											toPush1 = (versionM1->versions->length < 1);
+HXLINE( 812)										 ::snikket::Stanza versionM = ::snikket::Stanza_obj::parse(version);
+HXDLIN( 812)										 ::snikket::ChatMessage versionM1 = ::snikket::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
+HXLINE( 817)										 ::snikket::ChatMessage toPush;
+HXDLIN( 817)										bool toPush1;
+HXDLIN( 817)										if (::hx::IsNotNull( versionM1 )) {
+HXLINE( 817)											toPush1 = (versionM1->versions->length < 1);
             										}
             										else {
-HXLINE( 816)											toPush1 = true;
+HXLINE( 817)											toPush1 = true;
             										}
-HXDLIN( 816)										if (toPush1) {
-HXLINE( 816)											toPush = versionM1;
+HXDLIN( 817)										if (toPush1) {
+HXLINE( 817)											toPush = versionM1;
             										}
             										else {
-HXLINE( 816)											toPush = versionM1->versions->__get(0).StaticCast<  ::snikket::ChatMessage >();
+HXLINE( 817)											toPush = versionM1->versions->__get(0).StaticCast<  ::snikket::ChatMessage >();
             										}
-HXLINE( 817)										if (::hx::IsNotNull( toPush )) {
-HXLINE( 818)											builder->versions->push(toPush);
+HXLINE( 818)										if (::hx::IsNotNull( toPush )) {
+HXLINE( 819)											builder->versions->push(toPush);
             										}
             									}
             								}
             							}
-HXLINE( 821)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE( 822)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
             						}
             					}
-HXLINE( 824)					return builder;
+HXLINE( 825)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
diff --git a/Sources/c_snikket/src/snikket/persistence/SqliteDriver.cpp b/Sources/c_snikket/src/snikket/persistence/SqliteDriver.cpp
index 875ead9..470f06a 100644
--- a/Sources/c_snikket/src/snikket/persistence/SqliteDriver.cpp
+++ b/Sources/c_snikket/src/snikket/persistence/SqliteDriver.cpp
@@ -13,8 +13,8 @@
 #ifndef INCLUDED_ValueType
 #include <ValueType.h>
 #endif
-#ifndef INCLUDED_haxe_Log
-#include <haxe/Log.h>
+#ifndef INCLUDED_haxe_Exception
+#include <haxe/Exception.h>
 #endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
@@ -38,16 +38,17 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_5c401225cb14c98d_12_new,"snikket.persistence.SqliteDriver","new",0x358a23a6,"snikket.persistence.SqliteDriver.new","snikket/persistence/SqliteDriver.hx",12,0xaa839748)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c401225cb14c98d_15_exec,"snikket.persistence.SqliteDriver","exec",0x9d707d8b,"snikket.persistence.SqliteDriver.exec","snikket/persistence/SqliteDriver.hx",15,0xaa839748)
-HX_LOCAL_STACK_FRAME(_hx_pos_5c401225cb14c98d_40_prepare,"snikket.persistence.SqliteDriver","prepare",0xd045ffcd,"snikket.persistence.SqliteDriver.prepare","snikket/persistence/SqliteDriver.hx",40,0xaa839748)
+HX_DEFINE_STACK_FRAME(_hx_pos_5c401225cb14c98d_11_new,"snikket.persistence.SqliteDriver","new",0x358a23a6,"snikket.persistence.SqliteDriver.new","snikket/persistence/SqliteDriver.hx",11,0xaa839748)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c401225cb14c98d_16_exec,"snikket.persistence.SqliteDriver","exec",0x9d707d8b,"snikket.persistence.SqliteDriver.exec","snikket/persistence/SqliteDriver.hx",16,0xaa839748)
 HX_LOCAL_STACK_FRAME(_hx_pos_5c401225cb14c98d_39_prepare,"snikket.persistence.SqliteDriver","prepare",0xd045ffcd,"snikket.persistence.SqliteDriver.prepare","snikket/persistence/SqliteDriver.hx",39,0xaa839748)
+HX_LOCAL_STACK_FRAME(_hx_pos_5c401225cb14c98d_38_prepare,"snikket.persistence.SqliteDriver","prepare",0xd045ffcd,"snikket.persistence.SqliteDriver.prepare","snikket/persistence/SqliteDriver.hx",38,0xaa839748)
 namespace snikket{
 namespace persistence{
 
 void SqliteDriver_obj::__construct(::String dbfile){
-            	HX_STACKFRAME(&_hx_pos_5c401225cb14c98d_12_new)
-HXDLIN(  12)		this->db = ::sys::db::Sqlite_obj::open(dbfile);
+            	HX_STACKFRAME(&_hx_pos_5c401225cb14c98d_11_new)
+HXLINE(  12)		this->db = ::sys::db::Sqlite_obj::open(dbfile);
+HXLINE(  13)		::sys::db::Connection_obj::request(this->db,HX_("PRAGMA journal_mode=WAL",74,ce,b2,c7));
             	}
 
 Dynamic SqliteDriver_obj::__CreateEmpty() { return new SqliteDriver_obj; }
@@ -66,50 +67,52 @@ bool SqliteDriver_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::Dynamic SqliteDriver_obj::exec( ::Dynamic sql,::cpp::VirtualArray params){
-            	HX_STACKFRAME(&_hx_pos_5c401225cb14c98d_15_exec)
-HXLINE(  16)		::Dynamic result = null();
-HXLINE(  17)		::cpp::VirtualArray qs;
-HXDLIN(  17)		if (::Std_obj::isOfType(sql,::hx::ClassOf< ::String >())) {
-HXLINE(  17)			qs = ::cpp::VirtualArray_obj::__new(1)->init(0,sql);
+            	HX_STACKFRAME(&_hx_pos_5c401225cb14c98d_16_exec)
+HXLINE(  17)		::Dynamic result = null();
+HXLINE(  18)		::cpp::VirtualArray qs;
+HXDLIN(  18)		if (::Std_obj::isOfType(sql,::hx::ClassOf< ::String >())) {
+HXLINE(  18)			qs = ::cpp::VirtualArray_obj::__new(1)->init(0,sql);
             		}
             		else {
-HXLINE(  17)			qs = ::hx::TCast< ::cpp::VirtualArray >::cast(sql);
+HXLINE(  18)			qs = ::hx::TCast< ::cpp::VirtualArray >::cast(sql);
             		}
-HXLINE(  23)		{
-HXLINE(  23)			int _g = 0;
-HXDLIN(  23)			while((_g < qs->get_length())){
-HXLINE(  23)				 ::Dynamic q = qs->__get(_g);
-HXDLIN(  23)				_g = (_g + 1);
-HXLINE(  24)				if (::hx::IsNull( result )) {
-HXLINE(  25)					::cpp::VirtualArray tmp = params;
-HXDLIN(  25)					::cpp::VirtualArray prepared;
-HXDLIN(  25)					if (::hx::IsNotNull( tmp )) {
-HXLINE(  25)						prepared = tmp;
+HXLINE(  23)		try {
+            			HX_STACK_CATCHABLE( ::Dynamic, 0);
+HXLINE(  24)			{
+HXLINE(  24)				int _g = 0;
+HXDLIN(  24)				while((_g < qs->get_length())){
+HXLINE(  24)					 ::Dynamic q = qs->__get(_g);
+HXDLIN(  24)					_g = (_g + 1);
+HXLINE(  25)					if (::hx::IsNull( result )) {
+HXLINE(  26)						::cpp::VirtualArray tmp = params;
+HXDLIN(  26)						::cpp::VirtualArray prepared;
+HXDLIN(  26)						if (::hx::IsNotNull( tmp )) {
+HXLINE(  26)							prepared = tmp;
+            						}
+            						else {
+HXLINE(  26)							prepared = ::cpp::VirtualArray_obj::__new(0);
+            						}
+HXDLIN(  26)						::String prepared1 = this->prepare(( (::String)(q) ),prepared);
+HXLINE(  27)						result = ::sys::db::Connection_obj::request(this->db,prepared1);
             					}
             					else {
-HXLINE(  25)						prepared = ::cpp::VirtualArray_obj::__new(0);
+HXLINE(  29)						::sys::db::Connection_obj::request(this->db,q);
             					}
-HXDLIN(  25)					::String prepared1 = this->prepare(( (::String)(q) ),prepared);
-HXLINE(  26)					::haxe::Log_obj::trace(HX_("SQL",ee,41,3f,00), ::Dynamic(::hx::Anon_obj::Create(5)
-            						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.persistence.SqliteDriver",b4,18,c2,cb))
-            						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,prepared1))
-            						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("exec",91,f3,1d,43))
-            						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/persistence/SqliteDriver.hx",48,97,83,aa))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),26)));
-HXLINE(  27)					result = ::sys::db::Connection_obj::request(this->db,prepared1);
-HXLINE(  28)					::haxe::Log_obj::trace(HX_("SQLr",c4,6e,1a,37), ::Dynamic(::hx::Anon_obj::Create(5)
-            						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.persistence.SqliteDriver",b4,18,c2,cb))
-            						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,result))
-            						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("exec",91,f3,1d,43))
-            						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/persistence/SqliteDriver.hx",48,97,83,aa))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),28)));
-            				}
-            				else {
-HXLINE(  30)					::sys::db::Connection_obj::request(this->db,q);
             				}
             			}
+HXLINE(  32)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(result);
+            		} catch( ::Dynamic _hx_e) {
+            			if (_hx_e.IsClass<  ::Dynamic >() ){
+            				HX_STACK_BEGIN_CATCH
+            				 ::Dynamic _g1 = _hx_e;
+HXLINE(  33)				 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g1);
+HXLINE(  34)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            			}
+            			else {
+            				HX_STACK_DO_THROW(_hx_e);
+            			}
             		}
-HXLINE(  33)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(result);
+HXLINE(  23)		return null();
             	}
 
 
@@ -118,64 +121,64 @@ HX_DEFINE_DYNAMIC_FUNC2(SqliteDriver_obj,exec,return )
 ::String SqliteDriver_obj::prepare(::String sql,::cpp::VirtualArray params){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::persistence::SqliteDriver,_gthis,::cpp::VirtualArray,params) HXARGC(1)
             		::String _hx_run( ::EReg f){
-            			HX_GC_STACKFRAME(&_hx_pos_5c401225cb14c98d_40_prepare)
-HXLINE(  41)			 ::Dynamic p = params->shift();
-HXLINE(  42)			 ::ValueType _g = ::Type_obj::_hx_typeof(p);
-HXDLIN(  42)			switch((int)(_g->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_5c401225cb14c98d_39_prepare)
+HXLINE(  40)			 ::Dynamic p = params->shift();
+HXLINE(  41)			 ::ValueType _g = ::Type_obj::_hx_typeof(p);
+HXDLIN(  41)			switch((int)(_g->_hx_getIndex())){
             				case (int)0: {
-HXLINE(  52)					return HX_("NULL",87,66,cf,33);
+HXLINE(  51)					return HX_("NULL",87,66,cf,33);
             				}
             				break;
             				case (int)1: {
-HXLINE(  50)					return ::Std_obj::string(p);
+HXLINE(  49)					return ::Std_obj::string(p);
             				}
             				break;
             				case (int)2: {
-HXLINE(  48)					return ::Std_obj::string(p);
+HXLINE(  47)					return ::Std_obj::string(p);
             				}
             				break;
             				case (int)3: {
-HXLINE(  46)					if (::hx::IsEq( p,true )) {
-HXLINE(  46)						return HX_("1",31,00,00,00);
+HXLINE(  45)					if (::hx::IsEq( p,true )) {
+HXLINE(  45)						return HX_("1",31,00,00,00);
             					}
             					else {
-HXLINE(  46)						return HX_("0",30,00,00,00);
+HXLINE(  45)						return HX_("0",30,00,00,00);
             					}
             				}
             				break;
             				case (int)6: {
-HXLINE(  56)					::hx::Class _hx_switch_0 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
+HXLINE(  55)					::hx::Class _hx_switch_0 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
             					if (  (_hx_switch_0==::hx::ArrayBase::__mClass) ){
-HXLINE(  54)						 ::haxe::io::Bytes bytes = ::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(p) ));
-HXLINE(  55)						return ((HX_("X'",cf,4c,00,00) + bytes->toHex()) + HX_("'",27,00,00,00));
-HXLINE(  53)						goto _hx_goto_3;
+HXLINE(  53)						 ::haxe::io::Bytes bytes = ::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(p) ));
+HXLINE(  54)						return ((HX_("X'",cf,4c,00,00) + bytes->toHex()) + HX_("'",27,00,00,00));
+HXLINE(  52)						goto _hx_goto_3;
             					}
             					if (  (_hx_switch_0==::hx::ClassOf< ::String >()) ){
-HXLINE(  44)						return ::sys::db::Connection_obj::quote(_gthis->db,p);
-HXDLIN(  44)						goto _hx_goto_3;
+HXLINE(  43)						return ::sys::db::Connection_obj::quote(_gthis->db,p);
+HXDLIN(  43)						goto _hx_goto_3;
             					}
             					if (  (_hx_switch_0==::hx::ClassOf< ::haxe::io::Bytes >()) ){
-HXLINE(  57)						 ::haxe::io::Bytes bytes1 = ( ( ::haxe::io::Bytes)(p) );
-HXLINE(  58)						return ((HX_("X'",cf,4c,00,00) + bytes1->toHex()) + HX_("'",27,00,00,00));
-HXLINE(  56)						goto _hx_goto_3;
+HXLINE(  56)						 ::haxe::io::Bytes bytes1 = ( ( ::haxe::io::Bytes)(p) );
+HXLINE(  57)						return ((HX_("X'",cf,4c,00,00) + bytes1->toHex()) + HX_("'",27,00,00,00));
+HXLINE(  55)						goto _hx_goto_3;
             					}
             					/* default */{
-HXLINE(  60)						HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p))));
+HXLINE(  59)						HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p))));
             					}
             					_hx_goto_3:;
             				}
             				break;
             				default:{
-HXLINE(  60)					HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p))));
+HXLINE(  59)					HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p))));
             				}
             			}
-HXLINE(  42)			return null();
+HXLINE(  41)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_5c401225cb14c98d_39_prepare)
-HXDLIN(  39)		 ::snikket::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  40)		return  ::EReg_obj::__alloc( HX_CTX ,HX_("\\?",63,50,00,00),HX_("gm",26,5a,00,00))->map(sql, ::Dynamic(new _hx_Closure_0(_gthis,params)));
+            	HX_GC_STACKFRAME(&_hx_pos_5c401225cb14c98d_38_prepare)
+HXDLIN(  38)		 ::snikket::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  39)		return  ::EReg_obj::__alloc( HX_CTX ,HX_("\\?",63,50,00,00),HX_("gm",26,5a,00,00))->map(sql, ::Dynamic(new _hx_Closure_0(_gthis,params)));
             	}
 
 
diff --git a/Sources/c_snikket/src/snikket/queries/Push2Enable.cpp b/Sources/c_snikket/src/snikket/queries/Push2Enable.cpp
new file mode 100644
index 0000000..97acd71
--- /dev/null
+++ b/Sources/c_snikket/src/snikket/queries/Push2Enable.cpp
@@ -0,0 +1,244 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_Std
+#include <Std.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_haxe_crypto_Base64
+#include <haxe/crypto/Base64.h>
+#endif
+#ifndef INCLUDED_haxe_ds_StringMap
+#include <haxe/ds/StringMap.h>
+#endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
+#ifndef INCLUDED_snikket_ID
+#include <snikket/ID.h>
+#endif
+#ifndef INCLUDED_snikket_Stanza
+#include <snikket/Stanza.h>
+#endif
+#ifndef INCLUDED_snikket__Stanza_NodeInterface
+#include <snikket/_Stanza/NodeInterface.h>
+#endif
+#ifndef INCLUDED_snikket_queries_GenericQuery
+#include <snikket/queries/GenericQuery.h>
+#endif
+#ifndef INCLUDED_snikket_queries_Push2Enable
+#include <snikket/queries/Push2Enable.h>
+#endif
+
+HX_DEFINE_STACK_FRAME(_hx_pos_aa1cb9a2de9f49b1_10_new,"snikket.queries.Push2Enable","new",0xa3713a14,"snikket.queries.Push2Enable.new","snikket/queries/Push2Enable.hx",10,0xf8110c5e)
+HX_LOCAL_STACK_FRAME(_hx_pos_aa1cb9a2de9f49b1_46_handleResponse,"snikket.queries.Push2Enable","handleResponse",0x56762115,"snikket.queries.Push2Enable.handleResponse","snikket/queries/Push2Enable.hx",46,0xf8110c5e)
+namespace snikket{
+namespace queries{
+
+void Push2Enable_obj::__construct(::String to,::String service,::String client, ::haxe::io::Bytes ua_public, ::haxe::io::Bytes auth_secret,::String jwt_alg, ::haxe::io::Bytes jwt_key, ::haxe::ds::StringMap jwt_claims,int grace,::Array< ::Dynamic> filters){
+            	HX_GC_STACKFRAME(&_hx_pos_aa1cb9a2de9f49b1_10_new)
+HXLINE(  12)		this->queryId = null();
+HXLINE(  11)		this->xmlns = HX_("urn:xmpp:push2:0",32,b1,53,5a);
+HXLINE(  16)		super::__construct();
+HXLINE(  17)		this->queryId = ::snikket::ID_obj::_hx_short();
+HXLINE(  18)		this->queryStanza =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+            			->setFixed(0,HX_("id",db,5b,00,00),this->queryId)
+            			->setFixed(1,HX_("to",7b,65,00,00),to)
+            			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
+HXLINE(  22)		 ::snikket::Stanza enable = this->queryStanza->tag(HX_("enable",83,ae,87,f8), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),this->xmlns)));
+HXLINE(  23)		enable->textTag(HX_("service",35,1c,2d,02),service,null());
+HXLINE(  24)		enable->textTag(HX_("client",4b,ca,4f,0a),client,null());
+HXLINE(  25)		 ::snikket::Stanza match = enable->tag(HX_("match",45,49,23,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("profile",29,49,49,f3),HX_("urn:xmpp:push2:match:important",2f,d1,6d,52))));
+HXLINE(  26)		if ((grace > 0)) {
+HXLINE(  26)			match->textTag(HX_("grace",f8,03,ea,99),::Std_obj::string(grace),null());
+            		}
+HXLINE(  27)		{
+HXLINE(  27)			int _g = 0;
+HXDLIN(  27)			while((_g < filters->length)){
+HXLINE(  27)				 ::Dynamic filter = filters->__get(_g);
+HXDLIN(  27)				_g = (_g + 1);
+HXLINE(  28)				 ::snikket::Stanza filterel = match->tag(HX_("filter",b8,1f,35,85), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("jid",c5,ca,50,00), ::Dynamic(filter->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)))));
+HXLINE(  29)				if (( (bool)(filter->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) )) {
+HXLINE(  29)					filterel->tag(HX_("mention",ea,9e,bf,b9),null())->up();
+            				}
+HXLINE(  30)				if (( (bool)(filter->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) )) {
+HXLINE(  30)					filterel->tag(HX_("reply",2a,09,c6,e6),null())->up();
+            				}
+HXLINE(  31)				filterel->up();
+            			}
+            		}
+HXLINE(  33)		 ::snikket::Stanza send = match->tag(HX_("send",48,8d,50,4c), ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:push2:send:sce+rfc8291+rfc8292:0",04,95,a2,be))));
+HXLINE(  34)		send->textTag(HX_("ua-public",ca,9b,ab,ca),::haxe::crypto::Base64_obj::encode(ua_public,null()),null());
+HXLINE(  35)		send->textTag(HX_("auth-secret",f5,4b,c1,3b),::haxe::crypto::Base64_obj::encode(auth_secret,null()),null());
+HXLINE(  36)		if (::hx::IsNotNull( jwt_alg )) {
+HXLINE(  37)			send->textTag(HX_("jwt-alg",96,f9,de,b4),jwt_alg,null());
+HXLINE(  38)			send->textTag(HX_("jwt-key",19,8a,e6,b4),::haxe::crypto::Base64_obj::encode(jwt_key,null()),null());
+HXLINE(  39)			{
+HXLINE(  39)				::Dynamic map = jwt_claims;
+HXDLIN(  39)				::Dynamic _g_map = map;
+HXDLIN(  39)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN(  39)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  39)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(  39)					::String _g_value = ( (::String)(::haxe::IMap_obj::get(_g_map,key)) );
+HXDLIN(  39)					::String _g_key = key;
+HXDLIN(  39)					::String key1 = _g_key;
+HXDLIN(  39)					::String value = _g_value;
+HXLINE(  40)					send->textTag(HX_("jwt-claim",76,02,8a,0c),value, ::Dynamic(::hx::Anon_obj::Create(1)
+            						->setFixed(0,HX_("name",4b,72,ff,48),key1)));
+            				}
+            			}
+            		}
+HXLINE(  43)		enable->up()->up()->up();
+            	}
+
+Dynamic Push2Enable_obj::__CreateEmpty() { return new Push2Enable_obj; }
+
+void *Push2Enable_obj::_hx_vtable = 0;
+
+Dynamic Push2Enable_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Push2Enable_obj > _hx_result = new Push2Enable_obj();
+	_hx_result->__construct(inArgs[0],inArgs[1],inArgs[2],inArgs[3],inArgs[4],inArgs[5],inArgs[6],inArgs[7],inArgs[8],inArgs[9]);
+	return _hx_result;
+}
+
+bool Push2Enable_obj::_hx_isInstanceOf(int inClassId) {
+	if (inClassId<=(int)0x22eda35a) {
+		return inClassId==(int)0x00000001 || inClassId==(int)0x22eda35a;
+	} else {
+		return inClassId==(int)0x7fe47af2;
+	}
+}
+
+void Push2Enable_obj::handleResponse( ::snikket::Stanza stanza){
+            	HX_STACKFRAME(&_hx_pos_aa1cb9a2de9f49b1_46_handleResponse)
+HXLINE(  47)		this->responseStanza = stanza;
+HXLINE(  48)		this->finish();
+            	}
+
+
+
+::hx::ObjectPtr< Push2Enable_obj > Push2Enable_obj::__new(::String to,::String service,::String client, ::haxe::io::Bytes ua_public, ::haxe::io::Bytes auth_secret,::String jwt_alg, ::haxe::io::Bytes jwt_key, ::haxe::ds::StringMap jwt_claims,int grace,::Array< ::Dynamic> filters) {
+	::hx::ObjectPtr< Push2Enable_obj > __this = new Push2Enable_obj();
+	__this->__construct(to,service,client,ua_public,auth_secret,jwt_alg,jwt_key,jwt_claims,grace,filters);
+	return __this;
+}
+
+::hx::ObjectPtr< Push2Enable_obj > Push2Enable_obj::__alloc(::hx::Ctx *_hx_ctx,::String to,::String service,::String client, ::haxe::io::Bytes ua_public, ::haxe::io::Bytes auth_secret,::String jwt_alg, ::haxe::io::Bytes jwt_key, ::haxe::ds::StringMap jwt_claims,int grace,::Array< ::Dynamic> filters) {
+	Push2Enable_obj *__this = (Push2Enable_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Push2Enable_obj), true, "snikket.queries.Push2Enable"));
+	*(void **)__this = Push2Enable_obj::_hx_vtable;
+	__this->__construct(to,service,client,ua_public,auth_secret,jwt_alg,jwt_key,jwt_claims,grace,filters);
+	return __this;
+}
+
+Push2Enable_obj::Push2Enable_obj()
+{
+}
+
+void Push2Enable_obj::__Mark(HX_MARK_PARAMS)
+{
+	HX_MARK_BEGIN_CLASS(Push2Enable);
+	HX_MARK_MEMBER_NAME(xmlns,"xmlns");
+	HX_MARK_MEMBER_NAME(queryId,"queryId");
+	HX_MARK_MEMBER_NAME(responseStanza,"responseStanza");
+	 ::snikket::queries::GenericQuery_obj::__Mark(HX_MARK_ARG);
+	HX_MARK_END_CLASS();
+}
+
+void Push2Enable_obj::__Visit(HX_VISIT_PARAMS)
+{
+	HX_VISIT_MEMBER_NAME(xmlns,"xmlns");
+	HX_VISIT_MEMBER_NAME(queryId,"queryId");
+	HX_VISIT_MEMBER_NAME(responseStanza,"responseStanza");
+	 ::snikket::queries::GenericQuery_obj::__Visit(HX_VISIT_ARG);
+}
+
+::hx::Val Push2Enable_obj::__Field(const ::String &inName,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"xmlns") ) { return ::hx::Val( xmlns ); }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"queryId") ) { return ::hx::Val( queryId ); }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"responseStanza") ) { return ::hx::Val( responseStanza ); }
+		if (HX_FIELD_EQ(inName,"handleResponse") ) { return ::hx::Val( handleResponse_dyn() ); }
+	}
+	return super::__Field(inName,inCallProp);
+}
+
+::hx::Val Push2Enable_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 5:
+		if (HX_FIELD_EQ(inName,"xmlns") ) { xmlns=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 7:
+		if (HX_FIELD_EQ(inName,"queryId") ) { queryId=inValue.Cast< ::String >(); return inValue; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"responseStanza") ) { responseStanza=inValue.Cast<  ::snikket::Stanza >(); return inValue; }
+	}
+	return super::__SetField(inName,inValue,inCallProp);
+}
+
+void Push2Enable_obj::__GetFields(Array< ::String> &outFields)
+{
+	outFields->push(HX_("xmlns",dc,31,74,60));
+	outFields->push(HX_("queryId",03,9d,e9,95));
+	outFields->push(HX_("responseStanza",56,d7,9f,78));
+	super::__GetFields(outFields);
+};
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo Push2Enable_obj_sMemberStorageInfo[] = {
+	{::hx::fsString,(int)offsetof(Push2Enable_obj,xmlns),HX_("xmlns",dc,31,74,60)},
+	{::hx::fsString,(int)offsetof(Push2Enable_obj,queryId),HX_("queryId",03,9d,e9,95)},
+	{::hx::fsObject /*  ::snikket::Stanza */ ,(int)offsetof(Push2Enable_obj,responseStanza),HX_("responseStanza",56,d7,9f,78)},
+	{ ::hx::fsUnknown, 0, null()}
+};
+static ::hx::StaticInfo *Push2Enable_obj_sStaticStorageInfo = 0;
+#endif
+
+static ::String Push2Enable_obj_sMemberFields[] = {
+	HX_("xmlns",dc,31,74,60),
+	HX_("queryId",03,9d,e9,95),
+	HX_("responseStanza",56,d7,9f,78),
+	HX_("handleResponse",49,d6,e3,ef),
+	::String(null()) };
+
+::hx::Class Push2Enable_obj::__mClass;
+
+void Push2Enable_obj::__register()
+{
+	Push2Enable_obj _hx_dummy;
+	Push2Enable_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("snikket.queries.Push2Enable",22,e0,a5,78);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(Push2Enable_obj_sMemberFields);
+	__mClass->mCanCast = ::hx::TCanCast< Push2Enable_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Push2Enable_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Push2Enable_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+} // end namespace snikket
+} // end namespace queries
diff --git a/Sources/c_snikket/src/snikket/streams/XmppStropheStream.cpp b/Sources/c_snikket/src/snikket/streams/XmppStropheStream.cpp
index 58c8416..bb288f3 100644
--- a/Sources/c_snikket/src/snikket/streams/XmppStropheStream.cpp
+++ b/Sources/c_snikket/src/snikket/streams/XmppStropheStream.cpp
@@ -12,9 +12,15 @@
 #ifndef INCLUDED_Reflect
 #include <Reflect.h>
 #endif
+#ifndef INCLUDED_haxe_Exception
+#include <haxe/Exception.h>
+#endif
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
+#ifndef INCLUDED_haxe_Log
+#include <haxe/Log.h>
+#endif
 #ifndef INCLUDED_haxe_ds_BalancedTree
 #include <haxe/ds/BalancedTree.h>
 #endif
@@ -70,54 +76,72 @@
 #include <sys/thread/_Thread/Thread_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_193_new,"snikket.streams.XmppStropheStream","new",0x50539160,"snikket.streams.XmppStropheStream.new","snikket/streams/XmppStropheStream.hx",193,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_227_newId,"snikket.streams.XmppStropheStream","newId",0xb962e95b,"snikket.streams.XmppStropheStream.newId","snikket/streams/XmppStropheStream.hx",227,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_295_onIq,"snikket.streams.XmppStropheStream","onIq",0xf97b85e7,"snikket.streams.XmppStropheStream.onIq","snikket/streams/XmppStropheStream.hx",295,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_324_connect,"snikket.streams.XmppStropheStream","connect",0x26f47cea,"snikket.streams.XmppStropheStream.connect","snikket/streams/XmppStropheStream.hx",324,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_322_connect,"snikket.streams.XmppStropheStream","connect",0x26f47cea,"snikket.streams.XmppStropheStream.connect","snikket/streams/XmppStropheStream.hx",322,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_349_disconnect,"snikket.streams.XmppStropheStream","disconnect",0xaf2ec35c,"snikket.streams.XmppStropheStream.disconnect","snikket/streams/XmppStropheStream.hx",349,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_353_poll,"snikket.streams.XmppStropheStream","poll",0xfa259d3f,"snikket.streams.XmppStropheStream.poll","snikket/streams/XmppStropheStream.hx",353,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_352_poll,"snikket.streams.XmppStropheStream","poll",0xfa259d3f,"snikket.streams.XmppStropheStream.poll","snikket/streams/XmppStropheStream.hx",352,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_389_convertFromStanza,"snikket.streams.XmppStropheStream","convertFromStanza",0x96c3f3d2,"snikket.streams.XmppStropheStream.convertFromStanza","snikket/streams/XmppStropheStream.hx",389,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_415_sendStanza,"snikket.streams.XmppStropheStream","sendStanza",0xed37e45d,"snikket.streams.XmppStropheStream.sendStanza","snikket/streams/XmppStropheStream.hx",415,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_422_finalize,"snikket.streams.XmppStropheStream","finalize",0x297ee49e,"snikket.streams.XmppStropheStream.finalize","snikket/streams/XmppStropheStream.hx",422,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_230_strophe_fast_token_handler,"snikket.streams.XmppStropheStream","strophe_fast_token_handler",0xfc0a9611,"snikket.streams.XmppStropheStream.strophe_fast_token_handler","snikket/streams/XmppStropheStream.hx",230,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_235_strophe_certfail_handler,"snikket.streams.XmppStropheStream","strophe_certfail_handler",0x0748fefd,"snikket.streams.XmppStropheStream.strophe_certfail_handler","snikket/streams/XmppStropheStream.hx",235,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_252_strophe_stanza,"snikket.streams.XmppStropheStream","strophe_stanza",0xa2c712e5,"snikket.streams.XmppStropheStream.strophe_stanza","snikket/streams/XmppStropheStream.hx",252,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_298_strophe_connect,"snikket.streams.XmppStropheStream","strophe_connect",0xae6ed8fa,"snikket.streams.XmppStropheStream.strophe_connect","snikket/streams/XmppStropheStream.hx",298,0x06c67012)
-HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_359_convertToStanza,"snikket.streams.XmppStropheStream","convertToStanza",0x53baabe3,"snikket.streams.XmppStropheStream.convertToStanza","snikket/streams/XmppStropheStream.hx",359,0x06c67012)
+HX_DEFINE_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_221_new,"snikket.streams.XmppStropheStream","new",0x50539160,"snikket.streams.XmppStropheStream.new","snikket/streams/XmppStropheStream.hx",221,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_259_newId,"snikket.streams.XmppStropheStream","newId",0xb962e95b,"snikket.streams.XmppStropheStream.newId","snikket/streams/XmppStropheStream.hx",259,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_363_onIq,"snikket.streams.XmppStropheStream","onIq",0xf97b85e7,"snikket.streams.XmppStropheStream.onIq","snikket/streams/XmppStropheStream.hx",363,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_400_connect,"snikket.streams.XmppStropheStream","connect",0x26f47cea,"snikket.streams.XmppStropheStream.connect","snikket/streams/XmppStropheStream.hx",400,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_422_connect,"snikket.streams.XmppStropheStream","connect",0x26f47cea,"snikket.streams.XmppStropheStream.connect","snikket/streams/XmppStropheStream.hx",422,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_393_connect,"snikket.streams.XmppStropheStream","connect",0x26f47cea,"snikket.streams.XmppStropheStream.connect","snikket/streams/XmppStropheStream.hx",393,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_432_disconnect,"snikket.streams.XmppStropheStream","disconnect",0xaf2ec35c,"snikket.streams.XmppStropheStream.disconnect","snikket/streams/XmppStropheStream.hx",432,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_472_convertFromStanza,"snikket.streams.XmppStropheStream","convertFromStanza",0x96c3f3d2,"snikket.streams.XmppStropheStream.convertFromStanza","snikket/streams/XmppStropheStream.hx",472,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_498_sendStanza,"snikket.streams.XmppStropheStream","sendStanza",0xed37e45d,"snikket.streams.XmppStropheStream.sendStanza","snikket/streams/XmppStropheStream.hx",498,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_505_finalize,"snikket.streams.XmppStropheStream","finalize",0x297ee49e,"snikket.streams.XmppStropheStream.finalize","snikket/streams/XmppStropheStream.hx",505,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_266_strophe_fast_token_handler,"snikket.streams.XmppStropheStream","strophe_fast_token_handler",0xfc0a9611,"snikket.streams.XmppStropheStream.strophe_fast_token_handler","snikket/streams/XmppStropheStream.hx",266,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_262_strophe_fast_token_handler,"snikket.streams.XmppStropheStream","strophe_fast_token_handler",0xfc0a9611,"snikket.streams.XmppStropheStream.strophe_fast_token_handler","snikket/streams/XmppStropheStream.hx",262,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_275_strophe_sm_handler,"snikket.streams.XmppStropheStream","strophe_sm_handler",0xb2b084d5,"snikket.streams.XmppStropheStream.strophe_sm_handler","snikket/streams/XmppStropheStream.hx",275,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_271_strophe_sm_handler,"snikket.streams.XmppStropheStream","strophe_sm_handler",0xb2b084d5,"snikket.streams.XmppStropheStream.strophe_sm_handler","snikket/streams/XmppStropheStream.hx",271,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_284_strophe_sm_ack_handler,"snikket.streams.XmppStropheStream","strophe_sm_ack_handler",0x6c59a21f,"snikket.streams.XmppStropheStream.strophe_sm_ack_handler","snikket/streams/XmppStropheStream.hx",284,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_280_strophe_sm_ack_handler,"snikket.streams.XmppStropheStream","strophe_sm_ack_handler",0x6c59a21f,"snikket.streams.XmppStropheStream.strophe_sm_ack_handler","snikket/streams/XmppStropheStream.hx",280,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_293_strophe_sm_fail_handler,"snikket.streams.XmppStropheStream","strophe_sm_fail_handler",0x892bd43e,"snikket.streams.XmppStropheStream.strophe_sm_fail_handler","snikket/streams/XmppStropheStream.hx",293,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_289_strophe_sm_fail_handler,"snikket.streams.XmppStropheStream","strophe_sm_fail_handler",0x892bd43e,"snikket.streams.XmppStropheStream.strophe_sm_fail_handler","snikket/streams/XmppStropheStream.hx",289,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_298_strophe_certfail_handler,"snikket.streams.XmppStropheStream","strophe_certfail_handler",0x0748fefd,"snikket.streams.XmppStropheStream.strophe_certfail_handler","snikket/streams/XmppStropheStream.hx",298,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_316_strophe_stanza,"snikket.streams.XmppStropheStream","strophe_stanza",0xa2c712e5,"snikket.streams.XmppStropheStream.strophe_stanza","snikket/streams/XmppStropheStream.hx",316,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_325_strophe_stanza,"snikket.streams.XmppStropheStream","strophe_stanza",0xa2c712e5,"snikket.streams.XmppStropheStream.strophe_stanza","snikket/streams/XmppStropheStream.hx",325,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_368_strophe_connect,"snikket.streams.XmppStropheStream","strophe_connect",0xae6ed8fa,"snikket.streams.XmppStropheStream.strophe_connect","snikket/streams/XmppStropheStream.hx",368,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_366_strophe_connect,"snikket.streams.XmppStropheStream","strophe_connect",0xae6ed8fa,"snikket.streams.XmppStropheStream.strophe_connect","snikket/streams/XmppStropheStream.hx",366,0x06c67012)
+HX_LOCAL_STACK_FRAME(_hx_pos_c0c1f1a3af656a5a_442_convertToStanza,"snikket.streams.XmppStropheStream","convertToStanza",0x53baabe3,"snikket.streams.XmppStropheStream.convertToStanza","snikket/streams/XmppStropheStream.hx",442,0x06c67012)
 namespace snikket{
 namespace streams{
 
 void XmppStropheStream_obj::__construct(){
-            	HX_GC_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_193_new)
-HXLINE( 198)		this->ready = false;
-HXLINE( 197)		this->pending = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 196)		 ::haxe::ds::EnumValueMap _g =  ::haxe::ds::EnumValueMap_obj::__alloc( HX_CTX );
-HXDLIN( 196)		_g->set(::snikket::IqRequestType_obj::Get_dyn(), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
-HXDLIN( 196)		_g->set(::snikket::IqRequestType_obj::Set_dyn(), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
-HXDLIN( 196)		this->iqHandlers = _g;
-HXLINE( 201)		super::__construct();
-HXLINE( 202)		xmpp_initialize();
-HXLINE( 203)		xmpp_log_t *logger = NULL;;
-HXLINE( 205)		logger = xmpp_get_default_logger(XMPP_LEVEL_DEBUG);;
-HXLINE( 207)		this->ctx = xmpp_ctx_new(null(),logger);
-HXLINE( 208)		this->conn = xmpp_conn_new(this->ctx);
-HXLINE( 212)		::cpp::Pointer< char > tmp = null();
-HXLINE( 213)		::cpp::Pointer< char > tmp1 = null();
-HXLINE( 214)		::cpp::Pointer< char > tmp2 = null();
-HXLINE( 210)		 xmpp_conn_t* _hx_tmp = this->conn;
-HXLINE( 211)		::cpp::Function< int  ( xmpp_conn_t*, xmpp_stanza_t*,void*) > _hx_tmp1 = ::cpp::Function< int ( xmpp_conn_t*, xmpp_stanza_t*,void*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_stanza ));
-HXLINE( 212)		::cpp::Pointer< char > tmp3 = tmp;
-HXLINE( 213)		::cpp::Pointer< char > tmp4 = tmp1;
-HXLINE( 214)		::cpp::Pointer< char > tmp5 = tmp2;
-HXLINE( 209)		xmpp_handler_add(_hx_tmp,_hx_tmp1,tmp3,tmp4,tmp5,(void*)this);
-HXLINE( 218)		 xmpp_conn_t* _hx_tmp2 = this->conn;
-HXLINE( 219)		::cpp::Function< void  ( xmpp_conn_t*,const char*,void*) > _hx_tmp3 = ::cpp::Function< void ( xmpp_conn_t*,const char*,void*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_fast_token_handler ));
-HXLINE( 217)		xmpp_conn_set_fast_token_handler(_hx_tmp2,_hx_tmp3,(void*)this);
-HXLINE( 222)		 xmpp_conn_t* _hx_tmp4 = this->conn;
-HXDLIN( 222)		xmpp_conn_set_certfail_handler(_hx_tmp4,::cpp::Function< int ( const xmpp_tlscert_t*,const char*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_certfail_handler )));
-HXLINE( 223)		_hx_add_finalizable(::hx::ObjectPtr<OBJ_>(this),false);
+            	HX_GC_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_221_new)
+HXLINE( 227)		this->mainThread = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE( 226)		this->ready = false;
+HXLINE( 225)		this->pending = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 224)		 ::haxe::ds::EnumValueMap _g =  ::haxe::ds::EnumValueMap_obj::__alloc( HX_CTX );
+HXDLIN( 224)		_g->set(::snikket::IqRequestType_obj::Get_dyn(), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+HXDLIN( 224)		_g->set(::snikket::IqRequestType_obj::Set_dyn(), ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+HXDLIN( 224)		this->iqHandlers = _g;
+HXLINE( 230)		super::__construct();
+HXLINE( 231)		xmpp_initialize();
+HXLINE( 232)		xmpp_log_t *logger = NULL;;
+HXLINE( 234)		logger = xmpp_get_default_logger(XMPP_LEVEL_DEBUG);;
+HXLINE( 236)		this->ctx = xmpp_ctx_new(null(),logger);
+HXLINE( 237)		this->conn = xmpp_conn_new(this->ctx);
+HXLINE( 241)		::cpp::Pointer< char > tmp = null();
+HXLINE( 242)		::cpp::Pointer< char > tmp1 = null();
+HXLINE( 243)		::cpp::Pointer< char > tmp2 = null();
+HXLINE( 239)		 xmpp_conn_t* _hx_tmp = this->conn;
+HXLINE( 240)		::cpp::Function< int  ( xmpp_conn_t*, xmpp_stanza_t*,void*) > _hx_tmp1 = ::cpp::Function< int ( xmpp_conn_t*, xmpp_stanza_t*,void*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_stanza ));
+HXLINE( 241)		::cpp::Pointer< char > tmp3 = tmp;
+HXLINE( 242)		::cpp::Pointer< char > tmp4 = tmp1;
+HXLINE( 243)		::cpp::Pointer< char > tmp5 = tmp2;
+HXLINE( 238)		xmpp_handler_add(_hx_tmp,_hx_tmp1,tmp3,tmp4,tmp5,(void*)this);
+HXLINE( 247)		 xmpp_conn_t* _hx_tmp2 = this->conn;
+HXLINE( 248)		::cpp::Function< void  ( xmpp_conn_t*,const char*,void*) > _hx_tmp3 = ::cpp::Function< void ( xmpp_conn_t*,const char*,void*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_fast_token_handler ));
+HXLINE( 246)		xmpp_conn_set_fast_token_handler(_hx_tmp2,_hx_tmp3,(void*)this);
+HXLINE( 251)		 xmpp_conn_t* _hx_tmp4 = this->conn;
+HXDLIN( 251)		xmpp_conn_set_certfail_handler(_hx_tmp4,::cpp::Function< int ( const xmpp_tlscert_t*,const char*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_certfail_handler )));
+HXLINE( 252)		 xmpp_conn_t* _hx_tmp5 = this->conn;
+HXDLIN( 252)		::cpp::Function< void  ( xmpp_conn_t*,void*,const unsigned char*,size_t) > _hx_tmp6 = ::cpp::Function< void ( xmpp_conn_t*,void*,const unsigned char*,size_t)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_sm_handler ));
+HXDLIN( 252)		xmpp_conn_set_sm_callback(_hx_tmp5,_hx_tmp6,(void*)this);
+HXLINE( 253)		 xmpp_conn_t* _hx_tmp7 = this->conn;
+HXDLIN( 253)		::cpp::Function< void  ( xmpp_conn_t*,void*,const char*) > _hx_tmp8 = ::cpp::Function< void ( xmpp_conn_t*,void*,const char*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_sm_ack_handler ));
+HXDLIN( 253)		xmpp_conn_set_sm_ack_callback(_hx_tmp7,_hx_tmp8,(void*)this);
+HXLINE( 254)		 xmpp_conn_t* _hx_tmp9 = this->conn;
+HXDLIN( 254)		::cpp::Function< void  ( xmpp_conn_t*,void*,const char*) > _hx_tmp10 = ::cpp::Function< void ( xmpp_conn_t*,void*,const char*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_sm_fail_handler ));
+HXDLIN( 254)		xmpp_conn_set_sm_fail_callback(_hx_tmp9,_hx_tmp10,(void*)this);
+HXLINE( 255)		_hx_add_finalizable(::hx::ObjectPtr<OBJ_>(this),false);
             	}
 
 Dynamic XmppStropheStream_obj::__CreateEmpty() { return new XmppStropheStream_obj; }
@@ -144,332 +168,433 @@ bool XmppStropheStream_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String XmppStropheStream_obj::newId(){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_227_newId)
-HXDLIN( 227)		return ::snikket::ID_obj::_hx_long();
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_259_newId)
+HXDLIN( 259)		return ::snikket::ID_obj::_hx_long();
             	}
 
 
 void XmppStropheStream_obj::onIq( ::snikket::IqRequestType type,::String tag,::String xmlns, ::Dynamic handler){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_295_onIq)
-HXDLIN( 295)		this->iqHandlers->get(type).StaticCast<  ::haxe::ds::StringMap >()->set((((HX_("{",7b,00,00,00) + xmlns) + HX_("}",7d,00,00,00)) + tag),handler);
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_363_onIq)
+HXDLIN( 363)		this->iqHandlers->get(type).StaticCast<  ::haxe::ds::StringMap >()->set((((HX_("{",7b,00,00,00) + xmlns) + HX_("}",7d,00,00,00)) + tag),handler);
             	}
 
 
 void XmppStropheStream_obj::connect(::String jid,::Array< unsigned char > sm){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::streams::XmppStropheStream,_gthis) HXARGC(1)
             		 ::snikket::EventResult _hx_run( ::Dynamic event){
-            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_324_connect)
-HXLINE( 325)			 ::snikket::streams::XmppStropheStream o = _gthis;
-HXLINE( 326)			::String pass = ( (::String)(event->__Field(HX_("password",1b,23,d0,48),::hx::paccDynamic)) );
-HXLINE( 327)			if (::hx::IsNotNull( event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic) )) {
-HXLINE( 328)				::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(pass.c_str());
-HXDLIN( 328)				xmpp_conn_set_fast(_gthis->conn,tmp,( (int)(event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic)) ));
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_400_connect)
+HXLINE( 401)			 ::snikket::streams::XmppStropheStream o = _gthis;
+HXLINE( 402)			::String pass = ( (::String)(event->__Field(HX_("password",1b,23,d0,48),::hx::paccDynamic)) );
+HXLINE( 403)			if (::hx::IsNotNull( event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic) )) {
+HXLINE( 404)				::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(pass.c_str());
+HXDLIN( 404)				xmpp_conn_set_fast(_gthis->conn,tmp,( (int)(event->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic)) ));
             			}
             			else {
-HXLINE( 330)				::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(pass.c_str());
-HXDLIN( 330)				xmpp_conn_set_pass(_gthis->conn,tmp1);
-HXLINE( 331)				::cpp::Pointer< char > tmp2 = null();
-HXDLIN( 331)				xmpp_conn_set_fast(_gthis->conn,tmp2,-1);
+HXLINE( 406)				::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(pass.c_str());
+HXDLIN( 406)				xmpp_conn_set_pass(_gthis->conn,tmp1);
+HXLINE( 407)				::cpp::Pointer< char > tmp2 = null();
+HXDLIN( 407)				xmpp_conn_set_fast(_gthis->conn,tmp2,-1);
             			}
-HXLINE( 333)			::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(_gthis->clientId.c_str());
-HXDLIN( 333)			xmpp_conn_set_user_agent_id(_gthis->conn,tmp3);
-HXLINE( 336)			::cpp::Pointer< char > tmp4 = null();
-HXLINE( 335)			 xmpp_conn_t* _gthis1 = _gthis->conn;
-HXLINE( 338)			::cpp::Function< void  ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,void*) > _hx_tmp = ::cpp::Function< void ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,void*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_connect ));
-HXLINE( 334)			xmpp_connect_client(_gthis1,tmp4,( (unsigned short)(0) ),_hx_tmp,o.GetPtr());
-HXLINE( 342)			return ::snikket::EventResult_obj::EventHandled_dyn();
+HXLINE( 409)			::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(_gthis->clientId.c_str());
+HXDLIN( 409)			xmpp_conn_set_user_agent_id(_gthis->conn,tmp3);
+HXLINE( 412)			::cpp::Pointer< char > tmp4 = null();
+HXLINE( 411)			 xmpp_conn_t* _gthis1 = _gthis->conn;
+HXLINE( 414)			::cpp::Function< void  ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,void*) > _hx_tmp = ::cpp::Function< void ( xmpp_conn_t*, xmpp_conn_event_t,int, xmpp_stream_error_t*,void*)>(::hx::AnyCast(&::snikket::streams::XmppStropheStream_obj::strophe_connect ));
+HXLINE( 410)			xmpp_connect_client(_gthis1,tmp4,( (unsigned short)(0) ),_hx_tmp,o.GetPtr());
+HXLINE( 418)			return ::snikket::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_322_connect)
-HXDLIN( 322)		 ::snikket::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 323)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(jid.c_str());
-HXDLIN( 323)		xmpp_conn_set_jid(this->conn,tmp);
-HXLINE( 324)		this->on(HX_("auth/password",e2,5d,98,00), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 344)		this->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 345)		this->poll();
-            	}
-
-
-void XmppStropheStream_obj::disconnect(){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_349_disconnect)
-HXDLIN( 349)		xmpp_disconnect(this->conn);
-            	}
-
-
-void XmppStropheStream_obj::poll(){
-            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::snikket::streams::XmppStropheStream,_gthis) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::snikket::streams::XmppStropheStream,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_353_poll)
-HXLINE( 354)			xmpp_run_once(_gthis->ctx,( (::cpp::UInt64)(1) ));
-HXLINE( 355)			_gthis->poll();
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_422_connect)
+HXLINE( 422)			try {
+            				HX_STACK_CATCHABLE( ::Dynamic, 0);
+HXLINE( 423)				__hxcpp_enter_gc_free_zone();
+HXLINE( 424)				xmpp_run(_gthis->ctx);
+            			} catch( ::Dynamic _hx_e) {
+            				if (_hx_e.IsClass<  ::Dynamic >() ){
+            					HX_STACK_BEGIN_CATCH
+            					 ::Dynamic _g = _hx_e;
+HXLINE( 425)					 ::haxe::Exception e = ::haxe::Exception_obj::caught(_g);
+HXLINE( 426)					::haxe::Log_obj::trace(HX_("strophe",8f,5b,ec,fc), ::Dynamic(::hx::Anon_obj::Create(5)
+            						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("snikket.streams.XmppStropheStream",6e,a1,9f,1c))
+            						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
+            						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("connect",ea,3b,80,15))
+            						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("snikket/streams/XmppStropheStream.hx",12,70,c6,06))
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),426)));
+            				}
+            				else {
+            					HX_STACK_DO_THROW(_hx_e);
+            				}
+            			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_352_poll)
-HXDLIN( 352)		 ::snikket::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 353)		::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_393_connect)
+HXDLIN( 393)		 ::snikket::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 394)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(jid.c_str());
+HXDLIN( 394)		xmpp_conn_set_jid(this->conn,tmp);
+HXLINE( 395)		if (::hx::IsNotNull( sm )) {
+HXLINE( 397)			const unsigned char* smPtr = (unsigned char*)sm->getBase();
+HXLINE( 398)			xmpp_conn_restore_sm_state(this->conn,smPtr,( (size_t)(sm->length) ));
+            		}
+HXLINE( 400)		this->on(HX_("auth/password",e2,5d,98,00), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 420)		this->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 421)		::sys::thread::_Thread::HaxeThread_obj::create( ::Dynamic(new _hx_Closure_1(_gthis)),false);
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC0(XmppStropheStream_obj,poll,(void))
+void XmppStropheStream_obj::disconnect(){
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_432_disconnect)
+HXDLIN( 432)		xmpp_disconnect(this->conn);
+            	}
+
 
  xmpp_stanza_t* XmppStropheStream_obj::convertFromStanza( ::snikket::Stanza el){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_389_convertFromStanza)
-HXLINE( 390)		 xmpp_stanza_t* xml = xmpp_stanza_new(this->ctx);
-HXLINE( 391)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(el->name.c_str());
-HXDLIN( 391)		xmpp_stanza_set_name(xml,tmp);
-HXLINE( 392)		{
-HXLINE( 392)			 ::Dynamic access = el->attr;
-HXDLIN( 392)			 ::Dynamic _g_access = access;
-HXDLIN( 392)			::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 392)			int _g_index = 0;
-HXDLIN( 392)			while((_g_index < _g_keys->length)){
-HXLINE( 392)				_g_index = (_g_index + 1);
-HXDLIN( 392)				::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 392)				::String attr_value = ( (::String)(::Reflect_obj::field(_g_access,key)) );
-HXDLIN( 392)				::String attr_key = key;
-HXLINE( 393)				::String key1 = attr_key;
-HXLINE( 394)				::String value = attr_value;
-HXLINE( 395)				if (::hx::IsNotNull( value )) {
-HXLINE( 396)					::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(key1.c_str());
-HXDLIN( 396)					::cpp::Pointer< char > tmp2 = cpp::Pointer_obj::fromPointer(value.c_str());
-HXDLIN( 396)					xmpp_stanza_set_attribute(xml,tmp1,tmp2);
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_472_convertFromStanza)
+HXLINE( 473)		 xmpp_stanza_t* xml = xmpp_stanza_new(this->ctx);
+HXLINE( 474)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(el->name.c_str());
+HXDLIN( 474)		xmpp_stanza_set_name(xml,tmp);
+HXLINE( 475)		{
+HXLINE( 475)			 ::Dynamic access = el->attr;
+HXDLIN( 475)			 ::Dynamic _g_access = access;
+HXDLIN( 475)			::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
+HXDLIN( 475)			int _g_index = 0;
+HXDLIN( 475)			while((_g_index < _g_keys->length)){
+HXLINE( 475)				_g_index = (_g_index + 1);
+HXDLIN( 475)				::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 475)				::String attr_value = ( (::String)(::Reflect_obj::field(_g_access,key)) );
+HXDLIN( 475)				::String attr_key = key;
+HXLINE( 476)				::String key1 = attr_key;
+HXLINE( 477)				::String value = attr_value;
+HXLINE( 478)				if (::hx::IsNotNull( value )) {
+HXLINE( 479)					::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(key1.c_str());
+HXDLIN( 479)					::cpp::Pointer< char > tmp2 = cpp::Pointer_obj::fromPointer(value.c_str());
+HXDLIN( 479)					xmpp_stanza_set_attribute(xml,tmp1,tmp2);
             				}
             			}
             		}
-HXLINE( 399)		if ((el->children->length > 0)) {
-HXLINE( 400)			int _g = 0;
-HXDLIN( 400)			::Array< ::Dynamic> _g1 = el->children;
-HXDLIN( 400)			while((_g < _g1->length)){
-HXLINE( 400)				 ::snikket::Node child = _g1->__get(_g).StaticCast<  ::snikket::Node >();
-HXDLIN( 400)				_g = (_g + 1);
-HXLINE( 401)				switch((int)(child->_hx_getIndex())){
+HXLINE( 482)		if ((el->children->length > 0)) {
+HXLINE( 483)			int _g = 0;
+HXDLIN( 483)			::Array< ::Dynamic> _g1 = el->children;
+HXDLIN( 483)			while((_g < _g1->length)){
+HXLINE( 483)				 ::snikket::Node child = _g1->__get(_g).StaticCast<  ::snikket::Node >();
+HXDLIN( 483)				_g = (_g + 1);
+HXLINE( 484)				switch((int)(child->_hx_getIndex())){
             					case (int)0: {
-HXLINE( 402)						 ::snikket::Stanza stanza = child->_hx_getObject(0).StaticCast<  ::snikket::Stanza >();
-HXLINE( 403)						xmpp_stanza_add_child_ex(xml,this->convertFromStanza(stanza),false);
+HXLINE( 485)						 ::snikket::Stanza stanza = child->_hx_getObject(0).StaticCast<  ::snikket::Stanza >();
+HXLINE( 486)						xmpp_stanza_add_child_ex(xml,this->convertFromStanza(stanza),false);
             					}
             					break;
             					case (int)1: {
-HXLINE( 404)						 ::snikket::TextNode text = child->_hx_getObject(0).StaticCast<  ::snikket::TextNode >();
-HXDLIN( 404)						{
-HXLINE( 405)							 xmpp_stanza_t* text_node = xmpp_stanza_new(this->ctx);
-HXLINE( 406)							::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(text->content.c_str());
-HXDLIN( 406)							xmpp_stanza_set_text(text_node,tmp3);
-HXLINE( 407)							xmpp_stanza_add_child_ex(xml,text_node,false);
+HXLINE( 487)						 ::snikket::TextNode text = child->_hx_getObject(0).StaticCast<  ::snikket::TextNode >();
+HXDLIN( 487)						{
+HXLINE( 488)							 xmpp_stanza_t* text_node = xmpp_stanza_new(this->ctx);
+HXLINE( 489)							::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(text->content.c_str());
+HXDLIN( 489)							xmpp_stanza_set_text(text_node,tmp3);
+HXLINE( 490)							xmpp_stanza_add_child_ex(xml,text_node,false);
             						}
             					}
             					break;
             				}
             			}
             		}
-HXLINE( 411)		return xml;
+HXLINE( 494)		return xml;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,convertFromStanza,return )
 
 void XmppStropheStream_obj::sendStanza( ::snikket::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_415_sendStanza)
-HXDLIN( 415)		if (this->ready) {
-HXLINE( 416)			 xmpp_conn_t* _hx_tmp = this->conn;
-HXDLIN( 416)			xmpp_send(_hx_tmp,this->convertFromStanza(stanza));
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_498_sendStanza)
+HXDLIN( 498)		if (this->ready) {
+HXLINE( 499)			 xmpp_conn_t* _hx_tmp = this->conn;
+HXDLIN( 499)			xmpp_send(_hx_tmp,this->convertFromStanza(stanza));
             		}
             		else {
-HXLINE( 418)			this->pending->push(stanza);
+HXLINE( 501)			this->pending->push(stanza);
             		}
             	}
 
 
 void XmppStropheStream_obj::finalize(){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_422_finalize)
-HXLINE( 423)		xmpp_stop(this->ctx);
-HXLINE( 424)		xmpp_conn_release(this->conn);
-HXLINE( 425)		xmpp_ctx_free(this->ctx);
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_505_finalize)
+HXLINE( 506)		xmpp_stop(this->ctx);
+HXLINE( 507)		xmpp_conn_release(this->conn);
+HXLINE( 508)		xmpp_ctx_free(this->ctx);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(XmppStropheStream_obj,finalize,(void))
 
 void XmppStropheStream_obj::strophe_fast_token_handler( xmpp_conn_t* conn,const char* token,void* userdata){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_230_strophe_fast_token_handler)
-HXLINE( 231)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 232)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(token);
-HXDLIN( 232)		stream->trigger(HX_("fast-token",48,5f,c2,26), ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("token",f9,82,2b,14), ::String(inPtr->ptr))));
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::streams::XmppStropheStream,stream,::String,token1) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_266_strophe_fast_token_handler)
+HXLINE( 266)			stream->trigger(HX_("fast-token",48,5f,c2,26), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("token",f9,82,2b,14),token1)));
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_262_strophe_fast_token_handler)
+HXLINE( 263)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 264)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(token);
+HXDLIN( 264)		::String token1 =  ::String(inPtr->ptr);
+HXLINE( 265)		stream->mainThread->run( ::Dynamic(new _hx_Closure_0(stream,token1)));
+HXLINE( 268)		__hxcpp_enter_gc_free_zone();
+            	}
+
+
+void XmppStropheStream_obj::strophe_sm_handler( xmpp_conn_t* conn,void* userdata,const unsigned char* sm_state,size_t sm_state_len){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::streams::XmppStropheStream,stream,::cpp::VirtualArray,bytes) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_275_strophe_sm_handler)
+HXLINE( 275)			stream->trigger(HX_("sm/update",1e,16,63,46), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("sm",9a,64,00,00),bytes)));
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_271_strophe_sm_handler)
+HXLINE( 272)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 273)		::cpp::Pointer<  ::Dynamic > _this = cpp::Pointer_obj::fromRaw(sm_state)->reinterpret();
+HXDLIN( 273)		::cpp::VirtualArray result = ::cpp::VirtualArray_obj::__new();
+HXDLIN( 273)		::cpp::Pointer<  ::Dynamic > tmp = _this;
+HXDLIN( 273)		result->setUnmanagedData(tmp,( (int)(sm_state_len) ));
+HXDLIN( 273)		::cpp::VirtualArray bytes = result->copy();
+HXLINE( 274)		stream->mainThread->run( ::Dynamic(new _hx_Closure_0(stream,bytes)));
+HXLINE( 277)		__hxcpp_enter_gc_free_zone();
+            	}
+
+
+void XmppStropheStream_obj::strophe_sm_ack_handler( xmpp_conn_t* conn,void* userdata,const char* id){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::streams::XmppStropheStream,stream,::String,sid) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_284_strophe_sm_ack_handler)
+HXLINE( 284)			stream->trigger(HX_("sm/ack",14,b2,12,dd), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("id",db,5b,00,00),sid)));
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_280_strophe_sm_ack_handler)
+HXLINE( 281)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 282)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(id);
+HXDLIN( 282)		::String sid =  ::String(inPtr->ptr);
+HXLINE( 283)		stream->mainThread->run( ::Dynamic(new _hx_Closure_0(stream,sid)));
+HXLINE( 286)		__hxcpp_enter_gc_free_zone();
+            	}
+
+
+void XmppStropheStream_obj::strophe_sm_fail_handler( xmpp_conn_t* conn,void* userdata,const char* id){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::snikket::streams::XmppStropheStream,stream,::String,sid) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_293_strophe_sm_fail_handler)
+HXLINE( 293)			stream->trigger(HX_("sm/fail",b3,aa,95,96), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("id",db,5b,00,00),sid)));
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_289_strophe_sm_fail_handler)
+HXLINE( 290)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 291)		::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(id);
+HXDLIN( 291)		::String sid =  ::String(inPtr->ptr);
+HXLINE( 292)		stream->mainThread->run( ::Dynamic(new _hx_Closure_0(stream,sid)));
+HXLINE( 295)		__hxcpp_enter_gc_free_zone();
             	}
 
 
 int XmppStropheStream_obj::strophe_certfail_handler( const xmpp_tlscert_t* cert,const char* err){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_235_strophe_certfail_handler)
-HXLINE( 236)		 xmpp_conn_t* conn = xmpp_tlscert_get_conn(cert);
-HXLINE( 237)		::Array< ::String > dnsNames = ::Array_obj< ::String >::__new(0);
-HXLINE( 238)		::cpp::Pointer< char > dnsName = null();
-HXLINE( 239)		int dnsNameN = 0;
-HXLINE( 240)		while(true){
-HXLINE( 240)			dnsNameN = (dnsNameN + 1);
-HXDLIN( 240)			dnsName = xmpp_tlscert_get_dnsname(cert,( (size_t)((dnsNameN - 1)) ));
-HXDLIN( 240)			if (!(::hx::IsNotNull( dnsName ))) {
-HXLINE( 240)				goto _hx_goto_14;
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_298_strophe_certfail_handler)
+HXLINE( 299)		 xmpp_conn_t* conn = xmpp_tlscert_get_conn(cert);
+HXLINE( 300)		::Array< ::String > dnsNames = ::Array_obj< ::String >::__new(0);
+HXLINE( 301)		::cpp::Pointer< char > dnsName = null();
+HXLINE( 302)		int dnsNameN = 0;
+HXLINE( 303)		while(true){
+HXLINE( 303)			dnsNameN = (dnsNameN + 1);
+HXDLIN( 303)			dnsName = xmpp_tlscert_get_dnsname(cert,( (size_t)((dnsNameN - 1)) ));
+HXDLIN( 303)			if (!(::hx::IsNotNull( dnsName ))) {
+HXLINE( 303)				goto _hx_goto_20;
             			}
-HXLINE( 241)			dnsNames->push( ::String(dnsName->ptr));
+HXLINE( 304)			dnsNames->push( ::String(dnsName->ptr));
             		}
-            		_hx_goto_14:;
-HXLINE( 243)		return 1;
+            		_hx_goto_20:;
+HXLINE( 306)		__hxcpp_enter_gc_free_zone();
+HXLINE( 307)		return 1;
             	}
 
 
 int XmppStropheStream_obj::strophe_stanza( xmpp_conn_t* conn, xmpp_stanza_t* sstanza,void* userdata){
-            	HX_GC_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_252_strophe_stanza)
-HXLINE( 253)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 254)		 ::snikket::Stanza stanza = ::snikket::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
-HXLINE( 256)		::String xmlns = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) );
-HXLINE( 257)		if ((xmlns == HX_("jabber:client",21,64,c5,e4))) {
-HXLINE( 258)			::String name = stanza->name;
-HXLINE( 259)			if ((name == HX_("iq",e8,5b,00,00))) {
-HXLINE( 260)				::String type = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) );
-HXLINE( 261)				bool _hx_tmp;
-HXDLIN( 261)				if ((type != HX_("result",dd,68,84,08))) {
-HXLINE( 261)					_hx_tmp = (type == HX_("error",c8,cb,29,73));
-            				}
-            				else {
-HXLINE( 261)					_hx_tmp = true;
-            				}
-HXDLIN( 261)				if (_hx_tmp) {
-HXLINE( 262)					stream->onStanza(stanza);
-            				}
-            				else {
-HXLINE( 265)					 ::snikket::Stanza child = stanza->getFirstChild();
-HXLINE( 266)					if (::hx::IsNotNull( child )) {
-HXLINE( 267)						 ::snikket::IqRequestType this1;
-HXDLIN( 267)						if ((type == HX_("get",96,80,4e,00))) {
-HXLINE( 267)							this1 = ::snikket::IqRequestType_obj::Get_dyn();
-            						}
-            						else {
-HXLINE( 267)							this1 = ::snikket::IqRequestType_obj::Set_dyn();
-            						}
-HXDLIN( 267)						::Dynamic this2 = stream->iqHandlers->get(this1).StaticCast<  ::haxe::ds::StringMap >();
-HXDLIN( 267)						::String key = ((HX_("{",7b,00,00,00) + ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) )) + HX_("}",7d,00,00,00));
-HXDLIN( 267)						 ::Dynamic handler = ( ( ::haxe::ds::StringMap)(this2) )->get((key + child->name));
-HXLINE( 268)						if (::hx::IsNotNull( handler )) {
-HXLINE( 269)							::String reply = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) );
-HXDLIN( 269)							::String reply1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 269)							 ::snikket::Stanza reply2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(4)
-            								->setFixed(0,HX_("id",db,5b,00,00),( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ))
-            								->setFixed(1,HX_("to",7b,65,00,00),reply1)
-            								->setFixed(2,HX_("from",6a,a5,c2,43),reply)
-            								->setFixed(3,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))));
-HXLINE( 270)							try {
-            								HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 271)								 ::snikket::IqResult _g = handler(stanza);
-HXDLIN( 271)								switch((int)(_g->_hx_getIndex())){
-            									case (int)0: {
-HXLINE( 272)										 ::snikket::Stanza el = _g->_hx_getObject(0).StaticCast<  ::snikket::Stanza >();
-HXDLIN( 272)										reply2->addChild(el);
-            									}
-            									break;
-            									case (int)1: {
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_316_strophe_stanza)
+HXLINE( 317)		__hxcpp_exit_gc_free_zone();
+HXLINE( 318)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 319)		 ::snikket::Stanza stanza = ::snikket::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
+HXLINE( 321)		::String xmlns = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("xmlns",dc,31,74,60))) );
+HXLINE( 322)		if ((xmlns == HX_("jabber:client",21,64,c5,e4))) {
+            			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0,::String,name, ::snikket::streams::XmppStropheStream,stream, ::snikket::Stanza,stanza) HXARGC(0)
+            			void _hx_run(){
+            				HX_GC_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_325_strophe_stanza)
+HXLINE( 325)				if ((name == HX_("iq",e8,5b,00,00))) {
+HXLINE( 326)					::String type = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) );
+HXLINE( 327)					bool _hx_tmp;
+HXDLIN( 327)					if ((type != HX_("result",dd,68,84,08))) {
+HXLINE( 327)						_hx_tmp = (type == HX_("error",c8,cb,29,73));
+            					}
+            					else {
+HXLINE( 327)						_hx_tmp = true;
+            					}
+HXDLIN( 327)					if (_hx_tmp) {
+HXLINE( 328)						stream->onStanza(stanza);
+            					}
+            					else {
+HXLINE( 331)						 ::snikket::Stanza child = stanza->getFirstChild();
+HXLINE( 332)						if (::hx::IsNotNull( child )) {
+HXLINE( 333)							 ::snikket::IqRequestType this1;
+HXDLIN( 333)							if ((type == HX_("get",96,80,4e,00))) {
+HXLINE( 333)								this1 = ::snikket::IqRequestType_obj::Get_dyn();
+            							}
+            							else {
+HXLINE( 333)								this1 = ::snikket::IqRequestType_obj::Set_dyn();
+            							}
+HXDLIN( 333)							::Dynamic this2 = stream->iqHandlers->get(this1).StaticCast<  ::haxe::ds::StringMap >();
+HXDLIN( 333)							::String key = ((HX_("{",7b,00,00,00) + ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) )) + HX_("}",7d,00,00,00));
+HXDLIN( 333)							 ::Dynamic handler = ( ( ::haxe::ds::StringMap)(this2) )->get((key + child->name));
+HXLINE( 334)							if (::hx::IsNotNull( handler )) {
+HXLINE( 335)								::String reply = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("to",7b,65,00,00))) );
+HXDLIN( 335)								::String reply1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXDLIN( 335)								 ::snikket::Stanza reply2 =  ::snikket::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(4)
+            									->setFixed(0,HX_("id",db,5b,00,00),( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ))
+            									->setFixed(1,HX_("to",7b,65,00,00),reply1)
+            									->setFixed(2,HX_("from",6a,a5,c2,43),reply)
+            									->setFixed(3,HX_("type",ba,f2,08,4d),HX_("result",dd,68,84,08))));
+HXLINE( 336)								try {
+            									HX_STACK_CATCHABLE( ::Dynamic, 0);
+HXLINE( 337)									 ::snikket::IqResult _g = handler(stanza);
+HXDLIN( 337)									switch((int)(_g->_hx_getIndex())){
+            										case (int)0: {
+HXLINE( 338)											 ::snikket::Stanza el = _g->_hx_getObject(0).StaticCast<  ::snikket::Stanza >();
+HXDLIN( 338)											reply2->addChild(el);
+            										}
+            										break;
+            										case (int)1: {
+            										}
+            										break;
+            										case (int)2: {
+HXLINE( 341)											::Reflect_obj::setField(reply2->attr,HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
+HXLINE( 342)											reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
+            												->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))))->tag(HX_("service-unavailable",f8,3c,11,1c), ::Dynamic(::hx::Anon_obj::Create(1)
+            												->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))));
+            										}
+            										break;
             									}
-            									break;
-            									case (int)2: {
-HXLINE( 275)										::Reflect_obj::setField(reply2->attr,HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
-HXLINE( 276)										reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
-            											->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))))->tag(HX_("service-unavailable",f8,3c,11,1c), ::Dynamic(::hx::Anon_obj::Create(1)
+            								} catch( ::Dynamic _hx_e) {
+            									if (_hx_e.IsClass<  ::Dynamic >() ){
+            										HX_STACK_BEGIN_CATCH
+            										 ::Dynamic _g1 = _hx_e;
+HXLINE( 345)										::Reflect_obj::setField(reply2->attr,HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
+HXLINE( 346)										reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
+            											->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))))->tag(HX_("internal-server-error",ce,6d,55,6c), ::Dynamic(::hx::Anon_obj::Create(1)
             											->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))));
             									}
-            									break;
-            								}
-            							} catch( ::Dynamic _hx_e) {
-            								if (_hx_e.IsClass<  ::Dynamic >() ){
-            									HX_STACK_BEGIN_CATCH
-            									 ::Dynamic _g1 = _hx_e;
-HXLINE( 279)									::Reflect_obj::setField(reply2->attr,HX_("result",dd,68,84,08),HX_("error",c8,cb,29,73));
-HXLINE( 280)									reply2->tag(HX_("error",c8,cb,29,73), ::Dynamic(::hx::Anon_obj::Create(1)
-            										->setFixed(0,HX_("type",ba,f2,08,4d),HX_("cancel",7a,ed,33,b8))))->tag(HX_("internal-server-error",ce,6d,55,6c), ::Dynamic(::hx::Anon_obj::Create(1)
-            										->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30))));
-            								}
-            								else {
-            									HX_STACK_DO_THROW(_hx_e);
+            									else {
+            										HX_STACK_DO_THROW(_hx_e);
+            									}
             								}
+HXLINE( 348)								stream->sendStanza(reply2);
             							}
-HXLINE( 282)							stream->sendStanza(reply2);
             						}
             					}
             				}
+            				else {
+HXLINE( 353)					stream->onStanza(stanza);
+            				}
             			}
-            			else {
-HXLINE( 287)				stream->onStanza(stanza);
-            			}
+            			HX_END_LOCAL_FUNC0((void))
+
+HXLINE( 323)			::String name = stanza->name;
+HXLINE( 324)			stream->mainThread->run( ::Dynamic(new _hx_Closure_0(name,stream,stanza)));
             		}
-HXLINE( 291)		return 1;
+HXLINE( 358)		__hxcpp_enter_gc_free_zone();
+HXLINE( 359)		return 1;
             	}
 
 
 void XmppStropheStream_obj::strophe_connect( xmpp_conn_t* conn, xmpp_conn_event_t event,int error, xmpp_stream_error_t* stream_error,void* userdata){
-            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_298_strophe_connect)
-HXLINE( 299)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
-HXLINE( 300)		if (::hx::IsInstanceEq( event,XMPP_CONN_CONNECT )) {
-HXLINE( 301)			stream->ready = true;
-HXLINE( 302)			while((stream->pending->length > 0)){
-HXLINE( 303)				stream->sendStanza(stream->pending->shift().StaticCast<  ::snikket::Stanza >());
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, xmpp_conn_event_t,event, ::snikket::streams::XmppStropheStream,stream) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_368_strophe_connect)
+HXLINE( 369)			 xmpp_conn_event_t event1 = event;
+HXDLIN( 369)			if (::hx::IsInstanceEq( event1,XMPP_CONN_CONNECT )) {
+HXLINE( 370)				stream->ready = true;
+HXLINE( 371)				while((stream->pending->length > 0)){
+HXLINE( 372)					 ::snikket::streams::XmppStropheStream stream1 = stream;
+HXDLIN( 372)					stream1->sendStanza(stream->pending->shift().StaticCast<  ::snikket::Stanza >());
+            				}
+HXLINE( 374)				stream->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
             			}
-HXLINE( 305)			stream->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-            		}
-HXLINE( 307)		if (::hx::IsInstanceEq( event,XMPP_CONN_DISCONNECT )) {
-HXLINE( 308)			if (!(stream->ready)) {
-HXLINE( 310)				stream->trigger(HX_("auth/fail",25,45,e9,d1), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 376)			 xmpp_conn_event_t event2 = event;
+HXDLIN( 376)			if (::hx::IsInstanceEq( event2,XMPP_CONN_DISCONNECT )) {
+HXLINE( 377)				if (!(stream->ready)) {
+HXLINE( 379)					stream->trigger(HX_("auth/fail",25,45,e9,d1), ::Dynamic(::hx::Anon_obj::Create(0)));
+            				}
+            				else {
+HXLINE( 381)					stream->ready = false;
+HXLINE( 382)					stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+            				}
             			}
-            			else {
-HXLINE( 312)				stream->ready = false;
-HXLINE( 313)				stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 385)			 xmpp_conn_event_t event3 = event;
+HXDLIN( 385)			if (::hx::IsInstanceEq( event3,XMPP_CONN_FAIL )) {
+HXLINE( 386)				stream->ready = false;
+HXLINE( 387)				stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
             			}
             		}
-HXLINE( 316)		if (::hx::IsInstanceEq( event,XMPP_CONN_FAIL )) {
-HXLINE( 317)			stream->ready = false;
-HXLINE( 318)			stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
-            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_366_strophe_connect)
+HXLINE( 367)		 ::snikket::streams::XmppStropheStream stream = static_cast<hx::Object*>(userdata);
+HXLINE( 368)		stream->mainThread->run( ::Dynamic(new _hx_Closure_0(event,stream)));
+HXLINE( 390)		__hxcpp_enter_gc_free_zone();
             	}
 
 
  ::snikket::Stanza XmppStropheStream_obj::convertToStanza( xmpp_stanza_t* el,void* dummy){
-            	HX_GC_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_359_convertToStanza)
-HXLINE( 360)		::cpp::Pointer< char > name = xmpp_stanza_get_name(el);
-HXLINE( 361)		int attrlen = xmpp_stanza_get_attribute_count(el);
-HXLINE( 362)		void* attrsraw = ::hx::InternalNew(((attrlen * 2) * sizeof(char*)),false);
-HXLINE( 363)		const char** attrsarray = static_cast<const char**>(attrsraw);
-HXLINE( 364)		::cpp::Pointer< const char* > attrsptr = ::cpp::Pointer_obj::fromRaw(attrsarray);
-HXLINE( 365)		xmpp_stanza_get_attributes(el,attrsarray,(attrlen * 2));
-HXLINE( 366)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 367)		{
-HXLINE( 367)			int _g = 0;
-HXDLIN( 367)			int _g1 = attrlen;
-HXDLIN( 367)			while((_g < _g1)){
-HXLINE( 367)				_g = (_g + 1);
-HXDLIN( 367)				int i = (_g - 1);
-HXLINE( 368)				::cpp::Pointer< char > key = cpp::Pointer_obj::fromRaw(attrsptr->at((i * 2)));
-HXLINE( 369)				::cpp::Pointer< char > value = cpp::Pointer_obj::fromRaw(attrsptr->at(((i * 2) + 1)));
-HXLINE( 370)				{
-HXLINE( 370)					::String key1 =  ::String(key->ptr);
-HXDLIN( 370)					::String value1 =  ::String(value->ptr);
-HXDLIN( 370)					::Reflect_obj::setField(attrs,key1,value1);
+            	HX_GC_STACKFRAME(&_hx_pos_c0c1f1a3af656a5a_442_convertToStanza)
+HXLINE( 443)		::cpp::Pointer< char > name = xmpp_stanza_get_name(el);
+HXLINE( 444)		int attrlen = xmpp_stanza_get_attribute_count(el);
+HXLINE( 445)		void* attrsraw = ::hx::InternalNew(((attrlen * 2) * sizeof(char*)),false);
+HXLINE( 446)		const char** attrsarray = static_cast<const char**>(attrsraw);
+HXLINE( 447)		::cpp::Pointer< const char* > attrsptr = ::cpp::Pointer_obj::fromRaw(attrsarray);
+HXLINE( 448)		xmpp_stanza_get_attributes(el,attrsarray,(attrlen * 2));
+HXLINE( 449)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 450)		{
+HXLINE( 450)			int _g = 0;
+HXDLIN( 450)			int _g1 = attrlen;
+HXDLIN( 450)			while((_g < _g1)){
+HXLINE( 450)				_g = (_g + 1);
+HXDLIN( 450)				int i = (_g - 1);
+HXLINE( 451)				::cpp::Pointer< char > key = cpp::Pointer_obj::fromRaw(attrsptr->at((i * 2)));
+HXLINE( 452)				::cpp::Pointer< char > value = cpp::Pointer_obj::fromRaw(attrsptr->at(((i * 2) + 1)));
+HXLINE( 453)				{
+HXLINE( 453)					::String key1 =  ::String(key->ptr);
+HXDLIN( 453)					::String value1 =  ::String(value->ptr);
+HXDLIN( 453)					::Reflect_obj::setField(attrs,key1,value1);
             				}
             			}
             		}
-HXLINE( 372)		 ::snikket::Stanza stanza =  ::snikket::Stanza_obj::__alloc( HX_CTX , ::String(name->ptr),attrs);
-HXLINE( 374)		 xmpp_stanza_t* child = xmpp_stanza_get_children(el);
-HXLINE( 375)		while(::hx::IsNotNull( child )){
-HXLINE( 376)			if (xmpp_stanza_is_text(child)) {
-HXLINE( 377)				const char* r = xmpp_stanza_get_text_ptr(child);
-HXLINE( 378)				::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(xmpp_stanza_get_text_ptr(child));
-HXDLIN( 378)				::String x =  ::String(inPtr->ptr);
-HXLINE( 379)				stanza->text(x);
+HXLINE( 455)		 ::snikket::Stanza stanza =  ::snikket::Stanza_obj::__alloc( HX_CTX , ::String(name->ptr),attrs);
+HXLINE( 457)		 xmpp_stanza_t* child = xmpp_stanza_get_children(el);
+HXLINE( 458)		while(::hx::IsNotNull( child )){
+HXLINE( 459)			if (xmpp_stanza_is_text(child)) {
+HXLINE( 460)				const char* r = xmpp_stanza_get_text_ptr(child);
+HXLINE( 461)				::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(xmpp_stanza_get_text_ptr(child));
+HXDLIN( 461)				::String x =  ::String(inPtr->ptr);
+HXLINE( 462)				stanza->text(x);
             			}
             			else {
-HXLINE( 381)				stanza->addChild(::snikket::streams::XmppStropheStream_obj::convertToStanza(child,null()));
+HXLINE( 464)				stanza->addChild(::snikket::streams::XmppStropheStream_obj::convertToStanza(child,null()));
             			}
-HXLINE( 383)			child = xmpp_stanza_get_next(child);
+HXLINE( 466)			child = xmpp_stanza_get_next(child);
             		}
-HXLINE( 386)		return stanza;
+HXLINE( 469)		return stanza;
             	}
 
 
@@ -497,6 +622,7 @@ void XmppStropheStream_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(iqHandlers,"iqHandlers");
 	HX_MARK_MEMBER_NAME(pending,"pending");
 	HX_MARK_MEMBER_NAME(ready,"ready");
+	HX_MARK_MEMBER_NAME(mainThread,"mainThread");
 	 ::snikket::GenericStream_obj::__Mark(HX_MARK_ARG);
 	HX_MARK_END_CLASS();
 }
@@ -506,6 +632,7 @@ void XmppStropheStream_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(iqHandlers,"iqHandlers");
 	HX_VISIT_MEMBER_NAME(pending,"pending");
 	HX_VISIT_MEMBER_NAME(ready,"ready");
+	HX_VISIT_MEMBER_NAME(mainThread,"mainThread");
 	 ::snikket::GenericStream_obj::__Visit(HX_VISIT_ARG);
 }
 
@@ -514,7 +641,6 @@ void XmppStropheStream_obj::__Visit(HX_VISIT_PARAMS)
 	switch(inName.length) {
 	case 4:
 		if (HX_FIELD_EQ(inName,"onIq") ) { return ::hx::Val( onIq_dyn() ); }
-		if (HX_FIELD_EQ(inName,"poll") ) { return ::hx::Val( poll_dyn() ); }
 		break;
 	case 5:
 		if (HX_FIELD_EQ(inName,"ready") ) { return ::hx::Val( ready ); }
@@ -529,6 +655,7 @@ void XmppStropheStream_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"iqHandlers") ) { return ::hx::Val( iqHandlers ); }
+		if (HX_FIELD_EQ(inName,"mainThread") ) { return ::hx::Val( mainThread ); }
 		if (HX_FIELD_EQ(inName,"disconnect") ) { return ::hx::Val( disconnect_dyn() ); }
 		if (HX_FIELD_EQ(inName,"sendStanza") ) { return ::hx::Val( sendStanza_dyn() ); }
 		break;
@@ -549,6 +676,7 @@ void XmppStropheStream_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 10:
 		if (HX_FIELD_EQ(inName,"iqHandlers") ) { iqHandlers=inValue.Cast<  ::haxe::ds::EnumValueMap >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"mainThread") ) { mainThread=inValue.Cast<  ::sys::thread::EventLoop >(); return inValue; }
 	}
 	return super::__SetField(inName,inValue,inCallProp);
 }
@@ -558,6 +686,7 @@ void XmppStropheStream_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("iqHandlers",71,61,f0,a9));
 	outFields->push(HX_("pending",57,98,ec,2b));
 	outFields->push(HX_("ready",63,a0,ba,e6));
+	outFields->push(HX_("mainThread",e3,97,65,e4));
 	super::__GetFields(outFields);
 };
 
@@ -566,6 +695,7 @@ static ::hx::StorageInfo XmppStropheStream_obj_sMemberStorageInfo[] = {
 	{::hx::fsObject /*  ::haxe::ds::EnumValueMap */ ,(int)offsetof(XmppStropheStream_obj,iqHandlers),HX_("iqHandlers",71,61,f0,a9)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(XmppStropheStream_obj,pending),HX_("pending",57,98,ec,2b)},
 	{::hx::fsBool,(int)offsetof(XmppStropheStream_obj,ready),HX_("ready",63,a0,ba,e6)},
+	{::hx::fsObject /*  ::sys::thread::EventLoop */ ,(int)offsetof(XmppStropheStream_obj,mainThread),HX_("mainThread",e3,97,65,e4)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *XmppStropheStream_obj_sStaticStorageInfo = 0;
@@ -575,11 +705,11 @@ static ::String XmppStropheStream_obj_sMemberFields[] = {
 	HX_("iqHandlers",71,61,f0,a9),
 	HX_("pending",57,98,ec,2b),
 	HX_("ready",63,a0,ba,e6),
+	HX_("mainThread",e3,97,65,e4),
 	HX_("newId",5b,e8,30,99),
 	HX_("onIq",e7,66,b2,49),
 	HX_("connect",ea,3b,80,15),
 	HX_("disconnect",5c,64,44,69),
-	HX_("poll",3f,7e,5c,4a),
 	HX_("convertFromStanza",d2,72,14,33),
 	HX_("sendStanza",5d,85,4d,a7),
 	HX_("finalize",9e,45,3a,f5),