[Swfdec-commits] 18 commits - doc/swfdec-sections.txt player/swfplay.c swfdec/swfdec_bits.c swfdec/swfdec_buffer.h swfdec/swfdec_flv_decoder.c swfdec/swfdec_image.c swfdec/swfdec_load_object.c swfdec/swfdec_net_stream.c swfdec/swfdec_player.c swfdec/swfdec_policy_file.c swfdec/swfdec_resource.c swfdec/swfdec_socket.c swfdec/swfdec_sound.c swfdec/swfdec_stream.c swfdec/swfdec_stream.h swfdec/swfdec_stream_target.c swfdec/swfdec_stream_target.h swfdec/swfdec_tag.c swfdec/swfdec_xml_socket.c swfdec/swfdec_xml_socket.h test/swfdec_test_buffer.c test/swfdec_test_initialize.as test/swfdec_test_initialize.h test/swfdec_test_plugin.c test/swfdec_test_socket.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Fri Feb 15 09:57:30 PST 2008


 doc/swfdec-sections.txt                  |    1 
 player/swfplay.c                         |    2 
 swfdec/swfdec_bits.c                     |    9 -
 swfdec/swfdec_buffer.h                   |    2 
 swfdec/swfdec_flv_decoder.c              |    2 
 swfdec/swfdec_image.c                    |    4 
 swfdec/swfdec_load_object.c              |    3 
 swfdec/swfdec_net_stream.c               |    8 
 swfdec/swfdec_player.c                   |   10 -
 swfdec/swfdec_policy_file.c              |    4 
 swfdec/swfdec_resource.c                 |    9 -
 swfdec/swfdec_socket.c                   |    1 
 swfdec/swfdec_sound.c                    |    5 
 swfdec/swfdec_stream.c                   |   36 +++-
 swfdec/swfdec_stream.h                   |    1 
 swfdec/swfdec_stream_target.c            |   13 +
 swfdec/swfdec_stream_target.h            |    4 
 swfdec/swfdec_tag.c                      |    4 
 swfdec/swfdec_xml_socket.c               |  104 ++++++++++-
 swfdec/swfdec_xml_socket.h               |    3 
 test/swfdec_test_buffer.c                |   69 +++++++
 test/swfdec_test_initialize.as           |    9 -
 test/swfdec_test_initialize.h            |  276 +++++++++++++++----------------
 test/swfdec_test_plugin.c                |    3 
 test/swfdec_test_socket.c                |   14 +
 test/trace/Makefile.am                   |    3 
 test/trace/crash-0.5.90-empty-action.swf |binary
 test/trace/crash-0.5.90-empty-action.xml |   13 +
 28 files changed, 429 insertions(+), 183 deletions(-)

New commits:
commit 724a6dc7c2f2b8918300177588a8d7fc85b53e58
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 18:47:20 2008 +0100

    ignore empty DoAction tags

diff --git a/swfdec/swfdec_tag.c b/swfdec/swfdec_tag.c
index 133f8b2..dc98ee7 100644
--- a/swfdec/swfdec_tag.c
+++ b/swfdec/swfdec_tag.c
@@ -492,6 +492,10 @@ tag_func_do_action (SwfdecSwfDecoder * s, guint tag)
   SwfdecBits bits;
   char *name;
 
+  if (swfdec_bits_left (&s->b) == 0) {
+    SWFDEC_WARNING ("empty script, ignoring");
+    return SWFDEC_STATUS_OK;
+  }
   name = g_strdup_printf ("Sprite%u_Frame%u", SWFDEC_CHARACTER (s->parse_sprite)->id,
       s->parse_sprite->parse_frame);
   bits = s->b;
commit 63e97468c81be4dafcb0ce1e3743ea76e47e1a25
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 18:46:42 2008 +0100

    always return buffers from swfdec_bits_get_buffer () when len == 0
    
    Makes the code do what people (= me) would assume happening.
    The function now only fails when the length argument is too big.

diff --git a/swfdec/swfdec_bits.c b/swfdec/swfdec_bits.c
index bf1e29b..9e7a207 100644
--- a/swfdec/swfdec_bits.c
+++ b/swfdec/swfdec_bits.c
@@ -622,10 +622,9 @@ swfdec_bits_get_rect (SwfdecBits * bits, SwfdecRect *rect)
  * @len: length of buffer or -1 for maximum
  *
  * Gets the contents of the next @len bytes of @bits and buts them in a new
- * subbuffer. If @len is 0 (or @len is -1 and no more data is available), this
- * is considered a reading error and %NULL is returned.
+ * subbuffer.
  *
- * Returns: the new #SwfdecBuffer or NULL if the requested amount of data 
+ * Returns: the new #SwfdecBuffer or %NULL if the requested amount of data 
  *          isn't available
  **/
 SwfdecBuffer *
@@ -635,7 +634,7 @@ swfdec_bits_get_buffer (SwfdecBits *bits, int len)
 
   g_return_val_if_fail (len >= -1, NULL);
 
-  if (len > 0) {
+  if (len >= 0) {
     SWFDEC_BYTES_CHECK (bits, (guint) len);
   } else {
     g_assert (bits->idx == 0);
@@ -643,7 +642,7 @@ swfdec_bits_get_buffer (SwfdecBits *bits, int len)
     g_assert (len >= 0);
   }
   if (len == 0)
-    return NULL;
+    return swfdec_buffer_new (0);
   if (bits->buffer) {
     buffer = swfdec_buffer_new_subbuffer (bits->buffer, bits->ptr - bits->buffer->data, len);
   } else {
commit 8a20756fcbaebc5aa6a4043b70d9dad11252e749
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 18:42:02 2008 +0100

    add crasher test
    
    found by Benjamin Wolsey

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 29e92b4..e1be143 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -701,6 +701,9 @@ EXTRA_DIST = \
 	crash-0.5.5-cvs-truncated2.swf \
 	crash-0.5.5-cvs-truncated2.swf.trace \
 	crash-0.5.5-cvs-truncated2.xml \
+	crash-0.5.90-empty-action.swf \
+	crash-0.5.90-empty-action.swf.trace \
+	crash-0.5.90-empty-action.xml \
 	currentframe.swf \
 	currentframe.swf.trace \
 	dangling-compare.as \
diff --git a/test/trace/crash-0.5.90-empty-action.swf b/test/trace/crash-0.5.90-empty-action.swf
new file mode 100644
index 0000000..0f02a29
Binary files /dev/null and b/test/trace/crash-0.5.90-empty-action.swf differ
diff --git a/test/trace/crash-0.5.90-empty-action.swf.trace b/test/trace/crash-0.5.90-empty-action.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.5.90-empty-action.xml b/test/trace/crash-0.5.90-empty-action.xml
new file mode 100644
index 0000000..78ea347
--- /dev/null
+++ b/test/trace/crash-0.5.90-empty-action.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<swf version="7" compressed="1">
+  <Header framerate="30" frames="2">
+    <size>
+      <Rectangle left="0" right="4000" top="0" bottom="3000"/>
+    </size>
+    <tags>
+      <UnknownTag id="0xC" />
+      <ShowFrame/>
+      <End/>
+    </tags>
+  </Header>
+</swf>
commit 708f1b395648263f92663e39d8873319ba2ce26f
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 18:40:36 2008 +0100

    be safe against bugs in the jpeg lib - just in case

diff --git a/swfdec/swfdec_image.c b/swfdec/swfdec_image.c
index 3270756..b4bff6c 100644
--- a/swfdec/swfdec_image.c
+++ b/swfdec/swfdec_image.c
@@ -158,8 +158,10 @@ swfdec_jpeg_decode_argb (unsigned char *data1, int length1,
     ret = jpeg_decode_argb (tmpdata, tmplength, outdata, width, height);
 
     g_free (tmpdata);
-  } else {
+  } else if (data1) {
     ret = jpeg_decode_argb (data1, length1, outdata, width, height);
+  } else {
+    ret = FALSE;
   }
 
   return ret;
commit 5441d97d369b32b6a194539db239f06ccc633468
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 18:40:16 2008 +0100

    that shouldn't happen

diff --git a/swfdec/swfdec_sound.c b/swfdec/swfdec_sound.c
index 96fc1fd..a788b14 100644
--- a/swfdec/swfdec_sound.c
+++ b/swfdec/swfdec_sound.c
@@ -102,10 +102,7 @@ tag_func_sound_stream_block (SwfdecSwfDecoder * s, guint tag)
     return SWFDEC_STATUS_OK;
   } else {
     chunk = swfdec_bits_get_buffer (&s->b, -1);
-    if (chunk == NULL) {
-      SWFDEC_ERROR ("empty sound chunk");
-      return SWFDEC_STATUS_OK;
-    }
+    g_assert (chunk != NULL);
     SWFDEC_LOG ("got a buffer with %u samples, %d skip and %"G_GSIZE_FORMAT" bytes mp3 data", n_samples, skip,
 	chunk->length);
     /* use this to write out the stream data to stdout - nice way to get an mp3 file :) */
commit 22e436b7b66b4405b2437d80b84b3f734250763e
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 17:24:07 2008 +0100

    cast data in swfdec_buffer_new_static() as it'll most likely be const

diff --git a/swfdec/swfdec_buffer.h b/swfdec/swfdec_buffer.h
index 2f66747..210678d 100644
--- a/swfdec/swfdec_buffer.h
+++ b/swfdec/swfdec_buffer.h
@@ -67,7 +67,7 @@ SwfdecBuffer *swfdec_buffer_new_subbuffer (SwfdecBuffer * buffer, gsize offset,
 SwfdecBuffer *swfdec_buffer_new_from_file (const char *filename, GError **error);
 SwfdecBuffer *swfdec_buffer_new_for_data (unsigned char *data, gsize size);
 #define swfdec_buffer_new_static(data, size) \
-    swfdec_buffer_new_full (data, size, NULL, NULL)
+    swfdec_buffer_new_full ((unsigned char *) data, size, NULL, NULL)
 SwfdecBuffer *swfdec_buffer_ref (SwfdecBuffer * buffer);
 SwfdecBuffer *swfdec_buffer_get_super (SwfdecBuffer *buffer);
 void swfdec_buffer_unref (SwfdecBuffer * buffer);
commit d6941608211eb45387cab471880c0013bfe94113
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 17:23:37 2008 +0100

    use a static buffer here

diff --git a/swfdec/swfdec_policy_file.c b/swfdec/swfdec_policy_file.c
index a7069ae..21d29ae 100644
--- a/swfdec/swfdec_policy_file.c
+++ b/swfdec/swfdec_policy_file.c
@@ -162,8 +162,8 @@ swfdec_policy_file_target_open (SwfdecStreamTarget *target,
     SwfdecStream *stream)
 {
   if (SWFDEC_IS_SOCKET (stream)) {
-    SwfdecBuffer *buffer = swfdec_buffer_new_for_data (
-	(guchar *) g_strdup ("<policy-file-request/>"), 23);
+    SwfdecBuffer *buffer = swfdec_buffer_new_static (
+	"<policy-file-request/>", 23);
     swfdec_socket_send (SWFDEC_SOCKET (stream), buffer);
   }
 }
commit d338a00524ec429732ab27d385b0fd1133d36d95
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 17:23:12 2008 +0100

    make SwfdecXMLSocket work

diff --git a/swfdec/swfdec_xml_socket.c b/swfdec/swfdec_xml_socket.c
index 3b92c7c..f53f168 100644
--- a/swfdec/swfdec_xml_socket.c
+++ b/swfdec/swfdec_xml_socket.c
@@ -61,11 +61,26 @@ swfdec_xml_socket_stream_target_get_player (SwfdecStreamTarget *target)
 }
 
 static void
+swfdec_xml_socket_stream_target_open (SwfdecStreamTarget *target, 
+    SwfdecStream *stream)
+{
+  SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+  SwfdecAsValue value;
+
+  xml->open = TRUE;
+  SWFDEC_AS_VALUE_SET_BOOLEAN (&value, TRUE);
+  swfdec_sandbox_use (xml->sandbox);
+  swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onConnect, 1, &value, NULL);
+  swfdec_sandbox_unuse (xml->sandbox);
+}
+
+static void
 swfdec_xml_socket_stream_target_error (SwfdecStreamTarget *target,
     SwfdecStream *stream)
 {
   SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
 
+  swfdec_sandbox_use (xml->sandbox);
   if (xml->open) {
     SWFDEC_FIXME ("is onClose emitted on error?");
     swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL);
@@ -75,6 +90,7 @@ swfdec_xml_socket_stream_target_error (SwfdecStreamTarget *target,
     SWFDEC_AS_VALUE_SET_BOOLEAN (&value, FALSE);
     swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onConnect, 1, &value, NULL);
   }
+  swfdec_sandbox_unuse (xml->sandbox);
 
   swfdec_xml_socket_ensure_closed (xml);
 }
