GstMessage

GstMessage — Lightweight objects to signal the application of pipeline events

Synopsis

#include <gst/gst.h>

                    GstMessage;
enum                GstMessageType;
#define             GST_MESSAGE_SRC                     (message)
#define             GST_MESSAGE_SRC_NAME                (message)
#define             GST_MESSAGE_TIMESTAMP               (message)
#define             GST_MESSAGE_TYPE                    (message)
#define             GST_MESSAGE_TYPE_NAME               (message)
#define             GST_MESSAGE_TRACE_NAME
GQuark              gst_message_type_to_quark           (GstMessageType type);
const gchar*        gst_message_type_get_name           (GstMessageType type);
GstMessage *        gst_message_ref                     (GstMessage *msg);
void                gst_message_unref                   (GstMessage *msg);
GstMessage *        gst_message_copy                    (const GstMessage *msg);
const GstStructure * gst_message_get_structure          (GstMessage *message);
#define             gst_message_make_writable           (msg)
guint32             gst_message_get_seqnum              (GstMessage *message);
void                gst_message_set_seqnum              (GstMessage *message,
                                                         guint32 seqnum);
GstMessage *        gst_message_new_eos                 (GstObject *src);
GstMessage *        gst_message_new_error               (GstObject *src,
                                                         GError *error,
                                                         const gchar *debug);
void                gst_message_parse_error             (GstMessage *message,
                                                         GError **gerror,
                                                         gchar **debug);
GstMessage *        gst_message_new_warning             (GstObject *src,
                                                         GError *error,
                                                         const gchar *debug);
void                gst_message_parse_warning           (GstMessage *message,
                                                         GError **gerror,
                                                         gchar **debug);
GstMessage *        gst_message_new_info                (GstObject *src,
                                                         GError *error,
                                                         const gchar *debug);
void                gst_message_parse_info              (GstMessage *message,
                                                         GError **gerror,
                                                         gchar **debug);
GstMessage *        gst_message_new_tag                 (GstObject *src,
                                                         GstTagList *tag_list);
GstMessage *        gst_message_new_tag_full            (GstObject *src,
                                                         GstPad *pad,
                                                         GstTagList *tag_list);
void                gst_message_parse_tag               (GstMessage *message,
                                                         GstTagList **tag_list);
void                gst_message_parse_tag_full          (GstMessage *message,
                                                         GstPad **pad,
                                                         GstTagList **tag_list);
GstMessage *        gst_message_new_buffering           (GstObject *src,
                                                         gint percent);
void                gst_message_parse_buffering         (GstMessage *message,
                                                         gint *percent);
void                gst_message_set_buffering_stats     (GstMessage *message,
                                                         GstBufferingMode mode,
                                                         gint avg_in,
                                                         gint avg_out,
                                                         gint64 buffering_left);
void                gst_message_parse_buffering_stats   (GstMessage *message,
                                                         GstBufferingMode *mode,
                                                         gint *avg_in,
                                                         gint *avg_out,
                                                         gint64 *buffering_left);
GstMessage *        gst_message_new_state_changed       (GstObject *src,
                                                         GstState oldstate,
                                                         GstState newstate,
                                                         GstState pending);
void                gst_message_parse_state_changed     (GstMessage *message,
                                                         GstState *oldstate,
                                                         GstState *newstate,
                                                         GstState *pending);
GstMessage *        gst_message_new_state_dirty         (GstObject *src);
GstMessage *        gst_message_new_step_done           (GstObject *src,
                                                         GstFormat format,
                                                         guint64 amount,
                                                         gdouble rate,
                                                         gboolean flush,
                                                         gboolean intermediate,
                                                         guint64 duration,
                                                         gboolean eos);
void                gst_message_parse_step_done         (GstMessage *message,
                                                         GstFormat *format,
                                                         guint64 *amount,
                                                         gdouble *rate,
                                                         gboolean *flush,
                                                         gboolean *intermediate,
                                                         guint64 *duration,
                                                         gboolean *eos);
GstMessage *        gst_message_new_clock_provide       (GstObject *src,
                                                         GstClock *clock,
                                                         gboolean ready);
void                gst_message_parse_clock_provide     (GstMessage *message,
                                                         GstClock **clock,
                                                         gboolean *ready);
GstMessage *        gst_message_new_clock_lost          (GstObject *src,
                                                         GstClock *clock);
void                gst_message_parse_clock_lost        (GstMessage *message,
                                                         GstClock **clock);
GstMessage *        gst_message_new_new_clock           (GstObject *src,
                                                         GstClock *clock);
void                gst_message_parse_new_clock         (GstMessage *message,
                                                         GstClock **clock);