@@ -109,7 +125,9 @@ swfdec_xml_socket_stream_target_parse (SwfdecStreamTarget *target,
 
 	SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_get_string (
 	      SWFDEC_AS_OBJECT (xml)->context, (char *) buffer->data));
+	swfdec_sandbox_use (xml->sandbox);
 	swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onData, 1, &val, NULL);
+	swfdec_sandbox_unuse (xml->sandbox);
       }
     }
   }
@@ -126,7 +144,9 @@ swfdec_xml_socket_stream_target_close (SwfdecStreamTarget *target,
     SWFDEC_FIXME ("data left in socket, what now?");
   }
 
+  swfdec_sandbox_use (xml->sandbox);
   swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL);
+  swfdec_sandbox_unuse (xml->sandbox);
 
   swfdec_xml_socket_ensure_closed (xml);
 }
@@ -135,6 +155,7 @@ static void
 swfdec_xml_socket_stream_target_init (SwfdecStreamTargetInterface *iface)
 {
   iface->get_player = swfdec_xml_socket_stream_target_get_player;
+  iface->open = swfdec_xml_socket_stream_target_open;
   iface->parse = swfdec_xml_socket_stream_target_parse;
   iface->close = swfdec_xml_socket_stream_target_close;
   iface->error = swfdec_xml_socket_stream_target_error;
@@ -149,6 +170,7 @@ static void
 swfdec_xml_socket_mark (SwfdecAsObject *object)
 {
   swfdec_as_object_mark (SWFDEC_XML_SOCKET (object)->target);
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (SWFDEC_XML_SOCKET (object)->sandbox));
 
   SWFDEC_AS_OBJECT_CLASS (swfdec_xml_socket_parent_class)->mark (object);
 }
@@ -193,7 +215,7 @@ swfdec_xml_socket_target_gone (gpointer xmlp)
 }
 
 static SwfdecXmlSocket *
-swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint port)
+swfdec_xml_socket_create (SwfdecAsObject *target, SwfdecSandbox *sandbox, const char *hostname, guint port)
 {
   SwfdecAsContext *cx = target->context;
   SwfdecXmlSocket *xml;
@@ -213,16 +235,39 @@ swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint po
 
   if (xml_socket_quark == 0)
     xml_socket_quark = g_quark_from_static_string ("swfdec-xml-socket");
-  g_object_set_qdata (G_OBJECT (target), xml_socket_quark, swfdec_xml_socket_target_gone);
+  g_object_set_qdata_full (G_OBJECT (target), xml_socket_quark, xml, swfdec_xml_socket_target_gone);
   xml->target = target;
   xml->target_owner = TRUE;
   xml->socket = sock;
+  xml->sandbox = sandbox;
+  swfdec_stream_set_target (SWFDEC_STREAM (sock), SWFDEC_STREAM_TARGET (xml));
 
   return xml;
 }
 
 /*** AS CODE ***/
 
+static SwfdecXmlSocket *
+swfdec_xml_socket_get (SwfdecAsObject *object)
+{
+  SwfdecXmlSocket *xml;
+
+  if (object == NULL ||
+      xml_socket_quark == 0) {
+    SWFDEC_WARNING ("no xml socket on object");
+    return NULL;
+  }
+  
+  xml = g_object_get_qdata (G_OBJECT (object), xml_socket_quark);
+  if (xml->socket == NULL) {
+    SWFDEC_WARNING ("xml socket not open");
+    return NULL;
+  }
+
+  return xml;
+}
+
+
 SWFDEC_AS_NATIVE (400, 0, swfdec_xml_socket_connect)
 void
 swfdec_xml_socket_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
@@ -236,8 +281,7 @@ swfdec_xml_socket_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
   if (SWFDEC_IS_MOVIE (object) || object == NULL)
     return;
 
-  swfdec_xml_socket_create (object, host, port);
-  SWFDEC_STUB ("XMLSocket.connect");
+  swfdec_xml_socket_create (object, SWFDEC_SANDBOX (cx->global), host, port);
 }
 
 SWFDEC_AS_NATIVE (400, 1, swfdec_xml_socket_send)
@@ -245,7 +289,28 @@ void
 swfdec_xml_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  SWFDEC_STUB ("XMLSocket.send");
+  SwfdecXmlSocket *xml;
+  SwfdecBuffer *buf;
+  const char *send;
+  gsize len;
+
+  if (argc < 1)
+    return;
+
+  xml = swfdec_xml_socket_get (object);
+  if (xml == NULL)
+    return;
+  if (!swfdec_stream_is_open (SWFDEC_STREAM (xml->socket))) {
+    SWFDEC_WARNING ("sending data down a closed stream");
+    return;
+  }
+
+  send = swfdec_as_value_to_string (cx, &argv[0]);
+  len = strlen (send) + 1;
+  buf = swfdec_buffer_new (len);
+  memcpy (buf->data, send, len);
+
+  swfdec_socket_send (xml->socket, buf);
 }
 
 SWFDEC_AS_NATIVE (400, 2, swfdec_xml_socket_close)
@@ -253,5 +318,10 @@ void
 swfdec_xml_socket_close (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  SWFDEC_STUB ("XMLSocket.close");
+  SwfdecXmlSocket *xml;
+
+  xml = swfdec_xml_socket_get (object);
+  if (xml == NULL)
+    return;
+  swfdec_stream_close (SWFDEC_STREAM (xml->socket));
 }
diff --git a/swfdec/swfdec_xml_socket.h b/swfdec/swfdec_xml_socket.h
index a40de86..73ac1f9 100644
--- a/swfdec/swfdec_xml_socket.h
+++ b/swfdec/swfdec_xml_socket.h
@@ -22,6 +22,7 @@
 
 #include <swfdec/swfdec.h>
 #include <swfdec/swfdec_as_object.h>
+#include <swfdec/swfdec_sandbox.h>
 
 G_BEGIN_DECLS
 
@@ -40,6 +41,7 @@ struct _SwfdecXmlSocket {
   SwfdecAsObject	object;
 
   SwfdecSocket *	socket;		/* the socket in use */
+  SwfdecSandbox *	sandbox;	/* the sandbox we run in */
   gboolean		open;		/* the socket has been opened already */
   SwfdecBufferQueue *	queue;		/* everything that belongs to the same string */
   SwfdecAsObject *	target;		/* target object we call out to */
commit 4a7c38578d383051183820bc4908981bfb60f5c1
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 13:57:16 2008 +0100

    add swfdec_stream_is_open() function

diff --git a/doc/swfdec-sections.txt b/doc/swfdec-sections.txt
index efc27d5..db569cf 100644
--- a/doc/swfdec-sections.txt
+++ b/doc/swfdec-sections.txt
@@ -22,6 +22,7 @@ SWFDEC_AUDIO_GET_CLASS
 SwfdecStream
 SwfdecStreamClass
 swfdec_stream_open
+swfdec_stream_is_open
 swfdec_stream_push
 swfdec_stream_eof
 swfdec_stream_error
diff --git a/swfdec/swfdec_socket.c b/swfdec/swfdec_socket.c
index 821e214..64de43f 100644
--- a/swfdec/swfdec_socket.c
+++ b/swfdec/swfdec_socket.c
@@ -116,6 +116,7 @@ swfdec_socket_send (SwfdecSocket *sock, SwfdecBuffer *buffer)
   SwfdecSocketClass *klass;
 
   g_return_if_fail (SWFDEC_IS_SOCKET (sock));
+  g_return_if_fail (swfdec_stream_is_open (SWFDEC_STREAM (sock)));
   g_return_if_fail (buffer != NULL);
 
   klass = SWFDEC_SOCKET_GET_CLASS (sock);
diff --git a/swfdec/swfdec_stream.c b/swfdec/swfdec_stream.c
index a692099..51337d1 100644
--- a/swfdec/swfdec_stream.c
+++ b/swfdec/swfdec_stream.c
@@ -396,6 +396,23 @@ swfdec_stream_open (SwfdecStream *stream)
 }
 
 /**
+ * swfdec_stream_is_open:
+ * @stream: a #SwfdecStream
+ *
+ * Checks if the given @stream is currrently open. Some functions, for example
+ * swfdec_socket_send(), require an open stream.
+ *
+ * Returns: %TRUE if the stream is open, %FALSE otherwise.
+ **/
+gboolean
+swfdec_stream_is_open (SwfdecStream *stream)
+{
+  g_return_val_if_fail (SWFDEC_IS_STREAM (stream), FALSE);
+
+  return stream->priv->state == SWFDEC_STREAM_STATE_OPEN;
+}
+
+/**
  * swfdec_stream_push:
  * @stream: a #SwfdecStream
  * @buffer: new data to make available. The stream takes the reference
diff --git a/swfdec/swfdec_stream.h b/swfdec/swfdec_stream.h
index 063fd48..fc61e57 100644
--- a/swfdec/swfdec_stream.h
+++ b/swfdec/swfdec_stream.h
@@ -59,6 +59,7 @@ struct _SwfdecStreamClass
 GType		swfdec_stream_get_type		(void);
 
 void		swfdec_stream_open		(SwfdecStream *		stream);
+gboolean	swfdec_stream_is_open		(SwfdecStream *		stream);
 void		swfdec_stream_push		(SwfdecStream *		stream,
 						 SwfdecBuffer *		buffer);
 void		swfdec_stream_eof		(SwfdecStream *		stream);
commit 02cf3f19f225d4d0d29e0c4df304f6cb5348a26c
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 13:49:17 2008 +0100

    don't crash when dispose order of objects is messed up

diff --git a/swfdec/swfdec_xml_socket.c b/swfdec/swfdec_xml_socket.c
index 424726b..3b92c7c 100644
--- a/swfdec/swfdec_xml_socket.c
+++ b/swfdec/swfdec_xml_socket.c
@@ -37,8 +37,6 @@ static GQuark xml_socket_quark = 0;
 static void
 swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
 {
-  gpointer cur;
-
   if (xml->socket == NULL)
     return;
 
@@ -47,9 +45,10 @@ swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
   xml->socket = NULL;
 
   swfdec_player_unroot (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), xml);
-  cur = g_object_get_qdata (G_OBJECT (xml->target), xml_socket_quark);
-  if (cur != xml)
-    g_object_set_qdata (G_OBJECT (xml->target), xml_socket_quark, cur);
+  if (xml->target_owner) {
+    g_object_steal_qdata (G_OBJECT (xml->target), xml_socket_quark);
+    xml->target_owner = FALSE;
+  }
   xml->target = NULL;
 }
 
@@ -185,6 +184,14 @@ swfdec_xml_socket_init (SwfdecXmlSocket *xml)
   xml->queue = swfdec_buffer_queue_new ();
 }
 
+static void
+swfdec_xml_socket_target_gone (gpointer xmlp)
+{
+  SwfdecXmlSocket *xml = xmlp;
+
+  xml->target_owner = FALSE;
+}
+
 static SwfdecXmlSocket *
 swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint port)
 {
@@ -204,7 +211,11 @@ swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint po
   swfdec_as_object_add (SWFDEC_AS_OBJECT (xml), cx, sizeof (SwfdecXmlSocket));
   swfdec_player_root (SWFDEC_PLAYER (cx), xml, (GFunc) swfdec_as_object_mark);
 
+  if (xml_socket_quark == 0)
+    xml_socket_quark = g_quark_from_static_string ("swfdec-xml-socket");
+  g_object_set_qdata (G_OBJECT (target), xml_socket_quark, swfdec_xml_socket_target_gone);
   xml->target = target;
+  xml->target_owner = TRUE;
   xml->socket = sock;
 
   return xml;
diff --git a/swfdec/swfdec_xml_socket.h b/swfdec/swfdec_xml_socket.h
index eb751d5..a40de86 100644
--- a/swfdec/swfdec_xml_socket.h
+++ b/swfdec/swfdec_xml_socket.h
@@ -43,6 +43,7 @@ struct _SwfdecXmlSocket {
   gboolean		open;		/* the socket has been opened already */
   SwfdecBufferQueue *	queue;		/* everything that belongs to the same string */
   SwfdecAsObject *	target;		/* target object we call out to */