GstMessage *        gst_message_new_application         (GstObject *src,
                                                         GstStructure *structure);
GstMessage *        gst_message_new_element             (GstObject *src,
                                                         GstStructure *structure);
GstMessage *        gst_message_new_custom              (GstMessageType type,
                                                         GstObject *src,
                                                         GstStructure *structure);
GstMessage *        gst_message_new_segment_start       (GstObject *src,
                                                         GstFormat format,
                                                         gint64 position);
void                gst_message_parse_segment_start     (GstMessage *message,
                                                         GstFormat *format,
                                                         gint64 *position);
GstMessage *        gst_message_new_segment_done        (GstObject *src,
                                                         GstFormat format,
                                                         gint64 position);
void                gst_message_parse_segment_done      (GstMessage *message,
                                                         GstFormat *format,
                                                         gint64 *position);
GstMessage *        gst_message_new_duration            (GstObject *src,
                                                         GstFormat format,
                                                         gint64 duration);
void                gst_message_parse_duration          (GstMessage *message,
                                                         GstFormat *format,
                                                         gint64 *duration);
GstMessage *        gst_message_new_latency             (GstObject *src);
GstMessage *        gst_message_new_async_start         (GstObject *src,
                                                         gboolean new_base_time);
void                gst_message_parse_async_start       (GstMessage *message,
                                                         gboolean *new_base_time);
GstMessage *        gst_message_new_async_done          (GstObject *src);
GstMessage *        gst_message_new_step_start          (GstObject *src,
                                                         gboolean active,
                                                         GstFormat format,
                                                         guint64 amount,
                                                         gdouble rate,
                                                         gboolean flush,
                                                         gboolean intermediate);
void                gst_message_parse_step_start        (GstMessage *message,
                                                         gboolean *active,
                                                         GstFormat *format,
                                                         guint64 *amount,
                                                         gdouble *rate,
                                                         gboolean *flush,
                                                         gboolean *intermediate);
GstMessage *        gst_message_new_qos                 (GstObject *src,
                                                         gboolean live,
                                                         guint64 running_time,
                                                         guint64 stream_time,
                                                         guint64 timestamp,
                                                         guint64 duration);
void                gst_message_set_qos_values          (GstMessage *message,
                                                         gint64 jitter,
                                                         gdouble proportion,
                                                         gint quality);
void                gst_message_set_qos_stats           (GstMessage *message,
                                                         GstFormat format,
                                                         guint64 processed,
                                                         guint64 dropped);
void                gst_message_parse_qos               (GstMessage *message,
                                                         gboolean *live,
                                                         guint64 *running_time,
                                                         guint64 *stream_time,
                                                         guint64 *timestamp,
                                                         guint64 *duration);
void                gst_message_parse_qos_values        (GstMessage *message,
                                                         gint64 *jitter,
                                                         gdouble *proportion,
                                                         gint *quality);
void                gst_message_parse_qos_stats         (GstMessage *message,
                                                         GstFormat *format,
                                                         guint64 *processed,
                                                         guint64 *dropped);
enum                GstStructureChangeType;
GstMessage *        gst_message_new_structure_change    (GstObject *src,
                                                         GstStructureChangeType type,
                                                         GstElement *owner,
                                                         gboolean busy);
void                gst_message_parse_structure_change  (GstMessage *message,
                                                         GstStructureChangeType *type,
                                                         GstElement **owner,
                                                         gboolean *busy);
GstMessage *        gst_message_new_request_state       (GstObject *src,
                                                         GstState state);
void                gst_message_parse_request_state     (GstMessage *message,
                                                         GstState *state);
enum                GstStreamStatusType;
GstMessage *        gst_message_new_stream_status       (GstObject *src,
                                                         GstStreamStatusType type,
                                                         GstElement *owner);
void                gst_message_parse_stream_status     (GstMessage *message,
                                                         GstStreamStatusType *type,
                                                         GstElement **owner);
void                gst_message_set_stream_status_object
                                                        (GstMessage *message,
                                                         const GValue *object);
const GValue *      gst_message_get_stream_status_object
                                                        (GstMessage *message);

Description

Messages are implemented as a subclass of GstMiniObject with a generic GstStructure as the content. This allows for writing custom messages without requiring an API change while allowing a wide range of different types of messages.

Messages are posted by objects in the pipeline and are passed to the application using the GstBus.

The basic use pattern of posting a message on a GstBus is as follows:

Example 14. Posting a GstMessage


A GstElement usually posts messages on the bus provided by the parent container using gst_element_post_message().

Last reviewed on 2005-11-09 (0.9.4)