+  gboolean		target_owner;	/* TRUE if we own the target */
 };
 
 struct _SwfdecXmlSocketClass {
commit 8344380bc4d9b16d3ff5457950ec7f965ebc8c7c
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 10:56:11 2008 +0100

    reorder dispose actions to avoid SEGVs

diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index b4f10bc..08f66ed 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -938,9 +938,10 @@ swfdec_player_dispose (GObject *object)
   while (priv->roots)
     swfdec_movie_destroy (priv->roots->data);
 
-  swfdec_function_list_clear (&priv->rooted);
   /* we do this here so references to GC'd objects get freed */
   G_OBJECT_CLASS (swfdec_player_parent_class)->dispose (object);
+  /* must happen after disposing context, some objects unroot themselves */
+  swfdec_function_list_clear (&priv->rooted);
 
   swfdec_player_remove_all_external_actions (player, player);
 #ifndef G_DISABLE_ASSERT
commit f15e499b241240028fdc932b8f536a6f3d9187fb
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 15 10:55:32 2008 +0100

    fix typo

diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index 087c67c..8d2adeb 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -128,7 +128,7 @@ swfdec_test_socket_receive (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
   depth = swfdec_buffer_queue_get_depth (sock->receive_queue);
   if (len > 0) {
     if (depth < len) {
-      swfdec_test_throw (cx, "nly %zu bytes available", depth);
+      swfdec_test_throw (cx, "only %zu bytes available", depth);
       return;
     } else {
       buffer = swfdec_buffer_queue_pull (sock->receive_queue, len);
commit d7f0ae320d6a27345c891f780befbfc9ddb60d61
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Feb 12 15:03:37 2008 +0100

    implement new functions on Buffer object
    
    Buffer.toString - try to convert a given buffer to a string
    Buffer.sub - create a subbuffer
    Buffer.find - find the first occurence of a given byte
                  FIXME: This should probably compare with a buffer, not jsut a byte

diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
index 88551bb..648d35a 100644
--- a/test/swfdec_test_buffer.c
+++ b/test/swfdec_test_buffer.c
@@ -170,6 +170,24 @@ swfdec_test_buffer_diff (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
   }
 }
 
+SWFDEC_TEST_FUNCTION ("Buffer_find", swfdec_test_buffer_find, 0)
+void
+swfdec_test_buffer_find (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  int c;
+  SwfdecTestBuffer *buffer;
+  guchar *found;
+  
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "i", &c);
+
+  SWFDEC_AS_VALUE_SET_INT (retval, -1);
+
+  found = memchr (buffer->buffer->data, c, buffer->buffer->length);
+  if (found)
+    SWFDEC_AS_VALUE_SET_INT (retval, found - buffer->buffer->data);
+}
+
 SWFDEC_TEST_FUNCTION ("Buffer_load", swfdec_test_buffer_load, 0)
 void
 swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
@@ -195,6 +213,32 @@ swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
   SWFDEC_AS_VALUE_SET_OBJECT (retval, buffer);
 }
 
+SWFDEC_TEST_FUNCTION ("Buffer_sub", swfdec_test_buffer_sub, 0)
+void
+swfdec_test_buffer_sub (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecBuffer *b;
+  SwfdecTestBuffer *buffer;
+  SwfdecAsObject *o;
+  guint offset, length;
+  
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "i|i", &offset, &length);
+
+  SWFDEC_AS_VALUE_SET_NULL (retval);
+  if (offset >= buffer->buffer->length)
+    return;
+
+  if (length == 0)
+    length = buffer->buffer->length - offset;
+
+  b = swfdec_buffer_new_subbuffer (buffer->buffer, offset, length);
+  o = swfdec_test_buffer_new (cx, b);
+  if (o == NULL)
+    return;
+  SWFDEC_AS_VALUE_SET_OBJECT (retval, o);
+}
+
 SWFDEC_TEST_FUNCTION ("Buffer_toString", swfdec_test_buffer_toString, 0)
 void
 swfdec_test_buffer_toString (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 4d15950..753732c 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -21,6 +21,9 @@ Buffer = Native.Buffer;
 Buffer.load = Native.Buffer_load;
 Buffer.prototype = {};
 Buffer.prototype.diff = Native.Buffer_diff;
+Buffer.prototype.find = Native.Buffer_find;
+Buffer.prototype.sub = Native.Buffer_sub;
+Buffer.prototype.toString = Native.Buffer_toString;
 
 Image = Native.Image;
 Image.prototype = {};
@@ -50,7 +53,6 @@ Socket.prototype.close = Native.Socket_close;
 Socket.prototype.error = Native.Socket_error;
 Socket.prototype.receive = Native.Socket_receive;
 Socket.prototype.send = Native.Socket_send;
-Socket.prototype.toString = Native.Socket_toString;
 Socket.prototype.addProperty ("closed", Native.Socket_get_closed, null);
 
 Test = Native.Test;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 091b6c1..d481927 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,35 +2,38 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0x9D, 0x03, 0x4D,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0xBD, 0x03, 0x51,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
-  0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
-  0x6D, 0x61, 0x67, 0x65,  0x00, 0x63, 0x6F, 0x6D,  0x70, 0x61, 0x72, 0x65,  0x00, 0x49, 0x6D, 0x61,
-  0x67, 0x65, 0x5F, 0x63,  0x6F, 0x6D, 0x70, 0x61,  0x72, 0x65, 0x00, 0x73,  0x61, 0x76, 0x65, 0x00,
-  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x73, 0x61,  0x76, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x53,
-  0x65, 0x72, 0x76, 0x65,  0x72, 0x00, 0x67, 0x65,  0x74, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
-  0x00, 0x48, 0x54, 0x54,  0x50, 0x53, 0x65, 0x72,  0x76, 0x65, 0x72, 0x5F,  0x67, 0x65, 0x74, 0x52,
-  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x00, 0x70,  0x6F, 0x72, 0x74, 0x00,  0x48, 0x54, 0x54, 0x50,
-  0x53, 0x65, 0x72, 0x76,  0x65, 0x72, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x70,  0x6F, 0x72, 0x74, 0x00,
-  0x61, 0x64, 0x64, 0x50,  0x72, 0x6F, 0x70, 0x65,  0x72, 0x74, 0x79, 0x00,  0x48, 0x54, 0x54, 0x50,
-  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x00,  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x00, 0x73,
-  0x65, 0x72, 0x76, 0x65,  0x72, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,
-  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x73, 0x65,  0x72, 0x76, 0x65, 0x72,  0x00, 0x75, 0x72, 0x6C,
-  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
-  0x5F, 0x75, 0x72, 0x6C,  0x00, 0x70, 0x61, 0x74,  0x68, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,
-  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x70, 0x61,  0x74, 0x68, 0x00, 0x68,
-  0x65, 0x61, 0x64, 0x65,  0x72, 0x73, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
-  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x68,  0x65, 0x61, 0x64, 0x65,  0x72, 0x73, 0x00, 0x63,
-  0x6F, 0x6E, 0x74, 0x65,  0x6E, 0x74, 0x54, 0x79,  0x70, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,
-  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x63,  0x6F, 0x6E, 0x74, 0x65,
-  0x6E, 0x74, 0x54, 0x79,  0x70, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
-  0x73, 0x74, 0x5F, 0x73,  0x65, 0x74, 0x5F, 0x63,  0x6F, 0x6E, 0x74, 0x65,  0x6E, 0x74, 0x54, 0x79,
-  0x70, 0x65, 0x00, 0x73,  0x74, 0x61, 0x74, 0x75,  0x73, 0x43, 0x6F, 0x64,  0x65, 0x00, 0x48, 0x54,
-  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x73, 0x74,
-  0x61, 0x74, 0x75, 0x73,  0x43, 0x6F, 0x64, 0x65,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,
-  0x75, 0x65, 0x73, 0x74,  0x5F, 0x73, 0x65, 0x74,  0x5F, 0x73, 0x74, 0x61,  0x74, 0x75, 0x73, 0x43,
-  0x6F, 0x64, 0x65, 0x00,  0x74, 0x6F, 0x53, 0x74,  0x72, 0x69, 0x6E, 0x67,  0x00, 0x48, 0x54, 0x54,
+  0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x66,
+  0x69, 0x6E, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x66,  0x69, 0x6E, 0x64, 0x00,
+  0x73, 0x75, 0x62, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x73,  0x75, 0x62, 0x00, 0x74,
+  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x74,
+  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x49, 0x6D, 0x61, 0x67,  0x65, 0x00, 0x63, 0x6F,
+  0x6D, 0x70, 0x61, 0x72,  0x65, 0x00, 0x49, 0x6D,  0x61, 0x67, 0x65, 0x5F,  0x63, 0x6F, 0x6D, 0x70,
+  0x61, 0x72, 0x65, 0x00,  0x73, 0x61, 0x76, 0x65,  0x00, 0x49, 0x6D, 0x61,  0x67, 0x65, 0x5F, 0x73,
+  0x61, 0x76, 0x65, 0x00,  0x48, 0x54, 0x54, 0x50,  0x53, 0x65, 0x72, 0x76,  0x65, 0x72, 0x00, 0x67,
+  0x65, 0x74, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x00, 0x48, 0x54,  0x54, 0x50, 0x53, 0x65,
+  0x72, 0x76, 0x65, 0x72,  0x5F, 0x67, 0x65, 0x74,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x00,
+  0x70, 0x6F, 0x72, 0x74,  0x00, 0x48, 0x54, 0x54,  0x50, 0x53, 0x65, 0x72,  0x76, 0x65, 0x72, 0x5F,
+  0x67, 0x65, 0x74, 0x5F,  0x70, 0x6F, 0x72, 0x74,  0x00, 0x61, 0x64, 0x64,  0x50, 0x72, 0x6F, 0x70,
+  0x65, 0x72, 0x74, 0x79,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
+  0x00, 0x4F, 0x62, 0x6A,  0x65, 0x63, 0x74, 0x00,  0x73, 0x65, 0x72, 0x76,  0x65, 0x72, 0x00, 0x48,
+  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x73,
+  0x65, 0x72, 0x76, 0x65,  0x72, 0x00, 0x75, 0x72,  0x6C, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,
+  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x75, 0x72,  0x6C, 0x00, 0x70, 0x61,
+  0x74, 0x68, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x67,
+  0x65, 0x74, 0x5F, 0x70,  0x61, 0x74, 0x68, 0x00,  0x68, 0x65, 0x61, 0x64,  0x65, 0x72, 0x73, 0x00,
+  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,
+  0x68, 0x65, 0x61, 0x64,  0x65, 0x72, 0x73, 0x00,  0x63, 0x6F, 0x6E, 0x74,  0x65, 0x6E, 0x74, 0x54,
+  0x79, 0x70, 0x65, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,
+  0x67, 0x65, 0x74, 0x5F,  0x63, 0x6F, 0x6E, 0x74,  0x65, 0x6E, 0x74, 0x54,  0x79, 0x70, 0x65, 0x00,
+  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x73, 0x65, 0x74, 0x5F,
+  0x63, 0x6F, 0x6E, 0x74,  0x65, 0x6E, 0x74, 0x54,  0x79, 0x70, 0x65, 0x00,  0x73, 0x74, 0x61, 0x74,
+  0x75, 0x73, 0x43, 0x6F,  0x64, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
+  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x73,  0x74, 0x61, 0x74, 0x75,  0x73, 0x43, 0x6F, 0x64,
+  0x65, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,
+  0x74, 0x5F, 0x73, 0x74,  0x61, 0x74, 0x75, 0x73,  0x43, 0x6F, 0x64, 0x65,  0x00, 0x48, 0x54, 0x54,
   0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x74, 0x6F, 0x53,  0x74, 0x72, 0x69, 0x6E,
   0x67, 0x00, 0x73, 0x65,  0x6E, 0x64, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
   0x73, 0x74, 0x5F, 0x73,  0x65, 0x6E, 0x64, 0x00,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x48, 0x54,
@@ -39,8 +42,7 @@ static const unsigned char swfdec_test_initialize[] = {
   0x6F, 0x73, 0x65, 0x00,  0x65, 0x72, 0x72, 0x6F,  0x72, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
   0x5F, 0x65, 0x72, 0x72,  0x6F, 0x72, 0x00, 0x72,  0x65, 0x63, 0x65, 0x69,  0x76, 0x65, 0x00, 0x53,
   0x6F, 0x63, 0x6B, 0x65,  0x74, 0x5F, 0x72, 0x65,  0x63, 0x65, 0x69, 0x76,  0x65, 0x00, 0x53, 0x6F,
-  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
-  0x5F, 0x74, 0x6F, 0x53,  0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x64,
+  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x64,
   0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,
   0x65, 0x64, 0x00, 0x54,  0x65, 0x73, 0x74, 0x00,  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,
   0x54, 0x65, 0x73, 0x74,  0x5F, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x00, 0x67, 0x65, 0x74,
@@ -65,84 +67,88 @@ static const unsigned char swfdec_test_initialize[] = {
   0x08, 0x03, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,
-  0x4F, 0x96, 0x04, 0x00,  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x08, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0C, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x07, 0x00,
-  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0E, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x10,
-  0x4E, 0x96, 0x09, 0x00,  0x08, 0x0F, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x09, 0x00, 0x08, 0x12,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x13, 0x40,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,
-  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x15, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x14, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,
-  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x17, 0x4E, 0x96,
-  0x09, 0x00, 0x08, 0x16,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x18, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
-  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x4E, 0x96, 0x09, 0x00,
-  0x08, 0x1A, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x1E, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1D, 0x4E, 0x96,
-  0x09, 0x00, 0x08, 0x1C,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x21,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x20,
-  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1F, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x12,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x22,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x23,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x24, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x25, 0x4E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
-  0x08, 0x26, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x27, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x28, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1D, 0x96, 0x02, 0x00,
-  0x08, 0x28, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x26,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x29,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x28, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2A, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x2B, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2C, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2D, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x2E, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x22,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x2F,  0x4E, 0x4F, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x31, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x30,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x28, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x04, 0x00,
-  0x08, 0x32, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x32, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
-  0x32, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x32, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x33, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x34, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x32, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x35, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x36, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x32, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x08, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x09, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x0B,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0C,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x0D, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x0E,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x10, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x11, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x12, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x12, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x07,
+  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x12, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x13, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x14, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x16, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x15, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x17, 0x52, 0x17,  0x96, 0x09, 0x00, 0x08,
+  0x18, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x19,  0x40, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,
+  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x03, 0x00, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1A, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x17, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1D, 0x4E,
+  0x96, 0x09, 0x00, 0x08,  0x1C, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x17,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1F, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1E,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x18, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x17, 0x52,
+  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x21, 0x4E, 0x96, 0x09,
+  0x00, 0x08, 0x20, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x17, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x24, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x23, 0x4E,
+  0x96, 0x09, 0x00, 0x08,  0x22, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x17,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x27, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x26, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x25, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x18, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x17, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
+  0x18, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x0B, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x28, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x29,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2A,
+  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x2B, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2C, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x2D, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x1D, 0x96, 0x02,
+  0x00, 0x08, 0x2D, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x2D, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x2B, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x2E, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x2D,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x2F,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x30,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2D, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x31, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x32, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x2D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x29, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x33, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x35,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x34, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x2D, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x17, 0x52, 0x17, 0x96,  0x04, 0x00, 0x08, 0x36,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x36,
+  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x36, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x36, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
   0x96, 0x04, 0x00, 0x08,  0x37, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x38, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x32,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x39,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3A,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x32, 0x1C,
+  0x02, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x39,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3A,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x36, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x3B, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x3C, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x32, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x00, 0x08, 0x3C, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x36, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
   0x4E, 0x96, 0x04, 0x00,  0x08, 0x3D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3E, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x32, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x3F, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x40, 0x4E, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x42, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x41, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x32,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,
-  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x44, 0x4E, 0x96,
-  0x09, 0x00, 0x08, 0x43,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x32, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x46, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x45, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x08, 0x32, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
-  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x48,  0x4E, 0x96, 0x09, 0x00,
-  0x08, 0x47, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x32, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x49,  0x8E, 0x0B, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x4A, 0x1C,
-  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x4B, 0x08,  0x4A, 0x1C, 0x47, 0x96,
-  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x49, 0x52,
-  0x17, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x2A, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x4A, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,
-  0x00, 0x96, 0x04, 0x00,  0x08, 0x4C, 0x08, 0x4A,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x49, 0x52, 0x17,  0x1D, 0x00
+  0x96, 0x02, 0x00, 0x08,  0x36, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x3F, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x40, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x36,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x41,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x42,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x36, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x43, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x44, 0x4E,
+  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x46, 0x4E, 0x96, 0x09,
+  0x00, 0x08, 0x45, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x36, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x17, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x48,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x47, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x36, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x17, 0x52, 0x17, 0x96,
+  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x4A, 0x4E,  0x96, 0x09, 0x00, 0x08,
+  0x49, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x17,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x4C, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x4B,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x36, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x17, 0x52,  0x17, 0x96, 0x02, 0x00,
+  0x08, 0x4D, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x73, 0x00, 0x27, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x4E, 0x1C, 0x12, 0x9D,  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,
+  0x4F, 0x08, 0x4E, 0x1C,  0x47, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x4D, 0x52, 0x17, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x2F, 0x8E, 0x0B, 0x00,
+  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,  0x00, 0x27, 0x00, 0x96,  0x02, 0x00, 0x08, 0x4E,
+  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,  0x04, 0x00, 0x08, 0x50,  0x08, 0x4E, 0x1C, 0x47,
+  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x4D,
+  0x52, 0x17, 0x1D, 0x00
 };
 
commit 64d611e1b78c8aab0c40e4ee2ccede62188a1747
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Feb 12 13:40:18 2008 +0100

    add Buffer.toString

diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
index c2b4f4e..88551bb 100644
--- a/test/swfdec_test_buffer.c
+++ b/test/swfdec_test_buffer.c
@@ -195,6 +195,31 @@ swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
   SWFDEC_AS_VALUE_SET_OBJECT (retval, buffer);
 }
 
+SWFDEC_TEST_FUNCTION ("Buffer_toString", swfdec_test_buffer_toString, 0)
+void
+swfdec_test_buffer_toString (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecBuffer *b;
+  SwfdecTestBuffer *buffer;
+  const char *end;
+  char *s;
+  
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "");
+
+  b = buffer->buffer;
+  if (g_utf8_validate ((const char *) b->data, b->length, &end)) {
+    s = g_strndup ((const char *) b->data, b->length);
+  } else if ((size_t) (end - (char *) b->data) == b->length - 1) {
+    s = g_strdup ((const char *) b->data);
+  } else {
+    s = NULL;
+  }
+  if (s == NULL)
+    s = g_strdup ("[binary Buffer]");
+  SWFDEC_AS_VALUE_SET_STRING (retval, swfdec_as_context_give_string (cx, s));
+}
+
 SwfdecBuffer *
 swfdec_test_buffer_from_args (SwfdecAsContext *cx, guint argc, SwfdecAsValue *argv)
 {
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 0c1ece9..4d15950 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -46,11 +46,11 @@ HTTPRequest.prototype.close = Native.HTTPRequest_close;
 
 Socket = function () {};
 Socket.prototype = {};
-Socket.prototype.getConnection = Native.Socket_getConnection;
-Socket.prototype.receive = Native.Socket_receive;
-Socket.prototype.send = Native.Socket_send;
 Socket.prototype.close = Native.Socket_close;
 Socket.prototype.error = Native.Socket_error;
+Socket.prototype.receive = Native.Socket_receive;
+Socket.prototype.send = Native.Socket_send;
+Socket.prototype.toString = Native.Socket_toString;
 Socket.prototype.addProperty ("closed", Native.Socket_get_closed, null);
 
 Test = Native.Test;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 8dd61d1..091b6c1 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0xB0, 0x03, 0x4E,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0x9D, 0x03, 0x4D,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
@@ -35,116 +35,114 @@ static const unsigned char swfdec_test_initialize[] = {
   0x67, 0x00, 0x73, 0x65,  0x6E, 0x64, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
   0x73, 0x74, 0x5F, 0x73,  0x65, 0x6E, 0x64, 0x00,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x48, 0x54,
   0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x00,
-  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x00, 0x67,  0x65, 0x74, 0x43, 0x6F,  0x6E, 0x6E, 0x65, 0x63,
-  0x74, 0x69, 0x6F, 0x6E,  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x43,
-  0x6F, 0x6E, 0x6E, 0x65,  0x63, 0x74, 0x69, 0x6F,  0x6E, 0x00, 0x72, 0x65,  0x63, 0x65, 0x69, 0x76,
-  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x72, 0x65, 0x63,  0x65, 0x69, 0x76, 0x65,
-  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x73, 0x65, 0x6E, 0x64,  0x00, 0x53, 0x6F, 0x63,
-  0x6B, 0x65, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,
-  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x5F, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x63, 0x6C, 0x6F,
-  0x73, 0x65, 0x64, 0x00,  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x63,
-  0x6C, 0x6F, 0x73, 0x65,  0x64, 0x00, 0x54, 0x65,  0x73, 0x74, 0x00, 0x61,  0x64, 0x76, 0x61, 0x6E,
-  0x63, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,
-  0x67, 0x65, 0x74, 0x53,  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
-  0x65, 0x74, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x6D,
-  0x6F, 0x76, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x6D,
-  0x6F, 0x76, 0x65, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x70, 0x72,  0x65, 0x73, 0x73, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,
-  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,  0x73, 0x65, 0x00, 0x54,
-  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x72, 0x65,  0x6C, 0x65, 0x61, 0x73,
-  0x65, 0x00, 0x72, 0x65,  0x6E, 0x64, 0x65, 0x72,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,
-  0x6E, 0x64, 0x65, 0x72,  0x00, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
-  0x72, 0x65, 0x73, 0x65,  0x74, 0x00, 0x72, 0x61,  0x74, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
-  0x67, 0x65, 0x74, 0x5F,  0x72, 0x61, 0x74, 0x65,  0x00, 0x71, 0x75, 0x69,  0x74, 0x00, 0x54, 0x65,
-  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x71,  0x75, 0x69, 0x74, 0x00,  0x74, 0x72, 0x61, 0x63,
-  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x74,  0x72, 0x61, 0x63, 0x65,
-  0x00, 0x6C, 0x61, 0x75,  0x6E, 0x63, 0x68, 0x65,  0x64, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
-  0x65, 0x74, 0x5F, 0x6C,  0x61, 0x75, 0x6E, 0x63,  0x68, 0x65, 0x64, 0x00,  0x70, 0x72, 0x69, 0x6E,
-  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,  0x3A, 0x20, 0x00, 0x45,  0x52, 0x52, 0x4F, 0x52,
-  0x3A, 0x20, 0x00, 0x96,  0x04, 0x00, 0x08, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x00,
-  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x02, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x03, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x07, 0x00,
-  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x05, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x06, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x07, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x08, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x09, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x0A, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x0C,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,
-  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x0C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x0D, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0E, 0x4E, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x10, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0C,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x09,
-  0x00, 0x08, 0x12, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x13, 0x40, 0x1D,  0x96, 0x02, 0x00, 0x08,
-  0x12, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x03,
-  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x15, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x14,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x17, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x16, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x19,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x18, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x1A, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x1E, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x1D, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x1C, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x21, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x20, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x1F, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,
-  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x22, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x23, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x24, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x25, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x26, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x27, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x28,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x28, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x29, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2A, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2B, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2C, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x2D, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2E,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x28, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2F, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x32, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x31, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
-  0x96, 0x04, 0x00, 0x08,  0x33, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x33, 0x4E, 0x1D, 0x96,
-  0x02, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x33, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
-  0x08, 0x34, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x35, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x33, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x36, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x37, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x38,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x39,
-  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x33, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x3A, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3B, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x33, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x3C, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3D, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x33, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x3E, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x3F, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x40,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x41,  0x4E, 0x4F, 0x96, 0x03,
-  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x43, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x42,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x33, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x45, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x44, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x33, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x47,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x46, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x33, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x49, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x48, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x4A, 0x8E,
-  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x4B, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x4C, 0x08, 0x4B,
-  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x4A, 0x52, 0x17,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x4B, 0x1C, 0x12, 0x9D,
-  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x4D, 0x08, 0x4B, 0x1C,  0x47, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x4A, 0x52, 0x17, 0x1D,
-  0x00
+  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x00, 0x53,  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x5F, 0x63, 0x6C,
+  0x6F, 0x73, 0x65, 0x00,  0x65, 0x72, 0x72, 0x6F,  0x72, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
+  0x5F, 0x65, 0x72, 0x72,  0x6F, 0x72, 0x00, 0x72,  0x65, 0x63, 0x65, 0x69,  0x76, 0x65, 0x00, 0x53,
+  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x5F, 0x72, 0x65,  0x63, 0x65, 0x69, 0x76,  0x65, 0x00, 0x53, 0x6F,
+  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
+  0x5F, 0x74, 0x6F, 0x53,  0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x64,
+  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,
+  0x65, 0x64, 0x00, 0x54,  0x65, 0x73, 0x74, 0x00,  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,
+  0x54, 0x65, 0x73, 0x74,  0x5F, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x00, 0x67, 0x65, 0x74,
+  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x53,
+  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x6D, 0x6F, 0x76, 0x65,
+  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x6D, 0x6F, 0x76, 0x65,
+  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,
+  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x6D, 0x6F,
+  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,
+  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,  0x73, 0x65, 0x00, 0x72,
+  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,  0x65, 0x6E, 0x64, 0x65,
+  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x73,
+  0x65, 0x74, 0x00, 0x72,  0x61, 0x74, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
+  0x5F, 0x72, 0x61, 0x74,  0x65, 0x00, 0x71, 0x75,  0x69, 0x74, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
+  0x67, 0x65, 0x74, 0x5F,  0x71, 0x75, 0x69, 0x74,  0x00, 0x74, 0x72, 0x61,  0x63, 0x65, 0x00, 0x54,
+  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x74, 0x72, 0x61, 0x63,  0x65, 0x00, 0x6C, 0x61,
+  0x75, 0x6E, 0x63, 0x68,  0x65, 0x64, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,
+  0x6C, 0x61, 0x75, 0x6E,  0x63, 0x68, 0x65, 0x64,  0x00, 0x70, 0x72, 0x69,  0x6E, 0x74, 0x00, 0x73,
+  0x00, 0x49, 0x4E, 0x46,  0x4F, 0x3A, 0x20, 0x00,  0x45, 0x52, 0x52, 0x4F,  0x52, 0x3A, 0x20, 0x00,
+  0x96, 0x04, 0x00, 0x08,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x00, 0x4E, 0x1D, 0x96,
+  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x03, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,
+  0x4F, 0x96, 0x04, 0x00,  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x08, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0C, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x07, 0x00,
+  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0E, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x10,
+  0x4E, 0x96, 0x09, 0x00,  0x08, 0x0F, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x09, 0x00, 0x08, 0x12,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x13, 0x40,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,
+  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x15, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x14, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,
+  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x17, 0x4E, 0x96,
+  0x09, 0x00, 0x08, 0x16,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x18, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
+  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x4E, 0x96, 0x09, 0x00,
+  0x08, 0x1A, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x1E, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1D, 0x4E, 0x96,
+  0x09, 0x00, 0x08, 0x1C,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x21,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x20,
+  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1F, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x12,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x22,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x23,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x24, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x25, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x26, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x27, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x28, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1D, 0x96, 0x02, 0x00,
+  0x08, 0x28, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x26,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x29,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x28, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2A, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x2B, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2C, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2D, 0x4E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x2E, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x22,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x2F,  0x4E, 0x4F, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x31, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x30,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x28, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x04, 0x00,
+  0x08, 0x32, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x32, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
+  0x32, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x32, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x33, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x34, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x32, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x35, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x36, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x32, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x37, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x38, 0x4E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x32,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x39,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3A,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x32, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x3B, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x3C, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x32, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x3D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3E, 0x4E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x32, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x3F, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x40, 0x4E, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x42, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x41, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x32,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,
+  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x44, 0x4E, 0x96,
+  0x09, 0x00, 0x08, 0x43,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x32, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x46, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x45, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x32, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
+  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x48,  0x4E, 0x96, 0x09, 0x00,
+  0x08, 0x47, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x32, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x49,  0x8E, 0x0B, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x4A, 0x1C,
+  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x4B, 0x08,  0x4A, 0x1C, 0x47, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x49, 0x52,
+  0x17, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x2A, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x4A, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,
+  0x00, 0x96, 0x04, 0x00,  0x08, 0x4C, 0x08, 0x4A,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x49, 0x52, 0x17,  0x1D, 0x00
 };
 
commit 16fb07b4ff5e816bb8677fdbdf3b6f1ea03efcd6
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Feb 12 13:31:44 2008 +0100

    add a socket.closed property

diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index b476131..0c1ece9 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -51,6 +51,7 @@ Socket.prototype.receive = Native.Socket_receive;
 Socket.prototype.send = Native.Socket_send;
 Socket.prototype.close = Native.Socket_close;
 Socket.prototype.error = Native.Socket_error;
+Socket.prototype.addProperty ("closed", Native.Socket_get_closed, null);
 
 Test = Native.Test;
 Test.prototype = {};
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 2bb7b8d..8dd61d1 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0x97, 0x03, 0x4C,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0xB0, 0x03, 0x4E,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
@@ -41,106 +41,110 @@ static const unsigned char swfdec_test_initialize[] = {
   0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x72, 0x65, 0x63,  0x65, 0x69, 0x76, 0x65,
   0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x73, 0x65, 0x6E, 0x64,  0x00, 0x53, 0x6F, 0x63,
   0x6B, 0x65, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,
-  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x5F, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x54, 0x65, 0x73,
-  0x74, 0x00, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x61,
-  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x67,  0x65, 0x74, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x00,
-  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,  0x76, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
-  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,  0x76, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,
-  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,
-  0x65, 0x5F, 0x70, 0x72,  0x65, 0x73, 0x73, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x72, 0x65,
-  0x6C, 0x65, 0x61, 0x73,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,
-  0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,  0x00, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,  0x72, 0x65, 0x73, 0x65,
-  0x74, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,  0x65, 0x73, 0x65, 0x74,  0x00, 0x72, 0x61, 0x74,
-  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x72,  0x61, 0x74, 0x65, 0x00,
-  0x71, 0x75, 0x69, 0x74,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x71, 0x75,
-  0x69, 0x74, 0x00, 0x74,  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,
-  0x74, 0x5F, 0x74, 0x72,  0x61, 0x63, 0x65, 0x00,  0x6C, 0x61, 0x75, 0x6E,  0x63, 0x68, 0x65, 0x64,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x6C, 0x61,  0x75, 0x6E, 0x63, 0x68,
-  0x65, 0x64, 0x00, 0x70,  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,  0x4E, 0x46, 0x4F, 0x3A,
-  0x20, 0x00, 0x45, 0x52,  0x52, 0x4F, 0x52, 0x3A,  0x20, 0x00, 0x96, 0x04,  0x00, 0x08, 0x00, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x00, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,
-  0x04, 0x00, 0x08, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x03,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x00, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x05, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x06, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x07,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x07,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,
+  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x5F, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x63, 0x6C, 0x6F,
+  0x73, 0x65, 0x64, 0x00,  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x63,
+  0x6C, 0x6F, 0x73, 0x65,  0x64, 0x00, 0x54, 0x65,  0x73, 0x74, 0x00, 0x61,  0x64, 0x76, 0x61, 0x6E,
+  0x63, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,
+  0x67, 0x65, 0x74, 0x53,  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
+  0x65, 0x74, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x6D,
+  0x6F, 0x76, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x6D,
+  0x6F, 0x76, 0x65, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x70, 0x72,  0x65, 0x73, 0x73, 0x00,
+  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,
+  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,  0x73, 0x65, 0x00, 0x54,
+  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x72, 0x65,  0x6C, 0x65, 0x61, 0x73,
+  0x65, 0x00, 0x72, 0x65,  0x6E, 0x64, 0x65, 0x72,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,
+  0x6E, 0x64, 0x65, 0x72,  0x00, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
+  0x72, 0x65, 0x73, 0x65,  0x74, 0x00, 0x72, 0x61,  0x74, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
+  0x67, 0x65, 0x74, 0x5F,  0x72, 0x61, 0x74, 0x65,  0x00, 0x71, 0x75, 0x69,  0x74, 0x00, 0x54, 0x65,
+  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x71,  0x75, 0x69, 0x74, 0x00,  0x74, 0x72, 0x61, 0x63,
+  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x74,  0x72, 0x61, 0x63, 0x65,
+  0x00, 0x6C, 0x61, 0x75,  0x6E, 0x63, 0x68, 0x65,  0x64, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
+  0x65, 0x74, 0x5F, 0x6C,  0x61, 0x75, 0x6E, 0x63,  0x68, 0x65, 0x64, 0x00,  0x70, 0x72, 0x69, 0x6E,
+  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,  0x3A, 0x20, 0x00, 0x45,  0x52, 0x52, 0x4F, 0x52,
+  0x3A, 0x20, 0x00, 0x96,  0x04, 0x00, 0x08, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x00,
+  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x03, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x07, 0x00,
+  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x05, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x06, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x07, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x07, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x08, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x09, 0x4E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x0A, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x0C,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,
   0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x08, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x09, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x0A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
-  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x0C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x4E,
-  0x1D, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x0D,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x4E, 0x4F, 0x96, 0x03,
-  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x10, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x0F,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x09, 0x00,  0x08, 0x12, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x13, 0x40, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x15, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x14, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
+  0x0C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x0D, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0E, 0x4E, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x10, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0C,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x09,
+  0x00, 0x08, 0x12, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x13, 0x40, 0x1D,  0x96, 0x02, 0x00, 0x08,
+  0x12, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x03,
+  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x15, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x14,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x17, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x16, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x17,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x16, 0x07, 0x03,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x19,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x18, 0x07, 0x03,
   0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x18, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1A,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1E,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1D,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1C, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1F,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x22, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x23, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x25, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x12,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x27,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x28, 0x8E,  0x08, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x07, 0x00,
-  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x29, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x2A, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x2B, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x2C, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x24,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2D,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x28, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x26, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x2E, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2F, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x4F,
-  0x96, 0x04, 0x00, 0x08,  0x31, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x31, 0x4E, 0x1D, 0x96,
-  0x02, 0x00, 0x08, 0x31,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x31, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
-  0x08, 0x32, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x33, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x31, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x34, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x35, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x31,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x36,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x37,
-  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x31, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x38, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x39, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x31, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x3A, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3B, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x31, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x3C, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x3D, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x31,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x3E,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3F,  0x4E, 0x4F, 0x96, 0x03,
-  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x41, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x40,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x31, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
+  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x4E,
+  0x96, 0x09, 0x00, 0x08,  0x1A, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x1E, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x1D, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x1C, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x21, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x20, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x1F, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,
+  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x22, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x23, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x24, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x25, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x26, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x27, 0x4E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x28,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x28, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x29, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2A, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2B, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2C, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x2D, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2E,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x28, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2F, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x32, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x31, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x28, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
+  0x96, 0x04, 0x00, 0x08,  0x33, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x33, 0x4E, 0x1D, 0x96,
+  0x02, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x33, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x34, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x35, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x33, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x36, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x37, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x38,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x39,
+  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x33, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x3A, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3B, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x33, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x3C, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3D, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x33, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x3E, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x3F, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x40,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x41,  0x4E, 0x4F, 0x96, 0x03,
+  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x43, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x42,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x33, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
   0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x43, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x42, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x31, 0x1C, 0x96,
+  0x45, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x44, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x33, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x45,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x44, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x31, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x47, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x46, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x31,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x48, 0x8E,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x47,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x46, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x33, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x49, 0x4E,
+  0x96, 0x09, 0x00, 0x08,  0x48, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x33,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x4A, 0x8E,
   0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x49, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x4A, 0x08, 0x49,
+  0x08, 0x4B, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x4C, 0x08, 0x4B,
   0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x48, 0x52, 0x17,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x49, 0x1C, 0x12, 0x9D,
-  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x4B, 0x08, 0x49, 0x1C,  0x47, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x48, 0x52, 0x17, 0x1D,
+  0x08, 0x4A, 0x52, 0x17,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x4B, 0x1C, 0x12, 0x9D,
+  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x4D, 0x08, 0x4B, 0x1C,  0x47, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x4A, 0x52, 0x17, 0x1D,
   0x00
 };
 
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index 557a649..087c67c 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -168,6 +168,18 @@ swfdec_test_socket_close_as (SwfdecAsContext *cx, SwfdecAsObject *object, guint
   swfdec_test_socket_do_close (sock, TRUE);
 }
 
+SWFDEC_TEST_FUNCTION ("Socket_get_closed", swfdec_test_socket_get_closed, 0)
+void
+swfdec_test_socket_get_closed (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestSocket *sock;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
+  
+  SWFDEC_AS_VALUE_SET_BOOLEAN (retval, sock->plugin == NULL);
+}
+
 static void 
 swfdec_test_socket_plugin_send (SwfdecTestPluginSocket *plugin, unsigned char *data,
     unsigned long length)
commit 0de39570095b2431503a50b8fc537cee53ee64ae
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Feb 12 13:31:18 2008 +0100

    advance as long as we're at byte 0

diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index dcc5d98..6394856 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -145,5 +145,6 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
   url = swfdec_url_new_from_input (plugin->filename);
   swfdec_player_set_url (player, url);
   swfdec_url_free (url);
-  swfdec_player_advance (player, 0);
+  while (swfdec_player_get_next_event (player) == 0)
+    swfdec_player_advance (player, 0);
 }
commit 95006e06d2cc9bc20c410c54399b5f280495cc31
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Feb 12 10:41:54 2008 +0100

    make StreamTargetClass.parse return a boolean
    
    TRUE = parsed stuff, please call this function again
    FALSE = done parsing
    
    So FALSE is the same as the behavior was previously. All functions were made to
    use it.
    TRUE is only used by NetStream so far, which returns TRUE after parsing an
    initial video/audio packet, after which it exits to allow the plugin finding
    algorithms to find the right plugin. Tested to work with Youtube.

diff --git a/swfdec/swfdec_flv_decoder.c b/swfdec/swfdec_flv_decoder.c
index 9652e90..35d9760 100644
--- a/swfdec/swfdec_flv_decoder.c
+++ b/swfdec/swfdec_flv_decoder.c
@@ -254,6 +254,7 @@ swfdec_flv_decoder_parse_video_tag (SwfdecFlvDecoder *flv, SwfdecBits *bits, gui
   if (flv->video->len == 0) {
     g_array_append_val (flv->video, tag);
     swfdec_player_use_video_codec (SWFDEC_DECODER (flv)->player, tag.format);
+    return SWFDEC_STATUS_INIT;
   } else if (g_array_index (flv->video, SwfdecFlvVideoTag, 
 	flv->video->len - 1).timestamp < tag.timestamp) {
     g_array_append_val (flv->video, tag);
@@ -292,6 +293,7 @@ swfdec_flv_decoder_parse_audio_tag (SwfdecFlvDecoder *flv, SwfdecBits *bits, gui
   if (flv->audio->len == 0) {
     g_array_append_val (flv->audio, tag);
     swfdec_player_use_audio_codec (SWFDEC_DECODER (flv)->player, tag.format, tag.original_format);
+    return SWFDEC_STATUS_INIT;
   } else if (g_array_index (flv->audio, SwfdecFlvAudioTag, 
 	flv->audio->len - 1).timestamp < tag.timestamp) {
     g_array_append_val (flv->audio, tag);
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index d18a372..1bb1eba 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -39,7 +39,7 @@ swfdec_load_object_stream_target_get_player (SwfdecStreamTarget *target)
   return SWFDEC_PLAYER (SWFDEC_LOAD_OBJECT (target)->target->context);
 }
 
-static void
+static gboolean
 swfdec_load_object_stream_target_parse (SwfdecStreamTarget *target,
     SwfdecStream *stream)
 {
@@ -52,6 +52,7 @@ swfdec_load_object_stream_target_parse (SwfdecStreamTarget *target,
 	swfdec_loader_get_loaded (loader), swfdec_loader_get_size (loader));
     swfdec_sandbox_unuse (load_object->sandbox);
   }
+  return FALSE;
 }
 
 static void
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index 6798c53..b2291e1 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -258,7 +258,7 @@ swfdec_net_stream_stream_target_recheck (SwfdecNetStream *stream)
   swfdec_net_stream_update_playing (stream);
 }
 
-static void
+static gboolean
 swfdec_net_stream_stream_target_parse (SwfdecStreamTarget *target, 
     SwfdecStream *stream)
 {
@@ -283,10 +283,14 @@ swfdec_net_stream_stream_target_parse (SwfdecStreamTarget *target,
       break;
     status &= ~SWFDEC_STATUS_NEEDBITS;
     status |= swfdec_decoder_parse (SWFDEC_DECODER (ns->flvdecoder), buffer);
-  } while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_EOF)) == 0);
+  } while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_EOF | SWFDEC_STATUS_INIT)) == 0);
+
+  if (status & SWFDEC_STATUS_INIT)
+    return TRUE;
 
   if (status & SWFDEC_STATUS_IMAGE)
     swfdec_net_stream_stream_target_recheck (ns);