Details

GstMessage

typedef struct {
  GstMiniObject mini_object;

  GstMessageType type;
  guint64 timestamp;
  GstObject *src;

  GstStructure *structure;
} GstMessage;

A GstMessage.

GstMiniObject mini_object;

the parent structure

GstMessageType type;

the GstMessageType of the message

guint64 timestamp;

the timestamp of the message

GstObject *src;

the src of the message

GstStructure *structure;

the GstStructure containing the message info.

enum GstMessageType

typedef enum
{
  GST_MESSAGE_UNKNOWN           = 0,
  GST_MESSAGE_EOS               = (1 << 0),
  GST_MESSAGE_ERROR             = (1 << 1),
  GST_MESSAGE_WARNING           = (1 << 2),
  GST_MESSAGE_INFO              = (1 << 3),
  GST_MESSAGE_TAG               = (1 << 4),
  GST_MESSAGE_BUFFERING         = (1 << 5),
  GST_MESSAGE_STATE_CHANGED     = (1 << 6),
  GST_MESSAGE_STATE_DIRTY       = (1 << 7),
  GST_MESSAGE_STEP_DONE         = (1 << 8),
  GST_MESSAGE_CLOCK_PROVIDE     = (1 << 9),
  GST_MESSAGE_CLOCK_LOST        = (1 << 10),
  GST_MESSAGE_NEW_CLOCK         = (1 << 11),
  GST_MESSAGE_STRUCTURE_CHANGE  = (1 << 12),
  GST_MESSAGE_STREAM_STATUS     = (1 << 13),
  GST_MESSAGE_APPLICATION       = (1 << 14),
  GST_MESSAGE_ELEMENT           = (1 << 15),
  GST_MESSAGE_SEGMENT_START     = (1 << 16),
  GST_MESSAGE_SEGMENT_DONE      = (1 << 17),
  GST_MESSAGE_DURATION          = (1 << 18),
  GST_MESSAGE_LATENCY           = (1 << 19),
  GST_MESSAGE_ASYNC_START       = (1 << 20),
  GST_MESSAGE_ASYNC_DONE        = (1 << 21),
  GST_MESSAGE_REQUEST_STATE     = (1 << 22),
  GST_MESSAGE_STEP_START        = (1 << 23),
  GST_MESSAGE_QOS               = (1 << 24),
  GST_MESSAGE_ANY               = ~0
} GstMessageType;

The different message types that are available.

GST_MESSAGE_UNKNOWN

an undefined message

GST_MESSAGE_EOS

end-of-stream reached in a pipeline. The application will only receive this message in the PLAYING state and every time it sets a pipeline to PLAYING that is in the EOS state. The application can perform a flushing seek in the pipeline, which will undo the EOS state again.

GST_MESSAGE_ERROR

an error occured. When the application receives an error message it should stop playback of the pipeline and not assume that more data will be played.

GST_MESSAGE_WARNING

a warning occured.

GST_MESSAGE_INFO

an info message occured

GST_MESSAGE_TAG

a tag was found.

GST_MESSAGE_BUFFERING

the pipeline is buffering. When the application receives a buffering message in the PLAYING state for a non-live pipeline it must PAUSE the pipeline until the buffering completes, when the percentage field in the message is 100%. For live pipelines, no action must be performed and the buffering percentage can be used to inform the user about the progress.

GST_MESSAGE_STATE_CHANGED

a state change happened

GST_MESSAGE_STATE_DIRTY

an element changed state in a streaming thread. This message is deprecated.

GST_MESSAGE_STEP_DONE

a stepping operation finished.

GST_MESSAGE_CLOCK_PROVIDE

an element notifies its capability of providing a clock. This message is used internally and never forwarded to the application.

GST_MESSAGE_CLOCK_LOST

The current clock as selected by the pipeline became unusable. The pipeline will select a new clock on the next PLAYING state change. The application should set the pipeline to PAUSED and back to PLAYING when this message is received.

GST_MESSAGE_NEW_CLOCK

a new clock was selected in the pipeline.

GST_MESSAGE_STRUCTURE_CHANGE

the structure of the pipeline changed. This message is used internally and never forwarded to the application.

GST_MESSAGE_STREAM_STATUS

status about a stream, emitted when it starts, stops, errors, etc..

GST_MESSAGE_APPLICATION

message posted by the application, possibly via an application-specific element.

GST_MESSAGE_ELEMENT

element-specific message, see the specific element's documentation

GST_MESSAGE_SEGMENT_START

pipeline started playback of a segment. This message is used internally and never forwarded to the application.

GST_MESSAGE_SEGMENT_DONE