+  return FALSE;
 }
 
 static void
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index 8bb27ae..ed64f7d 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -247,7 +247,7 @@ swfdec_resource_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *st
   instance->state = SWFDEC_RESOURCE_OPENED;
 }
 
-static void
+static gboolean
 swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
 {
   SwfdecLoader *loader = SWFDEC_LOADER (stream);
@@ -261,7 +261,7 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
   queue = swfdec_stream_get_queue (stream);
   if (dec == NULL && swfdec_buffer_queue_get_offset (queue) == 0) {
     if (swfdec_buffer_queue_get_depth (queue) < SWFDEC_DECODER_DETECT_LENGTH)
-      return;
+      return FALSE;
     buffer = swfdec_buffer_queue_peek (queue, 4);
     dec =
       swfdec_decoder_new (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context), buffer);
@@ -300,7 +300,7 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
     if (status & SWFDEC_STATUS_ERROR) {
       SWFDEC_ERROR ("parsing error");
       swfdec_stream_set_target (SWFDEC_STREAM (loader), NULL);
-      return;
+      return FALSE;
     }
     if ((status & SWFDEC_STATUS_INIT)) {
       if (SWFDEC_IS_SWF_DECODER (dec))
@@ -314,8 +314,9 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
       swfdec_resource_stream_target_image (resource);
     swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadProgress, TRUE, NULL, 0);
     if (status & SWFDEC_STATUS_EOF)
-      return;
+      return FALSE;
   }
+  return FALSE;
 }
 
 static void
diff --git a/swfdec/swfdec_stream.c b/swfdec/swfdec_stream.c
index 11be333..a692099 100644
--- a/swfdec/swfdec_stream.c
+++ b/swfdec/swfdec_stream.c
@@ -188,6 +188,8 @@ swfdec_stream_get_queue (SwfdecStream *stream)
   return stream->priv->queue;
 }
 
+static void swfdec_stream_queue_processing (SwfdecStream *stream);
+
 static void
 swfdec_stream_process (gpointer streamp, gpointer unused)
 {
@@ -210,15 +212,24 @@ swfdec_stream_process (gpointer streamp, gpointer unused)
 	priv->processed_state = SWFDEC_STREAM_STATE_OPEN;
 	swfdec_stream_target_open (priv->target, stream);
       } else if (priv->processed_state == SWFDEC_STREAM_STATE_OPEN) {
-	swfdec_stream_target_parse (priv->target, stream);
-	priv->processed_state = SWFDEC_STREAM_STATE_CLOSED;
-	swfdec_stream_target_close (priv->target, stream);
+	if (swfdec_stream_target_parse (priv->target, stream)) {
+	  g_print ("requeue!\n");
+	  swfdec_stream_queue_processing (stream);
+	  goto out;
+	} else {
+	  priv->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+	  swfdec_stream_target_close (priv->target, stream);
+	}
       }
     }
     if (priv->processed_state == SWFDEC_STREAM_STATE_OPEN) {
-      swfdec_stream_target_parse (priv->target, stream);
+      if (swfdec_stream_target_parse (priv->target, stream)) {
+	g_print ("requeue!\n");
+	swfdec_stream_queue_processing (stream);
+      }
     }
   }