pipeline completed playback of a segment. This message is forwarded to the application after all elements that posted GST_MESSAGE_SEGMENT_START posted a GST_MESSAGE_SEGMENT_DONE message.

GST_MESSAGE_DURATION

The duration of a pipeline changed. The application can get the new duration with a duration query.

GST_MESSAGE_LATENCY

Posted by elements when their latency changes. The application should recalculate and distribute a new latency. Since: 0.10.12

GST_MESSAGE_ASYNC_START

Posted by elements when they start an ASYNC state change. This message is not forwarded to the application but is used internally. Since: 0.10.13.

GST_MESSAGE_ASYNC_DONE

Posted by elements when they complete an ASYNC state change. The application will only receive this message from the toplevel pipeline. Since: 0.10.13

GST_MESSAGE_REQUEST_STATE

Posted by elements when they want the pipeline to change state. This message is a suggestion to the application which can decide to perform the state change on (part of) the pipeline. Since: 0.10.23.

GST_MESSAGE_STEP_START

A stepping operation was started. Since: 0.10.24

GST_MESSAGE_QOS

A buffer was dropped or an element changed its processing strategy for Quality of Service reasons. Since: 0.10.29

GST_MESSAGE_ANY

mask for all of the above messages.

GST_MESSAGE_SRC()

#define GST_MESSAGE_SRC(message)        (GST_MESSAGE_CAST(message)->src)

Get the object that posted message.

message :

a GstMessage

GST_MESSAGE_SRC_NAME()

#define             GST_MESSAGE_SRC_NAME(message)

Get the name of the object that posted message. Returns "(NULL)" if the message has no source object set.

message :

a GstMessage

Since 0.10.24


GST_MESSAGE_TIMESTAMP()

#define GST_MESSAGE_TIMESTAMP(message)  (GST_MESSAGE_CAST(message)->timestamp)

Get the timestamp of message. This is the timestamp when the message was created.

message :

a GstMessage

GST_MESSAGE_TYPE()

#define GST_MESSAGE_TYPE(message)       (GST_MESSAGE_CAST(message)->type)

Get the GstMessageType of message.

message :

a GstMessage

GST_MESSAGE_TYPE_NAME()

#define GST_MESSAGE_TYPE_NAME(message)  gst_message_type_get_name(GST_MESSAGE_TYPE(message))

Get a constant string representation of the GstMessageType of message.

message :

a GstMessage

Since 0.10.4


GST_MESSAGE_TRACE_NAME

#define GST_MESSAGE_TRACE_NAME  "GstMessage"

The name used for memory allocation tracing


gst_message_type_to_quark ()

GQuark              gst_message_type_to_quark           (GstMessageType type);

Get the unique quark for the given message type.

type :

the message type

Returns :

the quark associated with the message type

gst_message_type_get_name ()

const gchar*        gst_message_type_get_name           (GstMessageType type);

Get a printable name for the given message type. Do not modify or free.

type :

the message type

Returns :

a reference to the static name of the message.

gst_message_ref ()

GstMessage *        gst_message_ref                     (GstMessage *msg);

Convenience macro to increase the reference count of the message.

msg :

the message to ref

Returns :

msg (for convenience when doing assignments)

gst_message_unref ()

void                gst_message_unref                   (GstMessage *msg);

Convenience macro to decrease the reference count of the message, possibly freeing it.

msg :

the message to unref

gst_message_copy ()

GstMessage *        gst_message_copy                    (const GstMessage *msg);

Creates a copy of the message. Returns a copy of the message.

msg :

the message to copy

Returns :

a new copy of msg. MT safe

gst_message_get_structure ()

const GstStructure * gst_message_get_structure          (GstMessage *message);

Access the structure of the message.

message :

The GstMessage.

Returns :

The structure of the message. The structure is still owned by the message, which means that you should not free it and that the pointer becomes invalid when you free the message. MT safe.

gst_message_make_writable()

#define         gst_message_make_writable(msg)  GST_MESSAGE_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (msg)))

Checks if a message is writable. If not, a writable copy is made and returned. Returns a message (possibly a duplicate) that is writable.

MT safe

msg :

the message to make writable

gst_message_get_seqnum ()

guint32             gst_message_get_seqnum              (GstMessage *message);

Retrieve the sequence number of a message.

Messages have ever-incrementing sequence numbers, which may also be set explicitly via gst_message_set_seqnum(). Sequence numbers are typically used to indicate that a message corresponds to some other set of messages or events, for example a SEGMENT_DONE message corresponding to a SEEK event. It is considered good practice to make this correspondence when possible, though it is not required.

Note that events and messages share the same sequence number incrementor; two events or messages will never not have the same sequence number unless that correspondence was made explicitly.

message :

A GstMessage.

Returns :

The message's sequence number. MT safe.

Since 0.10.22


gst_message_set_seqnum ()

void                gst_message_set_seqnum              (GstMessage *message,
                                                         guint32 seqnum);

Set the sequence number of a message.

This function might be called by the creator of a message to indicate that the message relates to other messages or events. See gst_message_get_seqnum() for more information.

MT safe.

message :

A GstMessage.

seqnum :

A sequence number.

Since 0.10.22


gst_message_new_eos ()

GstMessage *        gst_message_new_eos                 (GstObject *src);

Create a new eos message. This message is generated and posted in the sink elements of a GstBin. The bin will only forward the EOS message to the application if all sinks have posted an EOS message.

src :

The object originating the message.

Returns :

The new eos message. MT safe.

gst_message_new_error ()

GstMessage *        gst_message_new_error               (GstObject *src,
                                                         GError *error,
                                                         const gchar *debug);

Create a new error message. The message will copy error and debug. This message is posted by element when a fatal event occured. The pipeline will probably (partially) stop. The application receiving this message should stop the pipeline.

src :

The object originating the message.

error :

The GError for this message.

debug :

A debugging string.

Returns :

The new error message. MT safe.

gst_message_parse_error ()

void                gst_message_parse_error             (GstMessage *message,
                                                         GError **gerror,
                                                         gchar **debug);

Extracts the GError and debug string from the GstMessage. The values returned in the output arguments are copies; the caller must free them when done.

Typical usage of this function might be:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
switch (GST_MESSAGE_TYPE (msg)) {
  case GST_MESSAGE_ERROR: {
    GError *err = NULL;
    gchar *dbg_info = NULL;
    
    gst_message_parse_error (msg, &err, &dbg_info);
    g_printerr ("ERROR from element %s: %s\n",
        GST_OBJECT_NAME (msg->src), err->message);
    g_printerr ("Debugging info: %s\n", (dbg_info) ? dbg_info : "none");
    g_error_free (err);
    g_free (dbg_info);
    break;
  }
  ...
}
...

MT safe.

message :

A valid GstMessage of type GST_MESSAGE_ERROR.

gerror :

Location for the GError. [out]

debug :

Location for the debug message, or NULL. [out]

gst_message_new_warning ()

GstMessage *        gst_message_new_warning             (GstObject *src,
                                                         GError *error,
                                                         const gchar *debug);

Create a new warning message. The message will make copies of error and debug.

src :

The object originating the message.

error :

The GError for this message.

debug :

A debugging string.

Returns :

The new warning message. MT safe.

gst_message_parse_warning ()

void                gst_message_parse_warning           (GstMessage *message,
                                                         GError **gerror,
                                                         gchar **debug);

Extracts the GError and debug string from the GstMessage. The values returned in the output arguments are copies; the caller must free them when done.

MT safe.

message :

A valid GstMessage of type GST_MESSAGE_WARNING.

gerror :

Location for the GError. [out]

debug :

Location for the debug message, or NULL. [out]

gst_message_new_info ()

GstMessage *        gst_message_new_info                (GstObject *src,
                                                         GError *error,
                                                         const gchar *debug);

Create a new info message. The message will make copies of error and debug.

MT safe.

src :

The object originating the message.

error :

The GError for this message.

debug :

A debugging string.

Returns :

The new info message.

Since 0.10.12


gst_message_parse_info ()

void                gst_message_parse_info              (GstMessage *message,
                                                         GError **gerror,
                                                         gchar **debug);

Extracts the GError and debug string from the GstMessage. The values returned in the output arguments are copies; the caller must free them when done.

MT safe.

message :

A valid GstMessage of type GST_MESSAGE_INFO.

gerror :

Location for the GError. [out]

debug :

Location for the debug message, or NULL. [out]

Since 0.10.12


gst_message_new_tag ()

GstMessage *        gst_message_new_tag                 (GstObject *src,
                                                         GstTagList *tag_list);

Create a new tag message. The message will take ownership of the tag list. The message is posted by elements that discovered a new taglist.

src :

The object originating the message.

tag_list :

The tag list for the message.

Returns :

The new tag message. MT safe.

gst_message_new_tag_full ()

GstMessage *        gst_message_new_tag_full            (GstObject *src,
                                                         GstPad *pad,
                                                         GstTagList *tag_list);

Create a new tag message. The message will take ownership of the tag list. The message is posted by elements that discovered a new taglist.

MT safe.

src :

The object originating the message.

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad :

The originating er"

pad<