+out:
   g_object_unref (stream);
 }
 
diff --git a/swfdec/swfdec_stream_target.c b/swfdec/swfdec_stream_target.c
index a5d7184..4b96ef0 100644
--- a/swfdec/swfdec_stream_target.c
+++ b/swfdec/swfdec_stream_target.c
@@ -89,19 +89,24 @@ swfdec_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
     iface->open (target, stream);
 }
 
-void
+gboolean
 swfdec_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
 {
   SwfdecStreamTargetInterface *iface;
+  gboolean call_again;
   
-  g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
-  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  g_return_val_if_fail (SWFDEC_IS_STREAM_TARGET (target), FALSE);
+  g_return_val_if_fail (SWFDEC_IS_STREAM (stream), FALSE);
 
   SWFDEC_LOG ("parsing %s", swfdec_stream_describe (stream));
 
   iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
   if (iface->parse)
-    iface->parse (target, stream);
+    call_again = iface->parse (target, stream);
+  else
+    call_again = FALSE;
+
+  return call_again;
 }
 
 void
diff --git a/swfdec/swfdec_stream_target.h b/swfdec/swfdec_stream_target.h
index 9f0ddff..5b50bb2 100644
--- a/swfdec/swfdec_stream_target.h
+++ b/swfdec/swfdec_stream_target.h
@@ -41,7 +41,7 @@ struct _SwfdecStreamTargetInterface {
   /* optional vfuncs */
   void			(* open)		(SwfdecStreamTarget *   target,
 						 SwfdecStream *		stream);
-  void			(* parse)		(SwfdecStreamTarget *   target,
+  gboolean		(* parse)		(SwfdecStreamTarget *   target,
 						 SwfdecStream *		stream);
   void			(* close)		(SwfdecStreamTarget *   target,
 						 SwfdecStream *		stream);
@@ -54,7 +54,7 @@ GType		swfdec_stream_target_get_type		(void) G_GNUC_CONST;
 SwfdecPlayer *	swfdec_stream_target_get_player		(SwfdecStreamTarget *	target);
 void		swfdec_stream_target_open		(SwfdecStreamTarget *	target,
 							 SwfdecStream *		stream);
-void		swfdec_stream_target_parse		(SwfdecStreamTarget *	target,
+gboolean	swfdec_stream_target_parse		(SwfdecStreamTarget *	target,
 							 SwfdecStream *		stream);
 void		swfdec_stream_target_close		(SwfdecStreamTarget *	target,
 							 SwfdecStream *		stream);
diff --git a/swfdec/swfdec_xml_socket.c b/swfdec/swfdec_xml_socket.c
index 886a042..424726b 100644
--- a/swfdec/swfdec_xml_socket.c
+++ b/swfdec/swfdec_xml_socket.c
@@ -80,7 +80,7 @@ swfdec_xml_socket_stream_target_error (SwfdecStreamTarget *target,
   swfdec_xml_socket_ensure_closed (xml);
 }
 
-static void
+static gboolean
 swfdec_xml_socket_stream_target_parse (SwfdecStreamTarget *target,
     SwfdecStream *stream)
 {
@@ -114,6 +114,7 @@ swfdec_xml_socket_stream_target_parse (SwfdecStreamTarget *target,
       }
     }
   }
+  return FALSE;
 }
 
 static void
commit 8aa621a7f8b3ceb04b6c640c4653898e95dba32a
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Feb 11 18:25:35 2008 +0100

    emit debug messages about missing plugins

diff --git a/player/swfplay.c b/player/swfplay.c
index 1db23f3..c0288a1 100644
--- a/player/swfplay.c
+++ b/player/swfplay.c
@@ -146,6 +146,8 @@ main (int argc, char *argv[])
   url = swfdec_url_new_from_input (argv[1]);
   swfdec_player_set_url (player, url);
   set_title (GTK_WINDOW (window), url);
+  swfdec_gtk_player_set_missing_plugins_window (SWFDEC_GTK_PLAYER (player),
+      window->window);
   swfdec_url_free (url);
 
   swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player), TRUE);
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index fce0b28..b4f10bc 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -1283,8 +1283,8 @@ swfdec_player_emit_signals (SwfdecPlayer *player)
   /* emit missing-plugin signal for newly discovered plugins */
   if (priv->missing_plugins) {
     GSList *swalk;
-    guint i = 0;
-    char **details = g_new (char *, g_slist_length (priv->missing_plugins) + 1);
+    guint i = 0, n_plugins = g_slist_length (priv->missing_plugins);
+    char **details = g_new (char *, n_plugins + 1);
 
     for (swalk = priv->missing_plugins; swalk; swalk = swalk->next) {
       details[i++] = swalk->data;
@@ -1292,6 +1292,7 @@ swfdec_player_emit_signals (SwfdecPlayer *player)
     details[i] = NULL;
     g_slist_free (priv->missing_plugins);
     priv->missing_plugins = NULL;
+    SWFDEC_INFO ("emitting missing plugins signal for %u plugins", n_plugins);
     g_signal_emit (player, signals[MISSING_PLUGINS], 0, details);
     g_strfreev (details);
   }
@@ -2253,6 +2254,7 @@ swfdec_player_use_audio_codec (SwfdecPlayer *player, guint codec,
     return;
   }
 
+  SWFDEC_INFO ("missing audio plugin: %s\n", detail);
   priv->missing_plugins = g_slist_prepend (priv->missing_plugins, detail);
 }
 
@@ -2274,6 +2276,7 @@ swfdec_player_use_video_codec (SwfdecPlayer *player, guint codec)
     return;
   }
 
+  SWFDEC_INFO ("missing video plugin: %s\n", detail);
   priv->missing_plugins = g_slist_prepend (priv->missing_plugins, detail);
 }
 


More information about the Swfdec-commits mailing list