android client
android client

file:a/.gitignore -> file:b/.gitignore
*.wav *.wav
*.pyc *.pyc
/nbproject/private/ /nbproject/private/
  /output.txt
   
  bin
  gen
  target
  .settings
  .classpath
  .project
  *.keystore
  *.swp
  *.orig
  *.log
  *.properties
  seed.txt
  map.txt
   
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="CompilerConfiguration">
  <option name="DEFAULT_COMPILER" value="Javac" />
  <resourceExtensions />
  <wildcardResourcePatterns>
  <entry name="!?*.java" />
  <entry name="!?*.form" />
  <entry name="!?*.class" />
  <entry name="!?*.groovy" />
  <entry name="!?*.scala" />
  <entry name="!?*.flex" />
  <entry name="!?*.kt" />
  <entry name="!?*.clj" />
  </wildcardResourcePatterns>
  <annotationProcessing>
  <profile default="true" name="Default" enabled="false">
  <processorPath useClasspath="true" />
  </profile>
  </annotationProcessing>
  </component>
  </project>
 
 
  <component name="CopyrightManager">
  <settings default="">
  <module2copyright />
  </settings>
  </component>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectResources"> <component name="ProjectResources">
<default-html-doctype>jar:file:\C:\Program Files (x86)\JetBrains\PhpStorm 5.0.2\lib\webide.jar!\resources\html5-schema\html5.rnc</default-html-doctype> <default-html-doctype>jar:file:\C:\Program Files (x86)\JetBrains\PhpStorm 5.0.2\lib\webide.jar!\resources\html5-schema\html5.rnc</default-html-doctype>
</component> </component>
<component name="ProjectRootManager" version="2" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" assert-keyword="false" jdk-15="false" />
</project> </project>
   
   
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4"> <module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="FacetManager">
  <facet type="Python" name="Python">
  <configuration sdkName="" />
  </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="false">
<content url="file://$MODULE_DIR$" /> <content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>
   
   
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="Palette2">
  <group name="Swing">
  <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
  </item>
  <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
  </item>
  <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
  </item>
  <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
  <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
  </item>
  <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
  <initial-values>
  <property name="text" value="Button" />
  </initial-values>
  </item>
  <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
  <initial-values>
  <property name="text" value="RadioButton" />
  </initial-values>
  </item>
  <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
  <initial-values>
  <property name="text" value="CheckBox" />
  </initial-values>
  </item>
  <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
  <initial-values>
  <property name="text" value="Label" />
  </initial-values>
  </item>
  <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
  <preferred-size width="150" height="-1" />
  </default-constraints>
  </item>
  <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
  <preferred-size width="150" height="-1" />
  </default-constraints>
  </item>
  <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
  <preferred-size width="150" height="-1" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
  </item>
  <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
  <preferred-size width="200" height="200" />
  </default-constraints>
  </item>
  <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
  <preferred-size width="200" height="200" />
  </default-constraints>
  </item>
  <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
  </item>
  <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
  </item>
  <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
  </item>
  <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
  </item>
  <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
  <preferred-size width="-1" height="20" />
  </default-constraints>
  </item>
  <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
  </item>
  <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
  </item>
  </group>
  </component>
  </project>
 
 
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" name="Default" comment=""> <list default="true" id="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" name="Default" comment="">
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/output.txt" afterPath="$PROJECT_DIR$/output.txt" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/Chart.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/Chart.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/viewcalls.php" afterPath="$PROJECT_DIR$/viewcalls.php" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/Color.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/Color.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/Flotr.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/Flotr.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/Graph.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/Graph.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/lib/base64.js" afterPath="$PROJECT_DIR$/js/flotr2/lib/base64.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/make/basic.json" afterPath="$PROJECT_DIR$/js/flotr2/make/basic.json" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/make/build.json" afterPath="$PROJECT_DIR$/js/flotr2/make/build.json" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/calls.json.php" afterPath="$PROJECT_DIR$/calls.json.php" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/examples.js" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/examples.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/make/examples.json" afterPath="$PROJECT_DIR$/js/flotr2/make/examples.json" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/extending-flotr.html" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/extending-flotr.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/make/flotr2.json" afterPath="$PROJECT_DIR$/js/flotr2/make/flotr2.json" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/js/flotr2.stable.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/js/flotr2.stable.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/lib/codemirror/lib/util/formatting.js" afterPath="$PROJECT_DIR$/js/flotr2/examples/lib/codemirror/lib/util/formatting.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/make/ie.json" afterPath="$PROJECT_DIR$/js/flotr2/make/ie.json" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/index.html" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/index.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/index.html" afterPath="$PROJECT_DIR$/js/flotr2/spec/index.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/lib/jasmine/jasmine-html.js" afterPath="$PROJECT_DIR$/js/flotr2/lib/jasmine/jasmine-html.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/lib/jasmine/jasmine.css" afterPath="$PROJECT_DIR$/js/flotr2/lib/jasmine/jasmine.css" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/lib/jasmine/jasmine.js" afterPath="$PROJECT_DIR$/js/flotr2/lib/jasmine/jasmine.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/json-data.html" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/json-data.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/json-real-data.html" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/json-real-data.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/json.txt" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/json.txt" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/make/lib.json" afterPath="$PROJECT_DIR$/js/flotr2/make/lib.json" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/logarithmic-scale.html" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/logarithmic-scale.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/mouse-zoom-preview.html" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/mouse-zoom-preview.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/lib/prototype.js" afterPath="$PROJECT_DIR$/js/flotr2/lib/prototype.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/examples/old_examples/style.css" afterPath="$PROJECT_DIR$/js/flotr2/examples/old_examples/style.css" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/js/test-background.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/js/test-background.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/js/test-boundaries.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/js/test-boundaries.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/flotr2/spec/js/test-mountain-nulls.js" afterPath="$PROJECT_DIR$/js/flotr2/spec/js/test-mountain-nulls.js" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
</list> </list>
<ignored path="scannr.iws" /> <ignored path="scannr.iws" />
<ignored path=".idea/workspace.xml" /> <ignored path=".idea/workspace.xml" />
  <file path="/Dummy.txt" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356175572544" ignored="false" />
  <file path="/calllog.php" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356153807482" ignored="false" />
  <file path="/scannr.py" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356154551131" ignored="false" />
  <file path="/start_script.py" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356155203132" ignored="false" />
  <file path="/a.java" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356155211924" ignored="false" />
  <file path="/a.php" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356155216083" ignored="false" />
  <file path="/calls.json.php" changelist="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" time="1356155700744" ignored="false" />
<option name="TRACKING_ENABLED" value="true" /> <option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" /> <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor"> <component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" /> <option name="PATCH_PATH" value="" />
</component> </component>
<component name="DaemonCodeAnalyzer"> <component name="DaemonCodeAnalyzer">
<disable_hints /> <disable_hints />
</component> </component>
  <component name="DebuggerManager">
  <breakpoint_any default_suspend_policy="SuspendAll" default_condition_enabled="true">
  <breakpoint>
  <option name="NOTIFY_CAUGHT" value="true" />
  <option name="NOTIFY_UNCAUGHT" value="true" />
  <option name="ENABLED" value="false" />
  <option name="LOG_ENABLED" value="false" />
  <option name="LOG_EXPRESSION_ENABLED" value="false" />
  <option name="SUSPEND_POLICY" value="SuspendAll" />
  <option name="SUSPEND" value="true" />
  <option name="COUNT_FILTER_ENABLED" value="false" />
  <option name="COUNT_FILTER" value="0" />
  <option name="CONDITION_ENABLED" value="true" />
  <option name="CLASS_FILTERS_ENABLED" value="false" />
  <option name="INSTANCE_FILTERS_ENABLED" value="false" />
  <option name="CONDITION" value="" />
  <option name="LOG_MESSAGE" value="" />
  </breakpoint>
  <breakpoint>
  <option name="NOTIFY_CAUGHT" value="true" />
  <option name="NOTIFY_UNCAUGHT" value="true" />
  <option name="ENABLED" value="false" />
  <option name="LOG_ENABLED" value="false" />
  <option name="LOG_EXPRESSION_ENABLED" value="false" />
  <option name="SUSPEND_POLICY" value="SuspendAll" />
  <option name="SUSPEND" value="true" />
  <option name="COUNT_FILTER_ENABLED" value="false" />
  <option name="COUNT_FILTER" value="0" />
  <option name="CONDITION_ENABLED" value="true" />
  <option name="CLASS_FILTERS_ENABLED" value="false" />
  <option name="INSTANCE_FILTERS_ENABLED" value="false" />
  <option name="CONDITION" value="" />
  <option name="LOG_MESSAGE" value="" />
  </breakpoint>
  </breakpoint_any>
  <ui_properties default_suspend_policy="SuspendAll" default_condition_enabled="true" />
  <breakpoint_rules />
  <ui_properties />
  </component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" /> <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
  <component name="FavoritesManager">
  <favorites_list name="scannr" />
  </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf> <leaf>
<file leaf-file-name="viewcalls.php" pinned="false" current="true" current-in-tab="true"> <file leaf-file-name="calllog.php" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/viewcalls.php"> <entry file="file://$PROJECT_DIR$/calllog.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="41" column="69" selection-start="1388" selection-end="1388" vertical-scroll-proportion="1.2659575"> <state line="2" column="0" selection-start="34" selection-end="226" vertical-scroll-proportion="0.0">
<folding>  
<element signature="e#255#287#0" expanded="true" />  
</folding>  
</state>  
</provider>  
</entry>  
</file>  
<file leaf-file-name="common.inc.php" pinned="false" current="false" current-in-tab="false">  
<entry file="file://$PROJECT_DIR$/common.inc.php">  
<provider selected="true" editor-type-id="text-editor">  
<state line="60" column="117" selection-start="2262" selection-end="2262" vertical-scroll-proportion="-39.23077">  
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="calls.json.php" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="calls.json.php" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/calls.json.php"> <entry file="file://$PROJECT_DIR$/calls.json.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="72" column="41" selection-start="2843" selection-end="2843" vertical-scroll-proportion="-43.153847"> <state line="13" column="53" selection-start="499" selection-end="499" vertical-scroll-proportion="0.25930852">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
</leaf> </leaf>
</component> </component>
<component name="FindManager"> <component name="FindManager">
<FindUsagesManager> <FindUsagesManager>
<setting name="OPEN_NEW_TAB" value="false" /> <setting name="OPEN_NEW_TAB" value="false" />
</FindUsagesManager> </FindUsagesManager>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
  <option name="SYNC_SETTING" value="DONT" />
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="GitLogSettings">
  <option name="myDateState">
  <MyDateState />
  </option>
</component> </component>
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="changedFiles"> <option name="changedFiles">
<list> <list>
  <option value="$PROJECT_DIR$/common.inc.php" />
  <option value="$PROJECT_DIR$/viewcalls.php" />
  <option value="$PROJECT_DIR$/calllog.php" />
<option value="$PROJECT_DIR$/scannr.py" /> <option value="$PROJECT_DIR$/scannr.py" />
<option value="$PROJECT_DIR$/common.inc.php" />  
<option value="$PROJECT_DIR$/calls.json.php" /> <option value="$PROJECT_DIR$/calls.json.php" />
<option value="$PROJECT_DIR$/viewcalls.php" />  
</list> </list>
</option> </option>
</component> </component>
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" /> <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" interpreter_name="PHP" />
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="x" value="619" /> <option name="y" value="22" />
<option name="width" value="825" /> <option name="width" value="1680" />
<option name="height" value="600" /> <option name="height" value="937" />
</component> </component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true"> <component name="ProjectLevelVcsManager" settingsEditedManually="true">
<OptionsSetting value="true" id="Add" /> <OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" /> <OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" /> <OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" /> <OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" /> <OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" /> <OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" /> <ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" /> <ConfirmationsSetting value="0" id="Remove" />
</component> </component>
<component name="ProjectReloadState"> <component name="ProjectReloadState">
<option name="STATE" value="0" /> <option name="STATE" value="0" />
</component> </component>
<component name="ProjectView"> <component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5"> <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
<flattenPackages /> <flattenPackages />
<showMembers /> <showMembers />
<showModules /> <showModules />
<showLibraryContents ProjectPane="true" /> <showLibraryContents ProjectPane="true" />
<hideEmptyPackages /> <hideEmptyPackages />
<abbreviatePackageNames /> <abbreviatePackageNames />
<autoscrollToSource /> <autoscrollToSource />
<autoscrollFromSource /> <autoscrollFromSource />
<sortByType /> <sortByType />
</navigator> </navigator>
<panes> <panes>
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="scannr" /> <option name="myItemId" value="scannr" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannr" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannr" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" /> <pane id="Scope" />
  <pane id="PackagesPane" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="options.splitter.main.proportions" value="0.3" /> <property name="options.splitter.main.proportions" value="0.3" />
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
<property name="options.lastSelected" value="project.propVCSSupport.Mappings" /> <property name="options.lastSelected" value="tasks" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../busui/myway/myway_timeliness.php" /> <property name="last_opened_file_path" value="$PROJECT_DIR$/../busui/myway/myway_timeliness.php" />
  <property name="FullScreen" value="false" />
  <property name="options.searchVisible" value="true" />
<property name="options.splitter.details.proportions" value="0.2" /> <property name="options.splitter.details.proportions" value="0.2" />
<property name="options.searchVisible" value="true" /> </component>
  <component name="PyConsoleOptionsProvider">
  <option name="myPythonConsoleState">
  <PyConsoleSettings />
  </option>
  <option name="myDjangoConsoleState">
  <PyConsoleSettings />
  </option>
</component> </component>
<component name="RunManager"> <component name="RunManager">
<configuration default="true" type="PHPUnitRunConfigurationType" factoryName="PHPUnit"> <configuration default="true" type="PHPUnitRunConfigurationType" factoryName="PHPUnit">
<TestRunner /> <TestRunner />
<method /> <method />
</configuration> </configuration>
<configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console"> <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console">
<method /> <method />
</configuration> </configuration>
<configuration default="true" type="JavascriptDebugSession" factoryName="Local"> <configuration default="true" type="JavascriptDebugSession" factoryName="Local" singleton="true">
<JSDebuggerConfigurationSettings> <JSDebuggerConfigurationSettings>
<option name="engineId" value="embedded" /> <option name="engineId" value="embedded" />
<option name="fileUrl" /> <option name="fileUrl" />
</JSDebuggerConfigurationSettings> </JSDebuggerConfigurationSettings>
<method /> <method />
</configuration> </configuration>
<list size="0" /> <list size="0" />
</component> </component>
<component name="ShelveChangesManager" show_recycled="false" /> <component name="ShelveChangesManager" show_recycled="false" />
<component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false"> <component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false">
<option name="USER" value="" /> <option name="USER" value="" />
<option name="PASSWORD" value="" /> <option name="PASSWORD" value="" />
<option name="mySSHConnectionTimeout" value="30000" /> <option name="mySSHConnectionTimeout" value="30000" />
<option name="mySSHReadTimeout" value="30000" /> <option name="mySSHReadTimeout" value="30000" />
<option name="LAST_MERGED_REVISION" /> <option name="LAST_MERGED_REVISION" />
<option name="MERGE_DRY_RUN" value="false" /> <option name="MERGE_DRY_RUN" value="false" />
<option name="MERGE_DIFF_USE_ANCESTRY" value="true" /> <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
<option name="UPDATE_LOCK_ON_DEMAND" value="false" /> <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
<option name="IGNORE_SPACES_IN_MERGE" value="false" /> <option name="IGNORE_SPACES_IN_MERGE" value="false" />
<option name="DETECT_NESTED_COPIES" value="true" /> <option name="DETECT_NESTED_COPIES" value="true" />
<option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" /> <option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
<option name="IGNORE_SPACES_IN_ANNOTATE" value="true" /> <option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
<option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" /> <option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
<option name="FORCE_UPDATE" value="false" /> <option name="FORCE_UPDATE" value="false" />
<option name="IGNORE_EXTERNALS" value="false" /> <option name="IGNORE_EXTERNALS" value="false" />
<myIsUseDefaultProxy>false</myIsUseDefaultProxy> <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
</component> </component>
<component name="TaskManager"> <component name="TaskManager">
<task active="true" id="Default" summary="Default task"> <task active="true" id="Default" summary="Default task">
<changelist id="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" name="Default" comment="" /> <changelist id="f90ee5b5-97e4-47ec-9b14-d4f4e896f100" name="Default" comment="" />
<created>1350026709905</created> <created>1350026709905</created>
<updated>1350026709905</updated> <updated>1350026709905</updated>
</task> </task>
<servers /> <servers />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="619" y="0" width="825" height="600" extended-state="0" /> <frame x="0" y="22" width="1680" height="937" extended-state="6" />
<editor active="false" /> <editor active="true" />
<layout> <layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32925338" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
  <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
  <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />  
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.44036698" sideWeight="0.6706349" order="0" side_tool="false" content_ui="combo" /> <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.19645043" sideWeight="0.6707466" order="0" side_tool="false" content_ui="combo" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32936507" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />  
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />  
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />  
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
</layout> </layout>
</component> </component>
<component name="VcsContentAnnotationSettings"> <component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" /> <option name="myLimit" value="2678400000" />
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" /> <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" /> <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
<option name="CHECK_NEW_TODO" value="true" /> <option name="CHECK_NEW_TODO" value="true" />
<option name="myTodoPanelSettings"> <option name="myTodoPanelSettings">
<value> <value>
<are-packages-shown value="false" /> <are-packages-shown value="false" />
<are-modules-shown value="false" /> <are-modules-shown value="false" />
<flatten-packages value="false" /> <flatten-packages value="false" />
<is-autoscroll-to-source value="false" /> <is-autoscroll-to-source value="false" />
</value> </value>
</option> </option>
<option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" /> <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
<option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" /> <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
<option name="PERFORM_EDIT_IN_BACKGROUND" value="true" /> <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
<option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" /> <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
<option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" /> <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
<option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" /> <option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
<option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" /> <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
<option name="CHANGED_ON_SERVER_INTERVAL" value="60" /> <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
<option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" /> <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" /> <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" /> <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="SHORT_DIFF_HORISONTALLY" value="true" /> <option name="SHORT_DIFF_HORISONTALLY" value="true" />
<option name="SHORT_DIFF_EXTRA_LINES" value="2" /> <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
<option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" /> <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
<option name="INCLUDE_TEXT_INTO_PATCH" value="false" /> <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
<option name="INCLUDE_TEXT_INTO_SHELF" value="false" /> <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
<option name="SHOW_FILE_HISTORY_DETAILS" value="true" /> <option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
<option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" /> <option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" />
  <option name="SHOW_DIRTY_RECURSIVELY" value="false" />
  <option name="LIMIT_HISTORY" value="true" />
  <option name="MAXIMUM_HISTORY_ROWS" value="1000" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" /> <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" /> <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
<option name="LAST_COMMIT_MESSAGE" /> <option name="LAST_COMMIT_MESSAGE" />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" /> <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" /> <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" /> <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" /> <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" /> <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" /> <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" /> <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
<option name="ACTIVE_VCS_NAME" /> <option name="ACTIVE_VCS_NAME" />
<option name="UPDATE_GROUP_BY_PACKAGES" value="false" /> <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" /> <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" /> <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" /> <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
</component> </component>
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager /> <breakpoint-manager />
</component> </component>
  <component name="antWorkspaceConfiguration">
  <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
  <option name="FILTER_TARGETS" value="false" />
  </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/viewcalls.php"> <entry file="file://$PROJECT_DIR$/calllog.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="2" column="13" selection-start="46" selection-end="46" vertical-scroll-proportion="0.0"> <state line="9" column="0" selection-start="189" selection-end="189" vertical-scroll-proportion="0.0">
<folding>  
<element signature="e#255#287#0" expanded="true" />  
</folding>  
</state>  
</provider>  
</entry>  
<entry file="file://$PROJECT_DIR$/common.inc.php">  
<provider selected="true" editor-type-id="text-editor">  
<state line="34" column="0" selection-start="1179" selection-end="1179" vertical-scroll-proportion="0.0">  
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/calls.json.php"> <entry file="file://$PROJECT_DIR$/scannr.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="2" column="9" selection-start="42" selection-end="42" vertical-scroll-proportion="0.0"> <state line="12" column="21" selection-start="328" selection-end="328" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/calllog.php">
  <provider selected="true" editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
  <entry file="file://$PROJECT_DIR$/viewcalls.php">
  <provider selected="true" editor-type-id="text-editor">
  <state line="2" column="13" selection-start="46" selection-end="46" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/common.inc.php">
  <provider selected="true" editor-type-id="text-editor">
  <state line="34" column="0" selection-start="1179" selection-end="1179" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/calls.json.php">
  <provider selected="true" editor-type-id="text-editor">
  <state line="2" column="9" selection-start="42" selection-end="42" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
<entry file="file://$PROJECT_DIR$/trunklog.php"> <entry file="file://$PROJECT_DIR$/trunklog.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" /> <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/../disclosr/include/template.inc.php"> <entry file="file://$PROJECT_DIR$/../disclosr/include/template.inc.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="72" column="93" selection-start="2545" selection-end="2635" vertical-scroll-proportion="0.43404254" /> <state line="72" column="93" selection-start="2545" selection-end="2635" vertical-scroll-proportion="0.43404254" />
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/../disclosr/include/common.inc.php"> <entry file="file://$PROJECT_DIR$/../disclosr/include/common.inc.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" /> <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
</provider> </provider>
</entry> </entry>
<entry file="file://C:/tmp/h5bp-html5-boilerplate-2279296/index.html">  
<provider selected="true" editor-type-id="text-editor">  
<state line="38" column="11" selection-start="1245" selection-end="1982" vertical-scroll-proportion="0.93352604" />  
</provider>  
</entry>  
<entry file="file://$PROJECT_DIR$/../busui/myway/myway_timeliness.php"> <entry file="file://$PROJECT_DIR$/../busui/myway/myway_timeliness.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="27" column="5" selection-start="1003" selection-end="1018" vertical-scroll-proportion="26.346153" /> <state line="27" column="5" selection-start="1003" selection-end="1018" vertical-scroll-proportion="26.346153" />
</provider> </provider>
</entry> </entry>
  <entry file="file://$PROJECT_DIR$/snd.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/common.inc.php">
  <provider selected="true" editor-type-id="text-editor">
  <state line="60" column="117" selection-start="2262" selection-end="2262" vertical-scroll-proportion="-39.23077" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/viewcalls.php">
  <provider selected="true" editor-type-id="text-editor">
  <state line="41" column="69" selection-start="1388" selection-end="1388" vertical-scroll-proportion="1.2659575" />
  </provider>
  </entry>
<entry file="file://$PROJECT_DIR$/scannr.py"> <entry file="file://$PROJECT_DIR$/scannr.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="66" column="23" selection-start="2084" selection-end="2084" vertical-scroll-proportion="0.0" /> <state line="80" column="64" selection-start="2271" selection-end="2271" vertical-scroll-proportion="0.0" />
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/snd.py"> <entry file="file://$PROJECT_DIR$/calllog.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" /> <state line="2" column="0" selection-start="34" selection-end="226" vertical-scroll-proportion="0.0">
</provider>  
</entry>  
<entry file="file://$PROJECT_DIR$/common.inc.php">  
<provider selected="true" editor-type-id="text-editor">  
<state line="60" column="117" selection-start="2262" selection-end="2262" vertical-scroll-proportion="-39.23077">  
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/calls.json.php"> <entry file="file://$PROJECT_DIR$/calls.json.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="72" column="41" selection-start="2843" selection-end="2843" vertical-scroll-proportion="-43.153847"> <state line="13" column="53" selection-start="499" selection-end="499" vertical-scroll-proportion="0.25930852">
<folding /> <folding />
</state>  
</provider>  
</entry>  
<entry file="file://$PROJECT_DIR$/viewcalls.php">  
<provider selected="true" editor-type-id="text-editor">  
<state line="41" column="69" selection-start="1388" selection-end="1388" vertical-scroll-proportion="1.2659575">  
<folding>  
<element signature="e#255#287#0" expanded="true" />  
</folding>  
</state> </state>
</provider> </provider>
</entry> </entry>
</component> </component>
</project> </project>
   
   
file:a/404.html -> file:b/404.html
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Page Not Found :(</title> <title>Page Not Found :(</title>
<style> <style>
::-moz-selection { ::-moz-selection {
background: #b3d4fc; background: #b3d4fc;
text-shadow: none; text-shadow: none;
} }
   
::selection { ::selection {
background: #b3d4fc; background: #b3d4fc;
text-shadow: none; text-shadow: none;
} }
   
html { html {
padding: 30px 10px; padding: 30px 10px;
font-size: 20px; font-size: 20px;
line-height: 1.4; line-height: 1.4;
color: #737373; color: #737373;
background: #f0f0f0; background: #f0f0f0;
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%; -ms-text-size-adjust: 100%;
} }
   
html, html,
input { input {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
} }
   
body { body {
max-width: 500px; max-width: 500px;
_width: 500px; _width: 500px;
padding: 30px 20px 50px; padding: 30px 20px 50px;
border: 1px solid #b3b3b3; border: 1px solid #b3b3b3;
border-radius: 4px; border-radius: 4px;
margin: 0 auto; margin: 0 auto;
box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff; box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
background: #fcfcfc; background: #fcfcfc;
} }
   
h1 { h1 {
margin: 0 10px; margin: 0 10px;
font-size: 50px; font-size: 50px;
text-align: center; text-align: center;
} }
   
h1 span { h1 span {
color: #bbb; color: #bbb;
} }
   
h3 { h3 {
margin: 1.5em 0 0.5em; margin: 1.5em 0 0.5em;
} }
   
p { p {
margin: 1em 0; margin: 1em 0;
} }
   
ul { ul {
padding: 0 0 0 40px; padding: 0 0 0 40px;
margin: 1em 0; margin: 1em 0;
} }
   
.container { .container {
max-width: 380px; max-width: 380px;
_width: 380px; _width: 380px;
margin: 0 auto; margin: 0 auto;
} }
   
/* google search */ /* google search */
   
#goog-fixurl ul { #goog-fixurl ul {
list-style: none; list-style: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
} }
   
#goog-fixurl form { #goog-fixurl form {
margin: 0; margin: 0;
} }
   
#goog-wm-qt, #goog-wm-qt,
#goog-wm-sb { #goog-wm-sb {
border: 1px solid #bbb; border: 1px solid #bbb;
font-size: 16px; font-size: 16px;
line-height: normal; line-height: normal;
vertical-align: top; vertical-align: top;
color: #444; color: #444;
border-radius: 2px; border-radius: 2px;
} }
   
#goog-wm-qt { #goog-wm-qt {
width: 220px; width: 220px;
height: 20px; height: 20px;
padding: 5px; padding: 5px;
margin: 5px 10px 0 0; margin: 5px 10px 0 0;
box-shadow: inset 0 1px 1px #ccc; box-shadow: inset 0 1px 1px #ccc;
} }
   
#goog-wm-sb { #goog-wm-sb {
display: inline-block; display: inline-block;
height: 32px; height: 32px;
padding: 0 10px; padding: 0 10px;
margin: 5px 0 0; margin: 5px 0 0;
white-space: nowrap; white-space: nowrap;
cursor: pointer; cursor: pointer;
background-color: #f5f5f5; background-color: #f5f5f5;
background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -webkit-linear-gradient(rgba(255, 255, 255, 0), #f1f1f1);
background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -moz-linear-gradient(rgba(255, 255, 255, 0), #f1f1f1);
background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -ms-linear-gradient(rgba(255, 255, 255, 0), #f1f1f1);
background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -o-linear-gradient(rgba(255, 255, 255, 0), #f1f1f1);
-webkit-appearance: none; -webkit-appearance: none;
-moz-appearance: none; -moz-appearance: none;
appearance: none; appearance: none;
*overflow: visible; *overflow: visible;
*display: inline; *display: inline;
*zoom: 1; *zoom: 1;
} }
   
#goog-wm-sb:hover, #goog-wm-sb:hover,
#goog-wm-sb:focus { #goog-wm-sb:focus {
border-color: #aaa; border-color: #aaa;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
background-color: #f8f8f8; background-color: #f8f8f8;
} }
   
#goog-wm-qt:hover, #goog-wm-qt:hover,
#goog-wm-qt:focus { #goog-wm-qt:focus {
border-color: #105cb6; border-color: #105cb6;
outline: 0; outline: 0;
color: #222; color: #222;
} }
   
input::-moz-focus-inner { input::-moz-focus-inner {
padding: 0; padding: 0;
border: 0; border: 0;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<h1>Not found <span>:(</span></h1> <h1>Not found <span>:(</span></h1>
<p>Sorry, but the page you were trying to view does not exist.</p>  
<p>It looks like this was the result of either:</p> <p>Sorry, but the page you were trying to view does not exist.</p>
<ul>  
<li>a mistyped address</li> <p>It looks like this was the result of either:</p>
<li>an out-of-date link</li> <ul>
</ul> <li>a mistyped address</li>
<script> <li>an out-of-date link</li>
var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host; </ul>
</script> <script>
<script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> var GOOG_FIXURL_LANG = (navigator.language || '').slice(0, 2), GOOG_FIXURL_SITE = location.host;
</div> </script>
</body> <script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
  </div>
  </body>
</html> </html>
   
<?php <?php
include ('common.inc.php'); include ('common.inc.php');
$sth = $conn->prepare( 'select * from recordings $sth = $conn->prepare('select * from recordings
order by call_timestamp desc limit 10'); order by call_timestamp desc limit 1000');
   
$sth->execute(Array()); $sth->execute(Array());
   
$row = 0; $row = 0;
echo "<table>"; echo "<table>";
foreach ($sth->fetchAll() as $data) { foreach ($sth->fetchAll() as $data) {
   
   
echo "<tr>"; echo "<tr>";
for ($c=0; $c < count($data); $c++) { for ($c = 0; $c < count($data); $c++) {
echo '<td>'.$data[$c] . "</td>\n"; echo '<td>' . $data[$c] . "</td>\n";
} }
echo "</tr>"; echo "</tr>";
} }
$row++; $row++;
echo "</table>"; echo "</table>";
?>  
   
<?php <?php
include('common.inc.php'); include('common.inc.php');
function getTGIDValuesByHour($TGID, $timeFrom, $timeTo) { function getTGIDValuesByHour($TGID, $timeFrom, $timeTo)
  {
global $conn; global $conn;
$sth = $conn->prepare( 'select tgid, min(call_timestamp) as time, count(*), min(length), max(length), avg(length), stddev(length) from recordings $sth = $conn->prepare('select tgid, min(call_timestamp) as time, count(*), min(length), max(length), avg(length), stddev(length) from recordings
  where call_timestamp between to_timestamp(?) and to_timestamp(?)
group by tgid, date_trunc(\'hour\', call_timestamp) order by time'); group by tgid, date_trunc(\'hour\', call_timestamp) order by time');
   
$sth->execute( ); $sth->execute(Array($timeFrom, $timeTo));
//Array($TGID, $timeFrom, $timeTo) return $sth->fetchAll(PDO::FETCH_ASSOC);
return $sth->fetchAll();  
   
   
} }
   
function getTGIDValuesByDay($TGID, $dayFrom, $dayTo) { function getTGIDValuesByDay($TGID, $dayFrom, $dayTo)
  {
global $conn; global $conn;
$sth = $conn->prepare('select min(time) as time, min(value), max(value), avg(value), stddev(value) from sensor_values where sensor_id = ? $sth = $conn->prepare('select min(time) as time, min(value), max(value), avg(value), stddev(value) from sensor_values where sensor_id = ?
group by sensor_id, date_trunc(\'day\', time) order by time'); group by sensor_id, date_trunc(\'day\', time) order by time');
   
$sth->execute( Array($TGID)); $sth->execute(Array($TGID));
return $sth->fetchAll(); return $sth->fetchAll(PDO::FETCH_ASSOC);
} }
function getTGIDDataYears($TGID, $timeFrom, $timeTo) { function getTGIDDataYears($TGID, $timeFrom, $timeTo)
  {
global $conn; global $conn;
$sth = $conn->prepare("select distinct extract('year' from call_timestamp) as year from recordings where tgid = ? order by year"); $sth = $conn->prepare("select distinct extract('year' from call_timestamp) as year from recordings where tgid = ? order by year");
   
$sth->execute(Array($TGID)); $sth->execute(Array($TGID));
return $sth->fetchAll(); return $sth->fetchAll(PDO::FETCH_ASSOC);
} }
   
function getTGIDDataMonths($TGID, $timeFrom, $timeTo) { function getTGIDDataMonths($TGID, $timeFrom, $timeTo)
  {
global $conn; global $conn;
$sth = $conn->prepare("select distinct extract('month' from call_timestamp) as month, extract('year' from call_timestamp) as year from recordings where tgid = ? order by year, month"); $sth = $conn->prepare("select distinct extract('month' from call_timestamp) as month, extract('year' from call_timestamp) as year from recordings where tgid = ? order by year, month");
   
$sth->execute(Array($TGID)); $sth->execute(Array($TGID));
return $sth->fetchAll(); return $sth->fetchAll(PDO::FETCH_ASSOC);
} }
   
function getTGIDDataDays($TGID, $timeFrom, $timeTo) { function getTGIDDataDays($TGID, $timeFrom, $timeTo)
  {
global $conn; global $conn;
$sth = $conn->prepare("select distinct extract('day' from call_timestamp) as day, extract('month' from call_timestamp) as month, extract('year' from call_timestamp) as year from recordings where tgid = ? order by year,month,day"); $sth = $conn->prepare("select distinct extract('day' from call_timestamp) as day, extract('month' from call_timestamp) as month, extract('year' from call_timestamp) as year from recordings where tgid = ? order by year,month,day");
   
   
$sth->execute(Array($TGID)); $sth->execute(Array($TGID));
return $sth->fetchAll(); return $sth->fetchAll(PDO::FETCH_ASSOC);
} }
$action = (isset($_REQUEST['action']) ? $_REQUEST['action'] : ''); $action = (isset($_REQUEST['action']) ? $_REQUEST['action'] : '');
$TGID = (isset($_REQUEST['tgid']) ? $_REQUEST['tgid'] : ''); $TGID = (isset($_REQUEST['tgid']) ? $_REQUEST['tgid'] : '');
$timefrom = (isset($_REQUEST['from']) ? $_REQUEST['from'] : ''); $timefrom = (isset($_REQUEST['from']) ? $_REQUEST['from'] : '');
$timeto = (isset($_REQUEST['to']) ? $_REQUEST['to'] : ''); $timeto = (isset($_REQUEST['to']) ? $_REQUEST['to'] : '');
   
  if ($action == "data") {
  $sth = $conn->prepare('select * from recordings
  order by call_timestamp desc limit 100');
   
  $sth->execute(Array());
   
  echo json_encode ($sth->fetchAll(PDO::FETCH_ASSOC));
  }
if ($action == "data_description") { if ($action == "data_description") {
$timefrom = strtotime($timefrom); $timefrom = strtotime($timefrom);
$timeto = strtotime($timeto); $timeto = strtotime($timeto);
$years = getTGIDDataYears($TGID, $timefrom, $timeto); $years = getTGIDDataYears($TGID, $timefrom, $timeto);
   
$months = getTGIDDataMonths($TGID, $timefrom, $timeto); $months = getTGIDDataMonths($TGID, $timefrom, $timeto);
$days = getTGIDDataDays($TGID, $timefrom, $timeto); $days = getTGIDDataDays($TGID, $timefrom, $timeto);
   
echo json_encode(Array("years" => $years, "months" => $months, "days" => $days echo json_encode(Array("years" => $years, "months" => $months, "days" => $days
)); ));
} }
   
   
if (strpos($action,"graph") !== false) { if (strpos($action, "graph") !== false) {
$values = getTGIDValuesByHour($TGID, $timefrom, $timeto); $values = getTGIDValuesByHour($TGID, $timefrom, $timeto);
$label = $TGID; $label = $TGID;
$data = Array(); $data = Array();
$tzoffset = get_timezone_offset("UTC"); $tzoffset = get_timezone_offset("UTC");
foreach ($values as $value) { foreach ($values as $value) {
if ($action == "graphlength") { if ($action == "graphlength") {
$data[$value['tgid']][] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['avg'])); $data[$value['tgid']][] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['avg']));
} else if ($action == "graphcount") { } else if ($action == "graphcount") {
$data[$value['tgid']][] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['count'])); $data[$value['tgid']][] = Array((strtotime($value['time']) + $tzoffset) * 1000, intval($value['count']));
} }
} }
echo json_encode(Array("label" => $label, "data" => $data, echo json_encode(Array("label" => $label, "data" => $data,
"previous" => Array( "previous" => Array(
"from" => $timefrom - (24 * 60 * 60), "from" => $timefrom - (24 * 60 * 60),
"to" => $timefrom) "to" => $timefrom)
, ,
"next" => Array( "next" => Array(
"to" => $timeto + (24 * 60 * 60), "to" => $timeto + (24 * 60 * 60),
"from" => $timeto) "from" => $timeto)
) )
); );
} }
   
   
   
?> ?>
   
<?php <?php
date_default_timezone_set("Australia/Sydney"); date_default_timezone_set("Australia/Sydney");
try { try {
$conn = new PDO("pgsql:dbname=scannr;user=postgres;password=snmc;host=localhost"); $conn = new PDO("pgsql:dbname=scannr;user=postgres;password=snmc;host=localhost");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} } catch (PDOException $e) {
catch(PDOException $e) {  
die('Unable to connect to database server.'); die('Unable to connect to database server.');
} }
catch(Exception $e) { catch (Exception $e) {
die('Unknown error in ' . __FILE__ . '.'); die('Unknown error in ' . __FILE__ . '.');
} }
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$basePath = ""; $basePath = "";
$DATA_DIR = "./data"; $DATA_DIR = "./data";
   
/** Returns the offset from the origin timezone to the remote timezone, in seconds. /** Returns the offset from the origin timezone to the remote timezone, in seconds.
* @param $remote_tz; * @param $remote_tz;
* @param $origin_tz; If null the servers current timezone is used as the origin. * @param $origin_tz; If null the servers current timezone is used as the origin.
* @return int; * @return int;
*/ */
function get_timezone_offset($remote_tz, $origin_tz = null) { function get_timezone_offset($remote_tz, $origin_tz = null)
  {
if ($origin_tz === null) { if ($origin_tz === null) {
if (!is_string($origin_tz = date_default_timezone_get())) { if (!is_string($origin_tz = date_default_timezone_get())) {
return false; // A UTC timestamp was returned -- bail out! return false; // A UTC timestamp was returned -- bail out!
} }
} }
$origin_dtz = new DateTimeZone($origin_tz); $origin_dtz = new DateTimeZone($origin_tz);
$remote_dtz = new DateTimeZone($remote_tz); $remote_dtz = new DateTimeZone($remote_tz);
$origin_dt = new DateTime("now", $origin_dtz); $origin_dt = new DateTime("now", $origin_dtz);
$remote_dt = new DateTime("now", $remote_dtz); $remote_dt = new DateTime("now", $remote_dtz);
$offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt); $offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt);
return $offset; return $offset;
} }
   
   
  function include_header($title)
  {
  global $basePath;
  ?>
  <!DOCTYPE html>
  <!--[if lt IE 7]>
  <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
  <!--[if IE 7]>
  <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
  <!--[if IE 8]>
  <html class="no-js lt-ie9"> <![endif]-->
  <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title></title>
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width">
   
  <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
   
  <link rel="stylesheet" href="css/normalize.css">
  <link rel="stylesheet" href="css/main.css">
  <script src="js/vendor/modernizr-2.6.1.min.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
  <!--<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script>-->
  <script type="text/javascript" src="<?php echo $basePath ?>js/flotr2/flotr2.js"></script>
  <script src="js/plugins.js"></script>
  <script src="js/main.js"></script>
  </head>
  <body>
  <!--[if lt IE 7]>
  <p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser
  today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to
  better experience this site.</p>
  <![endif]-->
   
  <!-- Add your site or application content here -->
  <?php
  }
   
  function include_footer()
  {
  global $basePath;
  ?>
   
   
  <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
  <script>
  var _gaq = [
  ['_setAccount', 'UA-XXXXX-X'],
  ['_trackPageview']
  ];
  (function (d, t) {
  var g = d.createElement(t), s = d.getElementsByTagName(t)[0];
  g.src = ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js';
  s.parentNode.insertBefore(g, s)
  }(document, 'script'));
  </script>
  </body>
  </html>
   
function include_header($title) { <?php
global $basePath;  
?>  
<!DOCTYPE html>  
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->  
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->  
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->  
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->  
<head>  
<meta charset="utf-8">  
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
<title></title>  
<meta name="description" content="">  
<meta name="viewport" content="width=device-width">  
   
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->  
   
<link rel="stylesheet" href="css/normalize.css">  
<link rel="stylesheet" href="css/main.css">  
<script src="js/vendor/modernizr-2.6.1.min.js"></script>  
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>  
<!--<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script>-->  
<script type="text/javascript" src="<?php echo $basePath ?>js/flotr2/flotr2.js"></script>  
<script src="js/plugins.js"></script>  
<script src="js/main.js"></script>  
</head>  
<body>  
<!--[if lt IE 7]>  
<p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>  
<![endif]-->  
   
<!-- Add your site or application content here -->  
<?php  
}  
   
function include_footer() {  
global $basePath;  
?>  
   
   
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->  
<script>  
var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];  
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];  
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';  
s.parentNode.insertBefore(g,s)}(document,'script'));  
</script>  
</body>  
</html>  
   
<?php  
   
} }
   
   
<?php <?php
include('common.inc.php'); include('common.inc.php');
$sth = $conn->prepare( 'select * from recordings limit 100;'); $sth = $conn->prepare('select * from recordings limit 100;');
   
$sth->execute( ); $sth->execute();
$recordings = $sth->fetchAll(); $recordings = $sth->fetchAll();
$convos = Array(); $convos = Array();
$convo = Array(); $convo = Array();
foreach ($recordings as $i => $recording) { foreach ($recordings as $i => $recording) {
   
if (count($convo) > 0 && strcasecmp($convo[count($convos)]['tgid'], $recording['tgid']) != 0) { if (count($convo) > 0) {
$convos[] = $convo; echo "<br> " . strcasecmp($convos[count($convos) - 1][0]['call_timestamp'], $recording['call_timestamp']);
$convo = Array(); if (abs(strcasecmp($convos[count($convos) - 1][0]['call_timestamp'], $recording['call_timestamp'])) > 2) {
} ; echo " " . $convos[count($convos) - 1][0]['call_timestamp'] . " " . $recording['call_timestamp'];
//print_r($recording); }
$convo[] = $recording; if (strcasecmp($convos[count($convos) - 1][0]['tgid'], $recording['tgid']) != 0) {
//print_r($convo); $convos[] = $convo;
echo "<br>\n"; $convo = Array();
  }
  }
  ;
  //print_r($recording);
  $convo[] = $recording;
  //print_r($convo);
  //echo "<br>\n";
} }
foreach ($convos as $i => $convo) { foreach ($convos as $i => $convo) {
print_r($convo); foreach ($convo as $recording) {
echo "<br>\n"; echo $recording['filename'] . " , ";
  }
  echo "<br><hr>\n";
} }
?> ?>
   
   
file:b/getfile.php (new)
  <?php
  $reqfile = "path/to/file.3gp";
  $contenttype = "audio/3gpp";
 
  if ($fn = fopen($reqfile, "rba")) {
  header("Content-Type: " . $contenttype);
  header("Content-Length: " . filesize($reqfile));
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Pragma: no-cache");
  header("Expires: Mon, 26 Jul 1997 06:00:00 GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
  passthru("ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k -");
  fpassthru($fn);
  fclose($fn);
  } else {
  exit("error....");
  }
  exit();
  ?>
 
// ============== Formatting extensions ============================ // ============== Formatting extensions ============================
// A common storage for all mode-specific formatting features // A common storage for all mode-specific formatting features
if (!CodeMirror.modeExtensions) CodeMirror.modeExtensions = {}; if (!CodeMirror.modeExtensions) CodeMirror.modeExtensions = {};
   
// Returns the extension of the editor's current mode // Returns the extension of the editor's current mode
CodeMirror.defineExtension("getModeExt", function () { CodeMirror.defineExtension("getModeExt", function () {
return CodeMirror.modeExtensions[this.getOption("mode")]; return CodeMirror.modeExtensions[this.getOption("mode")];
}); });
   
// If the current mode is 'htmlmixed', returns the extension of a mode located at // If the current mode is 'htmlmixed', returns the extension of a mode located at
// the specified position (can be htmlmixed, css or javascript). Otherwise, simply // the specified position (can be htmlmixed, css or javascript). Otherwise, simply
// returns the extension of the editor's current mode. // returns the extension of the editor's current mode.
CodeMirror.defineExtension("getModeExtAtPos", function (pos) { CodeMirror.defineExtension("getModeExtAtPos", function (pos) {
var token = this.getTokenAt(pos); var token = this.getTokenAt(pos);
if (token && token.state && token.state.mode) if (token && token.state && token.state.mode)
return CodeMirror.modeExtensions[token.state.mode == "html" ? "htmlmixed" : token.state.mode]; return CodeMirror.modeExtensions[token.state.mode == "html" ? "htmlmixed" : token.state.mode];
else else
return this.getModeExt(); return this.getModeExt();
}); });
   
// Comment/uncomment the specified range // Comment/uncomment the specified range
CodeMirror.defineExtension("commentRange", function (isComment, from, to) { CodeMirror.defineExtension("commentRange", function (isComment, from, to) {
var curMode = this.getModeExtAtPos(this.getCursor()); var curMode = this.getModeExtAtPos(this.getCursor());
if (isComment) { // Comment range if (isComment) { // Comment range
var commentedText = this.getRange(from, to); var commentedText = this.getRange(from, to);
this.replaceRange(curMode.commentStart + this.getRange(from, to) + curMode.commentEnd this.replaceRange(curMode.commentStart + this.getRange(from, to) + curMode.commentEnd
, from, to); , from, to);
if (from.line == to.line && from.ch == to.ch) { // An empty comment inserted - put cursor inside if (from.line == to.line && from.ch == to.ch) { // An empty comment inserted - put cursor inside
this.setCursor(from.line, from.ch + curMode.commentStart.length); this.setCursor(from.line, from.ch + curMode.commentStart.length);
} }
} }
else { // Uncomment range else { // Uncomment range
var selText = this.getRange(from, to); var selText = this.getRange(from, to);
var startIndex = selText.indexOf(curMode.commentStart); var startIndex = selText.indexOf(curMode.commentStart);
var endIndex = selText.lastIndexOf(curMode.commentEnd); var endIndex = selText.lastIndexOf(curMode.commentEnd);
if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) { if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {
// Take string till comment start // Take string till comment start
selText = selText.substr(0, startIndex) selText = selText.substr(0, startIndex)
// From comment start till comment end // From comment start till comment end
+ selText.substring(startIndex + curMode.commentStart.length, endIndex) + selText.substring(startIndex + curMode.commentStart.length, endIndex)
// From comment end till string end // From comment end till string end
+ selText.substr(endIndex + curMode.commentEnd.length); + selText.substr(endIndex + curMode.commentEnd.length);
} }
this.replaceRange(selText, from, to); this.replaceRange(selText, from, to);
} }
}); });
   
// Applies automatic mode-aware indentation to the specified range // Applies automatic mode-aware indentation to the specified range
CodeMirror.defineExtension("autoIndentRange", function (from, to) { CodeMirror.defineExtension("autoIndentRange", function (from, to) {
var cmInstance = this; var cmInstance = this;
this.operation(function () { this.operation(function () {
for (var i = from.line; i <= to.line; i++) { for (var i = from.line; i <= to.line; i++) {
cmInstance.indentLine(i); cmInstance.indentLine(i);
} }
}); });
}); });
   
// Applies automatic formatting to the specified range // Applies automatic formatting to the specified range
CodeMirror.defineExtension("autoFormatRange", function (from, to) { CodeMirror.defineExtension("autoFormatRange", function (from, to) {
var absStart = this.indexFromPos(from); var absStart = this.indexFromPos(from);
var absEnd = this.indexFromPos(to); var absEnd = this.indexFromPos(to);
// Insert additional line breaks where necessary according to the // Insert additional line breaks where necessary according to the
// mode's syntax // mode's syntax
var res = this.getModeExt().autoFormatLineBreaks(this.getValue(), absStart, absEnd); var res = this.getModeExt().autoFormatLineBreaks(this.getValue(), absStart, absEnd);
var cmInstance = this; var cmInstance = this;
   
// Replace and auto-indent the range // Replace and auto-indent the range
this.operation(function () { this.operation(function () {
cmInstance.replaceRange(res, from, to); cmInstance.replaceRange(res, from, to);
var startLine = cmInstance.posFromIndex(absStart).line; var startLine = cmInstance.posFromIndex(absStart).line;
var endLine = cmInstance.posFromIndex(absStart + res.length).line; var endLine = cmInstance.posFromIndex(absStart + res.length).line;
for (var i = startLine; i <= endLine; i++) { for (var i = startLine; i <= endLine; i++) {
cmInstance.indentLine(i); cmInstance.indentLine(i);
} }
}); });
}); });
   
// Define extensions for a few modes // Define extensions for a few modes
   
CodeMirror.modeExtensions["css"] = { CodeMirror.modeExtensions["css"] = {
commentStart: "/*", commentStart: "/*",
commentEnd: "*/", commentEnd: "*/",
wordWrapChars: [";", "\\{", "\\}"], wordWrapChars: [";", "\\{", "\\}"],
autoFormatLineBreaks: function (text) { autoFormatLineBreaks: function (text) {
return text.replace(new RegExp("(;|\\{|\\})([^\r\n])", "g"), "$1\n$2"); return text.replace(new RegExp("(;|\\{|\\})([^\r\n])", "g"), "$1\n$2");
} }
}; };
   
CodeMirror.modeExtensions["javascript"] = { CodeMirror.modeExtensions["javascript"] = {
commentStart: "/*", commentStart: "/*",
commentEnd: "*/", commentEnd: "*/",
wordWrapChars: [";", "\\{", "\\}"], wordWrapChars: [";", "\\{", "\\}"],
   
getNonBreakableBlocks: function (text) { getNonBreakableBlocks: function (text) {
var nonBreakableRegexes = [ var nonBreakableRegexes = [
new RegExp("for\\s*?\\(([\\s\\S]*?)\\)"), new RegExp("for\\s*?\\(([\\s\\S]*?)\\)"),
new RegExp("'([\\s\\S]*?)('|$)"), new RegExp("'([\\s\\S]*?)('|$)"),
new RegExp("\"([\\s\\S]*?)(\"|$)"), new RegExp("\"([\\s\\S]*?)(\"|$)"),
new RegExp("//.*([\r\n]|$)") new RegExp("//.*([\r\n]|$)")
]; ];
var nonBreakableBlocks = new Array(); var nonBreakableBlocks = new Array();
for (var i = 0; i < nonBreakableRegexes.length; i++) { for (var i = 0; i < nonBreakableRegexes.length; i++) {
var curPos = 0; var curPos = 0;
while (curPos < text.length) { while (curPos < text.length) {
var m = text.substr(curPos).match(nonBreakableRegexes[i]); var m = text.substr(curPos).match(nonBreakableRegexes[i]);
if (m != null) { if (m != null) {
nonBreakableBlocks.push({ nonBreakableBlocks.push({
start: curPos + m.index, start: curPos + m.index,
end: curPos + m.index + m[0].length end: curPos + m.index + m[0].length
}); });
curPos += m.index + Math.max(1, m[0].length); curPos += m.index + Math.max(1, m[0].length);
} }
else { // No more matches else { // No more matches
break; break;
} }
} }
} }
nonBreakableBlocks.sort(function (a, b) { nonBreakableBlocks.sort(function (a, b) {
return a.start - b.start; return a.start - b.start;
}); });
   
return nonBreakableBlocks; return nonBreakableBlocks;
}, },
   
autoFormatLineBreaks: function (text) { autoFormatLineBreaks: function (text) {
var curPos = 0; var curPos = 0;
var reLinesSplitter = new RegExp("(;|\\{|\\})([^\r\n])", "g"); var reLinesSplitter = new RegExp("(;|\\{|\\})([^\r\n])", "g");
var nonBreakableBlocks = this.getNonBreakableBlocks(text); var nonBreakableBlocks = this.getNonBreakableBlocks(text);
if (nonBreakableBlocks != null) { if (nonBreakableBlocks != null) {
var res = ""; var res = "";
for (var i = 0; i < nonBreakableBlocks.length; i++) { for (var i = 0; i < nonBreakableBlocks.length; i++) {
if (nonBreakableBlocks[i].start > curPos) { // Break lines till the block if (nonBreakableBlocks[i].start > curPos) { // Break lines till the block
res += text.substring(curPos, nonBreakableBlocks[i].start).replace(reLinesSplitter, "$1\n$2"); res += text.substring(curPos, nonBreakableBlocks[i].start).replace(reLinesSplitter, "$1\n$2");
curPos = nonBreakableBlocks[i].start; curPos = nonBreakableBlocks[i].start;
} }
if (nonBreakableBlocks[i].start <= curPos if (nonBreakableBlocks[i].start <= curPos
&& nonBreakableBlocks[i].end >= curPos) { // Skip non-breakable block && nonBreakableBlocks[i].end >= curPos) { // Skip non-breakable block
res += text.substring(curPos, nonBreakableBlocks[i].end); res += text.substring(curPos, nonBreakableBlocks[i].end);
curPos = nonBreakableBlocks[i].end; curPos = nonBreakableBlocks[i].end;
} }
} }
if (curPos < text.length - 1) { if (curPos < text.length - 1) {
res += text.substr(curPos).replace(reLinesSplitter, "$1\n$2"); res += text.substr(curPos).replace(reLinesSplitter, "$1\n$2");
} }
return res; return res;
} }
else { else {
return text.replace(reLinesSplitter, "$1\n$2"); return text.replace(reLinesSplitter, "$1\n$2");
} }
} }
}; };
   
CodeMirror.modeExtensions["xml"] = { CodeMirror.modeExtensions["xml"] = {
commentStart: "<!--", commentStart: "<!--",
commentEnd: "-->", commentEnd: "-->",
wordWrapChars: [">"], wordWrapChars: [">"],
   
autoFormatLineBreaks: function (text) { autoFormatLineBreaks: function (text) {
var lines = text.split("\n"); var lines = text.split("\n");
var reProcessedPortion = new RegExp("(^\\s*?<|^[^<]*?)(.+)(>\\s*?$|[^>]*?$)"); var reProcessedPortion = new RegExp("(^\\s*?<|^[^<]*?)(.+)(>\\s*?$|[^>]*?$)");
var reOpenBrackets = new RegExp("<", "g"); var reOpenBrackets = new RegExp("<", "g");
var reCloseBrackets = new RegExp("(>)([^\r\n])", "g"); var reCloseBrackets = new RegExp("(>)([^\r\n])", "g");
for (var i = 0; i < lines.length; i++) { for (var i = 0; i < lines.length; i++) {
var mToProcess = lines[i].match(reProcessedPortion); var mToProcess = lines[i].match(reProcessedPortion);
if (mToProcess != null && mToProcess.length > 3) { // The line starts with whitespaces and ends with whitespaces if (mToProcess != null && mToProcess.length > 3) { // The line starts with whitespaces and ends with whitespaces
lines[i] = mToProcess[1] lines[i] = mToProcess[1]
+ mToProcess[2].replace(reOpenBrackets, "\n$&").replace(reCloseBrackets, "$1\n$2") + mToProcess[2].replace(reOpenBrackets, "\n$&").replace(reCloseBrackets, "$1\n$2")
+ mToProcess[3]; + mToProcess[3];
continue; continue;
} }
} }
   
return lines.join("\n"); return lines.join("\n");
} }
}; };
   
CodeMirror.modeExtensions["htmlmixed"] = { CodeMirror.modeExtensions["htmlmixed"] = {
commentStart: "<!--", commentStart: "<!--",
commentEnd: "-->", commentEnd: "-->",
wordWrapChars: [">", ";", "\\{", "\\}"], wordWrapChars: [">", ";", "\\{", "\\}"],
   
getModeInfos: function (text, absPos) { getModeInfos: function (text, absPos) {
var modeInfos = new Array(); var modeInfos = new Array();
modeInfos[0] = modeInfos[0] =
{ {
pos: 0, pos: 0,
modeExt: CodeMirror.modeExtensions["xml"], modeExt: CodeMirror.modeExtensions["xml"],
modeName: "xml" modeName: "xml"
}; };
   
var modeMatchers = new Array(); var modeMatchers = new Array();
modeMatchers[0] = modeMatchers[0] =
{ {
regex: new RegExp("<style[^>]*>([\\s\\S]*?)(</style[^>]*>|$)", "i"), regex: new RegExp("<style[^>]*>([\\s\\S]*?)(</style[^>]*>|$)", "i"),
modeExt: CodeMirror.modeExtensions["css"], modeExt: CodeMirror.modeExtensions["css"],
modeName: "css" modeName: "css"
}; };
modeMatchers[1] = modeMatchers[1] =
{ {
regex: new RegExp("<script[^>]*>([\\s\\S]*?)(</script[^>]*>|$)", "i"), regex: new RegExp("<script[^>]*>([\\s\\S]*?)(</script[^>]*>|$)", "i"),
modeExt: CodeMirror.modeExtensions["javascript"], modeExt: CodeMirror.modeExtensions["javascript"],
modeName: "javascript" modeName: "javascript"
}; };
   
var lastCharPos = (typeof (absPos) !== "undefined" ? absPos : text.length - 1); var lastCharPos = (typeof (absPos) !== "undefined" ? absPos : text.length - 1);
// Detect modes for the entire text // Detect modes for the entire text
for (var i = 0; i < modeMatchers.length; i++) { for (var i = 0; i < modeMatchers.length; i++) {
var curPos = 0; var curPos = 0;
while (curPos <= lastCharPos) { while (curPos <= lastCharPos) {
var m = text.substr(curPos).match(modeMatchers[i].regex); var m = text.substr(curPos).match(modeMatchers[i].regex);
if (m != null) { if (m != null) {
if (m.length > 1 && m[1].length > 0) { if (m.length > 1 && m[1].length > 0) {
// Push block begin pos // Push block begin pos
var blockBegin = curPos + m.index + m[0].indexOf(m[1]); var blockBegin = curPos + m.index + m[0].indexOf(m[1]);
modeInfos.push( modeInfos.push(
{ {
pos: blockBegin, pos: blockBegin,
modeExt: modeMatchers[i].modeExt, modeExt: modeMatchers[i].modeExt,
modeName: modeMatchers[i].modeName modeName: modeMatchers[i].modeName
}); });
// Push block end pos // Push block end pos
modeInfos.push( modeInfos.push(
{ {
pos: blockBegin + m[1].length, pos: blockBegin + m[1].length,
modeExt: modeInfos[0].modeExt, modeExt: modeInfos[0].modeExt,
modeName: modeInfos[0].modeName modeName: modeInfos[0].modeName
}); });
curPos += m.index + m[0].length; curPos += m.index + m[0].length;
continue; continue;
} }
else { else {
curPos += m.index + Math.max(m[0].length, 1); curPos += m.index + Math.max(m[0].length, 1);
} }
} }
else { // No more matches else { // No more matches
break; break;
} }
} }
} }
// Sort mode infos // Sort mode infos
modeInfos.sort(function sortModeInfo(a, b) { modeInfos.sort(function sortModeInfo(a, b) {
return a.pos - b.pos; return a.pos - b.pos;
}); });
   
return modeInfos; return modeInfos;
}, },
   
autoFormatLineBreaks: function (text, startPos, endPos) { autoFormatLineBreaks: function (text, startPos, endPos) {
var modeInfos = this.getModeInfos(text); var modeInfos = this.getModeInfos(text);
var reBlockStartsWithNewline = new RegExp("^\\s*?\n"); var reBlockStartsWithNewline = new RegExp("^\\s*?\n");
var reBlockEndsWithNewline = new RegExp("\n\\s*?$"); var reBlockEndsWithNewline = new RegExp("\n\\s*?$");
var res = ""; var res = "";
// Use modes info to break lines correspondingly // Use modes info to break lines correspondingly
if (modeInfos.length > 1) { // Deal with multi-mode text if (modeInfos.length > 1) { // Deal with multi-mode text
for (var i = 1; i <= modeInfos.length; i++) { for (var i = 1; i <= modeInfos.length; i++) {
var selStart = modeInfos[i - 1].pos; var selStart = modeInfos[i - 1].pos;
var selEnd = (i < modeInfos.length ? modeInfos[i].pos : endPos); var selEnd = (i < modeInfos.length ? modeInfos[i].pos : endPos);
   
if (selStart >= endPos) { // The block starts later than the needed fragment if (selStart >= endPos) { // The block starts later than the needed fragment
break; break;
} }
if (selStart < startPos) { if (selStart < startPos) {
if (selEnd <= startPos) { // The block starts earlier than the needed fragment if (selEnd <= startPos) { // The block starts earlier than the needed fragment
continue; continue;
} }
selStart = startPos; selStart = startPos;
} }
if (selEnd > endPos) { if (selEnd > endPos) {
selEnd = endPos; selEnd = endPos;
} }
var textPortion = text.substring(selStart, selEnd); var textPortion = text.substring(selStart, selEnd);
if (modeInfos[i - 1].modeName != "xml") { // Starting a CSS or JavaScript block if (modeInfos[i - 1].modeName != "xml") { // Starting a CSS or JavaScript block
if (!reBlockStartsWithNewline.test(textPortion) if (!reBlockStartsWithNewline.test(textPortion)
&& selStart > 0) { // The block does not start with a line break && selStart > 0) { // The block does not start with a line break
textPortion = "\n" + textPortion; textPortion = "\n" + textPortion;
} }
if (!reBlockEndsWithNewline.test(textPortion) if (!reBlockEndsWithNewline.test(textPortion)
&& selEnd < text.length - 1) { // The block does not end with a line break && selEnd < text.length - 1) { // The block does not end with a line break
textPortion += "\n"; textPortion += "\n";
} }
} }
res += modeInfos[i - 1].modeExt.autoFormatLineBreaks(textPortion); res += modeInfos[i - 1].modeExt.autoFormatLineBreaks(textPortion);
} }
} }
else { // Single-mode text else { // Single-mode text
res = modeInfos[0].modeExt.autoFormatLineBreaks(text.substring(startPos, endPos)); res = modeInfos[0].modeExt.autoFormatLineBreaks(text.substring(startPos, endPos));
} }
   
return res; return res;
} }
}; };
   
jasmine.HtmlReporterHelpers = {}; jasmine.HtmlReporterHelpers = {};
   
jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) { jasmine.HtmlReporterHelpers.createDom = function (type, attrs, childrenVarArgs) {
var el = document.createElement(type); var el = document.createElement(type);
   
for (var i = 2; i < arguments.length; i++) { for (var i = 2; i < arguments.length; i++) {
var child = arguments[i]; var child = arguments[i];
   
if (typeof child === 'string') { if (typeof child === 'string') {
el.appendChild(document.createTextNode(child)); el.appendChild(document.createTextNode(child));
} else { } else {
if (child) { if (child) {
el.appendChild(child); el.appendChild(child);
} }
} }
} }
   
for (var attr in attrs) { for (var attr in attrs) {
if (attr == "className") { if (attr == "className") {
el[attr] = attrs[attr]; el[attr] = attrs[attr];
} else { } else {
el.setAttribute(attr, attrs[attr]); el.setAttribute(attr, attrs[attr]);
} }
} }
   
return el; return el;
}; };
   
jasmine.HtmlReporterHelpers.getSpecStatus = function(child) { jasmine.HtmlReporterHelpers.getSpecStatus = function (child) {
var results = child.results(); var results = child.results();
var status = results.passed() ? 'passed' : 'failed'; var status = results.passed() ? 'passed' : 'failed';
if (results.skipped) { if (results.skipped) {
status = 'skipped'; status = 'skipped';
} }
   
return status; return status;
}; };
   
jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) { jasmine.HtmlReporterHelpers.appendToSummary = function (child, childElement) {
var parentDiv = this.dom.summary; var parentDiv = this.dom.summary;
var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite'; var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
var parent = child[parentSuite]; var parent = child[parentSuite];
   
if (parent) { if (parent) {
if (typeof this.views.suites[parent.id] == 'undefined') { if (typeof this.views.suites[parent.id] == 'undefined') {
this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views); this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
} }
parentDiv = this.views.suites[parent.id].element; parentDiv = this.views.suites[parent.id].element;
} }
   
parentDiv.appendChild(childElement); parentDiv.appendChild(childElement);
}; };
   
   
jasmine.HtmlReporterHelpers.addHelpers = function(ctor) { jasmine.HtmlReporterHelpers.addHelpers = function (ctor) {
for(var fn in jasmine.HtmlReporterHelpers) { for (var fn in jasmine.HtmlReporterHelpers) {
ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn]; ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
} }
}; };
   
jasmine.HtmlReporter = function(_doc) { jasmine.HtmlReporter = function (_doc) {
var self = this; var self = this;
var doc = _doc || window.document; var doc = _doc || window.document;
   
var reporterView; var reporterView;
   
var dom = {}; var dom = {};
   
// Jasmine Reporter Public Interface // Jasmine Reporter Public Interface
self.logRunningSpecs = false; self.logRunningSpecs = false;
   
self.reportRunnerStarting = function(runner) { self.reportRunnerStarting = function (runner) {
var specs = runner.specs() || []; var specs = runner.specs() || [];
   
if (specs.length == 0) { if (specs.length == 0) {
return; return;
} }
   
createReporterDom(runner.env.versionString()); createReporterDom(runner.env.versionString());
doc.body.appendChild(dom.reporter); doc.body.appendChild(dom.reporter);
   
reporterView = new jasmine.HtmlReporter.ReporterView(dom); reporterView = new jasmine.HtmlReporter.ReporterView(dom);
reporterView.addSpecs(specs, self.specFilter); reporterView.addSpecs(specs, self.specFilter);
}; };
   
self.reportRunnerResults = function(runner) { self.reportRunnerResults = function (runner) {
reporterView && reporterView.complete(); reporterView && reporterView.complete();
}; };
   
self.reportSuiteResults = function(suite) { self.reportSuiteResults = function (suite) {
reporterView.suiteComplete(suite); reporterView.suiteComplete(suite);
}; };
   
self.reportSpecStarting = function(spec) { self.reportSpecStarting = function (spec) {
if (self.logRunningSpecs) { if (self.logRunningSpecs) {
self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...'); self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
} }
}; };
   
self.reportSpecResults = function(spec) { self.reportSpecResults = function (spec) {
reporterView.specComplete(spec); reporterView.specComplete(spec);
}; };
   
self.log = function() { self.log = function () {
  var console = jasmine.getGlobal().console;
  if (console && console.log) {
  if (console.log.apply) {
  console.log.apply(console, arguments);
  } else {
  console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
  }
  }
  };
   
  self.specFilter = function (spec) {
  if (!focusedSpecName()) {
  return true;
  }
   
  return spec.getFullName().indexOf(focusedSpecName()) === 0;
  };
   
  return self;
   
  function focusedSpecName() {
  var specName;
   
  (function memoizeFocusedSpec() {
  if (specName) {
  return;
  }
   
  var paramMap = [];
  var params = doc.location.search.substring(1).split('&');
   
  for (var i = 0; i < params.length; i++) {
  var p = params[i].split('=');
  paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
  }
   
  specName = paramMap.spec;
  })();
   
  return specName;
  }
   
  function createReporterDom(version) {
  dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
  dom.banner = self.createDom('div', { className: 'banner' },
  self.createDom('span', { className: 'title' }, "Jasmine "),
  self.createDom('span', { className: 'version' }, version)),
   
  dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
  dom.alert = self.createDom('div', {className: 'alert'}),
  dom.results = self.createDom('div', {className: 'results'},
  dom.summary = self.createDom('div', { className: 'summary' }),
  dom.details = self.createDom('div', { id: 'details' }))
  );
  }
  };
  jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);
  jasmine.HtmlReporter.ReporterView = function (dom) {
  this.startedAt = new Date();
  this.runningSpecCount = 0;
  this.completeSpecCount = 0;
  this.passedCount = 0;
  this.failedCount = 0;
  this.skippedCount = 0;
   
  this.createResultsMenu = function () {
  this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
  this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
  ' | ',
  this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
   
  this.summaryMenuItem.onclick = function () {
  dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
  };
   
  this.detailsMenuItem.onclick = function () {
  showDetails();
  };
  };
   
  this.addSpecs = function (specs, specFilter) {
  this.totalSpecCount = specs.length;
   
  this.views = {
  specs: {},
  suites: {}
  };
   
  for (var i = 0; i < specs.length; i++) {
  var spec = specs[i];
  this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
  if (specFilter(spec)) {
  this.runningSpecCount++;
  }
  }
  };
   
  this.specComplete = function (spec) {
  this.completeSpecCount++;
   
  if (isUndefined(this.views.specs[spec.id])) {
  this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
  }
   
  var specView = this.views.specs[spec.id];
   
  switch (specView.status()) {
  case 'passed':
  this.passedCount++;
  break;
   
  case 'failed':
  this.failedCount++;
  break;
   
  case 'skipped':
  this.skippedCount++;
  break;
  }
   
  specView.refresh();
  this.refresh();
  };
   
  this.suiteComplete = function (suite) {
  var suiteView = this.views.suites[suite.id];
  if (isUndefined(suiteView)) {
  return;
  }
  suiteView.refresh();
  };
   
  this.refresh = function () {
   
  if (isUndefined(this.resultsMenu)) {
  this.createResultsMenu();
  }
   
  // currently running UI
  if (isUndefined(this.runningAlert)) {
  this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});
  dom.alert.appendChild(this.runningAlert);
  }
  this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
   
  // skipped specs UI
  if (isUndefined(this.skippedAlert)) {
  this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});
  }
   
  this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
   
  if (this.skippedCount === 1 && isDefined(dom.alert)) {
  dom.alert.appendChild(this.skippedAlert);
  }
   
  // passing specs UI
  if (isUndefined(this.passedAlert)) {
  this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});
  }
  this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
   
  // failing specs UI
  if (isUndefined(this.failedAlert)) {
  this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
  }
  this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
   
  if (this.failedCount === 1 && isDefined(dom.alert)) {
  dom.alert.appendChild(this.failedAlert);
  dom.alert.appendChild(this.resultsMenu);
  }
   
  // summary info
  this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
  this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
  };
   
  this.complete = function () {
  dom.alert.removeChild(this.runningAlert);
   
  this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
   
  if (this.failedCount === 0) {
  dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
  } else {
  showDetails();
  }
   
  dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
  };
   
  return this;
   
  function showDetails() {
  if (dom.reporter.className.search(/showDetails/) === -1) {
  dom.reporter.className += " showDetails";
  }
  }
   
  function isUndefined(obj) {
  return typeof obj === 'undefined';
  }
   
  function isDefined(obj) {
  return !isUndefined(obj);
  }
   
  function specPluralizedFor(count) {
  var str = count + " spec";
  if (count > 1) {
  str += "s"
  }
  return str;
  }
   
  };
   
  jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
   
   
  jasmine.HtmlReporter.SpecView = function (spec, dom, views) {
  this.spec = spec;
  this.dom = dom;
  this.views = views;
   
  this.symbol = this.createDom('li', { className: 'pending' });
  this.dom.symbolSummary.appendChild(this.symbol);
   
  this.summary = this.createDom('div', { className: 'specSummary' },
  this.createDom('a', {
  className: 'description',
  href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
  title: this.spec.getFullName()
  }, this.spec.description)
  );
   
  this.detail = this.createDom('div', { className: 'specDetail' },
  this.createDom('a', {
  className: 'description',
  href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
  title: this.spec.getFullName()
  }, this.spec.getFullName())
  );
  };
   
  jasmine.HtmlReporter.SpecView.prototype.status = function () {
  return this.getSpecStatus(this.spec);
  };
   
  jasmine.HtmlReporter.SpecView.prototype.refresh = function () {
  this.symbol.className = this.status();
   
  switch (this.status()) {
  case 'skipped':
  break;
   
  case 'passed':
  this.appendSummaryToSuiteDiv();
  break;
   
  case 'failed':
  this.appendSummaryToSuiteDiv();
  this.appendFailureDetail();
  break;
  }
  };
   
  jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function () {
  this.summary.className += ' ' + this.status();
  this.appendToSummary(this.spec, this.summary);
  };
   
  jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function () {
  this.detail.className += ' ' + this.status();
   
  var resultItems = this.spec.results().getItems();
  var messagesDiv = this.createDom('div', { className: 'messages' });
   
  for (var i = 0; i < resultItems.length; i++) {
  var result = resultItems[i];
   
  if (result.type == 'log') {
  messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
  } else if (result.type == 'expect' && result.passed && !result.passed()) {
  messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
   
  if (result.trace.stack) {
  messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
  }
  }
  }
   
  if (messagesDiv.childNodes.length > 0) {
  this.detail.appendChild(messagesDiv);
  this.dom.details.appendChild(this.detail);
  }
  };
   
  jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);
  jasmine.HtmlReporter.SuiteView = function (suite, dom, views) {
  this.suite = suite;
  this.dom = dom;
  this.views = views;
   
  this.element = this.createDom('div', { className: 'suite' },
  this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)
  );
   
  this.appendToSummary(this.suite, this.element);
  };
   
  jasmine.HtmlReporter.SuiteView.prototype.status = function () {
  return this.getSpecStatus(this.suite);
  };
   
  jasmine.HtmlReporter.SuiteView.prototype.refresh = function () {
  this.element.className += " " + this.status();
  };
   
  jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
   
  /* @deprecated Use jasmine.HtmlReporter instead
  */
  jasmine.TrivialReporter = function (doc) {
  this.document = doc || document;
  this.suiteDivs = {};
  this.logRunningSpecs = false;
  };
   
  jasmine.TrivialReporter.prototype.createDom = function (type, attrs, childrenVarArgs) {
  var el = document.createElement(type);
   
  for (var i = 2; i < arguments.length; i++) {
  var child = arguments[i];
   
  if (typeof child === 'string') {
  el.appendChild(document.createTextNode(child));
  } else {
  if (child) {
  el.appendChild(child);
  }
  }
  }
   
  for (var attr in attrs) {
  if (attr == "className") {
  el[attr] = attrs[attr];
  } else {
  el.setAttribute(attr, attrs[attr]);
  }
  }
   
  return el;
  };
   
  jasmine.TrivialReporter.prototype.reportRunnerStarting = function (runner) {
  var showPassed, showSkipped;
   
  this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
  this.createDom('div', { className: 'banner' },
  this.createDom('div', { className: 'logo' },
  this.createDom('span', { className: 'title' }, "Jasmine"),
  this.createDom('span', { className: 'version' }, runner.env.versionString())),
  this.createDom('div', { className: 'options' },
  "Show ",
  showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
  this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
  showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
  this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
  )
  ),
   
  this.runnerDiv = this.createDom('div', { className: 'runner running' },
  this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
  this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
  this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
  );
   
  this.document.body.appendChild(this.outerDiv);
   
  var suites = runner.suites();
  for (var i = 0; i < suites.length; i++) {
  var suite = suites[i];
  var suiteDiv = this.createDom('div', { className: 'suite' },
  this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
  this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
  this.suiteDivs[suite.id] = suiteDiv;
  var parentDiv = this.outerDiv;
  if (suite.parentSuite) {
  parentDiv = this.suiteDivs[suite.parentSuite.id];
  }
  parentDiv.appendChild(suiteDiv);
  }
   
  this.startedAt = new Date();
   
  var self = this;
  showPassed.onclick = function (evt) {
  if (showPassed.checked) {
  self.outerDiv.className += ' show-passed';
  } else {
  self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
  }
  };
   
  showSkipped.onclick = function (evt) {
  if (showSkipped.checked) {
  self.outerDiv.className += ' show-skipped';
  } else {
  self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
  }
  };
  };
   
  jasmine.TrivialReporter.prototype.reportRunnerResults = function (runner) {
  var results = runner.results();
  var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
  this.runnerDiv.setAttribute("class", className);
  //do it twice for IE
  this.runnerDiv.setAttribute("className", className);
  var specs = runner.specs();
  var specCount = 0;
  for (var i = 0; i < specs.length; i++) {
  if (this.specFilter(specs[i])) {
  specCount++;
  }
  }
  var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
  message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
  this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
   
  this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
  };
   
  jasmine.TrivialReporter.prototype.reportSuiteResults = function (suite) {
  var results = suite.results();
  var status = results.passed() ? 'passed' : 'failed';
  if (results.totalCount === 0) { // todo: change this to check results.skipped
  status = 'skipped';
  }
  this.suiteDivs[suite.id].className += " " + status;
  };
   
  jasmine.TrivialReporter.prototype.reportSpecStarting = function (spec) {
  if (this.logRunningSpecs) {
  this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
  }
  };
   
  jasmine.TrivialReporter.prototype.reportSpecResults = function (spec) {
  var results = spec.results();
  var status = results.passed() ? 'passed' : 'failed';
  if (results.skipped) {
  status = 'skipped';
  }
  var specDiv = this.createDom('div', { className: 'spec ' + status },
  this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
  this.createDom('a', {
  className: 'description',
  href: '?spec=' + encodeURIComponent(spec.getFullName()),
  title: spec.getFullName()
  }, spec.description));
   
   
  var resultItems = results.getItems();
  var messagesDiv = this.createDom('div', { className: 'messages' });
  for (var i = 0; i < resultItems.length; i++) {
  var result = resultItems[i];
   
  if (result.type == 'log') {
  messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
  } else if (result.type == 'expect' && result.passed && !result.passed()) {
  messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
   
  if (result.trace.stack) {
  messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
  }
  }
  }
   
  if (messagesDiv.childNodes.length > 0) {
  specDiv.appendChild(messagesDiv);
  }
   
  this.suiteDivs[spec.suite.id].appendChild(specDiv);
  };
   
  jasmine.TrivialReporter.prototype.log = function () {
var console = jasmine.getGlobal().console; var console = jasmine.getGlobal().console;
if (console && console.log) { if (console && console.log) {
if (console.log.apply) { if (console.log.apply) {
console.log.apply(console, arguments); console.log.apply(console, arguments);
} else { } else {
console.log(arguments); // ie fix: console.log.apply doesn't exist on ie console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
} }
} }
}; };
   
self.specFilter = function(spec) { jasmine.TrivialReporter.prototype.getLocation = function () {
if (!focusedSpecName()) { return this.document.location;
return true; };
}  
  jasmine.TrivialReporter.prototype.specFilter = function (spec) {
return spec.getFullName().indexOf(focusedSpecName()) === 0; var paramMap = {};
}; var params = this.getLocation().search.substring(1).split('&');
  for (var i = 0; i < params.length; i++) {
return self;  
   
function focusedSpecName() {  
var specName;  
   
(function memoizeFocusedSpec() {  
if (specName) {  
return;  
}  
   
var paramMap = [];  
var params = doc.location.search.substring(1).split('&');  
   
for (var i = 0; i < params.length; i++) {  
var p = params[i].split('='); var p = params[i].split('=');
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
} }
   
specName = paramMap.spec; if (!paramMap.spec) {
})(); return true;
  }
return specName; return spec.getFullName().indexOf(paramMap.spec) === 0;
} };
   
function createReporterDom(version) {  
dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },  
dom.banner = self.createDom('div', { className: 'banner' },  
self.createDom('span', { className: 'title' }, "Jasmine "),  
self.createDom('span', { className: 'version' }, version)),  
   
dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),  
dom.alert = self.createDom('div', {className: 'alert'}),  
dom.results = self.createDom('div', {className: 'results'},  
dom.summary = self.createDom('div', { className: 'summary' }),  
dom.details = self.createDom('div', { id: 'details' }))  
);  
}  
};  
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);jasmine.HtmlReporter.ReporterView = function(dom) {  
this.startedAt = new Date();  
this.runningSpecCount = 0;  
this.completeSpecCount = 0;  
this.passedCount = 0;  
this.failedCount = 0;  
this.skippedCount = 0;  
   
this.createResultsMenu = function() {  
this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},  
this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),  
' | ',  
this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));  
   
this.summaryMenuItem.onclick = function() {  
dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');  
};  
   
this.detailsMenuItem.onclick = function() {  
showDetails();  
};  
};  
   
this.addSpecs = function(specs, specFilter) {  
this.totalSpecCount = specs.length;  
   
this.views = {  
specs: {},  
suites: {}  
};  
   
for (var i = 0; i < specs.length; i++) {  
var spec = specs[i];  
this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);  
if (specFilter(spec)) {  
this.runningSpecCount++;  
}  
}  
};  
   
this.specComplete = function(spec) {  
this.completeSpecCount++;  
   
if (isUndefined(this.views.specs[spec.id])) {  
this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);  
}  
   
var specView = this.views.specs[spec.id];  
   
switch (specView.status()) {  
case 'passed':  
this.passedCount++;  
break;  
   
case 'failed':  
this.failedCount++;  
break;  
   
case 'skipped':  
this.skippedCount++;  
break;  
}  
   
specView.refresh();  
this.refresh();  
};  
   
this.suiteComplete = function(suite) {  
var suiteView = this.views.suites[suite.id];  
if (isUndefined(suiteView)) {  
return;  
}  
suiteView.refresh();  
};  
   
this.refresh = function() {  
   
if (isUndefined(this.resultsMenu)) {  
this.createResultsMenu();  
}  
   
// currently running UI  
if (isUndefined(this.runningAlert)) {  
this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});  
dom.alert.appendChild(this.runningAlert);  
}  
this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);  
   
// skipped specs UI  
if (isUndefined(this.skippedAlert)) {  
this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});  
}  
   
this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";  
   
if (this.skippedCount === 1 && isDefined(dom.alert)) {  
dom.alert.appendChild(this.skippedAlert);  
}  
   
// passing specs UI  
if (isUndefined(this.passedAlert)) {  
this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});  
}  
this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);  
   
// failing specs UI  
if (isUndefined(this.failedAlert)) {  
this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});  
}  
this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);  
   
if (this.failedCount === 1 && isDefined(dom.alert)) {  
dom.alert.appendChild(this.failedAlert);  
dom.alert.appendChild(this.resultsMenu);  
}  
   
// summary info  
this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);  
this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";  
};  
   
this.complete = function() {  
dom.alert.removeChild(this.runningAlert);  
   
this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";  
   
if (this.failedCount === 0) {  
dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));  
} else {  
showDetails();  
}  
   
dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));  
};  
   
return this;  
   
function showDetails() {  
if (dom.reporter.className.search(/showDetails/) === -1) {  
dom.reporter.className += " showDetails";  
}  
}  
   
function isUndefined(obj) {  
return typeof obj === 'undefined';  
}  
   
function isDefined(obj) {  
return !isUndefined(obj);  
}  
   
function specPluralizedFor(count) {  
var str = count + " spec";  
if (count > 1) {  
str += "s"  
}  
return str;  
}  
   
};  
   
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);  
   
   
jasmine.HtmlReporter.SpecView = function(spec, dom, views) {  
this.spec = spec;  
this.dom = dom;  
this.views = views;  
   
this.symbol = this.createDom('li', { className: 'pending' });  
this.dom.symbolSummary.appendChild(this.symbol);  
   
this.summary = this.createDom('div', { className: 'specSummary' },  
this.createDom('a', {  
className: 'description',  
href: '?spec=' + encodeURIComponent(this.spec.getFullName()),  
title: this.spec.getFullName()  
}, this.spec.description)  
);  
   
this.detail = this.createDom('div', { className: 'specDetail' },  
this.createDom('a', {  
className: 'description',  
href: '?spec=' + encodeURIComponent(this.spec.getFullName()),  
title: this.spec.getFullName()  
}, this.spec.getFullName())  
);  
};  
   
jasmine.HtmlReporter.SpecView.prototype.status = function() {  
return this.getSpecStatus(this.spec);  
};  
   
jasmine.HtmlReporter.SpecView.prototype.refresh = function() {  
this.symbol.className = this.status();  
   
switch (this.status()) {  
case 'skipped':  
break;  
   
case 'passed':  
this.appendSummaryToSuiteDiv();  
break;  
   
case 'failed':  
this.appendSummaryToSuiteDiv();  
this.appendFailureDetail();  
break;  
}  
};  
   
jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {  
this.summary.className += ' ' + this.status();  
this.appendToSummary(this.spec, this.summary);  
};  
   
jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {  
this.detail.className += ' ' + this.status();  
   
var resultItems = this.spec.results().getItems();  
var messagesDiv = this.createDom('div', { className: 'messages' });  
   
for (var i = 0; i < resultItems.length; i++) {  
var result = resultItems[i];  
   
if (result.type == 'log') {  
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));  
} else if (result.type == 'expect' && result.passed && !result.passed()) {  
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));  
   
if (result.trace.stack) {  
messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));  
}  
}  
}  
   
if (messagesDiv.childNodes.length > 0) {  
this.detail.appendChild(messagesDiv);  
this.dom.details.appendChild(this.detail);  
}  
};  
   
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {  
this.suite = suite;  
this.dom = dom;  
this.views = views;  
   
this.element = this.createDom('div', { className: 'suite' },  
this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)  
);  
   
this.appendToSummary(this.suite, this.element);  
};  
   
jasmine.HtmlReporter.SuiteView.prototype.status = function() {  
return this.getSpecStatus(this.suite);  
};  
   
jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {  
this.element.className += " " + this.status();  
};  
   
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);  
   
/* @deprecated Use jasmine.HtmlReporter instead  
*/  
jasmine.TrivialReporter = function(doc) {  
this.document = doc || document;  
this.suiteDivs = {};  
this.logRunningSpecs = false;  
};  
   
jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {  
var el = document.createElement(type);  
   
for (var i = 2; i < arguments.length; i++) {  
var child = arguments[i];  
   
if (typeof child === 'string') {  
el.appendChild(document.createTextNode(child));  
} else {  
if (child) { el.appendChild(child); }  
}  
}  
   
for (var attr in attrs) {  
if (attr == "className") {  
el[attr] = attrs[attr];  
} else {  
el.setAttribute(attr, attrs[attr]);  
}  
}  
   
return el;  
};  
   
jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {  
var showPassed, showSkipped;  
   
this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },  
this.createDom('div', { className: 'banner' },  
this.createDom('div', { className: 'logo' },  
this.createDom('span', { className: 'title' }, "Jasmine"),  
this.createDom('span', { className: 'version' }, runner.env.versionString())),  
this.createDom('div', { className: 'options' },  
"Show ",  
showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),  
this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),  
showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),  
this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")  
)  
),  
   
this.runnerDiv = this.createDom('div', { className: 'runner running' },  
this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),  
this.runnerMessageSpan = this.createDom('span', {}, "Running..."),  
this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))  
);  
   
this.document.body.appendChild(this.outerDiv);  
   
var suites = runner.suites();  
for (var i = 0; i < suites.length; i++) {  
var suite = suites[i];  
var suiteDiv = this.createDom('div', { className: 'suite' },  
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),  
this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));  
this.suiteDivs[suite.id] = suiteDiv;  
var parentDiv = this.outerDiv;  
if (suite.parentSuite) {  
parentDiv = this.suiteDivs[suite.parentSuite.id];  
}  
parentDiv.appendChild(suiteDiv);  
}  
   
this.startedAt = new Date();  
   
var self = this;  
showPassed.onclick = function(evt) {  
if (showPassed.checked) {  
self.outerDiv.className += ' show-passed';  
} else {  
self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');  
}  
};  
   
showSkipped.onclick = function(evt) {  
if (showSkipped.checked) {  
self.outerDiv.className += ' show-skipped';  
} else {  
self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');  
}  
};  
};  
   
jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {  
var results = runner.results();  
var className = (results.failedCount > 0) ? "runner failed" : "runner passed";  
this.runnerDiv.setAttribute("class", className);  
//do it twice for IE  
this.runnerDiv.setAttribute("className", className);  
var specs = runner.specs();  
var specCount = 0;  
for (var i = 0; i < specs.length; i++) {  
if (this.specFilter(specs[i])) {  
specCount++;  
}  
}  
var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");  
message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";  
this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);  
   
this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));  
};  
   
jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {  
var results = suite.results();  
var status = results.passed() ? 'passed' : 'failed';  
if (results.totalCount === 0) { // todo: change this to check results.skipped  
status = 'skipped';  
}  
this.suiteDivs[suite.id].className += " " + status;  
};  
   
jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {  
if (this.logRunningSpecs) {  
this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');  
}  
};  
   
jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {  
var results = spec.results();  
var status = results.passed() ? 'passed' : 'failed';  
if (results.skipped) {  
status = 'skipped';  
}  
var specDiv = this.createDom('div', { className: 'spec ' + status },  
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),  
this.createDom('a', {  
className: 'description',  
href: '?spec=' + encodeURIComponent(spec.getFullName()),  
title: spec.getFullName()  
}, spec.description));  
   
   
var resultItems = results.getItems();  
var messagesDiv = this.createDom('div', { className: 'messages' });  
for (var i = 0; i < resultItems.length; i++) {  
var result = resultItems[i];  
   
if (result.type == 'log') {  
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));  
} else if (result.type == 'expect' && result.passed && !result.passed()) {  
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));  
   
if (result.trace.stack) {  
messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));  
}  
}  
}  
   
if (messagesDiv.childNodes.length > 0) {  
specDiv.appendChild(messagesDiv);  
}  
   
this.suiteDivs[spec.suite.id].appendChild(specDiv);  
};  
   
jasmine.TrivialReporter.prototype.log = function() {  
var console = jasmine.getGlobal().console;  
if (console && console.log) {  
if (console.log.apply) {  
console.log.apply(console, arguments);  
} else {  
console.log(arguments); // ie fix: console.log.apply doesn't exist on ie  
}  
}  
};  
   
jasmine.TrivialReporter.prototype.getLocation = function() {  
return this.document.location;  
};  
   
jasmine.TrivialReporter.prototype.specFilter = function(spec) {  
var paramMap = {};  
var params = this.getLocation().search.substring(1).split('&');  
for (var i = 0; i < params.length; i++) {  
var p = params[i].split('=');  
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);  
}  
   
if (!paramMap.spec) {  
return true;  
}  
return spec.getFullName().indexOf(paramMap.spec) === 0;  
};  
   
body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; } body {
  background-color: #eeeeee;
#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; } padding: 0;
#HTMLReporter a { text-decoration: none; } margin: 5px;
#HTMLReporter a:hover { text-decoration: underline; } overflow-y: scroll;
#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; } }
#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }  
#HTMLReporter #jasmine_content { position: fixed; right: 100%; } #HTMLReporter {
#HTMLReporter .version { color: #aaaaaa; } font-size: 11px;
#HTMLReporter .banner { margin-top: 14px; } font-family: Monaco, "Lucida Console", monospace;
#HTMLReporter .duration { color: #aaaaaa; float: right; } line-height: 14px;
#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; } color: #333333;
#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; } }
#HTMLReporter .symbolSummary li.passed { font-size: 14px; }  
#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; } #HTMLReporter a {
#HTMLReporter .symbolSummary li.failed { line-height: 9px; } text-decoration: none;
#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; } }
#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }  
#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; } #HTMLReporter a:hover {
#HTMLReporter .symbolSummary li.pending { line-height: 11px; } text-decoration: underline;
#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; } }
#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }  
#HTMLReporter .runningAlert { background-color: #666666; } #HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 {
#HTMLReporter .skippedAlert { background-color: #aaaaaa; } margin: 0;
#HTMLReporter .skippedAlert:first-child { background-color: #333333; } line-height: 14px;
#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; } }
#HTMLReporter .passingAlert { background-color: #a6b779; }  
#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; } #HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace {
#HTMLReporter .failingAlert { background-color: #cf867e; } padding-left: 9px;
#HTMLReporter .failingAlert:first-child { background-color: #b03911; } padding-right: 9px;
#HTMLReporter .results { margin-top: 14px; } }
#HTMLReporter #details { display: none; }  
#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; } #HTMLReporter #jasmine_content {
#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } position: fixed;
#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } right: 100%;
#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } }
#HTMLReporter.showDetails .summary { display: none; }  
#HTMLReporter.showDetails #details { display: block; } #HTMLReporter .version {
#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } color: #aaaaaa;
#HTMLReporter .summary { margin-top: 14px; } }
#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }  
#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; } #HTMLReporter .banner {
#HTMLReporter .summary .specSummary.failed a { color: #b03911; } margin-top: 14px;
#HTMLReporter .description + .suite { margin-top: 0; } }
#HTMLReporter .suite { margin-top: 14px; }  
#HTMLReporter .suite a { color: #333333; } #HTMLReporter .duration {
#HTMLReporter #details .specDetail { margin-bottom: 28px; } color: #aaaaaa;
#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; } float: right;
#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; } }
#HTMLReporter .resultMessage span.result { display: block; }  
#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } #HTMLReporter .symbolSummary {
  overflow: hidden;
#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ } *zoom: 1;
#TrivialReporter a:visited, #TrivialReporter a { color: #303; } margin: 14px 0;
#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; } }
#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }  
#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; } #HTMLReporter .symbolSummary li {
#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; } display: block;
#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; } float: left;
#TrivialReporter .runner.running { background-color: yellow; } height: 7px;
#TrivialReporter .options { text-align: right; font-size: .8em; } width: 14px;
#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; } margin-bottom: 7px;
#TrivialReporter .suite .suite { margin: 5px; } font-size: 16px;
#TrivialReporter .suite.passed { background-color: #dfd; } }
#TrivialReporter .suite.failed { background-color: #fdd; }  
#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; } #HTMLReporter .symbolSummary li.passed {
#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; } font-size: 14px;
#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; } }
#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }  
#TrivialReporter .spec.skipped { background-color: #bbb; } #HTMLReporter .symbolSummary li.passed:before {
#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; } color: #5e7d00;
#TrivialReporter .passed { background-color: #cfc; display: none; } content: "\02022";
#TrivialReporter .failed { background-color: #fbb; } }
#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }  
#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; } #HTMLReporter .symbolSummary li.failed {
#TrivialReporter .resultMessage .mismatch { color: black; } line-height: 9px;
#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; } }
#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }  
#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; } #HTMLReporter .symbolSummary li.failed:before {
#TrivialReporter #jasmine_content { position: fixed; right: 100%; } color: #b03911;
#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; } content: "x";
  font-weight: bold;
  margin-left: -1px;
  }
   
  #HTMLReporter .symbolSummary li.skipped {
  font-size: 14px;
  }
   
  #HTMLReporter .symbolSummary li.skipped:before {
  color: #bababa;
  content: "\02022";
  }
   
  #HTMLReporter .symbolSummary li.pending {
  line-height: 11px;
  }
   
  #HTMLReporter .symbolSummary li.pending:before {
  color: #aaaaaa;
  content: "-";
  }
   
  #HTMLReporter .bar {
  line-height: 28px;
  font-size: 14px;
  display: block;
  color: #eee;
  }
   
  #HTMLReporter .runningAlert {
  background-color: #666666;
  }
   
  #HTMLReporter .skippedAlert {
  background-color: #aaaaaa;
  }
   
  #HTMLReporter .skippedAlert:first-child {
  background-color: #333333;
  }
   
  #HTMLReporter .skippedAlert:hover {
  text-decoration: none;
  color: white;
  text-decoration: underline;
  }
   
  #HTMLReporter .passingAlert {
  background-color: #a6b779;
  }
   
  #HTMLReporter .passingAlert:first-child {
  background-color: #5e7d00;
  }
   
  #HTMLReporter .failingAlert {
  background-color: #cf867e;
  }
   
  #HTMLReporter .failingAlert:first-child {
  background-color: #b03911;
  }
   
  #HTMLReporter .results {
  margin-top: 14px;
  }
   
  #HTMLReporter #details {
  display: none;
  }
   
  #HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a {
  background-color: #fff;
  color: #333333;
  }
   
  #HTMLReporter.showDetails .summaryMenuItem {
  font-weight: normal;
  text-decoration: inherit;
  }
   
  #HTMLReporter.showDetails .summaryMenuItem:hover {
  text-decoration: underline;
  }
   
  #HTMLReporter.showDetails .detailsMenuItem {
  font-weight: bold;
  text-decoration: underline;
  }
   
  #HTMLReporter.showDetails .summary {
  display: none;
  }
   
  #HTMLReporter.showDetails #details {
  display: block;
  }
   
  #HTMLReporter .summaryMenuItem {
  font-weight: bold;
  text-decoration: underline;
  }
   
  #HTMLReporter .summary {
  margin-top: 14px;
  }
   
  #HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary {
  margin-left: 14px;
  }
   
  #HTMLReporter .summary .specSummary.passed a {
  color: #5e7d00;
  }
   
  #HTMLReporter .summary .specSummary.failed a {
  color: #b03911;
  }
   
  #HTMLReporter .description + .suite {
  margin-top: 0;
  }
   
  #HTMLReporter .suite {
  margin-top: 14px;
  }
   
  #HTMLReporter .suite a {
  color: #333333;
  }
   
  #HTMLReporter #details .specDetail {
  margin-bottom: 28px;
  }
   
  #HTMLReporter #details .specDetail .description {
  display: block;
  color: white;
  background-color: #b03911;
  }
   
  #HTMLReporter .resultMessage {
  padding-top: 14px;
  color: #333333;
  }
   
  #HTMLReporter .resultMessage span.result {
  display: block;
  }
   
  #HTMLReporter .stackTrace {
  margin: 5px 0 0 0;
  max-height: 224px;
  overflow: auto;
  line-height: 18px;
  color: #666666;
  border: 1px solid #ddd;
  background: white;
  white-space: pre;
  }
   
  #TrivialReporter {
  padding: 8px 13px;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  overflow-y: scroll;
  background-color: white;
  font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/
  /*white-space: pre;*/
  /*}*/
  }
   
  #TrivialReporter a:visited, #TrivialReporter a {
  color: #303;
  }
   
  #TrivialReporter a:hover, #TrivialReporter a:active {
  color: blue;
  }
   
  #TrivialReporter .run_spec {
  float: right;
  padding-right: 5px;
  font-size: .8em;
  text-decoration: none;
  }
   
  #TrivialReporter .banner {
  color: #303;
  background-color: #fef;
  padding: 5px;
  }
   
  #TrivialReporter .logo {
  float: left;
  font-size: 1.1em;
  padding-left: 5px;
  }
   
  #TrivialReporter .logo .version {
  font-size: .6em;
  padding-left: 1em;
  }
   
  #TrivialReporter .runner.running {
  background-color: yellow;
  }
   
  #TrivialReporter .options {
  text-align: right;
  font-size: .8em;
  }
   
  #TrivialReporter .suite {
  border: 1px outset gray;
  margin: 5px 0;
  padding-left: 1em;
  }
   
  #TrivialReporter .suite .suite {
  margin: 5px;
  }
   
  #TrivialReporter .suite.passed {
  background-color: #dfd;
  }
   
  #TrivialReporter .suite.failed {
  background-color: #fdd;
  }
   
  #TrivialReporter .spec {
  margin: 5px;
  padding-left: 1em;
  clear: both;
  }
   
  #TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped {
  padding-bottom: 5px;
  border: 1px solid gray;
  }
   
  #TrivialReporter .spec.failed {
  background-color: #fbb;
  border-color: red;
  }
   
  #TrivialReporter .spec.passed {
  background-color: #bfb;
  border-color: green;
  }
   
  #TrivialReporter .spec.skipped {
  background-color: #bbb;
  }
   
  #TrivialReporter .messages {
  border-left: 1px dashed gray;
  padding-left: 1em;
  padding-right: 1em;
  }
   
  #TrivialReporter .passed {
  background-color: #cfc;
  display: none;
  }
   
  #TrivialReporter .failed {
  background-color: #fbb;
  }
   
  #TrivialReporter .skipped {
  color: #777;
  background-color: #eee;
  display: none;
  }
   
  #TrivialReporter .resultMessage span.result {
  display: block;
  line-height: 2em;
  color: black;
  }
   
  #TrivialReporter .resultMessage .mismatch {
  color: black;
  }
   
  #TrivialReporter .stackTrace {
  white-space: pre;
  font-size: .8em;
  margin-left: 10px;
  max-height: 5em;
  overflow: auto;
  border: 1px inset red;
  padding: 1em;
  background: #eef;
  }
   
  #TrivialReporter .finished-at {
  padding-left: 1em;
  font-size: .6em;
  }
   
  #TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped {
  display: block;
  }
   
  #TrivialReporter #jasmine_content {
  position: fixed;
  right: 100%;
  }
   
  #TrivialReporter .runner {
  border: 1px solid gray;
  display: block;
  margin: 5px 0;
  padding: 2px 0 2px 10px;
  }
   
var isCommonJS = typeof window == "undefined"; var isCommonJS = typeof window == "undefined";
   
/** /**
* Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework. * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
* *
* @namespace * @namespace
*/ */
var jasmine = {}; var jasmine = {};
if (isCommonJS) exports.jasmine = jasmine; if (isCommonJS) exports.jasmine = jasmine;
/** /**
* @private * @private
*/ */
jasmine.unimplementedMethod_ = function() { jasmine.unimplementedMethod_ = function () {
throw new Error("unimplemented method"); throw new Error("unimplemented method");
}; };
   
/** /**
* Use <code>jasmine.undefined</code> instead of <code>undefined</code>, since <code>undefined</code> is just * Use <code>jasmine.undefined</code> instead of <code>undefined</code>, since <code>undefined</code> is just
* a plain old variable and may be redefined by somebody else. * a plain old variable and may be redefined by somebody else.
* *
* @private * @private
*/ */
jasmine.undefined = jasmine.___undefined___; jasmine.undefined = jasmine.___undefined___;
   
/** /**
* Show diagnostic messages in the console if set to true * Show diagnostic messages in the console if set to true
* *
*/ */
jasmine.VERBOSE = false; jasmine.VERBOSE = false;
   
/** /**
* Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed. * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed.
* *
*/ */
jasmine.DEFAULT_UPDATE_INTERVAL = 250; jasmine.DEFAULT_UPDATE_INTERVAL = 250;
   
/** /**
* Default timeout interval in milliseconds for waitsFor() blocks. * Default timeout interval in milliseconds for waitsFor() blocks.
*/ */
jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
   
jasmine.getGlobal = function() { jasmine.getGlobal = function () {
function getGlobal() { function getGlobal() {
return this; return this;
} }
   
return getGlobal(); return getGlobal();
}; };
   
/** /**
* Allows for bound functions to be compared. Internal use only. * Allows for bound functions to be compared. Internal use only.
* *
* @ignore * @ignore
* @private * @private
* @param base {Object} bound 'this' for the function * @param base {Object} bound 'this' for the function
* @param name {Function} function to find * @param name {Function} function to find
*/ */
jasmine.bindOriginal_ = function(base, name) { jasmine.bindOriginal_ = function (base, name) {
var original = base[name]; var original = base[name];
if (original.apply) { if (original.apply) {
return function() { return function () {
return original.apply(base, arguments); return original.apply(base, arguments);
}; };
} else { } else {
// IE support // IE support
return jasmine.getGlobal()[name]; return jasmine.getGlobal()[name];
} }
}; };
   
jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout'); jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout');
jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout'); jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout');
jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval'); jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval');
jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval'); jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval');
   
jasmine.MessageResult = function(values) { jasmine.MessageResult = function (values) {
this.type = 'log'; this.type = 'log';
this.values = values; this.values = values;
this.trace = new Error(); // todo: test better this.trace = new Error(); // todo: test better
}; };
   
jasmine.MessageResult.prototype.toString = function() { jasmine.MessageResult.prototype.toString = function () {
var text = ""; var text = "";
for (var i = 0; i < this.values.length; i++) { for (var i = 0; i < this.values.length; i++) {
if (i > 0) text += " "; if (i > 0) text += " ";
if (jasmine.isString_(this.values[i])) { if (jasmine.isString_(this.values[i])) {
text += this.values[i]; text += this.values[i];
} else { } else {
text += jasmine.pp(this.values[i]); text += jasmine.pp(this.values[i]);
} }
} }
return text; return text;
}; };
   
jasmine.ExpectationResult = function(params) { jasmine.ExpectationResult = function (params) {
this.type = 'expect'; this.type = 'expect';
this.matcherName = params.matcherName; this.matcherName = params.matcherName;
this.passed_ = params.passed; this.passed_ = params.passed;
this.expected = params.expected; this.expected = params.expected;
this.actual = params.actual; this.actual = params.actual;
this.message = this.passed_ ? 'Passed.' : params.message; this.message = this.passed_ ? 'Passed.' : params.message;
   
var trace = (params.trace || new Error(this.message)); var trace = (params.trace || new Error(this.message));
this.trace = this.passed_ ? '' : trace; this.trace = this.passed_ ? '' : trace;
}; };
   
jasmine.ExpectationResult.prototype.toString = function () { jasmine.ExpectationResult.prototype.toString = function () {
return this.message; return this.message;
}; };
   
jasmine.ExpectationResult.prototype.passed = function () { jasmine.ExpectationResult.prototype.passed = function () {
return this.passed_; return this.passed_;
}; };
   
/** /**
* Getter for the Jasmine environment. Ensures one gets created * Getter for the Jasmine environment. Ensures one gets created
*/ */
jasmine.getEnv = function() { jasmine.getEnv = function () {
var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env(); var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
return env; return env;
}; };
   
/** /**
* @ignore * @ignore
* @private * @private
* @param value * @param value
* @returns {Boolean} * @returns {Boolean}
*/ */
jasmine.isArray_ = function(value) { jasmine.isArray_ = function (value) {
return jasmine.isA_("Array", value); return jasmine.isA_("Array", value);
}; };
   
/** /**
* @ignore * @ignore
* @private * @private
* @param value * @param value
* @returns {Boolean} * @returns {Boolean}
*/ */
jasmine.isString_ = function(value) { jasmine.isString_ = function (value) {
return jasmine.isA_("String", value); return jasmine.isA_("String", value);
}; };
   
/** /**
* @ignore * @ignore
* @private * @private
* @param value * @param value
* @returns {Boolean} * @returns {Boolean}
*/ */
jasmine.isNumber_ = function(value) { jasmine.isNumber_ = function (value) {
return jasmine.isA_("Number", value); return jasmine.isA_("Number", value);
}; };
   
/** /**
* @ignore * @ignore
* @private * @private
* @param {String} typeName * @param {String} typeName
* @param value * @param value
* @returns {Boolean} * @returns {Boolean}
*/ */
jasmine.isA_ = function(typeName, value) { jasmine.isA_ = function (typeName, value) {
return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
}; };
   
/** /**
* Pretty printer for expecations. Takes any object and turns it into a human-readable string. * Pretty printer for expecations. Takes any object and turns it into a human-readable string.
* *
* @param value {Object} an object to be outputted * @param value {Object} an object to be outputted
* @returns {String} * @returns {String}
*/ */
jasmine.pp = function(value) { jasmine.pp = function (value) {
var stringPrettyPrinter = new jasmine.StringPrettyPrinter(); var stringPrettyPrinter = new jasmine.StringPrettyPrinter();
stringPrettyPrinter.format(value); stringPrettyPrinter.format(value);
return stringPrettyPrinter.string; return stringPrettyPrinter.string;
}; };
   
/** /**
* Returns true if the object is a DOM Node. * Returns true if the object is a DOM Node.
* *
* @param {Object} obj object to check * @param {Object} obj object to check
* @returns {Boolean} * @returns {Boolean}
*/ */
jasmine.isDomNode = function(obj) { jasmine.isDomNode = function (obj) {
return obj.nodeType > 0; return obj.nodeType > 0;
}; };
   
/** /**
* Returns a matchable 'generic' object of the class type. For use in expecations of type when values don't matter. * Returns a matchable 'generic' object of the class type. For use in expecations of type when values don't matter.
* *
* @example * @example
* // don't care about which function is passed in, as long as it's a function * // don't care about which function is passed in, as long as it's a function
* expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function)); * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
* *
* @param {Class} clazz * @param {Class} clazz
* @returns matchable object of the type clazz * @returns matchable object of the type clazz
*/ */
jasmine.any = function(clazz) { jasmine.any = function (clazz) {
return new jasmine.Matchers.Any(clazz); return new jasmine.Matchers.Any(clazz);
}; };
   
/** /**
* Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the * Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the
* attributes on the object. * attributes on the object.
* *
* @example * @example
* // don't care about any other attributes than foo. * // don't care about any other attributes than foo.
* expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"}); * expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"});
* *
* @param sample {Object} sample * @param sample {Object} sample
* @returns matchable object for the sample * @returns matchable object for the sample
*/ */
jasmine.objectContaining = function (sample) { jasmine.objectContaining = function (sample) {
return new jasmine.Matchers.ObjectContaining(sample); return new jasmine.Matchers.ObjectContaining(sample);
}; };
   
/** /**
* Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks. * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.
* *
* Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine * Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine
* expectation syntax. Spies can be checked if they were called or not and what the calling params were. * expectation syntax. Spies can be checked if they were called or not and what the calling params were.
* *
* A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs). * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs).
* *
* Spies are torn down at the end of every spec. * Spies are torn down at the end of every spec.
* *
* Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj. * Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
* *
* @example * @example
* // a stub * // a stub
* var myStub = jasmine.createSpy('myStub'); // can be used anywhere * var myStub = jasmine.createSpy('myStub'); // can be used anywhere
* *
* // spy example * // spy example
* var foo = { * var foo = {
* not: function(bool) { return !bool; } * not: function(bool) { return !bool; }
* } * }
* *
* // actual foo.not will not be called, execution stops * // actual foo.not will not be called, execution stops
* spyOn(foo, 'not'); * spyOn(foo, 'not');
   
// foo.not spied upon, execution will continue to implementation // foo.not spied upon, execution will continue to implementation
* spyOn(foo, 'not').andCallThrough(); * spyOn(foo, 'not').andCallThrough();
* *
* // fake example * // fake example
* var foo = { * var foo = {
* not: function(bool) { return !bool; } * not: function(bool) { return !bool; }
* } * }
* *
* // foo.not(val) will return val * // foo.not(val) will return val
* spyOn(foo, 'not').andCallFake(function(value) {return value;}); * spyOn(foo, 'not').andCallFake(function(value) {return value;});
* *
* // mock example * // mock example
* foo.not(7 == 7); * foo.not(7 == 7);
* expect(foo.not).toHaveBeenCalled(); * expect(foo.not).toHaveBeenCalled();
* expect(foo.not).toHaveBeenCalledWith(true); * expect(foo.not).toHaveBeenCalledWith(true);
* *
* @constructor * @constructor
* @see spyOn, jasmine.createSpy, jasmine.createSpyObj * @see spyOn, jasmine.createSpy, jasmine.createSpyObj
* @param {String} name * @param {String} name
*/ */
jasmine.Spy = function(name) { jasmine.Spy = function (name) {
/** /**
* The name of the spy, if provided. * The name of the spy, if provided.
*/ */
this.identity = name || 'unknown'; this.identity = name || 'unknown';
/** /**
* Is this Object a spy? * Is this Object a spy?
*/ */
this.isSpy = true; this.isSpy = true;
/** /**
* The actual function this spy stubs. * The actual function this spy stubs.
*/ */
this.plan = function() { this.plan = function () {
}; };
/** /**
* Tracking of the most recent call to the spy. * Tracking of the most recent call to the spy.
* @example * @example
* var mySpy = jasmine.createSpy('foo'); * var mySpy = jasmine.createSpy('foo');
* mySpy(1, 2); * mySpy(1, 2);
* mySpy.mostRecentCall.args = [1, 2]; * mySpy.mostRecentCall.args = [1, 2];
*/ */
this.mostRecentCall = {}; this.mostRecentCall = {};
   
/** /**
* Holds arguments for each call to the spy, indexed by call count * Holds arguments for each call to the spy, indexed by call count
* @example * @example
* var mySpy = jasmine.createSpy('foo'); * var mySpy = jasmine.createSpy('foo');
* mySpy(1, 2); * mySpy(1, 2);
* mySpy(7, 8); * mySpy(7, 8);
* mySpy.mostRecentCall.args = [7, 8]; * mySpy.mostRecentCall.args = [7, 8];
* mySpy.argsForCall[0] = [1, 2]; * mySpy.argsForCall[0] = [1, 2];
* mySpy.argsForCall[1] = [7, 8]; * mySpy.argsForCall[1] = [7, 8];
*/ */
this.argsForCall = []; this.argsForCall = [];
this.calls = []; this.calls = [];
}; };
   
/** /**
* Tells a spy to call through to the actual implemenatation. * Tells a spy to call through to the actual implemenatation.
* *
* @example * @example
* var foo = { * var foo = {
* bar: function() { // do some stuff } * bar: function() { // do some stuff }
* } * }
* *
* // defining a spy on an existing property: foo.bar * // defining a spy on an existing property: foo.bar
* spyOn(foo, 'bar').andCallThrough(); * spyOn(foo, 'bar').andCallThrough();
*/ */
jasmine.Spy.prototype.andCallThrough = function() { jasmine.Spy.prototype.andCallThrough = function () {
this.plan = this.originalValue; this.plan = this.originalValue;
return this; return this;
}; };
   
/** /**
* For setting the return value of a spy. * For setting the return value of a spy.
* *
* @example * @example
* // defining a spy from scratch: foo() returns 'baz' * // defining a spy from scratch: foo() returns 'baz'
* var foo = jasmine.createSpy('spy on foo').andReturn('baz'); * var foo = jasmine.createSpy('spy on foo').andReturn('baz');
* *
* // defining a spy on an existing property: foo.bar() returns 'baz' * // defining a spy on an existing property: foo.bar() returns 'baz'
* spyOn(foo, 'bar').andReturn('baz'); * spyOn(foo, 'bar').andReturn('baz');
* *
* @param {Object} value * @param {Object} value
*/ */
jasmine.Spy.prototype.andReturn = function(value) { jasmine.Spy.prototype.andReturn = function (value) {
this.plan = function() { this.plan = function () {
return value; return value;
}; };
return this; return this;
}; };
   
/** /**
* For throwing an exception when a spy is called. * For throwing an exception when a spy is called.
* *
* @example * @example
* // defining a spy from scratch: foo() throws an exception w/ message 'ouch' * // defining a spy from scratch: foo() throws an exception w/ message 'ouch'
* var foo = jasmine.createSpy('spy on foo').andThrow('baz'); * var foo = jasmine.createSpy('spy on foo').andThrow('baz');
* *
* // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch' * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch'
* spyOn(foo, 'bar').andThrow('baz'); * spyOn(foo, 'bar').andThrow('baz');
* *
* @param {String} exceptionMsg * @param {String} exceptionMsg
*/ */
jasmine.Spy.prototype.andThrow = function(exceptionMsg) { jasmine.Spy.prototype.andThrow = function (exceptionMsg) {
this.plan = function() { this.plan = function () {
throw exceptionMsg; throw exceptionMsg;
}; };
return this; return this;
}; };
   
/** /**
* Calls an alternate implementation when a spy is called. * Calls an alternate implementation when a spy is called.
* *
* @example * @example
* var baz = function() { * var baz = function() {
* // do some stuff, return something * // do some stuff, return something
* } * }
* // defining a spy from scratch: foo() calls the function baz * // defining a spy from scratch: foo() calls the function baz
* var foo = jasmine.createSpy('spy on foo').andCall(baz); * var foo = jasmine.createSpy('spy on foo').andCall(baz);
* *
* // defining a spy on an existing property: foo.bar() calls an anonymnous function * // defining a spy on an existing property: foo.bar() calls an anonymnous function
* spyOn(foo, 'bar').andCall(function() { return 'baz';} ); * spyOn(foo, 'bar').andCall(function() { return 'baz';} );
* *
* @param {Function} fakeFunc * @param {Function} fakeFunc
*/ */
jasmine.Spy.prototype.andCallFake = function(fakeFunc) { jasmine.Spy.prototype.andCallFake = function (fakeFunc) {
this.plan = fakeFunc; this.plan = fakeFunc;
return this; return this;
}; };
   
/** /**
* Resets all of a spy's the tracking variables so that it can be used again. * Resets all of a spy's the tracking variables so that it can be used again.
* *
* @example * @example
* spyOn(foo, 'bar'); * spyOn(foo, 'bar');
* *
* foo.bar(); * foo.bar();
* *
* expect(foo.bar.callCount).toEqual(1); * expect(foo.bar.callCount).toEqual(1);
* *
* foo.bar.reset(); * foo.bar.reset();
* *
* expect(foo.bar.callCount).toEqual(0); * expect(foo.bar.callCount).toEqual(0);
*/ */
jasmine.Spy.prototype.reset = function() { jasmine.Spy.prototype.reset = function () {
this.wasCalled = false; this.wasCalled = false;
this.callCount = 0; this.callCount = 0;
this.argsForCall = []; this.argsForCall = [];
this.calls = []; this.calls = [];
this.mostRecentCall = {}; this.mostRecentCall = {};
}; };
   
jasmine.createSpy = function(name) { jasmine.createSpy = function (name) {
   
var spyObj = function() { var spyObj = function () {
spyObj.wasCalled = true; spyObj.wasCalled = true;
spyObj.callCount++; spyObj.callCount++;
var args = jasmine.util.argsToArray(arguments); var args = jasmine.util.argsToArray(arguments);
spyObj.mostRecentCall.object = this; spyObj.mostRecentCall.object = this;
spyObj.mostRecentCall.args = args; spyObj.mostRecentCall.args = args;
spyObj.argsForCall.push(args); spyObj.argsForCall.push(args);
spyObj.calls.push({object: this, args: args}); spyObj.calls.push({object: this, args: args});
return spyObj.plan.apply(this, arguments); return spyObj.plan.apply(this, arguments);
}; };
   
var spy = new jasmine.Spy(name); var spy = new jasmine.Spy(name);
   
for (var prop in spy) { for (var prop in spy) {
spyObj[prop] = spy[prop]; spyObj[prop] = spy[prop];
} }
   
spyObj.reset(); spyObj.reset();
   
return spyObj; return spyObj;
}; };
   
/** /**
* Determines whether an object is a spy. * Determines whether an object is a spy.
* *
* @param {jasmine.Spy|Object} putativeSpy * @param {jasmine.Spy|Object} putativeSpy
* @returns {Boolean} * @returns {Boolean}
*/ */
jasmine.isSpy = function(putativeSpy) { jasmine.isSpy = function (putativeSpy) {
return putativeSpy && putativeSpy.isSpy; return putativeSpy && putativeSpy.isSpy;
}; };
   
/** /**
* Creates a more complicated spy: an Object that has every property a function that is a spy. Used for stubbing something * Creates a more complicated spy: an Object that has every property a function that is a spy. Used for stubbing something
* large in one call. * large in one call.
* *
* @param {String} baseName name of spy class * @param {String} baseName name of spy class
* @param {Array} methodNames array of names of methods to make spies * @param {Array} methodNames array of names of methods to make spies
*/ */
jasmine.createSpyObj = function(baseName, methodNames) { jasmine.createSpyObj = function (baseName, methodNames) {
if (!jasmine.isArray_(methodNames) || methodNames.length === 0) { if (!jasmine.isArray_(methodNames) || methodNames.length === 0) {
throw new Error('createSpyObj requires a non-empty array of method names to create spies for'); throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
} }
var obj = {}; var obj = {};
for (var i = 0; i < methodNames.length; i++) { for (var i = 0; i < methodNames.length; i++) {
obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]); obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]);
} }
return obj; return obj;
}; };
   
/** /**
* All parameters are pretty-printed and concatenated together, then written to the current spec's output. * All parameters are pretty-printed and concatenated together, then written to the current spec's output.
* *
* Be careful not to leave calls to <code>jasmine.log</code> in production code. * Be careful not to leave calls to <code>jasmine.log</code> in production code.
*/ */
jasmine.log = function() { jasmine.log = function () {
var spec = jasmine.getEnv().currentSpec; var spec = jasmine.getEnv().currentSpec;
spec.log.apply(spec, arguments); spec.log.apply(spec, arguments);
}; };
   
/** /**
* Function that installs a spy on an existing object's method name. Used within a Spec to create a spy. * Function that installs a spy on an existing object's method name. Used within a Spec to create a spy.
* *
* @example * @example
* // spy example * // spy example
* var foo = { * var foo = {
* not: function(bool) { return !bool; } * not: function(bool) { return !bool; }
* } * }
* spyOn(foo, 'not'); // actual foo.not will not be called, execution stops * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
* *
* @see jasmine.createSpy * @see jasmine.createSpy
* @param obj * @param obj
* @param methodName * @param methodName
* @returns a Jasmine spy that can be chained with all spy methods * @returns a Jasmine spy that can be chained with all spy methods
*/ */
var spyOn = function(obj, methodName) { var spyOn = function (obj, methodName) {
return jasmine.getEnv().currentSpec.spyOn(obj, methodName); return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
}; };
if (isCommonJS) exports.spyOn = spyOn; if (isCommonJS) exports.spyOn = spyOn;
   
/** /**
* Creates a Jasmine spec that will be added to the current suite. * Creates a Jasmine spec that will be added to the current suite.
* *
* // TODO: pending tests * // TODO: pending tests
* *
* @example * @example
* it('should be true', function() { * it('should be true', function() {
* expect(true).toEqual(true); * expect(true).toEqual(true);
* }); * });
* *
* @param {String} desc description of this specification * @param {String} desc description of this specification
* @param {Function} func defines the preconditions and expectations of the spec * @param {Function} func defines the preconditions and expectations of the spec
*/ */
var it = function(desc, func) { var it = function (desc, func) {
return jasmine.getEnv().it(desc, func); return jasmine.getEnv().it(desc, func);
}; };
if (isCommonJS) exports.it = it; if (isCommonJS) exports.it = it;
   
/** /**
* Creates a <em>disabled</em> Jasmine spec. * Creates a <em>disabled</em> Jasmine spec.
* *
* A convenience method that allows existing specs to be disabled temporarily during development. * A convenience method that allows existing specs to be disabled temporarily during development.
* *
* @param {String} desc description of this specification * @param {String} desc description of this specification
* @param {Function} func defines the preconditions and expectations of the spec * @param {Function} func defines the preconditions and expectations of the spec
*/ */
var xit = function(desc, func) { var xit = function (desc, func) {
return jasmine.getEnv().xit(desc, func); return jasmine.getEnv().xit(desc, func);
}; };
if (isCommonJS) exports.xit = xit; if (isCommonJS) exports.xit = xit;
   
/** /**
* Starts a chain for a Jasmine expectation. * Starts a chain for a Jasmine expectation.
* *
* It is passed an Object that is the actual value and should chain to one of the many * It is passed an Object that is the actual value and should chain to one of the many
* jasmine.Matchers functions. * jasmine.Matchers functions.
* *
* @param {Object} actual Actual value to test against and expected value * @param {Object} actual Actual value to test against and expected value
*/ */
var expect = function(actual) { var expect = function (actual) {
return jasmine.getEnv().currentSpec.expect(actual); return jasmine.getEnv().currentSpec.expect(actual);
}; };
if (isCommonJS) exports.expect = expect; if (isCommonJS) exports.expect = expect;
   
/** /**
* Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs. * Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs.
* *
* @param {Function} func Function that defines part of a jasmine spec. * @param {Function} func Function that defines part of a jasmine spec.
*/ */
var runs = function(func) { var runs = function (func) {
jasmine.getEnv().currentSpec.runs(func); jasmine.getEnv().currentSpec.runs(func);
}; };
if (isCommonJS) exports.runs = runs; if (isCommonJS) exports.runs = runs;
   
/** /**
* Waits a fixed time period before moving to the next block. * Waits a fixed time period before moving to the next block.
* *
* @deprecated Use waitsFor() instead * @deprecated Use waitsFor() instead
* @param {Number} timeout milliseconds to wait * @param {Number} timeout milliseconds to wait
*/ */
var waits = function(timeout) { var waits = function (timeout) {
jasmine.getEnv().currentSpec.waits(timeout); jasmine.getEnv().currentSpec.waits(timeout);
}; };
if (isCommonJS) exports.waits = waits; if (isCommonJS) exports.waits = waits;
   
/** /**
* Waits for the latchFunction to return true before proceeding to the next block. * Waits for the latchFunction to return true before proceeding to the next block.
* *
* @param {Function} latchFunction * @param {Function} latchFunction
* @param {String} optional_timeoutMessage * @param {String} optional_timeoutMessage
* @param {Number} optional_timeout * @param {Number} optional_timeout
*/ */
var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { var waitsFor = function (latchFunction, optional_timeoutMessage, optional_timeout) {
jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments); jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
}; };
if (isCommonJS) exports.waitsFor = waitsFor; if (isCommonJS) exports.waitsFor = waitsFor;
   
/** /**
* A function that is called before each spec in a suite. * A function that is called before each spec in a suite.
* *
* Used for spec setup, including validating assumptions. * Used for spec setup, including validating assumptions.
* *
* @param {Function} beforeEachFunction * @param {Function} beforeEachFunction
*/ */
var beforeEach = function(beforeEachFunction) { var beforeEach = function (beforeEachFunction) {
jasmine.getEnv().beforeEach(beforeEachFunction); jasmine.getEnv().beforeEach(beforeEachFunction);
}; };
if (isCommonJS) exports.beforeEach = beforeEach; if (isCommonJS) exports.beforeEach = beforeEach;
   
/** /**
* A function that is called after each spec in a suite. * A function that is called after each spec in a suite.
* *
* Used for restoring any state that is hijacked during spec execution. * Used for restoring any state that is hijacked during spec execution.
* *
* @param {Function} afterEachFunction * @param {Function} afterEachFunction
*/ */
var afterEach = function(afterEachFunction) { var afterEach = function (afterEachFunction) {
jasmine.getEnv().afterEach(afterEachFunction); jasmine.getEnv().afterEach(afterEachFunction);
}; };
if (isCommonJS) exports.afterEach = afterEach; if (isCommonJS) exports.afterEach = afterEach;
   
/** /**
* Defines a suite of specifications. * Defines a suite of specifications.
* *
* Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
* are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
* of setup in some tests. * of setup in some tests.
* *
* @example * @example
* // TODO: a simple suite * // TODO: a simple suite
* *
* // TODO: a simple suite with a nested describe block * // TODO: a simple suite with a nested describe block
* *
* @param {String} description A string, usually the class under test. * @param {String} description A string, usually the class under test.
* @param {Function} specDefinitions function that defines several specs. * @param {Function} specDefinitions function that defines several specs.
*/ */
var describe = function(description, specDefinitions) { var describe = function (description, specDefinitions) {
return jasmine.getEnv().describe(description, specDefinitions); return jasmine.getEnv().describe(description, specDefinitions);
}; };
if (isCommonJS) exports.describe = describe; if (isCommonJS) exports.describe = describe;
   
/** /**
* Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development. * Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development.
* *
* @param {String} description A string, usually the class under test. * @param {String} description A string, usually the class under test.
* @param {Function} specDefinitions function that defines several specs. * @param {Function} specDefinitions function that defines several specs.
*/ */
var xdescribe = function(description, specDefinitions) { var xdescribe = function (description, specDefinitions) {
return jasmine.getEnv().xdescribe(description, specDefinitions); return jasmine.getEnv().xdescribe(description, specDefinitions);
}; };
if (isCommonJS) exports.xdescribe = xdescribe; if (isCommonJS) exports.xdescribe = xdescribe;
   
   
// Provide the XMLHttpRequest class for IE 5.x-6.x: // Provide the XMLHttpRequest class for IE 5.x-6.x:
jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() { jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function () {
function tryIt(f) { function tryIt(f) {
try { try {
return f(); return f();
} catch(e) { } catch (e) {
} }
return null; return null;
} }
   
var xhr = tryIt(function() { var xhr = tryIt(function () {
return new ActiveXObject("Msxml2.XMLHTTP.6.0"); return new ActiveXObject("Msxml2.XMLHTTP.6.0");
}) ||  
tryIt(function() {  
return new ActiveXObject("Msxml2.XMLHTTP.3.0");  
}) || }) ||
tryIt(function() { tryIt(function () {
return new ActiveXObject("Msxml2.XMLHTTP"); return new ActiveXObject("Msxml2.XMLHTTP.3.0");
}) || }) ||
tryIt(function() { tryIt(function () {
return new ActiveXObject("Microsoft.XMLHTTP"); return new ActiveXObject("Msxml2.XMLHTTP");
}); }) ||
  tryIt(function () {
if (!xhr) throw new Error("This browser does not support XMLHttpRequest."); return new ActiveXObject("Microsoft.XMLHTTP");
  });
return xhr;  
  if (!xhr) throw new Error("This browser does not support XMLHttpRequest.");
   
  return xhr;
} : XMLHttpRequest; } : XMLHttpRequest;
/** /**
* @namespace * @namespace
*/ */
jasmine.util = {}; jasmine.util = {};
   
/** /**
* Declare that a child class inherit it's prototype from the parent class. * Declare that a child class inherit it's prototype from the parent class.
* *
* @private * @private
* @param {Function} childClass * @param {Function} childClass
* @param {Function} parentClass * @param {Function} parentClass
*/ */
jasmine.util.inherit = function(childClass, parentClass) { jasmine.util.inherit = function (childClass, parentClass) {
/** /**
* @private * @private
*/ */
var subclass = function() { var subclass = function () {
}; };
subclass.prototype = parentClass.prototype; subclass.prototype = parentClass.prototype;
childClass.prototype = new subclass(); childClass.prototype = new subclass();
}; };
   
jasmine.util.formatException = function(e) { jasmine.util.formatException = function (e) {
var lineNumber; var lineNumber;
if (e.line) { if (e.line) {
lineNumber = e.line; lineNumber = e.line;
} }
else if (e.lineNumber) { else if (e.lineNumber) {
lineNumber = e.lineNumber; lineNumber = e.lineNumber;
} }
   
var file; var file;
   
if (e.sourceURL) { if (e.sourceURL) {
file = e.sourceURL; file = e.sourceURL;
} }
else if (e.fileName) { else if (e.fileName) {
file = e.fileName; file = e.fileName;
} }
   
var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString(); var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString();
   
if (file && lineNumber) { if (file && lineNumber) {
message += ' in ' + file + ' (line ' + lineNumber + ')'; message += ' in ' + file + ' (line ' + lineNumber + ')';
} }
   
return message; return message;
}; };
   
jasmine.util.htmlEscape = function(str) { jasmine.util.htmlEscape = function (str) {
if (!str) return str; if (!str) return str;
return str.replace(/&/g, '&amp;') return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;') .replace(/</g, '&lt;')
.replace(/>/g, '&gt;'); .replace(/>/g, '&gt;');
}; };
   
jasmine.util.argsToArray = function(args) { jasmine.util.argsToArray = function (args) {
var arrayOfArgs = []; var arrayOfArgs = [];
for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]); for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
return arrayOfArgs; return arrayOfArgs;
}; };
   
jasmine.util.extend = function(destination, source) { jasmine.util.extend = function (destination, source) {
for (var property in source) destination[property] = source[property]; for (var property in source) destination[property] = source[property];
return destination; return destination;
}; };
   
/** /**
* Environment for Jasmine * Environment for Jasmine
* *
* @constructor * @constructor
*/ */
jasmine.Env = function() { jasmine.Env = function () {
this.currentSpec = null; this.currentSpec = null;
this.currentSuite = null; this.currentSuite = null;
this.currentRunner_ = new jasmine.Runner(this); this.currentRunner_ = new jasmine.Runner(this);
   
this.reporter = new jasmine.MultiReporter(); this.reporter = new jasmine.MultiReporter();
   
this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL; this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL; this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
this.lastUpdate = 0; this.lastUpdate = 0;
this.specFilter = function() { this.specFilter = function () {
return true; return true;
}; };
   
this.nextSpecId_ = 0; this.nextSpecId_ = 0;
this.nextSuiteId_ = 0; this.nextSuiteId_ = 0;
this.equalityTesters_ = []; this.equalityTesters_ = [];
   
// wrap matchers // wrap matchers
this.matchersClass = function() { this.matchersClass = function () {
jasmine.Matchers.apply(this, arguments); jasmine.Matchers.apply(this, arguments);
}; };
jasmine.util.inherit(this.matchersClass, jasmine.Matchers); jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
   
jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass); jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
}; };
   
   
jasmine.Env.prototype.setTimeout = jasmine.setTimeout; jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout; jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
jasmine.Env.prototype.setInterval = jasmine.setInterval; jasmine.Env.prototype.setInterval = jasmine.setInterval;
jasmine.Env.prototype.clearInterval = jasmine.clearInterval; jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
   
/** /**
* @returns an object containing jasmine version build info, if set. * @returns an object containing jasmine version build info, if set.
*/ */
jasmine.Env.prototype.version = function () { jasmine.Env.prototype.version = function () {
if (jasmine.version_) { if (jasmine.version_) {
return jasmine.version_; return jasmine.version_;
} else { } else {
throw new Error('Version not set'); throw new Error('Version not set');
} }
}; };
   
/** /**
* @returns string containing jasmine version build info, if set. * @returns string containing jasmine version build info, if set.
*/ */
jasmine.Env.prototype.versionString = function() { jasmine.Env.prototype.versionString = function () {
if (!jasmine.version_) { if (!jasmine.version_) {
return "version unknown"; return "version unknown";
} }
   
var version = this.version(); var version = this.version();
var versionString = version.major + "." + version.minor + "." + version.build; var versionString = version.major + "." + version.minor + "." + version.build;
if (version.release_candidate) { if (version.release_candidate) {
versionString += ".rc" + version.release_candidate; versionString += ".rc" + version.release_candidate;
} }
versionString += " revision " + version.revision; versionString += " revision " + version.revision;
return versionString; return versionString;
}; };
   
/** /**
* @returns a sequential integer starting at 0 * @returns a sequential integer starting at 0
*/ */
jasmine.Env.prototype.nextSpecId = function () { jasmine.Env.prototype.nextSpecId = function () {
return this.nextSpecId_++; return this.nextSpecId_++;
}; };
   
/** /**
* @returns a sequential integer starting at 0 * @returns a sequential integer starting at 0
*/ */
jasmine.Env.prototype.nextSuiteId = function () { jasmine.Env.prototype.nextSuiteId = function () {
return this.nextSuiteId_++; return this.nextSuiteId_++;
}; };
   
/** /**
* Register a reporter to receive status updates from Jasmine. * Register a reporter to receive status updates from Jasmine.
* @param {jasmine.Reporter} reporter An object which will receive status updates. * @param {jasmine.Reporter} reporter An object which will receive status updates.
*/ */
jasmine.Env.prototype.addReporter = function(reporter) { jasmine.Env.prototype.addReporter = function (reporter) {
this.reporter.addReporter(reporter); this.reporter.addReporter(reporter);
}; };
   
jasmine.Env.prototype.execute = function() { jasmine.Env.prototype.execute = function () {
this.currentRunner_.execute(); this.currentRunner_.execute();
}; };
   
jasmine.Env.prototype.describe = function(description, specDefinitions) { jasmine.Env.prototype.describe = function (description, specDefinitions) {
var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite); var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
   
var parentSuite = this.currentSuite; var parentSuite = this.currentSuite;
if (parentSuite) { if (parentSuite) {
parentSuite.add(suite); parentSuite.add(suite);
} else { } else {
this.currentRunner_.add(suite); this.currentRunner_.add(suite);
} }
   
this.currentSuite = suite; this.currentSuite = suite;
   
var declarationError = null; var declarationError = null;
try { try {
specDefinitions.call(suite); specDefinitions.call(suite);
} catch(e) { } catch (e) {
declarationError = e; declarationError = e;
} }
   
if (declarationError) { if (declarationError) {
this.it("encountered a declaration exception", function() { this.it("encountered a declaration exception", function () {
throw declarationError; throw declarationError;
}); });
} }
   
this.currentSuite = parentSuite; this.currentSuite = parentSuite;
   
return suite; return suite;
}; };
   
jasmine.Env.prototype.beforeEach = function(beforeEachFunction) { jasmine.Env.prototype.beforeEach = function (beforeEachFunction) {
if (this.currentSuite) { if (this.currentSuite) {
this.currentSuite.beforeEach(beforeEachFunction); this.currentSuite.beforeEach(beforeEachFunction);
} else { } else {
this.currentRunner_.beforeEach(beforeEachFunction); this.currentRunner_.beforeEach(beforeEachFunction);
} }
}; };
   
jasmine.Env.prototype.currentRunner = function () { jasmine.Env.prototype.currentRunner = function () {
return this.currentRunner_; return this.currentRunner_;
}; };
   
jasmine.Env.prototype.afterEach = function(afterEachFunction) { jasmine.Env.prototype.afterEach = function (afterEachFunction) {
if (this.currentSuite) { if (this.currentSuite) {
this.currentSuite.afterEach(afterEachFunction); this.currentSuite.afterEach(afterEachFunction);
} else { } else {
this.currentRunner_.afterEach(afterEachFunction); this.currentRunner_.afterEach(afterEachFunction);
} }
   
}; };
   
jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) { jasmine.Env.prototype.xdescribe = function (desc, specDefinitions) {
return { return {
execute: function() { execute: function () {
} }
}; };
}; };
   
jasmine.Env.prototype.it = function(description, func) { jasmine.Env.prototype.it = function (description, func) {
var spec = new jasmine.Spec(this, this.currentSuite, description); var spec = new jasmine.Spec(this, this.currentSuite, description);
this.currentSuite.add(spec); this.currentSuite.add(spec);
this.currentSpec = spec; this.currentSpec = spec;
   
if (func) { if (func) {
spec.runs(func); spec.runs(func);
} }
   
return spec; return spec;
}; };
   
jasmine.Env.prototype.xit = function(desc, func) { jasmine.Env.prototype.xit = function (desc, func) {
return { return {
id: this.nextSpecId(), id: this.nextSpecId(),
runs: function() { runs: function () {
} }
}; };
}; };
   
jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) { jasmine.Env.prototype.compareObjects_ = function (a, b, mismatchKeys, mismatchValues) {
if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) { if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
return true; return true;
} }
   
a.__Jasmine_been_here_before__ = b; a.__Jasmine_been_here_before__ = b;
b.__Jasmine_been_here_before__ = a; b.__Jasmine_been_here_before__ = a;
   
var hasKey = function(obj, keyName) { var hasKey = function (obj, keyName) {
return obj !== null && obj[keyName] !== jasmine.undefined; return obj !== null && obj[keyName] !== jasmine.undefined;
}; };
   
for (var property in b) { for (var property in b) {
if (!hasKey(a, property) && hasKey(b, property)) { if (!hasKey(a, property) && hasKey(b, property)) {
mismatchKeys.push("expected has key '" + property + "', but missing from actual."); mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
} }
} }
for (property in a) { for (property in a) {
if (!hasKey(b, property) && hasKey(a, property)) { if (!hasKey(b, property) && hasKey(a, property)) {
mismatchKeys.push("expected missing key '" + property + "', but present in actual."); mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
} }
} }
for (property in b) { for (property in b) {
if (property == '__Jasmine_been_here_before__') continue; if (property == '__Jasmine_been_here_before__') continue;
if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) { if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual."); mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
} }
} }
   
if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) { if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
mismatchValues.push("arrays were not the same length"); mismatchValues.push("arrays were not the same length");
} }
   
delete a.__Jasmine_been_here_before__; delete a.__Jasmine_been_here_before__;
delete b.__Jasmine_been_here_before__; delete b.__Jasmine_been_here_before__;
return (mismatchKeys.length === 0 && mismatchValues.length === 0); return (mismatchKeys.length === 0 && mismatchValues.length === 0);
}; };
   
jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) { jasmine.Env.prototype.equals_ = function (a, b, mismatchKeys, mismatchValues) {
mismatchKeys = mismatchKeys || []; mismatchKeys = mismatchKeys || [];
mismatchValues = mismatchValues || []; mismatchValues = mismatchValues || [];
   
for (var i = 0; i < this.equalityTesters_.length; i++) { for (var i = 0; i < this.equalityTesters_.length; i++) {
var equalityTester = this.equalityTesters_[i]; var equalityTester = this.equalityTesters_[i];
var result = equalityTester(a, b, this, mismatchKeys, mismatchValues); var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
if (result !== jasmine.undefined) return result; if (result !== jasmine.undefined) return result;
} }
   
if (a === b) return true; if (a === b) return true;
   
if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) { if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
return (a == jasmine.undefined && b == jasmine.undefined); return (a == jasmine.undefined && b == jasmine.undefined);
} }
   
if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) { if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
return a === b; return a === b;
} }
   
if (a instanceof Date && b instanceof Date) { if (a instanceof Date && b instanceof Date) {
return a.getTime() == b.getTime(); return a.getTime() == b.getTime();
} }
   
if (a.jasmineMatches) { if (a.jasmineMatches) {
return a.jasmineMatches(b); return a.jasmineMatches(b);
} }
   
if (b.jasmineMatches) { if (b.jasmineMatches) {
return b.jasmineMatches(a); return b.jasmineMatches(a);
} }
   
if (a instanceof jasmine.Matchers.ObjectContaining) { if (a instanceof jasmine.Matchers.ObjectContaining) {
return a.matches(b); return a.matches(b);
} }
   
if (b instanceof jasmine.Matchers.ObjectContaining) { if (b instanceof jasmine.Matchers.ObjectContaining) {
return b.matches(a); return b.matches(a);
} }
   
if (jasmine.isString_(a) && jasmine.isString_(b)) { if (jasmine.isString_(a) && jasmine.isString_(b)) {
return (a == b); return (a == b);
} }
   
if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) { if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
return (a == b); return (a == b);
} }
   
if (typeof a === "object" && typeof b === "object") { if (typeof a === "object" && typeof b === "object") {
return this.compareObjects_(a, b, mismatchKeys, mismatchValues); return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
} }
   
//Straight check //Straight check
return (a === b); return (a === b);
}; };
   
jasmine.Env.prototype.contains_ = function(haystack, needle) { jasmine.Env.prototype.contains_ = function (haystack, needle) {
if (jasmine.isArray_(haystack)) { if (jasmine.isArray_(haystack)) {
for (var i = 0; i < haystack.length; i++) { for (var i = 0; i < haystack.length; i++) {
if (this.equals_(haystack[i], needle)) return true; if (this.equals_(haystack[i], needle)) return true;
} }
return false; return false;
} }
return haystack.indexOf(needle) >= 0; return haystack.indexOf(needle) >= 0;
}; };
   
jasmine.Env.prototype.addEqualityTester = function(equalityTester) { jasmine.Env.prototype.addEqualityTester = function (equalityTester) {
this.equalityTesters_.push(equalityTester); this.equalityTesters_.push(equalityTester);
}; };
/** No-op base class for Jasmine reporters. /** No-op base class for Jasmine reporters.
* *
* @constructor * @constructor
*/ */
jasmine.Reporter = function() { jasmine.Reporter = function () {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.Reporter.prototype.reportRunnerStarting = function(runner) { jasmine.Reporter.prototype.reportRunnerStarting = function (runner) {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.Reporter.prototype.reportRunnerResults = function(runner) { jasmine.Reporter.prototype.reportRunnerResults = function (runner) {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.Reporter.prototype.reportSuiteResults = function(suite) { jasmine.Reporter.prototype.reportSuiteResults = function (suite) {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.Reporter.prototype.reportSpecStarting = function(spec) { jasmine.Reporter.prototype.reportSpecStarting = function (spec) {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.Reporter.prototype.reportSpecResults = function(spec) { jasmine.Reporter.prototype.reportSpecResults = function (spec) {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.Reporter.prototype.log = function(str) { jasmine.Reporter.prototype.log = function (str) {
}; };
   
/** /**
* Blocks are functions with executable code that make up a spec. * Blocks are functions with executable code that make up a spec.
* *
* @constructor * @constructor
* @param {jasmine.Env} env * @param {jasmine.Env} env
* @param {Function} func * @param {Function} func
* @param {jasmine.Spec} spec * @param {jasmine.Spec} spec
*/ */
jasmine.Block = function(env, func, spec) { jasmine.Block = function (env, func, spec) {
this.env = env; this.env = env;
this.func = func; this.func = func;
this.spec = spec; this.spec = spec;
}; };
   
jasmine.Block.prototype.execute = function(onComplete) { jasmine.Block.prototype.execute = function (onComplete) {
try { try {
this.func.apply(this.spec); this.func.apply(this.spec);
} catch (e) { } catch (e) {
this.spec.fail(e); this.spec.fail(e);
} }
onComplete(); onComplete();
}; };
/** JavaScript API reporter. /** JavaScript API reporter.
* *
* @constructor * @constructor
*/ */
jasmine.JsApiReporter = function() { jasmine.JsApiReporter = function () {
this.started = false; this.started = false;
this.finished = false; this.finished = false;
this.suites_ = []; this.suites_ = [];
this.results_ = {}; this.results_ = {};
}; };
   
jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) { jasmine.JsApiReporter.prototype.reportRunnerStarting = function (runner) {
this.started = true; this.started = true;
var suites = runner.topLevelSuites(); var suites = runner.topLevelSuites();
for (var i = 0; i < suites.length; i++) { for (var i = 0; i < suites.length; i++) {
var suite = suites[i]; var suite = suites[i];
this.suites_.push(this.summarize_(suite)); this.suites_.push(this.summarize_(suite));
} }
}; };
   
jasmine.JsApiReporter.prototype.suites = function() { jasmine.JsApiReporter.prototype.suites = function () {
return this.suites_; return this.suites_;
}; };
   
jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) { jasmine.JsApiReporter.prototype.summarize_ = function (suiteOrSpec) {
var isSuite = suiteOrSpec instanceof jasmine.Suite; var isSuite = suiteOrSpec instanceof jasmine.Suite;
var summary = { var summary = {
id: suiteOrSpec.id, id: suiteOrSpec.id,
name: suiteOrSpec.description, name: suiteOrSpec.description,
type: isSuite ? 'suite' : 'spec', type: isSuite ? 'suite' : 'spec',
children: [] children: []
}; };
   
if (isSuite) { if (isSuite) {
var children = suiteOrSpec.children(); var children = suiteOrSpec.children();
for (var i = 0; i < children.length; i++) { for (var i = 0; i < children.length; i++) {
summary.children.push(this.summarize_(children[i])); summary.children.push(this.summarize_(children[i]));
} }
} }
return summary; return summary;
}; };
   
jasmine.JsApiReporter.prototype.results = function() { jasmine.JsApiReporter.prototype.results = function () {
return this.results_; return this.results_;
}; };
   
jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) { jasmine.JsApiReporter.prototype.resultsForSpec = function (specId) {
return this.results_[specId]; return this.results_[specId];
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) { jasmine.JsApiReporter.prototype.reportRunnerResults = function (runner) {
this.finished = true; this.finished = true;
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) { jasmine.JsApiReporter.prototype.reportSuiteResults = function (suite) {
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) { jasmine.JsApiReporter.prototype.reportSpecResults = function (spec) {
this.results_[spec.id] = { this.results_[spec.id] = {
messages: spec.results().getItems(), messages: spec.results().getItems(),
result: spec.results().failedCount > 0 ? "failed" : "passed" result: spec.results().failedCount > 0 ? "failed" : "passed"
}; };
}; };
   
//noinspection JSUnusedLocalSymbols //noinspection JSUnusedLocalSymbols
jasmine.JsApiReporter.prototype.log = function(str) { jasmine.JsApiReporter.prototype.log = function (str) {
}; };
   
jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){ jasmine.JsApiReporter.prototype.resultsForSpecs = function (specIds) {
var results = {}; var results = {};
for (var i = 0; i < specIds.length; i++) { for (var i = 0; i < specIds.length; i++) {
var specId = specIds[i]; var specId = specIds[i];
results[specId] = this.summarizeResult_(this.results_[specId]); results[specId] = this.summarizeResult_(this.results_[specId]);
} }
return results; return results;
}; };
   
jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){ jasmine.JsApiReporter.prototype.summarizeResult_ = function (result) {
var summaryMessages = []; var summaryMessages = [];
var messagesLength = result.messages.length; var messagesLength = result.messages.length;
for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) { for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) {
var resultMessage = result.messages[messageIndex]; var resultMessage = result.messages[messageIndex];
summaryMessages.push({ summaryMessages.push({
text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined, text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
passed: resultMessage.passed ? resultMessage.passed() : true, passed: resultMessage.passed ? resultMessage.passed() : true,
type: resultMessage.type, type: resultMessage.type,
message: resultMessage.message, message: resultMessage.message,
trace: { trace: {
stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined
} }
}); });
} }
   
return { return {
result : result.result, result: result.result,
messages : summaryMessages messages: summaryMessages
}; };
}; };
   
/** /**
* @constructor * @constructor
* @param {jasmine.Env} env * @param {jasmine.Env} env
* @param actual * @param actual
* @param {jasmine.Spec} spec * @param {jasmine.Spec} spec
*/ */
jasmine.Matchers = function(env, actual, spec, opt_isNot) { jasmine.Matchers = function (env, actual, spec, opt_isNot) {
this.env = env; this.env = env;
this.actual = actual; this.actual = actual;
this.spec = spec; this.spec = spec;
this.isNot = opt_isNot || false; this.isNot = opt_isNot || false;
this.reportWasCalled_ = false; this.reportWasCalled_ = false;
}; };
   
// todo: @deprecated as of Jasmine 0.11, remove soon [xw] // todo: @deprecated as of Jasmine 0.11, remove soon [xw]
jasmine.Matchers.pp = function(str) { jasmine.Matchers.pp = function (str) {
throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!"); throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
}; };
   
// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw] // todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
jasmine.Matchers.prototype.report = function(result, failing_message, details) { jasmine.Matchers.prototype.report = function (result, failing_message, details) {
throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs"); throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
}; };
   
jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) { jasmine.Matchers.wrapInto_ = function (prototype, matchersClass) {
for (var methodName in prototype) { for (var methodName in prototype) {
if (methodName == 'report') continue; if (methodName == 'report') continue;
var orig = prototype[methodName]; var orig = prototype[methodName];
matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig); matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig);
} }
}; };
   
jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) { jasmine.Matchers.matcherFn_ = function (matcherName, matcherFunction) {
return function() { return function () {
var matcherArgs = jasmine.util.argsToArray(arguments); var matcherArgs = jasmine.util.argsToArray(arguments);
var result = matcherFunction.apply(this, arguments); var result = matcherFunction.apply(this, arguments);
   
if (this.isNot) { if (this.isNot) {
result = !result; result = !result;
} }
   
if (this.reportWasCalled_) return result; if (this.reportWasCalled_) return result;
   
var message; var message;
if (!result) { if (!result) {
if (this.message) { if (this.message) {
message = this.message.apply(this, arguments); message = this.message.apply(this, arguments);
if (jasmine.isArray_(message)) { if (jasmine.isArray_(message)) {
message = message[this.isNot ? 1 : 0]; message = message[this.isNot ? 1 : 0];
} }
} else { } else {
var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); var englishyPredicate = matcherName.replace(/[A-Z]/g, function (s) {
message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate; return ' ' + s.toLowerCase();
if (matcherArgs.length > 0) { });
for (var i = 0; i < matcherArgs.length; i++) { message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate;
if (i > 0) message += ","; if (matcherArgs.length > 0) {
message += " " + jasmine.pp(matcherArgs[i]); for (var i = 0; i < matcherArgs.length; i++) {
} if (i > 0) message += ",";
} message += " " + jasmine.pp(matcherArgs[i]);
message += "."; }
} }
} message += ".";
var expectationResult = new jasmine.ExpectationResult({ }
matcherName: matcherName, }
passed: result, var expectationResult = new jasmine.ExpectationResult({
expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0], matcherName: matcherName,
actual: this.actual, passed: result,
message: message expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
}); actual: this.actual,
this.spec.addMatcherResult(expectationResult); message: message
return jasmine.undefined; });
}; this.spec.addMatcherResult(expectationResult);
}; return jasmine.undefined;
  };
  };
   
   
/** /**
* toBe: compares the actual to the expected using === * toBe: compares the actual to the expected using ===
* @param expected * @param expected
*/ */
jasmine.Matchers.prototype.toBe = function(expected) { jasmine.Matchers.prototype.toBe = function (expected) {
return this.actual === expected; return this.actual === expected;
}; };
   
/** /**
* toNotBe: compares the actual to the expected using !== * toNotBe: compares the actual to the expected using !==
* @param expected * @param expected
* @deprecated as of 1.0. Use not.toBe() instead. * @deprecated as of 1.0. Use not.toBe() instead.
*/ */
jasmine.Matchers.prototype.toNotBe = function(expected) { jasmine.Matchers.prototype.toNotBe = function (expected) {
return this.actual !== expected; return this.actual !== expected;
}; };
   
/** /**
* toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc. * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc.
* *
* @param expected * @param expected
*/ */
jasmine.Matchers.prototype.toEqual = function(expected) { jasmine.Matchers.prototype.toEqual = function (expected) {
return this.env.equals_(this.actual, expected); return this.env.equals_(this.actual, expected);
}; };
   
/** /**
* toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual
* @param expected * @param expected
* @deprecated as of 1.0. Use not.toEqual() instead. * @deprecated as of 1.0. Use not.toEqual() instead.
*/ */
jasmine.Matchers.prototype.toNotEqual = function(expected) { jasmine.Matchers.prototype.toNotEqual = function (expected) {
return !this.env.equals_(this.actual, expected); return !this.env.equals_(this.actual, expected);
}; };
   
/** /**
* Matcher that compares the actual to the expected using a regular expression. Constructs a RegExp, so takes * Matcher that compares the actual to the expected using a regular expression. Constructs a RegExp, so takes
* a pattern or a String. * a pattern or a String.
* *
* @param expected * @param expected
*/ */
jasmine.Matchers.prototype.toMatch = function(expected) { jasmine.Matchers.prototype.toMatch = function (expected) {
return new RegExp(expected).test(this.actual); return new RegExp(expected).test(this.actual);
}; };
   
/** /**
* Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch
* @param expected * @param expected
* @deprecated as of 1.0. Use not.toMatch() instead. * @deprecated as of 1.0. Use not.toMatch() instead.
*/ */
jasmine.Matchers.prototype.toNotMatch = function(expected) { jasmine.Matchers.prototype.toNotMatch = function (expected) {
return !(new RegExp(expected).test(this.actual)); return !(new RegExp(expected).test(this.actual));
}; };
   
/** /**
* Matcher that compares the actual to jasmine.undefined. * Matcher that compares the actual to jasmine.undefined.
*/ */
jasmine.Matchers.prototype.toBeDefined = function() { jasmine.Matchers.prototype.toBeDefined = function () {
return (this.actual !== jasmine.undefined); return (this.actual !== jasmine.undefined);
}; };
   
/** /**
* Matcher that compares the actual to jasmine.undefined. * Matcher that compares the actual to jasmine.undefined.
*/ */
jasmine.Matchers.prototype.toBeUndefined = function() { jasmine.Matchers.prototype.toBeUndefined = function () {
return (this.actual === jasmine.undefined); return (this.actual === jasmine.undefined);
}; };
   
/** /**
* Matcher that compares the actual to null. * Matcher that compares the actual to null.
*/ */
jasmine.Matchers.prototype.toBeNull = function() { jasmine.Matchers.prototype.toBeNull = function () {
return (this.actual === null); return (this.actual === null);
}; };
   
/** /**
* Matcher that boolean not-nots the actual. * Matcher that boolean not-nots the actual.
*/ */
jasmine.Matchers.prototype.toBeTruthy = function() { jasmine.Matchers.prototype.toBeTruthy = function () {
return !!this.actual; return !!this.actual;
}; };
   
   
/** /**
* Matcher that boolean nots the actual. * Matcher that boolean nots the actual.
*/ */
jasmine.Matchers.prototype.toBeFalsy = function() { jasmine.Matchers.prototype.toBeFalsy = function () {
return !this.actual; return !this.actual;
}; };
   
   
/** /**
* Matcher that checks to see if the actual, a Jasmine spy, was called. * Matcher that checks to see if the actual, a Jasmine spy, was called.
*/ */
jasmine.Matchers.prototype.toHaveBeenCalled = function() { jasmine.Matchers.prototype.toHaveBeenCalled = function () {
if (arguments.length > 0) { if (arguments.length > 0) {
throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
} }
   
if (!jasmine.isSpy(this.actual)) { if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
} }
   
this.message = function() { this.message = function () {
return [ return [
"Expected spy " + this.actual.identity + " to have been called.", "Expected spy " + this.actual.identity + " to have been called.",
"Expected spy " + this.actual.identity + " not to have been called." "Expected spy " + this.actual.identity + " not to have been called."
]; ];
}; };
   
return this.actual.wasCalled; return this.actual.wasCalled;
}; };
   
/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */ /** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled; jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
   
/** /**
* Matcher that checks to see if the actual, a Jasmine spy, was not called. * Matcher that checks to see if the actual, a Jasmine spy, was not called.
* *
* @deprecated Use expect(xxx).not.toHaveBeenCalled() instead * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead
*/ */
jasmine.Matchers.prototype.wasNotCalled = function() { jasmine.Matchers.prototype.wasNotCalled = function () {
if (arguments.length > 0) { if (arguments.length > 0) {
throw new Error('wasNotCalled does not take arguments'); throw new Error('wasNotCalled does not take arguments');
} }
   
if (!jasmine.isSpy(this.actual)) { if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
} }
   
this.message = function() { this.message = function () {
return [ return [
"Expected spy " + this.actual.identity + " to not have been called.", "Expected spy " + this.actual.identity + " to not have been called.",
"Expected spy " + this.actual.identity + " to have been called." "Expected spy " + this.actual.identity + " to have been called."
]; ];
}; };
   
return !this.actual.wasCalled; return !this.actual.wasCalled;
}; };
   
/** /**
* Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters. * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
* *
* @example * @example
* *
*/ */
jasmine.Matchers.prototype.toHaveBeenCalledWith = function() { jasmine.Matchers.prototype.toHaveBeenCalledWith = function () {
var expectedArgs = jasmine.util.argsToArray(arguments); var expectedArgs = jasmine.util.argsToArray(arguments);
if (!jasmine.isSpy(this.actual)) { if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
} }
this.message = function() { this.message = function () {
if (this.actual.callCount === 0) { if (this.actual.callCount === 0) {
// todo: what should the failure message for .not.toHaveBeenCalledWith() be? is this right? test better. [xw] // todo: what should the failure message for .not.toHaveBeenCalledWith() be? is this right? test better. [xw]
return [ return [
"Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.", "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.",
"Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was." "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was."
]; ];
} else { } else {
return [ return [
"Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall), "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall),
"Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall) "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall)
]; ];
} }
}; };
   
return this.env.contains_(this.actual.argsForCall, expectedArgs); return this.env.contains_(this.actual.argsForCall, expectedArgs);
}; };
   
/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */ /** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith; jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
   
/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */ /** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
jasmine.Matchers.prototype.wasNotCalledWith = function() { jasmine.Matchers.prototype.wasNotCalledWith = function () {
var expectedArgs = jasmine.util.argsToArray(arguments); var expectedArgs = jasmine.util.argsToArray(arguments);
if (!jasmine.isSpy(this.actual)) { if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
} }
   
this.message = function() { this.message = function () {
return [ return [
"Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was", "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
"Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was" "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
]; ];
}; };
   
return !this.env.contains_(this.actual.argsForCall, expectedArgs); return !this.env.contains_(this.actual.argsForCall, expectedArgs);
}; };
   
/** /**
* Matcher that checks that the expected item is an element in the actual Array. * Matcher that checks that the expected item is an element in the actual Array.
* *
* @param {Object} expected * @param {Object} expected
*/ */
jasmine.Matchers.prototype.toContain = function(expected) { jasmine.Matchers.prototype.toContain = function (expected) {
return this.env.contains_(this.actual, expected); return this.env.contains_(this.actual, expected);
}; };
   
/** /**
* Matcher that checks that the expected item is NOT an element in the actual Array. * Matcher that checks that the expected item is NOT an element in the actual Array.
* *
* @param {Object} expected * @param {Object} expected
* @deprecated as of 1.0. Use not.toContain() instead. * @deprecated as of 1.0. Use not.toContain() instead.
*/ */
jasmine.Matchers.prototype.toNotContain = function(expected) { jasmine.Matchers.prototype.toNotContain = function (expected) {
return !this.env.contains_(this.actual, expected); return !this.env.contains_(this.actual, expected);
}; };
   
jasmine.Matchers.prototype.toBeLessThan = function(expected) { jasmine.Matchers.prototype.toBeLessThan = function (expected) {
return this.actual < expected; return this.actual < expected;
}; };
   
jasmine.Matchers.prototype.toBeGreaterThan = function(expected) { jasmine.Matchers.prototype.toBeGreaterThan = function (expected) {
return this.actual > expected; return this.actual > expected;
}; };
   
/** /**
* Matcher that checks that the expected item is equal to the actual item * Matcher that checks that the expected item is equal to the actual item
* up to a given level of decimal precision (default 2). * up to a given level of decimal precision (default 2).
* *
* @param {Number} expected * @param {Number} expected
* @param {Number} precision * @param {Number} precision
*/ */
jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) { jasmine.Matchers.prototype.toBeCloseTo = function (expected, precision) {
if (!(precision === 0)) { if (!(precision === 0)) {
precision = precision || 2; precision = precision || 2;
} }
var multiplier = Math.pow(10, precision); var multiplier = Math.pow(10, precision);
var actual = Math.round(this.actual * multiplier); var actual = Math.round(this.actual * multiplier);
expected = Math.round(expected * multiplier); expected = Math.round(expected * multiplier);
return expected == actual; return expected == actual;
}; };
   
/** /**
* Matcher that checks that the expected exception was thrown by the actual. * Matcher that checks that the expected exception was thrown by the actual.
* *
* @param {String} expected * @param {String} expected
*/ */
jasmine.Matchers.prototype.toThrow = function(expected) { jasmine.Matchers.prototype.toThrow = function (expected) {
var result = false; var result = false;
var exception; var exception;
if (typeof this.actual != 'function') { if (typeof this.actual != 'function') {
throw new Error('Actual is not a function'); throw new Error('Actual is not a function');
} }
try { try {
this.actual(); this.actual();
} catch (e) { } catch (e) {
exception = e; exception = e;
} }
if (exception) { if (exception) {
result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected)); result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected));
} }
   
var not = this.isNot ? "not " : ""; var not = this.isNot ? "not " : "";
   
this.message = function() { this.message = function () {
if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) { if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' '); return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' ');
} else { } else {
return "Expected function to throw an exception."; return "Expected function to throw an exception.";
} }
}; };
   
return result; return result;
}; };
   
jasmine.Matchers.Any = function(expectedClass) { jasmine.Matchers.Any = function (expectedClass) {
this.expectedClass = expectedClass; this.expectedClass = expectedClass;
}; };
   
jasmine.Matchers.Any.prototype.jasmineMatches = function(other) { jasmine.Matchers.Any.prototype.jasmineMatches = function (other) {
if (this.expectedClass == String) { if (this.expectedClass == String) {
return typeof other == 'string' || other instanceof String; return typeof other == 'string' || other instanceof String;
} }
   
if (this.expectedClass == Number) { if (this.expectedClass == Number) {
return typeof other == 'number' || other instanceof Number; return typeof other == 'number' || other instanceof Number;
} }
   
if (this.expectedClass == Function) { if (this.expectedClass == Function) {
return typeof other == 'function' || other instanceof Function; return typeof other == 'function' || other instanceof Function;
} }
   
if (this.expectedClass == Object) { if (this.expectedClass == Object) {
return typeof other == 'object'; return typeof other == 'object';
} }
   
return other instanceof this.expectedClass; return other instanceof this.expectedClass;
}; };
   
jasmine.Matchers.Any.prototype.jasmineToString = function() { jasmine.Matchers.Any.prototype.jasmineToString = function () {
return '<jasmine.any(' + this.expectedClass + ')>'; return '<jasmine.any(' + this.expectedClass + ')>';
}; };
   
jasmine.Matchers.ObjectContaining = function (sample) { jasmine.Matchers.ObjectContaining = function (sample) {
this.sample = sample; this.sample = sample;
}; };
   
jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function (other, mismatchKeys, mismatchValues) {
mismatchKeys = mismatchKeys || []; mismatchKeys = mismatchKeys || [];
mismatchValues = mismatchValues || []; mismatchValues = mismatchValues || [];
   
var env = jasmine.getEnv(); var env = jasmine.getEnv();
   
var hasKey = function(obj, keyName) { var hasKey = function (obj, keyName) {
return obj != null && obj[keyName] !== jasmine.undefined; return obj != null && obj[keyName] !== jasmine.undefined;
}; };
   
for (var property in this.sample) { for (var property in this.sample) {
if (!hasKey(other, property) && hasKey(this.sample, property)) { if (!hasKey(other, property) && hasKey(this.sample, property)) {
mismatchKeys.push("expected has key '" + property + "', but missing from actual."); mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
} }
else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) { else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) {
mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual."); mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual.");
} }
} }
   
return (mismatchKeys.length === 0 && mismatchValues.length === 0); return (mismatchKeys.length === 0 && mismatchValues.length === 0);
}; };
   
jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () { jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () {
return "<jasmine.objectContaining(" + jasmine.pp(this.sample) + ")>"; return "<jasmine.objectContaining(" + jasmine.pp(this.sample) + ")>";
}; };
// Mock setTimeout, clearTimeout // Mock setTimeout, clearTimeout
// Contributed by Pivotal Computer Systems, www.pivotalsf.com // Contributed by Pivotal Computer Systems, www.pivotalsf.com
   
jasmine.FakeTimer = function() { jasmine.FakeTimer = function () {
this.reset(); this.reset();
   
var self = this; var self = this;
self.setTimeout = function(funcToCall, millis) { self.setTimeout = function (funcToCall, millis) {
self.timeoutsMade++; self.timeoutsMade++;
self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false); self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false);
return self.timeoutsMade; return self.timeoutsMade;
}; };
   
self.setInterval = function(funcToCall, millis) { self.setInterval = function (funcToCall, millis) {
self.timeoutsMade++; self.timeoutsMade++;
self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true); self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true);
return self.timeoutsMade; return self.timeoutsMade;
}; };
   
self.clearTimeout = function(timeoutKey) { self.clearTimeout = function (timeoutKey) {
self.scheduledFunctions[timeoutKey] = jasmine.undefined; self.scheduledFunctions[timeoutKey] = jasmine.undefined;
}; };
   
self.clearInterval = function(timeoutKey) { self.clearInterval = function (timeoutKey) {
self.scheduledFunctions[timeoutKey] = jasmine.undefined; self.scheduledFunctions[timeoutKey] = jasmine.undefined;
}; };
   
}; };
   
jasmine.FakeTimer.prototype.reset = function() { jasmine.FakeTimer.prototype.reset = function () {
this.timeoutsMade = 0; this.timeoutsMade = 0;
this.scheduledFunctions = {}; this.scheduledFunctions = {};
this.nowMillis = 0; this.nowMillis = 0;
}; };
   
jasmine.FakeTimer.prototype.tick = function(millis) { jasmine.FakeTimer.prototype.tick = function (millis) {
var oldMillis = this.nowMillis; var oldMillis = this.nowMillis;
var newMillis = oldMillis + millis; var newMillis = oldMillis + millis;
this.runFunctionsWithinRange(oldMillis, newMillis); this.runFunctionsWithinRange(oldMillis, newMillis);
this.nowMillis = newMillis; this.nowMillis = newMillis;
}; };
   
jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) { jasmine.FakeTimer.prototype.runFunctionsWithinRange = function (oldMillis, nowMillis) {
var scheduledFunc; var scheduledFunc;
var funcsToRun = []; var funcsToRun = [];
for (var timeoutKey in this.scheduledFunctions) { for (var timeoutKey in this.scheduledFunctions) {
scheduledFunc = this.scheduledFunctions[timeoutKey]; scheduledFunc = this.scheduledFunctions[timeoutKey];
if (scheduledFunc != jasmine.undefined && if (scheduledFunc != jasmine.undefined &&
scheduledFunc.runAtMillis >= oldMillis && scheduledFunc.runAtMillis >= oldMillis &&
scheduledFunc.runAtMillis <= nowMillis) { scheduledFunc.runAtMillis <= nowMillis) {
funcsToRun.push(scheduledFunc); funcsToRun.push(scheduledFunc);
this.scheduledFunctions[timeoutKey] = jasmine.undefined; this.scheduledFunctions[timeoutKey] = jasmine.undefined;
} }
} }
   
if (funcsToRun.length > 0) { if (funcsToRun.length > 0) {
funcsToRun.sort(function(a, b) { funcsToRun.sort(function (a, b) {
return a.runAtMillis - b.runAtMillis; return a.runAtMillis - b.runAtMillis;
}); });
for (var i = 0; i < funcsToRun.length; ++i) { for (var i = 0; i < funcsToRun.length; ++i) {
try { try {
var funcToRun = funcsToRun[i]; var funcToRun = funcsToRun[i];
this.nowMillis = funcToRun.runAtMillis; this.nowMillis = funcToRun.runAtMillis;
funcToRun.funcToCall(); funcToRun.funcToCall();
if (funcToRun.recurring) { if (funcToRun.recurring) {
this.scheduleFunction(funcToRun.timeoutKey, this.scheduleFunction(funcToRun.timeoutKey,
funcToRun.funcToCall, funcToRun.funcToCall,
funcToRun.millis, funcToRun.millis,
true); true);
} }
} catch(e) { } catch (e) {
} }
} }
this.runFunctionsWithinRange(oldMillis, nowMillis); this.runFunctionsWithinRange(oldMillis, nowMillis);
} }
}; };
   
jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) { jasmine.FakeTimer.prototype.scheduleFunction = function (timeoutKey, funcToCall, millis, recurring) {
this.scheduledFunctions[timeoutKey] = { this.scheduledFunctions[timeoutKey] = {
runAtMillis: this.nowMillis + millis, runAtMillis: this.nowMillis + millis,
funcToCall: funcToCall, funcToCall: funcToCall,
recurring: recurring, recurring: recurring,
timeoutKey: timeoutKey, timeoutKey: timeoutKey,
millis: millis millis: millis
}; };
}; };
   
/** /**
* @namespace * @namespace
*/ */
jasmine.Clock = { jasmine.Clock = {
defaultFakeTimer: new jasmine.FakeTimer(), defaultFakeTimer: new jasmine.FakeTimer(),
   
reset: function() { reset: function () {
jasmine.Clock.assertInstalled(); jasmine.Clock.assertInstalled();
jasmine.Clock.defaultFakeTimer.reset(); jasmine.Clock.defaultFakeTimer.reset();
}, },
   
tick: function(millis) { tick: function (millis) {
jasmine.Clock.assertInstalled(); jasmine.Clock.assertInstalled();
jasmine.Clock.defaultFakeTimer.tick(millis); jasmine.Clock.defaultFakeTimer.tick(millis);
}, },
   
runFunctionsWithinRange: function(oldMillis, nowMillis) { runFunctionsWithinRange: function (oldMillis, nowMillis) {
jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis); jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis);
}, },
   
scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) { scheduleFunction: function (timeoutKey, funcToCall, millis, recurring) {
jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring); jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring);
}, },
   
useMock: function() { useMock: function () {
if (!jasmine.Clock.isInstalled()) { if (!jasmine.Clock.isInstalled()) {
var spec = jasmine.getEnv().currentSpec; var spec = jasmine.getEnv().currentSpec;
spec.after(jasmine.Clock.uninstallMock); spec.after(jasmine.Clock.uninstallMock);
   
jasmine.Clock.installMock(); jasmine.Clock.installMock();
} }
}, },
   
installMock: function() { installMock: function () {
jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer; jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer;
}, },
   
uninstallMock: function() { uninstallMock: function () {
jasmine.Clock.assertInstalled(); jasmine.Clock.assertInstalled();
jasmine.Clock.installed = jasmine.Clock.real; jasmine.Clock.installed = jasmine.Clock.real;
}, },
   
real: { real: {
setTimeout: jasmine.getGlobal().setTimeout, setTimeout: jasmine.getGlobal().setTimeout,
clearTimeout: jasmine.getGlobal().clearTimeout, clearTimeout: jasmine.getGlobal().clearTimeout,
setInterval: jasmine.getGlobal().setInterval, setInterval: jasmine.getGlobal().setInterval,
clearInterval: jasmine.getGlobal().clearInterval clearInterval: jasmine.getGlobal().clearInterval
}, },
   
assertInstalled: function() { assertInstalled: function () {
if (!jasmine.Clock.isInstalled()) { if (!jasmine.Clock.isInstalled()) {
throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()"); throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
} }
}, },
   
isInstalled: function() { isInstalled: function () {
return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer; return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer;
}, },
   
installed: null installed: null
}; };
jasmine.Clock.installed = jasmine.Clock.real; jasmine.Clock.installed = jasmine.Clock.real;
   
//else for IE support //else for IE support
jasmine.getGlobal().setTimeout = function(funcToCall, millis) { jasmine.getGlobal().setTimeout = function (funcToCall, millis) {
if (jasmine.Clock.installed.setTimeout.apply) { if (jasmine.Clock.installed.setTimeout.apply) {
return jasmine.Clock.installed.setTimeout.apply(this, arguments); return jasmine.Clock.installed.setTimeout.apply(this, arguments);
} else { } else {
return jasmine.Clock.installed.setTimeout(funcToCall, millis); return jasmine.Clock.installed.setTimeout(funcToCall, millis);
} }
}; };
   
jasmine.getGlobal().setInterval = function(funcToCall, millis) { jasmine.getGlobal().setInterval = function (funcToCall, millis) {
if (jasmine.Clock.installed.setInterval.apply) { if (jasmine.Clock.installed.setInterval.apply) {
return jasmine.Clock.installed.setInterval.apply(this, arguments); return jasmine.Clock.installed.setInterval.apply(this, arguments);
} else { } else {
return jasmine.Clock.installed.setInterval(funcToCall, millis); return jasmine.Clock.installed.setInterval(funcToCall, millis);
} }
}; };
   
jasmine.getGlobal().clearTimeout = function(timeoutKey) { jasmine.getGlobal().clearTimeout = function (timeoutKey) {
if (jasmine.Clock.installed.clearTimeout.apply) { if (jasmine.Clock.installed.clearTimeout.apply) {
return jasmine.Clock.installed.clearTimeout.apply(this, arguments); return jasmine.Clock.installed.clearTimeout.apply(this, arguments);
} else { } else {
return jasmine.Clock.installed.clearTimeout(timeoutKey); return jasmine.Clock.installed.clearTimeout(timeoutKey);
} }
}; };
   
jasmine.getGlobal().clearInterval = function(timeoutKey) { jasmine.getGlobal().clearInterval = function (timeoutKey) {
if (jasmine.Clock.installed.clearTimeout.apply) { if (jasmine.Clock.installed.clearTimeout.apply) {
return jasmine.Clock.installed.clearInterval.apply(this, arguments); return jasmine.Clock.installed.clearInterval.apply(this, arguments);
} else { } else {
return jasmine.Clock.installed.clearInterval(timeoutKey); return jasmine.Clock.installed.clearInterval(timeoutKey);
} }
}; };
   
/** /**
* @constructor * @constructor
*/ */
jasmine.MultiReporter = function() { jasmine.MultiReporter = function () {
this.subReporters_ = []; this.subReporters_ = [];
}; };
jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter); jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter);
   
jasmine.MultiReporter.prototype.addReporter = function(reporter) { jasmine.MultiReporter.prototype.addReporter = function (reporter) {
this.subReporters_.push(reporter); this.subReporters_.push(reporter);
}; };
   
(function() { (function () {
var functionNames = [ var functionNames = [
"reportRunnerStarting", "reportRunnerStarting",
"reportRunnerResults", "reportRunnerResults",
"reportSuiteResults", "reportSuiteResults",
"reportSpecStarting", "reportSpecStarting",
"reportSpecResults", "reportSpecResults",
"log" "log"
]; ];
for (var i = 0; i < functionNames.length; i++) { for (var i = 0; i < functionNames.length; i++) {
var functionName = functionNames[i]; var functionName = functionNames[i];
jasmine.MultiReporter.prototype[functionName] = (function(functionName) { jasmine.MultiReporter.prototype[functionName] = (function (functionName) {
return function() { return function () {
for (var j = 0; j < this.subReporters_.length; j++) { for (var j = 0; j < this.subReporters_.length; j++) {
var subReporter = this.subReporters_[j]; var subReporter = this.subReporters_[j];
if (subReporter[functionName]) { if (subReporter[functionName]) {
subReporter[functionName].apply(subReporter, arguments); subReporter[functionName].apply(subReporter, arguments);
} }
} }
}; };
})(functionName); })(functionName);
} }
})(); })();
/** /**
* Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
* *
* @constructor * @constructor
*/ */
jasmine.NestedResults = function() { jasmine.NestedResults = function () {
/** /**
* The total count of results * The total count of results
*/ */
this.totalCount = 0; this.totalCount = 0;
/** /**
* Number of passed results * Number of passed results
*/ */
this.passedCount = 0; this.passedCount = 0;
/** /**
* Number of failed results * Number of failed results
*/ */
this.failedCount = 0; this.failedCount = 0;
/** /**
* Was this suite/spec skipped? * Was this suite/spec skipped?
*/ */
this.skipped = false; this.skipped = false;
/** /**
* @ignore * @ignore
*/ */
this.items_ = []; this.items_ = [];
}; };
   
/** /**
* Roll up the result counts. * Roll up the result counts.
* *
* @param result * @param result
*/ */
jasmine.NestedResults.prototype.rollupCounts = function(result) { jasmine.NestedResults.prototype.rollupCounts = function (result) {
this.totalCount += result.totalCount; this.totalCount += result.totalCount;
this.passedCount += result.passedCount; this.passedCount += result.passedCount;
this.failedCount += result.failedCount; this.failedCount += result.failedCount;
}; };
   
/** /**
* Adds a log message. * Adds a log message.
* @param values Array of message parts which will be concatenated later. * @param values Array of message parts which will be concatenated later.
*/ */
jasmine.NestedResults.prototype.log = function(values) { jasmine.NestedResults.prototype.log = function (values) {
this.items_.push(new jasmine.MessageResult(values)); this.items_.push(new jasmine.MessageResult(values));
}; };
   
/** /**
* Getter for the results: message & results. * Getter for the results: message & results.
*/ */
jasmine.NestedResults.prototype.getItems = function() { jasmine.NestedResults.prototype.getItems = function () {
return this.items_; return this.items_;
}; };
   
/** /**
* Adds a result, tracking counts (total, passed, & failed) * Adds a result, tracking counts (total, passed, & failed)
* @param {jasmine.ExpectationResult|jasmine.NestedResults} result * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
*/ */
jasmine.NestedResults.prototype.addResult = function(result) { jasmine.NestedResults.prototype.addResult = function (result) {
if (result.type != 'log') { if (result.type != 'log') {
if (result.items_) { if (result.items_) {
this.rollupCounts(result); this.rollupCounts(result);
} else { } else {
this.totalCount++; this.totalCount++;
if (result.passed()) { if (result.passed()) {
this.passedCount++; this.passedCount++;
} else { } else {
this.failedCount++; this.failedCount++;
} }
} }
} }
this.items_.push(result); this.items_.push(result);
}; };
   
/** /**
* @returns {Boolean} True if <b>everything</b> below passed * @returns {Boolean} True if <b>everything</b> below passed
*/ */
jasmine.NestedResults.prototype.passed = function() { jasmine.NestedResults.prototype.passed = function () {
return this.passedCount === this.totalCount; return this.passedCount === this.totalCount;
}; };
/** /**
* Base class for pretty printing for expectation results. * Base class for pretty printing for expectation results.
*/ */
jasmine.PrettyPrinter = function() { jasmine.PrettyPrinter = function () {
this.ppNestLevel_ = 0; this.ppNestLevel_ = 0;
}; };
   
/** /**
* Formats a value in a nice, human-readable string. * Formats a value in a nice, human-readable string.
* *
* @param value * @param value
*/ */
jasmine.PrettyPrinter.prototype.format = function(value) { jasmine.PrettyPrinter.prototype.format = function (value) {
if (this.ppNestLevel_ > 40) { if (this.ppNestLevel_ > 40) {
throw new Error('jasmine.PrettyPrinter: format() nested too deeply!'); throw new Error('jasmine.PrettyPrinter: format() nested too deeply!');
} }
   
this.ppNestLevel_++; this.ppNestLevel_++;
try { try {
if (value === jasmine.undefined) { if (value === jasmine.undefined) {
this.emitScalar('undefined'); this.emitScalar('undefined');
} else if (value === null) { } else if (value === null) {
this.emitScalar('null'); this.emitScalar('null');
} else if (value === jasmine.getGlobal()) { } else if (value === jasmine.getGlobal()) {
this.emitScalar('<global>'); this.emitScalar('<global>');
} else if (value.jasmineToString) { } else if (value.jasmineToString) {
this.emitScalar(value.jasmineToString()); this.emitScalar(value.jasmineToString());
} else if (typeof value === 'string') { } else if (typeof value === 'string') {
this.emitString(value); this.emitString(value);
} else if (jasmine.isSpy(value)) { } else if (jasmine.isSpy(value)) {
this.emitScalar("spy on " + value.identity); this.emitScalar("spy on " + value.identity);
} else if (value instanceof RegExp) { } else if (value instanceof RegExp) {
this.emitScalar(value.toString()); this.emitScalar(value.toString());
} else if (typeof value === 'function') { } else if (typeof value === 'function') {
this.emitScalar('Function'); this.emitScalar('Function');
} else if (typeof value.nodeType === 'number') { } else if (typeof value.nodeType === 'number') {
this.emitScalar('HTMLNode'); this.emitScalar('HTMLNode');
} else if (value instanceof Date) { } else if (value instanceof Date) {
this.emitScalar('Date(' + value + ')'); this.emitScalar('Date(' + value + ')');
} else if (value.__Jasmine_been_here_before__) { } else if (value.__Jasmine_been_here_before__) {
this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>'); this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>');
} else if (jasmine.isArray_(value) || typeof value == 'object') { } else if (jasmine.isArray_(value) || typeof value == 'object') {
value.__Jasmine_been_here_before__ = true; value.__Jasmine_been_here_before__ = true;
if (jasmine.isArray_(value)) { if (jasmine.isArray_(value)) {
this.emitArray(value); this.emitArray(value);
} else { } else {
this.emitObject(value); this.emitObject(value);
} }
delete value.__Jasmine_been_here_before__; delete value.__Jasmine_been_here_before__;
} else { } else {
this.emitScalar(value.toString()); this.emitScalar(value.toString());
} }
} finally { } finally {
this.ppNestLevel_--; this.ppNestLevel_--;
} }
}; };
   
jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) { jasmine.PrettyPrinter.prototype.iterateObject = function (obj, fn) {
for (var property in obj) { for (var property in obj) {
if (property == '__Jasmine_been_here_before__') continue; if (property == '__Jasmine_been_here_before__') continue;
fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined && fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined &&
obj.__lookupGetter__(property) !== null) : false); obj.__lookupGetter__(property) !== null) : false);
} }
}; };
   
jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_;
jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_;
jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_;
jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_; jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_;
   
jasmine.StringPrettyPrinter = function() { jasmine.StringPrettyPrinter = function () {
jasmine.PrettyPrinter.call(this); jasmine.PrettyPrinter.call(this);
   
this.string = ''; this.string = '';
}; };
jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter); jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter);
   
jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) { jasmine.StringPrettyPrinter.prototype.emitScalar = function (value) {
this.append(value); this.append(value);
}; };
   
jasmine.StringPrettyPrinter.prototype.emitString = function(value) { jasmine.StringPrettyPrinter.prototype.emitString = function (value) {
this.append("'" + value + "'"); this.append("'" + value + "'");
}; };
   
jasmine.StringPrettyPrinter.prototype.emitArray = function(array) { jasmine.StringPrettyPrinter.prototype.emitArray = function (array) {
this.append('[ '); this.append('[ ');
for (var i = 0; i < array.length; i++) { for (var i = 0; i < array.length; i++) {
if (i > 0) { if (i > 0) {
this.append(', '); this.append(', ');
} }
this.format(array[i]); this.format(array[i]);
} }
this.append(' ]'); this.append(' ]');
}; };
   
jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) { jasmine.StringPrettyPrinter.prototype.emitObject = function (obj) {
var self = this; var self = this;
this.append('{ '); this.append('{ ');
var first = true; var first = true;
   
this.iterateObject(obj, function(property, isGetter) { this.iterateObject(obj, function (property, isGetter) {
if (first) { if (first) {
first = false; first = false;
} else { } else {
self.append(', '); self.append(', ');
} }
   
self.append(property); self.append(property);
self.append(' : '); self.append(' : ');
if (isGetter) { if (isGetter) {
self.append('<getter>'); self.append('<getter>');
} else { } else {
self.format(obj[property]); self.format(obj[property]);
} }
}); });
   
this.append(' }'); this.append(' }');
}; };
   
jasmine.StringPrettyPrinter.prototype.append = function(value) { jasmine.StringPrettyPrinter.prototype.append = function (value) {
this.string += value; this.string += value;
}; };
jasmine.Queue = function(env) { jasmine.Queue = function (env) {
this.env = env; this.env = env;
this.blocks = []; this.blocks = [];
this.running = false; this.running = false;
this.index = 0; this.index = 0;
this.offset = 0; this.offset = 0;
this.abort = false; this.abort = false;
}; };
   
jasmine.Queue.prototype.addBefore = function(block) { jasmine.Queue.prototype.addBefore = function (block) {
this.blocks.unshift(block); this.blocks.unshift(block);
}; };
   
jasmine.Queue.prototype.add = function(block) { jasmine.Queue.prototype.add = function (block) {
this.blocks.push(block); this.blocks.push(block);
}; };
   
jasmine.Queue.prototype.insertNext = function(block) { jasmine.Queue.prototype.insertNext = function (block) {
this.blocks.splice((this.index + this.offset + 1), 0, block); this.blocks.splice((this.index + this.offset + 1), 0, block);
this.offset++; this.offset++;
}; };
   
jasmine.Queue.prototype.start = function(onComplete) { jasmine.Queue.prototype.start = function (onComplete) {
this.running = true; this.running = true;
this.onComplete = onComplete; this.onComplete = onComplete;
this.next_(); this.next_();
}; };
   
jasmine.Queue.prototype.isRunning = function() { jasmine.Queue.prototype.isRunning = function () {
return this.running; return this.running;
}; };
   
jasmine.Queue.LOOP_DONT_RECURSE = true; jasmine.Queue.LOOP_DONT_RECURSE = true;
   
jasmine.Queue.prototype.next_ = function() { jasmine.Queue.prototype.next_ = function () {
var self = this; var self = this;
var goAgain = true; var goAgain = true;
   
while (goAgain) { while (goAgain) {
goAgain = false; goAgain = false;
   
if (self.index < self.blocks.length && !this.abort) { if (self.index < self.blocks.length && !this.abort) {
var calledSynchronously = true; var calledSynchronously = true;
var completedSynchronously = false; var completedSynchronously = false;
   
var onComplete = function () { var onComplete = function () {
if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) { if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) {
completedSynchronously = true; completedSynchronously = true;
return; return;
} }
   
if (self.blocks[self.index].abort) { if (self.blocks[self.index].abort) {
self.abort = true; self.abort = true;
} }
   
self.offset = 0; self.offset = 0;
self.index++; self.index++;
   
var now = new Date().getTime(); var now = new Date().getTime();
if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) { if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) {
self.env.lastUpdate = now; self.env.lastUpdate = now;
self.env.setTimeout(function() { self.env.setTimeout(function () {
self.next_(); self.next_();
}, 0); }, 0);
  } else {
  if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) {
  goAgain = true;
  } else {
  self.next_();
  }
  }
  };
  self.blocks[self.index].execute(onComplete);
   
  calledSynchronously = false;
  if (completedSynchronously) {
  onComplete();
  }
   
} else { } else {
if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) { self.running = false;
goAgain = true; if (self.onComplete) {
} else { self.onComplete();
self.next_(); }
} }
} }
}; };
self.blocks[self.index].execute(onComplete);  
  jasmine.Queue.prototype.results = function () {
calledSynchronously = false; var results = new jasmine.NestedResults();
if (completedSynchronously) { for (var i = 0; i < this.blocks.length; i++) {
onComplete(); if (this.blocks[i].results) {
} results.addResult(this.blocks[i].results());
  }
} else { }
self.running = false; return results;
if (self.onComplete) {  
self.onComplete();  
}  
}  
}  
};  
   
jasmine.Queue.prototype.results = function() {  
var results = new jasmine.NestedResults();  
for (var i = 0; i < this.blocks.length; i++) {  
if (this.blocks[i].results) {  
results.addResult(this.blocks[i].results());  
}  
}  
return results;  
}; };
   
   
/** /**
* Runner * Runner
* *
* @constructor * @constructor
* @param {jasmine.Env} env * @param {jasmine.Env} env
*/ */
jasmine.Runner = function(env) { jasmine.Runner = function (env) {
var self = this; var self = this;
self.env = env; self.env = env;
self.queue = new jasmine.Queue(env); self.queue = new jasmine.Queue(env);
self.before_ = []; self.before_ = [];
self.after_ = []; self.after_ = [];
self.suites_ = []; self.suites_ = [];
}; };
   
jasmine.Runner.prototype.execute = function() { jasmine.Runner.prototype.execute = function () {
var self = this; var self = this;
if (self.env.reporter.reportRunnerStarting) { if (self.env.reporter.reportRunnerStarting) {
self.env.reporter.reportRunnerStarting(this); self.env.reporter.reportRunnerStarting(this);
} }
self.queue.start(function () { self.queue.start(function () {
self.finishCallback(); self.finishCallback();
}); });
}; };
   
jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) { jasmine.Runner.prototype.beforeEach = function (beforeEachFunction) {
beforeEachFunction.typeName = 'beforeEach'; beforeEachFunction.typeName = 'beforeEach';
this.before_.splice(0,0,beforeEachFunction); this.before_.splice(0, 0, beforeEachFunction);
}; };
   
jasmine.Runner.prototype.afterEach = function(afterEachFunction) { jasmine.Runner.prototype.afterEach = function (afterEachFunction) {
afterEachFunction.typeName = 'afterEach'; afterEachFunction.typeName = 'afterEach';
this.after_.splice(0,0,afterEachFunction); this.after_.splice(0, 0, afterEachFunction);
}; };
   
   
jasmine.Runner.prototype.finishCallback = function() { jasmine.Runner.prototype.finishCallback = function () {
this.env.reporter.reportRunnerResults(this); this.env.reporter.reportRunnerResults(this);
}; };
   
jasmine.Runner.prototype.addSuite = function(suite) { jasmine.Runner.prototype.addSuite = function (suite) {
this.suites_.push(suite); this.suites_.push(suite);
}; };
   
jasmine.Runner.prototype.add = function(block) { jasmine.Runner.prototype.add = function (block) {
if (block instanceof jasmine.Suite) { if (block instanceof jasmine.Suite) {
this.addSuite(block); this.addSuite(block);
} }
this.queue.add(block); this.queue.add(block);
}; };
   
jasmine.Runner.prototype.specs = function () { jasmine.Runner.prototype.specs = function () {
var suites = this.suites(); var suites = this.suites();
var specs = []; var specs = [];
for (var i = 0; i < suites.length; i++) { for (var i = 0; i < suites.length; i++) {
specs = specs.concat(suites[i].specs()); specs = specs.concat(suites[i].specs());
} }
return specs; return specs;
}; };
   
jasmine.Runner.prototype.suites = function() { jasmine.Runner.prototype.suites = function () {
return this.suites_; return this.suites_;
}; };
   
jasmine.Runner.prototype.topLevelSuites = function() { jasmine.Runner.prototype.topLevelSuites = function () {
var topLevelSuites = []; var topLevelSuites = [];
for (var i = 0; i < this.suites_.length; i++) { for (var i = 0; i < this.suites_.length; i++) {
if (!this.suites_[i].parentSuite) { if (!this.suites_[i].parentSuite) {
topLevelSuites.push(this.suites_[i]); topLevelSuites.push(this.suites_[i]);
} }
} }
return topLevelSuites; return topLevelSuites;
}; };
   
jasmine.Runner.prototype.results = function() { jasmine.Runner.prototype.results = function () {
return this.queue.results(); return this.queue.results();
}; };
/** /**
* Internal representation of a Jasmine specification, or test. * Internal representation of a Jasmine specification, or test.
* *
* @constructor * @constructor
* @param {jasmine.Env} env * @param {jasmine.Env} env
* @param {jasmine.Suite} suite * @param {jasmine.Suite} suite
* @param {String} description * @param {String} description
*/ */
jasmine.Spec = function(env, suite, description) { jasmine.Spec = function (env, suite, description) {
if (!env) { if (!env) {
throw new Error('jasmine.Env() required'); throw new Error('jasmine.Env() required');
} }
if (!suite) { if (!suite) {
throw new Error('jasmine.Suite() required'); throw new Error('jasmine.Suite() required');
} }
var spec = this; var spec = this;
spec.id = env.nextSpecId ? env.nextSpecId() : null; spec.id = env.nextSpecId ? env.nextSpecId() : null;
spec.env = env; spec.env = env;
spec.suite = suite; spec.suite = suite;
spec.description = description; spec.description = description;
spec.queue = new jasmine.Queue(env); spec.queue = new jasmine.Queue(env);
   
spec.afterCallbacks = []; spec.afterCallbacks = [];
spec.spies_ = []; spec.spies_ = [];
   
spec.results_ = new jasmine.NestedResults(); spec.results_ = new jasmine.NestedResults();
spec.results_.description = description; spec.results_.description = description;
spec.matchersClass = null; spec.matchersClass = null;
}; };
   
jasmine.Spec.prototype.getFullName = function() { jasmine.Spec.prototype.getFullName = function () {
return this.suite.getFullName() + ' ' + this.description + '.'; return this.suite.getFullName() + ' ' + this.description + '.';
}; };
   
   
jasmine.Spec.prototype.results = function() { jasmine.Spec.prototype.results = function () {
return this.results_; return this.results_;
}; };
   
/** /**
* All parameters are pretty-printed and concatenated together, then written to the spec's output. * All parameters are pretty-printed and concatenated together, then written to the spec's output.
* *
* Be careful not to leave calls to <code>jasmine.log</code> in production code. * Be careful not to leave calls to <code>jasmine.log</code> in production code.
*/ */
jasmine.Spec.prototype.log = function() { jasmine.Spec.prototype.log = function () {
return this.results_.log(arguments); return this.results_.log(arguments);
}; };
   
jasmine.Spec.prototype.runs = function (func) { jasmine.Spec.prototype.runs = function (func) {
var block = new jasmine.Block(this.env, func, this); var block = new jasmine.Block(this.env, func, this);
this.addToQueue(block); this.addToQueue(block);
return this; return this;
}; };
   
jasmine.Spec.prototype.addToQueue = function (block) { jasmine.Spec.prototype.addToQueue = function (block) {
if (this.queue.isRunning()) { if (this.queue.isRunning()) {
this.queue.insertNext(block); this.queue.insertNext(block);
} else { } else {
this.queue.add(block); this.queue.add(block);
} }
}; };
   
/** /**
* @param {jasmine.ExpectationResult} result * @param {jasmine.ExpectationResult} result
*/ */
jasmine.Spec.prototype.addMatcherResult = function(result) { jasmine.Spec.prototype.addMatcherResult = function (result) {
this.results_.addResult(result); this.results_.addResult(result);
}; };
   
jasmine.Spec.prototype.expect = function(actual) { jasmine.Spec.prototype.expect = function (actual) {
var positive = new (this.getMatchersClass_())(this.env, actual, this); var positive = new (this.getMatchersClass_())(this.env, actual, this);
positive.not = new (this.getMatchersClass_())(this.env, actual, this, true); positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
return positive; return positive;
}; };
   
/** /**
* Waits a fixed time period before moving to the next block. * Waits a fixed time period before moving to the next block.
* *
* @deprecated Use waitsFor() instead * @deprecated Use waitsFor() instead
* @param {Number} timeout milliseconds to wait * @param {Number} timeout milliseconds to wait
*/ */
jasmine.Spec.prototype.waits = function(timeout) { jasmine.Spec.prototype.waits = function (timeout) {
var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this); var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this);
this.addToQueue(waitsFunc); this.addToQueue(waitsFunc);
return this; return this;
}; };
   
/** /**
* Waits for the latchFunction to return true before proceeding to the next block. * Waits for the latchFunction to return true before proceeding to the next block.
* *
* @param {Function} latchFunction * @param {Function} latchFunction
* @param {String} optional_timeoutMessage * @param {String} optional_timeoutMessage
* @param {Number} optional_timeout * @param {Number} optional_timeout
*/ */
jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { jasmine.Spec.prototype.waitsFor = function (latchFunction, optional_timeoutMessage, optional_timeout) {
var latchFunction_ = null; var latchFunction_ = null;
var optional_timeoutMessage_ = null; var optional_timeoutMessage_ = null;
var optional_timeout_ = null; var optional_timeout_ = null;
   
for (var i = 0; i < arguments.length; i++) { for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i]; var arg = arguments[i];
switch (typeof arg) { switch (typeof arg) {
case 'function': case 'function':
latchFunction_ = arg; latchFunction_ = arg;
break; break;
case 'string': case 'string':
optional_timeoutMessage_ = arg; optional_timeoutMessage_ = arg;
break; break;
case 'number': case 'number':
optional_timeout_ = arg; optional_timeout_ = arg;
break; break;
} }
} }
   
var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this); var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this);
this.addToQueue(waitsForFunc); this.addToQueue(waitsForFunc);
return this; return this;
}; };
   
jasmine.Spec.prototype.fail = function (e) { jasmine.Spec.prototype.fail = function (e) {
var expectationResult = new jasmine.ExpectationResult({ var expectationResult = new jasmine.ExpectationResult({
passed: false, passed: false,
message: e ? jasmine.util.formatException(e) : 'Exception', message: e ? jasmine.util.formatException(e) : 'Exception',
trace: { stack: e.stack } trace: { stack: e.stack }
}); });
this.results_.addResult(expectationResult); this.results_.addResult(expectationResult);
}; };
   
jasmine.Spec.prototype.getMatchersClass_ = function() { jasmine.Spec.prototype.getMatchersClass_ = function () {
return this.matchersClass || this.env.matchersClass; return this.matchersClass || this.env.matchersClass;
}; };
   
jasmine.Spec.prototype.addMatchers = function(matchersPrototype) { jasmine.Spec.prototype.addMatchers = function (matchersPrototype) {
var parent = this.getMatchersClass_(); var parent = this.getMatchersClass_();
var newMatchersClass = function() { var newMatchersClass = function () {
parent.apply(this, arguments); parent.apply(this, arguments);
}; };
jasmine.util.inherit(newMatchersClass, parent); jasmine.util.inherit(newMatchersClass, parent);
jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass); jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass);
this.matchersClass = newMatchersClass; this.matchersClass = newMatchersClass;
}; };
   
jasmine.Spec.prototype.finishCallback = function() { jasmine.Spec.prototype.finishCallback = function () {
this.env.reporter.reportSpecResults(this); this.env.reporter.reportSpecResults(this);
}; };
   
jasmine.Spec.prototype.finish = function(onComplete) { jasmine.Spec.prototype.finish = function (onComplete) {
this.removeAllSpies(); this.removeAllSpies();
this.finishCallback(); this.finishCallback();
if (onComplete) { if (onComplete) {
onComplete(); onComplete();
} }
}; };
   
jasmine.Spec.prototype.after = function(doAfter) { jasmine.Spec.prototype.after = function (doAfter) {
if (this.queue.isRunning()) { if (this.queue.isRunning()) {
this.queue.add(new jasmine.Block(this.env, doAfter, this)); this.queue.add(new jasmine.Block(this.env, doAfter, this));
} else { } else {
this.afterCallbacks.unshift(doAfter); this.afterCallbacks.unshift(doAfter);
} }
}; };
   
jasmine.Spec.prototype.execute = function(onComplete) { jasmine.Spec.prototype.execute = function (onComplete) {
var spec = this; var spec = this;
if (!spec.env.specFilter(spec)) { if (!spec.env.specFilter(spec)) {
spec.results_.skipped = true; spec.results_.skipped = true;
spec.finish(onComplete); spec.finish(onComplete);
return; return;
} }
   
this.env.reporter.reportSpecStarting(this); this.env.reporter.reportSpecStarting(this);
   
spec.env.currentSpec = spec; spec.env.currentSpec = spec;
   
spec.addBeforesAndAftersToQueue(); spec.addBeforesAndAftersToQueue();
   
spec.queue.start(function () { spec.queue.start(function () {
spec.finish(onComplete); spec.finish(onComplete);
}); });
}; };
   
jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() { jasmine.Spec.prototype.addBeforesAndAftersToQueue = function () {
var runner = this.env.currentRunner(); var runner = this.env.currentRunner();
var i; var i;
   
for (var suite = this.suite; suite; suite = suite.parentSuite) { for (var suite = this.suite; suite; suite = suite.parentSuite) {
for (i = 0; i < suite.before_.length; i++) { for (i = 0; i < suite.before_.length; i++) {
this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this)); this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this));
} }
} }
for (i = 0; i < runner.before_.length; i++) { for (i = 0; i < runner.before_.length; i++) {
this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this)); this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this));
} }
for (i = 0; i < this.afterCallbacks.length; i++) { for (i = 0; i < this.afterCallbacks.length; i++) {
this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this)); this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this));
} }
for (suite = this.suite; suite; suite = suite.parentSuite) { for (suite = this.suite; suite; suite = suite.parentSuite) {
for (i = 0; i < suite.after_.length; i++) { for (i = 0; i < suite.after_.length; i++) {
this.queue.add(new jasmine.Block(this.env, suite.after_[i], this)); this.queue.add(new jasmine.Block(this.env, suite.after_[i], this));
} }
} }
for (i = 0; i < runner.after_.length; i++) { for (i = 0; i < runner.after_.length; i++) {
this.queue.add(new jasmine.Block(this.env, runner.after_[i], this)); this.queue.add(new jasmine.Block(this.env, runner.after_[i], this));
} }
}; };
   
jasmine.Spec.prototype.explodes = function() { jasmine.Spec.prototype.explodes = function () {
throw 'explodes function should not have been called'; throw 'explodes function should not have been called';
}; };
   
jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) { jasmine.Spec.prototype.spyOn = function (obj, methodName, ignoreMethodDoesntExist) {
if (obj == jasmine.undefined) { if (obj == jasmine.undefined) {
throw "spyOn could not find an object to spy upon for " + methodName + "()"; throw "spyOn could not find an object to spy upon for " + methodName + "()";
} }
   
if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) { if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) {
throw methodName + '() method does not exist'; throw methodName + '() method does not exist';
} }
   
if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) { if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) {
throw new Error(methodName + ' has already been spied upon'); throw new Error(methodName + ' has already been spied upon');
} }
   
var spyObj = jasmine.createSpy(methodName); var spyObj = jasmine.createSpy(methodName);
   
this.spies_.push(spyObj); this.spies_.push(spyObj);
spyObj.baseObj = obj; spyObj.baseObj = obj;
spyObj.methodName = methodName; spyObj.methodName = methodName;
spyObj.originalValue = obj[methodName]; spyObj.originalValue = obj[methodName];
   
obj[methodName] = spyObj; obj[methodName] = spyObj;
   
return spyObj; return spyObj;
}; };
   
jasmine.Spec.prototype.removeAllSpies = function() { jasmine.Spec.prototype.removeAllSpies = function () {
for (var i = 0; i < this.spies_.length; i++) { for (var i = 0; i < this.spies_.length; i++) {
var spy = this.spies_[i]; var spy = this.spies_[i];
spy.baseObj[spy.methodName] = spy.originalValue; spy.baseObj[spy.methodName] = spy.originalValue;
} }
this.spies_ = []; this.spies_ = [];
}; };
   
/** /**
* Internal representation of a Jasmine suite. * Internal representation of a Jasmine suite.
* *
* @constructor * @constructor
* @param {jasmine.Env} env * @param {jasmine.Env} env
* @param {String} description * @param {String} description
* @param {Function} specDefinitions * @param {Function} specDefinitions
* @param {jasmine.Suite} parentSuite * @param {jasmine.Suite} parentSuite
*/ */
jasmine.Suite = function(env, description, specDefinitions, parentSuite) { jasmine.Suite = function (env, description, specDefinitions, parentSuite) {
var self = this; var self = this;
self.id = env.nextSuiteId ? env.nextSuiteId() : null; self.id = env.nextSuiteId ? env.nextSuiteId() : null;
self.description = description; self.description = description;
self.queue = new jasmine.Queue(env); self.queue = new jasmine.Queue(env);
self.parentSuite = parentSuite; self.parentSuite = parentSuite;
self.env = env; self.env = env;
self.before_ = []; self.before_ = [];
self.after_ = []; self.after_ = [];
self.children_ = []; self.children_ = [];
self.suites_ = []; self.suites_ = [];
self.specs_ = []; self.specs_ = [];
}; };
   
jasmine.Suite.prototype.getFullName = function() { jasmine.Suite.prototype.getFullName = function () {
var fullName = this.description; var fullName = this.description;
for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
fullName = parentSuite.description + ' ' + fullName; fullName = parentSuite.description + ' ' + fullName;
} }
return fullName; return fullName;
}; };
   
jasmine.Suite.prototype.finish = function(onComplete) { jasmine.Suite.prototype.finish = function (onComplete) {
this.env.reporter.reportSuiteResults(this); this.env.reporter.reportSuiteResults(this);
this.finished = true; this.finished = true;
if (typeof(onComplete) == 'function') { if (typeof(onComplete) == 'function') {
onComplete(); onComplete();
} }
}; };
   
jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) { jasmine.Suite.prototype.beforeEach = function (beforeEachFunction) {
beforeEachFunction.typeName = 'beforeEach'; beforeEachFunction.typeName = 'beforeEach';
this.before_.unshift(beforeEachFunction); this.before_.unshift(beforeEachFunction);
}; };
   
jasmine.Suite.prototype.afterEach = function(afterEachFunction) { jasmine.Suite.prototype.afterEach = function (afterEachFunction) {
afterEachFunction.typeName = 'afterEach'; afterEachFunction.typeName = 'afterEach';
this.after_.unshift(afterEachFunction); this.after_.unshift(afterEachFunction);
}; };
   
jasmine.Suite.prototype.results = function() { jasmine.Suite.prototype.results = function () {
return this.queue.results(); return this.queue.results();
}; };
   
jasmine.Suite.prototype.add = function(suiteOrSpec) { jasmine.Suite.prototype.add = function (suiteOrSpec) {
this.children_.push(suiteOrSpec); this.children_.push(suiteOrSpec);
if (suiteOrSpec instanceof jasmine.Suite) { if (suiteOrSpec instanceof jasmine.Suite) {
this.suites_.push(suiteOrSpec); this.suites_.push(suiteOrSpec);
this.env.currentRunner().addSuite(suiteOrSpec); this.env.currentRunner().addSuite(suiteOrSpec);
} else { } else {
this.specs_.push(suiteOrSpec); this.specs_.push(suiteOrSpec);
} }
this.queue.add(suiteOrSpec); this.queue.add(suiteOrSpec);
}; };
   
jasmine.Suite.prototype.specs = function() { jasmine.Suite.prototype.specs = function () {
return this.specs_; return this.specs_;
}; };
   
jasmine.Suite.prototype.suites = function() { jasmine.Suite.prototype.suites = function () {
return this.suites_; return this.suites_;
}; };
   
jasmine.Suite.prototype.children = function() { jasmine.Suite.prototype.children = function () {
return this.children_; return this.children_;
}; };
   
jasmine.Suite.prototype.execute = function(onComplete) { jasmine.Suite.prototype.execute = function (onComplete) {
var self = this; var self = this;
this.queue.start(function () { this.queue.start(function () {
self.finish(onComplete); self.finish(onComplete);
}); });
}; };
jasmine.WaitsBlock = function(env, timeout, spec) { jasmine.WaitsBlock = function (env, timeout, spec) {
this.timeout = timeout; this.timeout = timeout;
jasmine.Block.call(this, env, null, spec); jasmine.Block.call(this, env, null, spec);
}; };
   
jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block); jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block);
   
jasmine.WaitsBlock.prototype.execute = function (onComplete) { jasmine.WaitsBlock.prototype.execute = function (onComplete) {
if (jasmine.VERBOSE) { if (jasmine.VERBOSE) {
this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...'); this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...');
} }
this.env.setTimeout(function () { this.env.setTimeout(function () {
onComplete(); onComplete();
}, this.timeout); }, this.timeout);
}; };
/** /**
* A block which waits for some condition to become true, with timeout. * A block which waits for some condition to become true, with timeout.
* *
* @constructor * @constructor
* @extends jasmine.Block * @extends jasmine.Block
* @param {jasmine.Env} env The Jasmine environment. * @param {jasmine.Env} env The Jasmine environment.
* @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true. * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true.
* @param {Function} latchFunction A function which returns true when the desired condition has been met. * @param {Function} latchFunction A function which returns true when the desired condition has been met.
* @param {String} message The message to display if the desired condition hasn't been met within the given time period. * @param {String} message The message to display if the desired condition hasn't been met within the given time period.
* @param {jasmine.Spec} spec The Jasmine spec. * @param {jasmine.Spec} spec The Jasmine spec.
*/ */
jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) { jasmine.WaitsForBlock = function (env, timeout, latchFunction, message, spec) {
this.timeout = timeout || env.defaultTimeoutInterval; this.timeout = timeout || env.defaultTimeoutInterval;
this.latchFunction = latchFunction; this.latchFunction = latchFunction;
this.message = message; this.message = message;
this.totalTimeSpentWaitingForLatch = 0; this.totalTimeSpentWaitingForLatch = 0;
jasmine.Block.call(this, env, null, spec); jasmine.Block.call(this, env, null, spec);
}; };
jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block); jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
   
jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10; jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10;
   
jasmine.WaitsForBlock.prototype.execute = function(onComplete) { jasmine.WaitsForBlock.prototype.execute = function (onComplete) {
if (jasmine.VERBOSE) { if (jasmine.VERBOSE) {
this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen')); this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen'));
} }
var latchFunctionResult; var latchFunctionResult;
try { try {
latchFunctionResult = this.latchFunction.apply(this.spec); latchFunctionResult = this.latchFunction.apply(this.spec);
} catch (e) { } catch (e) {
this.spec.fail(e); this.spec.fail(e);
onComplete(); onComplete();
return; return;
} }
   
if (latchFunctionResult) { if (latchFunctionResult) {
onComplete(); onComplete();
} else if (this.totalTimeSpentWaitingForLatch >= this.timeout) { } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) {
var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen'); var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen');
this.spec.fail({ this.spec.fail({
name: 'timeout', name: 'timeout',
message: message message: message
}); });
   
this.abort = true; this.abort = true;
onComplete(); onComplete();
} else { } else {
this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT; this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
var self = this; var self = this;
this.env.setTimeout(function() { this.env.setTimeout(function () {
self.execute(onComplete); self.execute(onComplete);
}, jasmine.WaitsForBlock.TIMEOUT_INCREMENT); }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
} }
}; };
   
jasmine.version_= { jasmine.version_ = {
"major": 1, "major": 1,
"minor": 2, "minor": 2,
"build": 0, "build": 0,
"revision": 1337005947 "revision": 1337005947
}; };
   
{ {
"JAVASCRIPT": { "JAVASCRIPT": {
"DIST_DIR": "./build", "DIST_DIR": "./build",
"flotr2-basic": [ "flotr2-basic": [
"./js/Flotr.js", "./js/Flotr.js",
"./js/DefaultOptions.js", "./js/DefaultOptions.js",
"./js/DOM.js", "./js/DOM.js",
"./js/EventAdapter.js", "./js/EventAdapter.js",
"./js/Color.js", "./js/Color.js",
"./js/Date.js", "./js/Date.js",
"./js/Text.js", "./js/Text.js",
"./js/Graph.js", "./js/Graph.js",
"./js/Axis.js", "./js/Axis.js",
"./js/Series.js", "./js/Series.js",
"./js/types/lines.js", "./js/types/lines.js",
"./js/types/bars.js", "./js/types/bars.js",
"./js/types/markers.js", "./js/types/markers.js",
"./js/types/points.js", "./js/types/points.js",
"./js/plugins/grid.js", "./js/plugins/grid.js",
"./js/plugins/labels.js", "./js/plugins/labels.js",
"./js/plugins/legend.js", "./js/plugins/legend.js",
"./js/plugins/titles.js" "./js/plugins/titles.js"
] ]
} }
} }
   
{ {
"JAVASCRIPT": { "JAVASCRIPT": {
"DIST_DIR": "./build", "DIST_DIR": "./build",
"ie": [ "ie": [
{ "src": "./lib/excanvas.js", "jshint": false }, {
{ "src": "./lib/base64.js", "jshint": false }, "src": "./lib/excanvas.js",
{ "src": "./lib/canvastext.js", "jshint": false } "jshint": false
], },
"lib": [ {
{ "src": "./lib/bean.js", "jshint": false }, "src": "./lib/base64.js",
{ "src": "./lib/underscore.js", "jshint": false } "jshint": false
], },
"flotr2": [ {
"./js/Flotr.js", "src": "./lib/canvastext.js",
"./js/DefaultOptions.js", "jshint": false
"./js/Color.js", }
"./js/Date.js", ],
"./js/DOM.js", "lib": [
"./js/EventAdapter.js", {
"./js/Text.js", "src": "./lib/bean.js",
"./js/Graph.js", "jshint": false
"./js/Axis.js", },
"./js/Series.js", {
"./js/types/lines.js", "src": "./lib/underscore.js",
"./js/types/bars.js", "jshint": false
"./js/types/bubbles.js", }
"./js/types/candles.js", ],
"./js/types/gantt.js", "flotr2": [
"./js/types/markers.js", "./js/Flotr.js",
"./js/types/pie.js", "./js/DefaultOptions.js",
"./js/types/points.js", "./js/Color.js",
"./js/types/radar.js", "./js/Date.js",
"./js/types/timeline.js", "./js/DOM.js",
"./js/plugins/crosshair.js", "./js/EventAdapter.js",
"./js/plugins/download.js", "./js/Text.js",
"./js/plugins/grid.js", "./js/Graph.js",
"./js/plugins/hit.js", "./js/Axis.js",
"./js/plugins/selection.js", "./js/Series.js",
"./js/plugins/labels.js", "./js/types/lines.js",
"./js/plugins/legend.js", "./js/types/bars.js",
"./js/plugins/spreadsheet.js", "./js/types/bubbles.js",
"./js/plugins/titles.js" "./js/types/candles.js",
], "./js/types/gantt.js",
"flotr2-basic": [ "./js/types/markers.js",
"./js/Flotr.js", "./js/types/pie.js",
"./js/DefaultOptions.js", "./js/types/points.js",
"./js/DOM.js", "./js/types/radar.js",
"./js/EventAdapter.js", "./js/types/timeline.js",
"./js/Color.js", "./js/plugins/crosshair.js",
"./js/Date.js", "./js/plugins/download.js",
"./js/Text.js", "./js/plugins/grid.js",
"./js/Graph.js", "./js/plugins/hit.js",
"./js/Axis.js", "./js/plugins/selection.js",
"./js/Series.js", "./js/plugins/labels.js",
"./js/types/lines.js", "./js/plugins/legend.js",
"./js/types/bars.js", "./js/plugins/spreadsheet.js",
"./js/types/markers.js", "./js/plugins/titles.js"
"./js/types/points.js", ],
"./js/plugins/grid.js", "flotr2-basic": [
"./js/plugins/labels.js", "./js/Flotr.js",
"./js/plugins/legend.js", "./js/DefaultOptions.js",
"./js/plugins/titles.js" "./js/DOM.js",
], "./js/EventAdapter.js",
"examples": [ "./js/Color.js",
"./examples/js/Examples.js", "./js/Date.js",
"./examples/js/Example.js", "./js/Text.js",
"./examples/js/Editor.js", "./js/Graph.js",
"./examples/js/Profile.js" "./js/Axis.js",
], "./js/Series.js",
"examples-types": [ "./js/types/lines.js",
"./examples/js/ExampleList.js", "./js/types/bars.js",
"./examples/js/examples/basic.js", "./js/types/markers.js",
"./examples/js/examples/basic-stacked.js", "./js/types/points.js",
"./examples/js/examples/basic-axis.js", "./js/plugins/grid.js",
"./examples/js/examples/basic-bars.js", "./js/plugins/labels.js",
"./examples/js/examples/basic-bars-stacked.js", "./js/plugins/legend.js",
"./examples/js/examples/basic-pie.js", "./js/plugins/titles.js"
"./examples/js/examples/basic-radar.js", ],
"./examples/js/examples/basic-bubble.js", "examples": [
"./examples/js/examples/basic-candle.js", "./examples/js/Examples.js",
"./examples/js/examples/basic-legend.js", "./examples/js/Example.js",
"./examples/js/examples/mouse-tracking.js", "./examples/js/Editor.js",
"./examples/js/examples/mouse-zoom.js", "./examples/js/Profile.js"
"./examples/js/examples/mouse-drag.js", ],
"./examples/js/examples/basic-time.js", "examples-types": [
"./examples/js/examples/negative-values.js", "./examples/js/ExampleList.js",
"./examples/js/examples/click-example.js", "./examples/js/examples/basic.js",
"./examples/js/examples/download-image.js", "./examples/js/examples/basic-stacked.js",
"./examples/js/examples/download-data.js", "./examples/js/examples/basic-axis.js",
"./examples/js/examples/advanced-titles.js", "./examples/js/examples/basic-bars.js",
"./examples/js/examples/color-gradients.js", "./examples/js/examples/basic-bars-stacked.js",
"./examples/js/examples/profile-bars.js", "./examples/js/examples/basic-pie.js",
"./examples/js/examples/basic-timeline.js", "./examples/js/examples/basic-radar.js",
"./examples/js/examples/advanced-markers.js" "./examples/js/examples/basic-bubble.js",
] "./examples/js/examples/basic-candle.js",
} "./examples/js/examples/basic-legend.js",
  "./examples/js/examples/mouse-tracking.js",
  "./examples/js/examples/mouse-zoom.js",
  "./examples/js/examples/mouse-drag.js",
  "./examples/js/examples/basic-time.js",
  "./examples/js/examples/negative-values.js",
  "./examples/js/examples/click-example.js",
  "./examples/js/examples/download-image.js",
  "./examples/js/examples/download-data.js",
  "./examples/js/examples/advanced-titles.js",
  "./examples/js/examples/color-gradients.js",
  "./examples/js/examples/profile-bars.js",
  "./examples/js/examples/basic-timeline.js",
  "./examples/js/examples/advanced-markers.js"
  ]
  }
} }
   
{ {
"JAVASCRIPT": { "JAVASCRIPT": {
"DIST_DIR": "./build", "DIST_DIR": "./build",
"examples": [ "examples": [
"./examples/js/Examples.js", "./examples/js/Examples.js",
"./examples/js/Example.js", "./examples/js/Example.js",
"./examples/js/Editor.js", "./examples/js/Editor.js",
"./examples/js/Profile.js" "./examples/js/Profile.js"
], ],
"examples-types": [ "examples-types": [
"./examples/js/ExampleList.js", "./examples/js/ExampleList.js",
"./examples/js/examples/basic.js", "./examples/js/examples/basic.js",
"./examples/js/examples/basic-stacked.js", "./examples/js/examples/basic-stacked.js",
"./examples/js/examples/basic-stepped.js", "./examples/js/examples/basic-stepped.js",
"./examples/js/examples/basic-axis.js", "./examples/js/examples/basic-axis.js",
"./examples/js/examples/basic-bars.js", "./examples/js/examples/basic-bars.js",
"./examples/js/examples/basic-bars-stacked.js", "./examples/js/examples/basic-bars-stacked.js",
"./examples/js/examples/basic-pie.js", "./examples/js/examples/basic-pie.js",
"./examples/js/examples/basic-radar.js", "./examples/js/examples/basic-radar.js",
"./examples/js/examples/basic-bubble.js", "./examples/js/examples/basic-bubble.js",
"./examples/js/examples/basic-candle.js", "./examples/js/examples/basic-candle.js",
"./examples/js/examples/basic-legend.js", "./examples/js/examples/basic-legend.js",
"./examples/js/examples/mouse-tracking.js", "./examples/js/examples/mouse-tracking.js",
"./examples/js/examples/mouse-zoom.js", "./examples/js/examples/mouse-zoom.js",
"./examples/js/examples/mouse-drag.js", "./examples/js/examples/mouse-drag.js",
"./examples/js/examples/basic-time.js", "./examples/js/examples/basic-time.js",
"./examples/js/examples/negative-values.js", "./examples/js/examples/negative-values.js",
"./examples/js/examples/click-example.js", "./examples/js/examples/click-example.js",
"./examples/js/examples/download-image.js", "./examples/js/examples/download-image.js",
"./examples/js/examples/download-data.js", "./examples/js/examples/download-data.js",
"./examples/js/examples/advanced-titles.js", "./examples/js/examples/advanced-titles.js",
"./examples/js/examples/color-gradients.js", "./examples/js/examples/color-gradients.js",
"./examples/js/examples/profile-bars.js", "./examples/js/examples/profile-bars.js",
"./examples/js/examples/basic-timeline.js", "./examples/js/examples/basic-timeline.js",
"./examples/js/examples/advanced-markers.js" "./examples/js/examples/advanced-markers.js"
] ]
} }
} }
   
{ {
"JAVASCRIPT": { "JAVASCRIPT": {
"DIST_DIR": "./build", "DIST_DIR": "./build",
"flotr2": [ "flotr2": [
"./js/Flotr.js", "./js/Flotr.js",
"./js/DefaultOptions.js", "./js/DefaultOptions.js",
"./js/Color.js", "./js/Color.js",
"./js/Date.js", "./js/Date.js",
"./js/DOM.js", "./js/DOM.js",
"./js/EventAdapter.js", "./js/EventAdapter.js",
"./js/Text.js", "./js/Text.js",
"./js/Graph.js", "./js/Graph.js",
"./js/Axis.js", "./js/Axis.js",
"./js/Series.js", "./js/Series.js",
"./js/types/lines.js", "./js/types/lines.js",
"./js/types/bars.js", "./js/types/bars.js",
"./js/types/bubbles.js", "./js/types/bubbles.js",
"./js/types/candles.js", "./js/types/candles.js",
"./js/types/gantt.js", "./js/types/gantt.js",
"./js/types/markers.js", "./js/types/markers.js",
"./js/types/pie.js", "./js/types/pie.js",
"./js/types/points.js", "./js/types/points.js",
"./js/types/radar.js", "./js/types/radar.js",
"./js/types/timeline.js", "./js/types/timeline.js",
"./js/plugins/crosshair.js", "./js/plugins/crosshair.js",
"./js/plugins/download.js", "./js/plugins/download.js",
"./js/plugins/grid.js", "./js/plugins/grid.js",
"./js/plugins/hit.js", "./js/plugins/hit.js",
"./js/plugins/selection.js", "./js/plugins/selection.js",
"./js/plugins/labels.js", "./js/plugins/labels.js",
"./js/plugins/legend.js", "./js/plugins/legend.js",
"./js/plugins/spreadsheet.js", "./js/plugins/spreadsheet.js",
"./js/plugins/titles.js" "./js/plugins/titles.js"
] ]
} }
} }
   
{ {
"JAVASCRIPT": { "JAVASCRIPT": {
"DIST_DIR": "./build", "DIST_DIR": "./build",
"ie": [ "ie": [
{ "src": "./lib/excanvas.js", "jshint": false }, {
{ "src": "./lib/base64.js", "jshint": false }, "src": "./lib/excanvas.js",
{ "src": "./lib/canvastext.js", "jshint": false } "jshint": false
] },
} {
  "src": "./lib/base64.js",
  "jshint": false
  },
  {
  "src": "./lib/canvastext.js",
  "jshint": false
  }
  ]
  }
} }
   
{ {
"JAVASCRIPT": { "JAVASCRIPT": {
"DIST_DIR": "./build", "DIST_DIR": "./build",
"bean": [ "bean": [
{ "src": "./lib/bean.js", "jshint": false } {
], "src": "./lib/bean.js",
"underscore": [ "jshint": false
{ "src": "./lib/underscore.js", "jshint": false } }
] ],
} "underscore": [
  {
  "src": "./lib/underscore.js",
  "jshint": false
  }
  ]
  }
} }
   
describe('Charts', function () { describe('Charts', function () {
   
var var
width = 480, width = 480,
height = 320, height = 320,
a, b, options, defaults; a, b, options, defaults;
   
defaults = { defaults = {
width : 480, width: 480,
height : 320, height: 320,
color : "rgb(192,216,0)", color: "rgb(192,216,0)",
context : null, context: null,
data : null, data: null,
fill : false, fill: false,
fillColor : null, fillColor: null,
fillOpacity : 0.4, fillOpacity: 0.4,
fillStyle : "rgba(192,216,0,0.4)", fillStyle: "rgba(192,216,0,0.4)",
fontColor : "#545454", fontColor: "#545454",
fontSize : 7.5, fontSize: 7.5,
htmlText : true, htmlText: true,
lineWidth : 2, lineWidth: 2,
shadowSize : 4, shadowSize: 4,
show : false, show: false,
stacked : false, stacked: false,
textEnabled : true, textEnabled: true,
xScale : function (x) { return x; }, xScale: function (x) {
yScale : function (y) { return height - y; } return x;
}; },
  yScale: function (y) {
  return height - y;
  }
  };
   
/** /**
* @param skip bool Skip test against development version (use this when developing test) * @param skip bool Skip test against development version (use this when developing test)
*/ */
function drawTest (data, o, skip) { function drawTest(data, o, skip) {
options.data = data; options.data = data;
if (o) _.extend(options, o); if (o) _.extend(options, o);
   
if (!skip) TestFlotr.graphTypes.lines.draw(options); if (!skip) TestFlotr.graphTypes.lines.draw(options);
options.context = b.getContext('2d'); options.context = b.getContext('2d');
StableFlotr.graphTypes.lines.draw(options); StableFlotr.graphTypes.lines.draw(options);
   
expect(b).toImageDiffEqual(a); expect(b).toImageDiffEqual(a);
} }
   
describe('Lines', function () { describe('Lines', function () {
   
beforeEach(function () { beforeEach(function () {
options = _.clone(defaults); options = _.clone(defaults);
  });
   
  /*
  describe('Data', function () {
  it('gets a range', function () {
  options.stacked = true;
  options.data = [[0, 0], [240, 160], [480, 320]];
  range = TestFlotr.graphTypes.lines.range(options);
  expect(range.min).toEqual(0);
  expect(range.max).toEqual(320);
  });
  });
  */
   
  describe('Draw', function () {
   
  beforeEach(function () {
  this.addMatchers(imagediff.jasmine);
  a = imagediff.createCanvas(width, height);
  b = imagediff.createCanvas(width, height);
  options.context = a.getContext('2d');
  });
   
  it('draws a line chart', function () {
  drawTest([
  [0, 0],
  [240, 300],
  [480, 0]
  ]);
  });
   
  it('skips null values', function () {
  drawTest([
  [0, 0],
  [100, 50],
  [200, null],
  [300, 150],
  [400, 200],
  [480, 240]
  ]);
  });
   
  it('draws two lines', function () {
  // First line
  drawTest([
  [0, 0],
  [240, 160],
  [480, 320]
  ]);
   
  // Second Line
  options.context = a.getContext('2d');
  drawTest([
  [0, 320],
  [240, 160],
  [480, 0]
  ]);
  });
   
  it('fills a line', function () {
  drawTest([
  [0, 0],
  [240, 300],
  [480, 0]
  ], {
  fill: true
  });
  });
   
  it('draws no shadow', function () {
  drawTest([
  [0, 0],
  [240, 300],
  [480, 0]
  ], {
  shadowSize: 0
  });
  });
  });
}); });
   
/*  
describe('Data', function () {  
it('gets a range', function () {  
options.stacked = true;  
options.data = [[0, 0], [240, 160], [480, 320]];  
range = TestFlotr.graphTypes.lines.range(options);  
expect(range.min).toEqual(0);  
expect(range.max).toEqual(320);  
});  
});  
*/  
   
describe('Draw', function () {  
   
beforeEach(function () {  
this.addMatchers(imagediff.jasmine);  
a = imagediff.createCanvas(width, height);  
b = imagediff.createCanvas(width, height);  
options.context = a.getContext('2d');  
});  
   
it('draws a line chart', function () {  
drawTest([  
[0, 0],  
[240, 300],  
[480, 0]  
]);  
});  
   
it('skips null values', function () {  
drawTest([  
[0, 0],  
[100, 50],  
[200, null],  
[300, 150],  
[400, 200],  
[480, 240]  
]);  
});  
   
it('draws two lines', function () {  
// First line  
drawTest([[0, 0], [240, 160], [480, 320]]);  
   
// Second Line  
options.context = a.getContext('2d');  
drawTest([[0, 320], [240, 160], [480, 0]]);  
});  
   
it('fills a line', function () {  
drawTest([  
[0, 0],  
[240, 300],  
[480, 0]  
], {  
fill : true  
});  
});  
   
it('draws no shadow', function () {  
drawTest([  
[0, 0],  
[240, 300],  
[480, 0]  
], {  
shadowSize : 0  
});  
});  
});  
});  
}); });
   
describe('Colors', function () { describe('Colors', function () {
   
describe('Color Construction', function () { describe('Color Construction', function () {
it('should have a color class', function () { it('should have a color class', function () {
expect(TestFlotr.Color).not.toBeUndefined(); expect(TestFlotr.Color).not.toBeUndefined();
  });
   
  it('should create a color', function () {
  var color = new TestFlotr.Color(0, 0, 0, 0);
  expect(color).toBeTruthy();
  });
   
  it('should have rgba attributes', function () {
  var color = new TestFlotr.Color(0, 0, 0, 0);
  expect(color.r).toEqual(0);
  expect(color.g).toEqual(0);
  expect(color.b).toEqual(0);
  expect(color.a).toEqual(1.0);
  });
}); });
   
it('should create a color', function () { describe('Color Manipulation', function () {
var color = new TestFlotr.Color(0, 0, 0, 0);  
expect(color).toBeTruthy(); var
  color;
   
  afterEach(function () {
  color = null;
  });
   
  it('normalizes colors to upper bound', function () {
  color = new TestFlotr.Color(1000, 1000, 1000, 10);
  expect(color.r).toEqual(255);
  expect(color.g).toEqual(255);
  expect(color.b).toEqual(255);
  expect(color.a).toEqual(1.0);
  });
   
  it('normalizes colors to lower bound', function () {
  color = new TestFlotr.Color(-1000, -1000, -1000, -10);
  expect(color.r).toEqual(0);
  expect(color.g).toEqual(0);
  expect(color.b).toEqual(0);
  expect(color.a).toEqual(0.0);
  });
   
  it('scales colors', function () {
  color = new TestFlotr.Color(200, 200, 200, 1.0);
  color.scale(.5, .5, .5, .5);
  expect(color.r).toEqual(100);
  expect(color.g).toEqual(100);
  expect(color.b).toEqual(100);
  expect(color.a).toEqual(0.5);
  });
}); });
   
it('should have rgba attributes', function () { describe('Color Conversion', function () {
var color = new TestFlotr.Color(0, 0, 0, 0);  
expect(color.r).toEqual(0); var
expect(color.g).toEqual(0); color;
expect(color.b).toEqual(0);  
expect(color.a).toEqual(1.0); beforeEach(function () {
  color = new TestFlotr.Color(200, 200, 200, 1.0);
  });
  afterEach(function () {
  color = null;
  });
   
  it('should convert colors to strings, rgb', function () {
  expect(color.toString()).toEqual('rgb(200,200,200)');
  });
   
  it('should convert colors to strings, rgba', function () {
  color.a = 0.5;
  color.normalize();
  expect(color.toString()).toEqual('rgba(200,200,200,0.5)');
  });
   
  it('should clone colors', function () {
   
  var
  color2 = color.clone();
   
  expect(color.toString()).toEqual(color2.toString());
   
  color.a = 0.5;
  color.normalize();
  color2 = color.clone();
  expect(color.toString()).toEqual(color2.toString());
  });
}); });
});  
   
describe('Color Manipulation', function () {  
   
var  
color;  
   
afterEach(function () {  
color = null;  
});  
   
it('normalizes colors to upper bound', function () {  
color = new TestFlotr.Color(1000, 1000, 1000, 10);  
expect(color.r).toEqual(255);  
expect(color.g).toEqual(255);  
expect(color.b).toEqual(255);  
expect(color.a).toEqual(1.0);  
});  
   
it('normalizes colors to lower bound', function () {  
color = new TestFlotr.Color(-1000, -1000, -1000, -10);  
expect(color.r).toEqual(0);  
expect(color.g).toEqual(0);  
expect(color.b).toEqual(0);  
expect(color.a).toEqual(0.0);  
});  
   
it('scales colors', function () {  
color = new TestFlotr.Color(200, 200, 200, 1.0);  
color.scale(.5, .5, .5, .5);  
expect(color.r).toEqual(100);  
expect(color.g).toEqual(100);  
expect(color.b).toEqual(100);  
expect(color.a).toEqual(0.5);  
});  
});  
   
describe('Color Conversion', function () {  
   
var  
color;  
   
beforeEach(function () {  
color = new TestFlotr.Color(200, 200, 200, 1.0);  
});  
afterEach(function () {  
color = null;  
});  
   
it('should convert colors to strings, rgb', function () {  
expect(color.toString()).toEqual('rgb(200,200,200)');  
});  
   
it('should convert colors to strings, rgba', function () {  
color.a = 0.5;  
color.normalize();  
expect(color.toString()).toEqual('rgba(200,200,200,0.5)');  
});  
   
it('should clone colors', function () {  
   
var  
color2 = color.clone();  
   
expect(color.toString()).toEqual(color2.toString());  
   
color.a = 0.5;  
color.normalize();  
color2 = color.clone();  
expect(color.toString()).toEqual(color2.toString());  
});  
});  
}); });
   
describe('Flotr', function () { describe('Flotr', function () {
   
describe('Plots', function () { describe('Plots', function () {
   
var var
nodeA, nodeB, nodeA, nodeB,
a, b; a, b;
   
beforeEach(function () { beforeEach(function () {
   
// Add imagediff matchers // Add imagediff matchers
this.addMatchers(imagediff.jasmine); this.addMatchers(imagediff.jasmine);
   
nodeA = buildNode(); nodeA = buildNode();
nodeB = buildNode(); nodeB = buildNode();
  });
   
  afterEach(function () {
  destroyNode(nodeA);
  destroyNode(nodeB);
  a = null;
  b = null;
  Flotr = null;
  });
   
  _.each(TestFlotr.ExampleList.examples, function (example, key) {
   
  it('should draw a `' + example.name + '`line graph', function () {
   
  executeExampleTest(example, StableFlotr, nodeA);
  executeExampleTest(example, TestFlotr, nodeB);
   
  if (example.timeout) {
  waits(example.timeout);
  runs(function () {
  expect(nodeB.graph.ctx).toImageDiffEqual(nodeA.graph.ctx, example.tolerance || 0);
  });
  } else {
  expect(nodeB.graph.ctx).toImageDiffEqual(nodeA.graph.ctx, example.tolerance || 0);
  }
  });
  });
   
  // Helpers
   
  function executeExampleTest(example, flotr, node) {
  Math.seedrandom(example.key);
  Flotr = flotr;
  example.callback.apply(this, [node].concat(example.args || []));
  }
   
  function buildNode() {
  var node = document.createElement('div');
  document.body.appendChild(node);
  node.style.width = '320px';
  node.style.height = '240px';
  return node;
  }
   
  function destroyNode(node) {
  document.body.removeChild(node);
  }
}); });
   
afterEach(function () { describe('Main', function () {
destroyNode(nodeA);  
destroyNode(nodeB); it('gets a tick size', function () {
a = null; expect(TestFlotr.getTickSize).not.toBeUndefined();
b = null; expect(TestFlotr.getTickSize(10, 0, 100, 1)).toEqual(10);
Flotr = null; expect(TestFlotr.getTickSize(20, 0, 100, 1)).toEqual(5);
  expect(TestFlotr.getTickSize(5, 10, 110, 1)).toEqual(20);
  expect(TestFlotr.getTickSize(0, 0, 10, 1)).toEqual(Number.POSITIVE_INFINITY);
  expect(isNaN(TestFlotr.getTickSize(0, 0, -10, 1))).toBeTruthy();
  });
}); });
   
_.each(TestFlotr.ExampleList.examples, function (example, key) {  
   
it('should draw a `' + example.name + '`line graph', function () {  
   
executeExampleTest(example, StableFlotr, nodeA);  
executeExampleTest(example, TestFlotr, nodeB);  
   
if (example.timeout) {  
waits(example.timeout);  
runs (function () {  
expect(nodeB.graph.ctx).toImageDiffEqual(nodeA.graph.ctx, example.tolerance || 0);  
});  
} else {  
expect(nodeB.graph.ctx).toImageDiffEqual(nodeA.graph.ctx, example.tolerance || 0);  
}  
});  
});  
   
// Helpers  
   
function executeExampleTest (example, flotr, node) {  
Math.seedrandom(example.key);  
Flotr = flotr;  
example.callback.apply(this, [node].concat(example.args || []));  
}  
   
function buildNode () {  
var node = document.createElement('div');  
document.body.appendChild(node);  
node.style.width = '320px';  
node.style.height = '240px';  
return node;  
}  
   
function destroyNode (node) {  
document.body.removeChild(node);  
}  
});  
   
describe('Main', function () {  
   
it('gets a tick size', function () {  
expect(TestFlotr.getTickSize).not.toBeUndefined();  
expect(TestFlotr.getTickSize(10, 0, 100, 1)).toEqual(10);  
expect(TestFlotr.getTickSize(20, 0, 100, 1)).toEqual(5);  
expect(TestFlotr.getTickSize(5, 10, 110, 1)).toEqual(20);  
expect(TestFlotr.getTickSize(0, 0, 10, 1)).toEqual(Number.POSITIVE_INFINITY);  
expect(isNaN(TestFlotr.getTickSize(0, 0, -10, 1))).toBeTruthy();  
});  
});  
}); });
   
describe('Graph', function () { describe('Graph', function () {
   
describe('Options', function () { describe('Options', function () {
var var
nodeA, nodeB, nodeA, nodeB,
a, b, x, i, a, b, x, i,
d1 = [], d1 = [],
options = {}; options = {};
   
for (i = 0; i < 100; i++) { for (i = 0; i < 100; i++) {
x = (i*1000*3600*24*36.5); x = (i * 1000 * 3600 * 24 * 36.5);
d1.push([x, i+Math.random()*30+Math.sin(i/20+Math.random()*2)*20+Math.sin(i/10+Math.random())*10]); d1.push([x, i + Math.random() * 30 + Math.sin(i / 20 + Math.random() * 2) * 20 + Math.sin(i / 10 + Math.random()) * 10]);
} }
   
options = { options = {
xaxis : { xaxis: {
mode : 'time', mode: 'time',
labelsAngle : 45 labelsAngle: 45
}, },
selection : { selection: {
mode : 'x' mode: 'x'
}, },
HtmlText : false, HtmlText: false,
}; };
   
beforeEach(function () { beforeEach(function () {
nodeA = buildNode(); nodeA = buildNode();
Flotr = TestFlotr; Flotr = TestFlotr;
  });
   
  afterEach(function () {
  destroyNode(nodeA);
  a = b = null;
  Flotr = null;
  });
   
  it('should override nested default options with user options', function () {
  a = new TestFlotr.Graph(nodeA, d1, options);
  expect(a.options.xaxis.mode).toEqual(options.xaxis.mode);
  });
   
  it('should retain default options if user option\'s nested object does not define property', function () {
  a = new TestFlotr.Graph(nodeA, d1, options);
  expect(a.options.xaxis.tickFormatter).toBeTruthy();
  });
   
  it('should not affect default options when modifying graph options (objects)', function () {
  a = new TestFlotr.Graph(nodeA, d1, options);
  a.options.x2axis = {
  titleAlign: 'left'
  };
  a.options.xaxis.scaling = 'logarithmic';
  expect(TestFlotr.defaultOptions.xaxis.scaling).toEqual('linear');
  expect(TestFlotr.defaultOptions.x2axis.titleAlign).toBeFalsy();
  });
   
  /*
  it('should not affect default options when modifying graph options (arrays)', function() {
  a = new TestFlotr.Graph(nodeA, d1, options);
  a.options.colors[1] = '#bada55';
  expect(TestFlotr.defaultOptions.colors[1]).toNotBe('#bada55');
  });
  */
   
}); });
   
afterEach(function () { function buildNode() {
destroyNode(nodeA); var node = document.createElement('div');
a = b = null; document.body.appendChild(node);
Flotr = null; node.style.width = '320px';
}); node.style.height = '240px';
  return node;
  }
   
it('should override nested default options with user options', function() { function destroyNode(node) {
a = new TestFlotr.Graph(nodeA, d1, options); document.body.removeChild(node);
expect(a.options.xaxis.mode).toEqual(options.xaxis.mode); }
});  
   
it('should retain default options if user option\'s nested object does not define property', function() {  
a = new TestFlotr.Graph(nodeA, d1, options);  
expect(a.options.xaxis.tickFormatter).toBeTruthy();  
});  
   
it('should not affect default options when modifying graph options (objects)', function() {  
a = new TestFlotr.Graph(nodeA, d1, options);  
a.options.x2axis = {  
titleAlign : 'left'  
};  
a.options.xaxis.scaling = 'logarithmic';  
expect(TestFlotr.defaultOptions.xaxis.scaling).toEqual('linear');  
expect(TestFlotr.defaultOptions.x2axis.titleAlign).toBeFalsy();  
});  
   
/*  
it('should not affect default options when modifying graph options (arrays)', function() {  
a = new TestFlotr.Graph(nodeA, d1, options);  
a.options.colors[1] = '#bada55';  
expect(TestFlotr.defaultOptions.colors[1]).toNotBe('#bada55');  
});  
*/  
   
});  
   
function buildNode () {  
var node = document.createElement('div');  
document.body.appendChild(node);  
node.style.width = '320px';  
node.style.height = '240px';  
return node;  
}  
   
function destroyNode (node) {  
document.body.removeChild(node);  
}  
   
}); });
   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html> <html>
<head> <head>
<title>Jasmine Spec Runner</title> <title>Jasmine Spec Runner</title>
   
<link rel="shortcut icon" type="image/png" href="../lib/jasmine/jasmine_favicon.png"> <link rel="shortcut icon" type="image/png" href="../lib/jasmine/jasmine_favicon.png">
   
<link rel="stylesheet" type="text/css" href="../lib/jasmine/jasmine.css"> <link rel="stylesheet" type="text/css" href="../lib/jasmine/jasmine.css">
<script type="text/javascript" src="../lib/jasmine/jasmine.js"></script> <script type="text/javascript" src="../lib/jasmine/jasmine.js"></script>
<script type="text/javascript" src="../lib/jasmine/jasmine-html.js"></script> <script type="text/javascript" src="../lib/jasmine/jasmine-html.js"></script>
<script type="text/javascript" src="../lib/imagediff.js"></script> <script type="text/javascript" src="../lib/imagediff.js"></script>
<script type="text/javascript" src="../examples/lib/randomseed.js"></script> <script type="text/javascript" src="../examples/lib/randomseed.js"></script>
   
<!-- include source files here... --> <!-- include source files here... -->
<script type="text/javascript" src="js/flotr2.stable.js"></script> <script type="text/javascript" src="js/flotr2.stable.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var StableFlotr = Flotr.noConflict(); var StableFlotr = Flotr.noConflict();
</script> </script>
   
<script src="../lib/bean.js"></script> <script src="../lib/bean.js"></script>
<script src="../lib/underscore.js"></script> <script src="../lib/underscore.js"></script>
<script src="../js/Flotr.js"></script> <script src="../js/Flotr.js"></script>
<script src="../js/DefaultOptions.js"></script> <script src="../js/DefaultOptions.js"></script>
<script src="../js/Color.js"></script> <script src="../js/Color.js"></script>
<script src="../js/Date.js"></script> <script src="../js/Date.js"></script>
<script src="../js/DOM.js"></script> <script src="../js/DOM.js"></script>
<script src="../js/EventAdapter.js"></script> <script src="../js/EventAdapter.js"></script>
<script src="../js/Text.js"></script> <script src="../js/Text.js"></script>
<script src="../js/Graph.js"></script> <script src="../js/Graph.js"></script>
<script src="../js/Axis.js"></script> <script src="../js/Axis.js"></script>
<script src="../js/Series.js"></script> <script src="../js/Series.js"></script>
<script src="../js/types/lines.js"></script> <script src="../js/types/lines.js"></script>
<script src="../js/types/bars.js"></script> <script src="../js/types/bars.js"></script>
<script src="../js/types/bubbles.js"></script> <script src="../js/types/bubbles.js"></script>
<script src="../js/types/candles.js"></script> <script src="../js/types/candles.js"></script>
<script src="../js/types/gantt.js"></script> <script src="../js/types/gantt.js"></script>
<script src="../js/types/markers.js"></script> <script src="../js/types/markers.js"></script>
<script src="../js/types/pie.js"></script> <script src="../js/types/pie.js"></script>
<script src="../js/types/points.js"></script> <script src="../js/types/points.js"></script>
<script src="../js/types/radar.js"></script> <script src="../js/types/radar.js"></script>
<script src="../js/types/timeline.js"></script> <script src="../js/types/timeline.js"></script>
<script src="../js/plugins/crosshair.js"></script> <script src="../js/plugins/crosshair.js"></script>
<script src="../js/plugins/download.js"></script> <script src="../js/plugins/download.js"></script>
<script src="../js/plugins/grid.js"></script> <script src="../js/plugins/grid.js"></script>
<script src="../js/plugins/hit.js"></script> <script src="../js/plugins/hit.js"></script>
<script src="../js/plugins/selection.js"></script> <script src="../js/plugins/selection.js"></script>
<script src="../js/plugins/labels.js"></script> <script src="../js/plugins/labels.js"></script>
<script src="../js/plugins/legend.js"></script> <script src="../js/plugins/legend.js"></script>
<script src="../js/plugins/spreadsheet.js"></script> <script src="../js/plugins/spreadsheet.js"></script>
<script src="../js/plugins/titles.js"></script> <script src="../js/plugins/titles.js"></script>
<script src="../js/charts/lines.js"></script> <script src="../js/charts/lines.js"></script>
   
<!-- Test Examples --> <!-- Test Examples -->
<script type="text/javascript" src="../flotr2.examples.types.js"></script> <script type="text/javascript" src="../flotr2.examples.types.js"></script>
<script type="text/javascript" src="js/test-background.js"></script> <script type="text/javascript" src="js/test-background.js"></script>
<script type="text/javascript" src="js/test-boundaries.js"></script> <script type="text/javascript" src="js/test-boundaries.js"></script>
<script type="text/javascript" src="js/test-mountain-nulls.js"></script> <script type="text/javascript" src="js/test-mountain-nulls.js"></script>
   
<script type="text/javascript"> <script type="text/javascript">
var TestFlotr = Flotr.noConflict(); var TestFlotr = Flotr.noConflict();
</script> </script>
   
<!-- include spec files here... --> <!-- include spec files here... -->
<script type="text/javascript" src="Flotr.js"></script> <script type="text/javascript" src="Flotr.js"></script>
<script type="text/javascript" src="Color.js"></script> <script type="text/javascript" src="Color.js"></script>
<script type="text/javascript" src="Graph.js"></script> <script type="text/javascript" src="Graph.js"></script>
<script type="text/javascript" src="Chart.js"></script> <script type="text/javascript" src="Chart.js"></script>
   
</head> </head>
   
<body> <body>
</body> </body>
<script type="text/javascript"> <script type="text/javascript">
(function() { (function () {
var jasmineEnv = jasmine.getEnv(); var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000; jasmineEnv.updateInterval = 1000;
   
var reporter = new jasmine.HtmlReporter(); var reporter = new jasmine.HtmlReporter();
   
jasmineEnv.addReporter(reporter); jasmineEnv.addReporter(reporter);
   
jasmineEnv.specFilter = function(spec) { jasmineEnv.specFilter = function (spec) {
return reporter.specFilter(spec); return reporter.specFilter(spec);
}; };
   
var currentWindowOnload = window.onload; var currentWindowOnload = window.onload;
   
window.onload = function() { window.onload = function () {
if (currentWindowOnload) { if (currentWindowOnload) {
currentWindowOnload(); currentWindowOnload();
} }
execJasmine(); execJasmine();
}; };
   
function execJasmine() { function execJasmine() {
jasmineEnv.execute(); jasmineEnv.execute();
} }
   
})(); })();
</script> </script>
</html> </html>
   
/*! /*!
* bean.js - copyright Jacob Thornton 2011 * bean.js - copyright Jacob Thornton 2011
* https://github.com/fat/bean * https://github.com/fat/bean
* MIT License * MIT License
* special thanks to: * special thanks to:
* dean edwards: http://dean.edwards.name/ * dean edwards: http://dean.edwards.name/
* dperini: https://github.com/dperini/nwevents * dperini: https://github.com/dperini/nwevents
* the entire mootools team: github.com/mootools/mootools-core * the entire mootools team: github.com/mootools/mootools-core
*/ */
/*global module:true, define:true*/ /*global module:true, define:true*/
!function (name, context, definition) { !function (name, context, definition) {
if (typeof module !== 'undefined') module.exports = definition(name, context); if (typeof module !== 'undefined') module.exports = definition(name, context);
else if (typeof define === 'function' && typeof define.amd === 'object') define(definition); else if (typeof define === 'function' && typeof define.amd === 'object') define(definition);
else context[name] = definition(name, context); else context[name] = definition(name, context);
}('bean', this, function (name, context) { }('bean', this, function (name, context) {
var win = window var win = window
, old = context[name] , old = context[name]
, overOut = /over|out/ , overOut = /over|out/
, namespaceRegex = /[^\.]*(?=\..*)\.|.*/ , namespaceRegex = /[^\.]*(?=\..*)\.|.*/
, nameRegex = /\..*/ , nameRegex = /\..*/
, addEvent = 'addEventListener' , addEvent = 'addEventListener'
, attachEvent = 'attachEvent' , attachEvent = 'attachEvent'
, removeEvent = 'removeEventListener' , removeEvent = 'removeEventListener'
, detachEvent = 'detachEvent' , detachEvent = 'detachEvent'
, doc = document || {} , doc = document || {}
, root = doc.documentElement || {} , root = doc.documentElement || {}
, W3C_MODEL = root[addEvent] , W3C_MODEL = root[addEvent]
, eventSupport = W3C_MODEL ? addEvent : attachEvent , eventSupport = W3C_MODEL ? addEvent : attachEvent
, slice = Array.prototype.slice , slice = Array.prototype.slice
, mouseTypeRegex = /click|mouse|menu|drag|drop/i , mouseTypeRegex = /click|mouse|menu|drag|drop/i
, touchTypeRegex = /^touch|^gesture/i , touchTypeRegex = /^touch|^gesture/i
, ONE = { one: 1 } // singleton for quick matching making add() do one() , ONE = { one: 1 } // singleton for quick matching making add() do one()
   
, nativeEvents = (function (hash, events, i) { , nativeEvents = (function (hash, events, i) {
for (i = 0; i < events.length; i++) for (i = 0; i < events.length; i++)
hash[events[i]] = 1 hash[events[i]] = 1
return hash return hash
})({}, ( })({}, (
'click dblclick mouseup mousedown contextmenu ' + // mouse buttons 'click dblclick mouseup mousedown contextmenu ' + // mouse buttons
'mousewheel DOMMouseScroll ' + // mouse wheel 'mousewheel DOMMouseScroll ' + // mouse wheel
'mouseover mouseout mousemove selectstart selectend ' + // mouse movement 'mouseover mouseout mousemove selectstart selectend ' + // mouse movement
'keydown keypress keyup ' + // keyboard 'keydown keypress keyup ' + // keyboard
'orientationchange ' + // mobile 'orientationchange ' + // mobile
'focus blur change reset select submit ' + // form elements 'focus blur change reset select submit ' + // form elements
'load unload beforeunload resize move DOMContentLoaded readystatechange ' + // window 'load unload beforeunload resize move DOMContentLoaded readystatechange ' + // window
'error abort scroll ' + // misc 'error abort scroll ' + // misc
(W3C_MODEL ? // element.fireEvent('onXYZ'... is not forgiving if we try to fire an event (W3C_MODEL ? // element.fireEvent('onXYZ'... is not forgiving if we try to fire an event
// that doesn't actually exist, so make sure we only do these on newer browsers // that doesn't actually exist, so make sure we only do these on newer browsers
'show ' + // mouse buttons 'show ' + // mouse buttons
'input invalid ' + // form elements 'input invalid ' + // form elements
'touchstart touchmove touchend touchcancel ' + // touch 'touchstart touchmove touchend touchcancel ' + // touch
'gesturestart gesturechange gestureend ' + // gesture 'gesturestart gesturechange gestureend ' + // gesture
'message readystatechange pageshow pagehide popstate ' + // window 'message readystatechange pageshow pagehide popstate ' + // window
'hashchange offline online ' + // window 'hashchange offline online ' + // window
'afterprint beforeprint ' + // printing 'afterprint beforeprint ' + // printing
'dragstart dragenter dragover dragleave drag drop dragend ' + // dnd 'dragstart dragenter dragover dragleave drag drop dragend ' + // dnd
'loadstart progress suspend emptied stalled loadmetadata ' + // media 'loadstart progress suspend emptied stalled loadmetadata ' + // media
'loadeddata canplay canplaythrough playing waiting seeking ' + // media 'loadeddata canplay canplaythrough playing waiting seeking ' + // media
'seeked ended durationchange timeupdate play pause ratechange ' + // media 'seeked ended durationchange timeupdate play pause ratechange ' + // media
'volumechange cuechange ' + // media 'volumechange cuechange ' + // media
'checking noupdate downloading cached updateready obsolete ' + // appcache 'checking noupdate downloading cached updateready obsolete ' + // appcache
'' : '') '' : '')
).split(' ') ).split(' ')
) )
   
, customEvents = (function () { , customEvents = (function () {
function isDescendant(parent, node) { function isDescendant(parent, node) {
while ((node = node.parentNode) !== null) { while ((node = node.parentNode) !== null) {
if (node === parent) return true if (node === parent) return true
} }
return false  
}  
   
function check(event) {  
var related = event.relatedTarget  
if (!related) return related === null  
return (related !== this && related.prefix !== 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related))  
}  
   
return {  
mouseenter: { base: 'mouseover', condition: check }  
, mouseleave: { base: 'mouseout', condition: check }  
, mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }  
}  
})()  
   
, fixEvent = (function () {  
var commonProps = 'altKey attrChange attrName bubbles cancelable ctrlKey currentTarget detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey srcElement target timeStamp type view which'.split(' ')  
, mouseProps = commonProps.concat('button buttons clientX clientY dataTransfer fromElement offsetX offsetY pageX pageY screenX screenY toElement'.split(' '))  
, keyProps = commonProps.concat('char charCode key keyCode'.split(' '))  
, touchProps = commonProps.concat('touches targetTouches changedTouches scale rotation'.split(' '))  
, preventDefault = 'preventDefault'  
, createPreventDefault = function (event) {  
return function () {  
if (event[preventDefault])  
event[preventDefault]()  
else  
event.returnValue = false  
}  
}  
, stopPropagation = 'stopPropagation'  
, createStopPropagation = function (event) {  
return function () {  
if (event[stopPropagation])  
event[stopPropagation]()  
else  
event.cancelBubble = true  
}  
}  
, createStop = function (synEvent) {  
return function () {  
synEvent[preventDefault]()  
synEvent[stopPropagation]()  
synEvent.stopped = true  
}  
}  
, copyProps = function (event, result, props) {  
var i, p  
for (i = props.length; i--;) {  
p = props[i]  
if (!(p in result) && p in event) result[p] = event[p]  
}  
}  
   
return function (event, isNative) {  
var result = { originalEvent: event, isNative: isNative }  
if (!event)  
return result  
   
var props  
, type = event.type  
, target = event.target || event.srcElement  
   
result[preventDefault] = createPreventDefault(event)  
result[stopPropagation] = createStopPropagation(event)  
result.stop = createStop(result)  
result.target = target && target.nodeType === 3 ? target.parentNode : target  
   
if (isNative) { // we only need basic augmentation on custom events, the rest is too expensive  
if (type.indexOf('key') !== -1) {  
props = keyProps  
result.keyCode = event.which || event.keyCode  
} else if (mouseTypeRegex.test(type)) {  
props = mouseProps  
result.rightClick = event.which === 3 || event.button === 2  
result.pos = { x: 0, y: 0 }  
if (event.pageX || event.pageY) {  
result.clientX = event.pageX  
result.clientY = event.pageY  
} else if (event.clientX || event.clientY) {  
result.clientX = event.clientX + doc.body.scrollLeft + root.scrollLeft  
result.clientY = event.clientY + doc.body.scrollTop + root.scrollTop  
}  
if (overOut.test(type))  
result.relatedTarget = event.relatedTarget || event[(type === 'mouseover' ? 'from' : 'to') + 'Element']  
} else if (touchTypeRegex.test(type)) {  
props = touchProps  
}  
copyProps(event, result, props || commonProps)  
}  
return result  
}  
})()  
   
// if we're in old IE we can't do onpropertychange on doc or win so we use doc.documentElement for both  
, targetElement = function (element, isNative) {  
return !W3C_MODEL && !isNative && (element === doc || element === win) ? root : element  
}  
   
// we use one of these per listener, of any type  
, RegEntry = (function () {  
function entry(element, type, handler, original, namespaces) {  
this.element = element  
this.type = type  
this.handler = handler  
this.original = original  
this.namespaces = namespaces  
this.custom = customEvents[type]  
this.isNative = nativeEvents[type] && element[eventSupport]  
this.eventType = W3C_MODEL || this.isNative ? type : 'propertychange'  
this.customType = !W3C_MODEL && !this.isNative && type  
this.target = targetElement(element, this.isNative)  
this.eventSupport = this.target[eventSupport]  
}  
   
entry.prototype = {  
// given a list of namespaces, is our entry in any of them?  
inNamespaces: function (checkNamespaces) {  
var i, j  
if (!checkNamespaces)  
return true  
if (!this.namespaces)  
return false return false
for (i = checkNamespaces.length; i--;) { }
for (j = this.namespaces.length; j--;) {  
if (checkNamespaces[i] === this.namespaces[j]) function check(event) {
return true var related = event.relatedTarget
} if (!related) return related === null
} return (related !== this && related.prefix !== 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related))
return false }
}  
  return {
// match by element, original fn (opt), handler fn (opt) mouseenter: { base: 'mouseover', condition: check }, mouseleave: { base: 'mouseout', condition: check }, mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
, matches: function (checkElement, checkOriginal, checkHandler) { }
return this.element === checkElement && })()
(!checkOriginal || this.original === checkOriginal) &&  
(!checkHandler || this.handler === checkHandler) , fixEvent = (function () {
} var commonProps = 'altKey attrChange attrName bubbles cancelable ctrlKey currentTarget detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey srcElement target timeStamp type view which'.split(' ')
} , mouseProps = commonProps.concat('button buttons clientX clientY dataTransfer fromElement offsetX offsetY pageX pageY screenX screenY toElement'.split(' '))
  , keyProps = commonProps.concat('char charCode key keyCode'.split(' '))
return entry , touchProps = commonProps.concat('touches targetTouches changedTouches scale rotation'.split(' '))
})() , preventDefault = 'preventDefault'
  , createPreventDefault = function (event) {
, registry = (function () { return function () {
// our map stores arrays by event type, just because it's better than storing if (event[preventDefault])
// everything in a single array. uses '$' as a prefix for the keys for safety event[preventDefault]()
var map = {} else
  event.returnValue = false
// generic functional search of our registry for matching listeners, }
// `fn` returns false to break out of the loop }
, forAll = function (element, type, original, handler, fn) { , stopPropagation = 'stopPropagation'
if (!type || type === '*') { , createStopPropagation = function (event) {
// search the whole registry return function () {
for (var t in map) { if (event[stopPropagation])
if (t.charAt(0) === '$') event[stopPropagation]()
forAll(element, t.substr(1), original, handler, fn) else
} event.cancelBubble = true
} else { }
var i = 0, l, list = map['$' + type], all = element === '*' }
if (!list) , createStop = function (synEvent) {
return return function () {
for (l = list.length; i < l; i++) { synEvent[preventDefault]()
if (all || list[i].matches(element, original, handler)) synEvent[stopPropagation]()
if (!fn(list[i], list, i, type)) synEvent.stopped = true
return }
} }
} , copyProps = function (event, result, props) {
} var i, p
  for (i = props.length; i--;) {
, has = function (element, type, original) { p = props[i]
// we're not using forAll here simply because it's a bit slower and this if (!(p in result) && p in event) result[p] = event[p]
// needs to be fast }
var i, list = map['$' + type] }
if (list) {  
for (i = list.length; i--;) { return function (event, isNative) {
if (list[i].matches(element, original, null)) var result = { originalEvent: event, isNative: isNative }
return true if (!event)
} return result
}  
return false var props
} , type = event.type
  , target = event.target || event.srcElement
, get = function (element, type, original) {  
var entries = [] result[preventDefault] = createPreventDefault(event)
forAll(element, type, original, null, function (entry) { return entries.push(entry) }) result[stopPropagation] = createStopPropagation(event)
return entries result.stop = createStop(result)
} result.target = target && target.nodeType === 3 ? target.parentNode : target
   
, put = function (entry) { if (isNative) { // we only need basic augmentation on custom events, the rest is too expensive
(map['$' + entry.type] || (map['$' + entry.type] = [])).push(entry) if (type.indexOf('key') !== -1) {
return entry props = keyProps
} result.keyCode = event.which || event.keyCode
  } else if (mouseTypeRegex.test(type)) {
, del = function (entry) { props = mouseProps
forAll(entry.element, entry.type, null, entry.handler, function (entry, list, i) { result.rightClick = event.which === 3 || event.button === 2
list.splice(i, 1) result.pos = { x: 0, y: 0 }
if (list.length === 0) if (event.pageX || event.pageY) {
delete map['$' + entry.type] result.clientX = event.pageX
return false result.clientY = event.pageY
}) } else if (event.clientX || event.clientY) {
} result.clientX = event.clientX + doc.body.scrollLeft + root.scrollLeft
  result.clientY = event.clientY + doc.body.scrollTop + root.scrollTop
  }
  if (overOut.test(type))
  result.relatedTarget = event.relatedTarget || event[(type === 'mouseover' ? 'from' : 'to') + 'Element']
  } else if (touchTypeRegex.test(type)) {
  props = touchProps
  }
  copyProps(event, result, props || commonProps)
  }
  return result
  }
  })()
   
  // if we're in old IE we can't do onpropertychange on doc or win so we use doc.documentElement for both
  , targetElement = function (element, isNative) {
  return !W3C_MODEL && !isNative && (element === doc || element === win) ? root : element
  }
   
  // we use one of these per listener, of any type
  , RegEntry = (function () {
  function entry(element, type, handler, original, namespaces) {
  this.element = element
  this.type = type
  this.handler = handler
  this.original = original
  this.namespaces = namespaces
  this.custom = customEvents[type]
  this.isNative = nativeEvents[type] && element[eventSupport]
  this.eventType = W3C_MODEL || this.isNative ? type : 'propertychange'
  this.customType = !W3C_MODEL && !this.isNative && type
  this.target = targetElement(element, this.isNative)
  this.eventSupport = this.target[eventSupport]
  }
   
  entry.prototype = {
  // given a list of namespaces, is our entry in any of them?
  inNamespaces: function (checkNamespaces) {
  var i, j
  if (!checkNamespaces)
  return true
  if (!this.namespaces)
  return false
  for (i = checkNamespaces.length; i--;) {
  for (j = this.namespaces.length; j--;) {
  if (checkNamespaces[i] === this.namespaces[j])
  return true
  }
  }
  return false
  }
   
  // match by element, original fn (opt), handler fn (opt)
  , matches: function (checkElement, checkOriginal, checkHandler) {
  return this.element === checkElement &&
  (!checkOriginal || this.original === checkOriginal) &&
  (!checkHandler || this.handler === checkHandler)
  }
  }
   
  return entry
  })()
   
  , registry = (function () {
  // our map stores arrays by event type, just because it's better than storing
  // everything in a single array. uses '$' as a prefix for the keys for safety
  var map = {}
   
  // generic functional search of our registry for matching listeners,
  // `fn` returns false to break out of the loop
  , forAll = function (element, type, original, handler, fn) {
  if (!type || type === '*') {
  // search the whole registry
  for (var t in map) {
  if (t.charAt(0) === '$')
  forAll(element, t.substr(1), original, handler, fn)
  }
  } else {
  var i = 0, l, list = map['$' + type], all = element === '*'
  if (!list)
  return
  for (l = list.length; i < l; i++) {
  if (all || list[i].matches(element, original, handler))
  if (!fn(list[i], list, i, type))
  return
  }
  }
  }
   
  , has = function (element, type, original) {
  // we're not using forAll here simply because it's a bit slower and this
  // needs to be fast
  var i, list = map['$' + type]
  if (list) {
  for (i = list.length; i--;) {
  if (list[i].matches(element, original, null))
  return true
  }
  }
  return false
  }
   
  , get = function (element, type, original) {
  var entries = []
  forAll(element, type, original, null, function (entry) {
  return entries.push(entry)
  })
  return entries
  }
   
  , put = function (entry) {
  (map['$' + entry.type] || (map['$' + entry.type] = [])).push(entry)
  return entry
  }
   
  , del = function (entry) {
  forAll(entry.element, entry.type, null, entry.handler, function (entry, list, i) {
  list.splice(i, 1)
  if (list.length === 0)
  delete map['$' + entry.type]
  return false
  })
  }
   
// dump all entries, used for onunload // dump all entries, used for onunload
, entries = function () { , entries = function () {
var t, entries = [] var t, entries = []
for (t in map) { for (t in map) {
if (t.charAt(0) === '$') if (t.charAt(0) === '$')
entries = entries.concat(map[t]) entries = entries.concat(map[t])
} }
return entries return entries
} }
   
return { has: has, get: get, put: put, del: del, entries: entries } return { has: has, get: get, put: put, del: del, entries: entries }
})() })()
   
// add and remove listeners to DOM elements // add and remove listeners to DOM elements
, listener = W3C_MODEL ? function (element, type, fn, add) { , listener = W3C_MODEL ? function (element, type, fn, add) {
element[add ? addEvent : removeEvent](type, fn, false) element[add ? addEvent : removeEvent](type, fn, false)
} : function (element, type, fn, add, custom) { } : function (element, type, fn, add, custom) {
if (custom && add && element['_on' + custom] === null) if (custom && add && element['_on' + custom] === null)
element['_on' + custom] = 0 element['_on' + custom] = 0
element[add ? attachEvent : detachEvent]('on' + type, fn) element[add ? attachEvent : detachEvent]('on' + type, fn)
} }
   
, nativeHandler = function (element, fn, args) { , nativeHandler = function (element, fn, args) {
return function (event) { return function (event) {
event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || win).event, true) event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || win).event, true)
return fn.apply(element, [event].concat(args)) return fn.apply(element, [event].concat(args))
} }
} }
   
, customHandler = function (element, fn, type, condition, args, isNative) { , customHandler = function (element, fn, type, condition, args, isNative) {
return function (event) { return function (event) {
if (condition ? condition.apply(this, arguments) : W3C_MODEL ? true : event && event.propertyName === '_on' + type || !event) { if (condition ? condition.apply(this, arguments) : W3C_MODEL ? true : event && event.propertyName === '_on' + type || !event) {
if (event) if (event)
event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || win).event, isNative) event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || win).event, isNative)
fn.apply(element, event && (!args || args.length === 0) ? arguments : slice.call(arguments, event ? 0 : 1).concat(args)) fn.apply(element, event && (!args || args.length === 0) ? arguments : slice.call(arguments, event ? 0 : 1).concat(args))
} }
} }
} }
   
, once = function (rm, element, type, fn, originalFn) { , once = function (rm, element, type, fn, originalFn) {
// wrap the handler in a handler that does a remove as well // wrap the handler in a handler that does a remove as well
return function () { return function () {
rm(element, type, originalFn) rm(element, type, originalFn)
fn.apply(this, arguments) fn.apply(this, arguments)
} }
} }
   
, removeListener = function (element, orgType, handler, namespaces) { , removeListener = function (element, orgType, handler, namespaces) {
var i, l, entry var i, l, entry
, type = (orgType && orgType.replace(nameRegex, '')) , type = (orgType && orgType.replace(nameRegex, ''))
, handlers = registry.get(element, type, handler) , handlers = registry.get(element, type, handler)
   
for (i = 0, l = handlers.length; i < l; i++) { for (i = 0, l = handlers.length; i < l; i++) {
if (handlers[i].inNamespaces(namespaces)) { if (handlers[i].inNamespaces(namespaces)) {
if ((entry = handlers[i]).eventSupport) if ((entry = handlers[i]).eventSupport)
listener(entry.target, entry.eventType, entry.handler, false, entry.type) listener(entry.target, entry.eventType, entry.handler, false, entry.type)
// TODO: this is problematic, we have a registry.get() and registry.del() that // TODO: this is problematic, we have a registry.get() and registry.del() that
// both do registry searches so we waste cycles doing this. Needs to be rolled into // both do registry searches so we waste cycles doing this. Needs to be rolled into
// a single registry.forAll(fn) that removes while finding, but the catch is that // a single registry.forAll(fn) that removes while finding, but the catch is that
// we'll be splicing the arrays that we're iterating over. Needs extra tests to // we'll be splicing the arrays that we're iterating over. Needs extra tests to
// make sure we don't screw it up. @rvagg // make sure we don't screw it up. @rvagg
registry.del(entry) registry.del(entry)
} }
} }
} }
   
, addListener = function (element, orgType, fn, originalFn, args) { , addListener = function (element, orgType, fn, originalFn, args) {
var entry var entry
, type = orgType.replace(nameRegex, '') , type = orgType.replace(nameRegex, '')
, namespaces = orgType.replace(namespaceRegex, '').split('.') , namespaces = orgType.replace(namespaceRegex, '').split('.')
   
if (registry.has(element, type, fn)) if (registry.has(element, type, fn))
return element // no dupe return element // no dupe
if (type === 'unload') if (type === 'unload')
fn = once(removeListener, element, type, fn, originalFn) // self clean-up fn = once(removeListener, element, type, fn, originalFn) // self clean-up
if (customEvents[type]) { if (customEvents[type]) {
if (customEvents[type].condition) if (customEvents[type].condition)
fn = customHandler(element, fn, type, customEvents[type].condition, true) fn = customHandler(element, fn, type, customEvents[type].condition, true)
type = customEvents[type].base || type type = customEvents[type].base || type
} }
entry = registry.put(new RegEntry(element, type, fn, originalFn, namespaces[0] && namespaces)) entry = registry.put(new RegEntry(element, type, fn, originalFn, namespaces[0] && namespaces))
entry.handler = entry.isNative ? entry.handler = entry.isNative ?
nativeHandler(element, entry.handler, args) : nativeHandler(element, entry.handler, args) :
customHandler(element, entry.handler, type, false, args, false) customHandler(element, entry.handler, type, false, args, false)
if (entry.eventSupport) if (entry.eventSupport)
listener(entry.target, entry.eventType, entry.handler, true, entry.customType) listener(entry.target, entry.eventType, entry.handler, true, entry.customType)
} }
   
, del = function (selector, fn, $) { , del = function (selector, fn, $) {
return function (e) { return function (e) {
var target, i, array = typeof selector === 'string' ? $(selector, this) : selector var target, i, array = typeof selector === 'string' ? $(selector, this) : selector
for (target = e.target; target && target !== this; target = target.parentNode) { for (target = e.target; target && target !== this; target = target.parentNode) {
for (i = array.length; i--;) { for (i = array.length; i--;) {
if (array[i] === target) { if (array[i] === target) {
return fn.apply(target, arguments) return fn.apply(target, arguments)
} }
} }
} }
} }
} }
   
, remove = function (element, typeSpec, fn) { , remove = function (element, typeSpec, fn) {
var k, m, type, namespaces, i var k, m, type, namespaces, i
, rm = removeListener , rm = removeListener
, isString = typeSpec && typeof typeSpec === 'string' , isString = typeSpec && typeof typeSpec === 'string'
   
if (isString && typeSpec.indexOf(' ') > 0) { if (isString && typeSpec.indexOf(' ') > 0) {
// remove(el, 't1 t2 t3', fn) or remove(el, 't1 t2 t3') // remove(el, 't1 t2 t3', fn) or remove(el, 't1 t2 t3')
typeSpec = typeSpec.split(' ') typeSpec = typeSpec.split(' ')
for (i = typeSpec.length; i--;) for (i = typeSpec.length; i--;)
remove(element, typeSpec[i], fn) remove(element, typeSpec[i], fn)
return element return element
} }
type = isString && typeSpec.replace(nameRegex, '') type = isString && typeSpec.replace(nameRegex, '')
if (type && customEvents[type]) if (type && customEvents[type])
type = customEvents[type].type type = customEvents[type].type
if (!typeSpec || isString) { if (!typeSpec || isString) {
// remove(el) or remove(el, t1.ns) or remove(el, .ns) or remove(el, .ns1.ns2.ns3) // remove(el) or remove(el, t1.ns) or remove(el, .ns) or remove(el, .ns1.ns2.ns3)
if (namespaces = isString && typeSpec.replace(namespaceRegex, '')) if (namespaces = isString && typeSpec.replace(namespaceRegex, ''))
namespaces = namespaces.split('.') namespaces = namespaces.split('.')
rm(element, type, fn, namespaces) rm(element, type, fn, namespaces)
} else if (typeof typeSpec === 'function') { } else if (typeof typeSpec === 'function') {
// remove(el, fn) // remove(el, fn)
rm(element, null, typeSpec) rm(element, null, typeSpec)
} else { } else {
// remove(el, { t1: fn1, t2, fn2 }) // remove(el, { t1: fn1, t2, fn2 })
for (k in typeSpec) { for (k in typeSpec) {
if (typeSpec.hasOwnProperty(k)) if (typeSpec.hasOwnProperty(k))
remove(element, k, typeSpec[k]) remove(element, k, typeSpec[k])
} }
} }
return element return element
} }
   
, add = function (element, events, fn, delfn, $) { , add = function (element, events, fn, delfn, $) {
var type, types, i, args var type, types, i, args
, originalFn = fn , originalFn = fn
, isDel = fn && typeof fn === 'string' , isDel = fn && typeof fn === 'string'
   
if (events && !fn && typeof events === 'object') { if (events && !fn && typeof events === 'object') {
for (type in events) { for (type in events) {
if (events.hasOwnProperty(type)) if (events.hasOwnProperty(type))
add.apply(this, [ element, type, events[type] ]) add.apply(this, [ element, type, events[type] ])
} }
} else { } else {
args = arguments.length > 3 ? slice.call(arguments, 3) : [] args = arguments.length > 3 ? slice.call(arguments, 3) : []
types = (isDel ? fn : events).split(' ') types = (isDel ? fn : events).split(' ')
isDel && (fn = del(events, (originalFn = delfn), $)) && (args = slice.call(args, 1)) isDel && (fn = del(events, (originalFn = delfn), $)) && (args = slice.call(args, 1))
// special case for one() // special case for one()
this === ONE && (fn = once(remove, element, events, fn, originalFn)) this === ONE && (fn = once(remove, element, events, fn, originalFn))
for (i = types.length; i--;) addListener(element, types[i], fn, originalFn, args) for (i = types.length; i--;) addListener(element, types[i], fn, originalFn, args)
} }
return element return element
} }
   
, one = function () { , one = function () {
return add.apply(ONE, arguments) return add.apply(ONE, arguments)
} }
   
, fireListener = W3C_MODEL ? function (isNative, type, element) { , fireListener = W3C_MODEL ? function (isNative, type, element) {
var evt = doc.createEvent(isNative ? 'HTMLEvents' : 'UIEvents') var evt = doc.createEvent(isNative ? 'HTMLEvents' : 'UIEvents')
evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, win, 1) evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, win, 1)
element.dispatchEvent(evt) element.dispatchEvent(evt)
} : function (isNative, type, element) { } : function (isNative, type, element) {
element = targetElement(element, isNative) element = targetElement(element, isNative)
// if not-native then we're using onpropertychange so we just increment a custom property // if not-native then we're using onpropertychange so we just increment a custom property
isNative ? element.fireEvent('on' + type, doc.createEventObject()) : element['_on' + type]++ isNative ? element.fireEvent('on' + type, doc.createEventObject()) : element['_on' + type]++
} }
   
, fire = function (element, type, args) { , fire = function (element, type, args) {
var i, j, l, names, handlers var i, j, l, names, handlers
, types = type.split(' ') , types = type.split(' ')
   
for (i = types.length; i--;) { for (i = types.length; i--;) {
type = types[i].replace(nameRegex, '') type = types[i].replace(nameRegex, '')
if (names = types[i].replace(namespaceRegex, '')) if (names = types[i].replace(namespaceRegex, ''))
names = names.split('.') names = names.split('.')
if (!names && !args && element[eventSupport]) { if (!names && !args && element[eventSupport]) {
fireListener(nativeEvents[type], type, element) fireListener(nativeEvents[type], type, element)
} else { } else {
// non-native event, either because of a namespace, arguments or a non DOM element // non-native event, either because of a namespace, arguments or a non DOM element
// iterate over all listeners and manually 'fire' // iterate over all listeners and manually 'fire'
handlers = registry.get(element, type) handlers = registry.get(element, type)
args = [false].concat(args) args = [false].concat(args)
for (j = 0, l = handlers.length; j < l; j++) { for (j = 0, l = handlers.length; j < l; j++) {
if (handlers[j].inNamespaces(names)) if (handlers[j].inNamespaces(names))
handlers[j].handler.apply(element, args) handlers[j].handler.apply(element, args)
} }
} }
} }
return element return element
} }
   
, clone = function (element, from, type) { , clone = function (element, from, type) {
var i = 0 var i = 0
, handlers = registry.get(from, type) , handlers = registry.get(from, type)
, l = handlers.length , l = handlers.length
   
for (;i < l; i++) for (; i < l; i++)
handlers[i].original && add(element, handlers[i].type, handlers[i].original) handlers[i].original && add(element, handlers[i].type, handlers[i].original)
return element return element
} }
   
, bean = { , bean = {
add: add add: add, one: one, remove: remove, clone: clone, fire: fire, noConflict: function () {
, one: one context[name] = old
, remove: remove return this
, clone: clone }
, fire: fire }
, noConflict: function () {  
context[name] = old if (win[attachEvent]) {
return this // for IE, clean up on unload to avoid leaks
} var cleanup = function () {
} var i, entries = registry.entries()
  for (i in entries) {
if (win[attachEvent]) { if (entries[i].type && entries[i].type !== 'unload')
// for IE, clean up on unload to avoid leaks remove(entries[i].element, entries[i].type)
var cleanup = function () { }
var i, entries = registry.entries() win[detachEvent]('onunload', cleanup)
for (i in entries) { win.CollectGarbage && win.CollectGarbage()
if (entries[i].type && entries[i].type !== 'unload') }
remove(entries[i].element, entries[i].type) win[attachEvent]('onunload', cleanup)
}  
win[detachEvent]('onunload', cleanup)  
win.CollectGarbage && win.CollectGarbage()  
} }
win[attachEvent]('onunload', cleanup)  
} return bean
   
return bean  
}); });
// Underscore.js 1.1.7 // Underscore.js 1.1.7
// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. // (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore is freely distributable under the MIT license. // Underscore is freely distributable under the MIT license.
// Portions of Underscore are inspired or borrowed from Prototype, // Portions of Underscore are inspired or borrowed from Prototype,
// Oliver Steele's Functional, and John Resig's Micro-Templating. // Oliver Steele's Functional, and John Resig's Micro-Templating.
// For all details and documentation: // For all details and documentation:
// http://documentcloud.github.com/underscore // http://documentcloud.github.com/underscore
   
(function() { (function () {
   
// Baseline setup // Baseline setup
// -------------- // --------------
   
// Establish the root object, `window` in the browser, or `global` on the server. // Establish the root object, `window` in the browser, or `global` on the server.
var root = this; var root = this;
   
// Save the previous value of the `_` variable. // Save the previous value of the `_` variable.
var previousUnderscore = root._; var previousUnderscore = root._;
   
// Establish the object that gets returned to break out of a loop iteration. // Establish the object that gets returned to break out of a loop iteration.
var breaker = {}; var breaker = {};
   
// Save bytes in the minified (but not gzipped) version: // Save bytes in the minified (but not gzipped) version:
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
   
// Create quick reference variables for speed access to core prototypes. // Create quick reference variables for speed access to core prototypes.
var slice = ArrayProto.slice, var slice = ArrayProto.slice,
unshift = ArrayProto.unshift, unshift = ArrayProto.unshift,
toString = ObjProto.toString, toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty; hasOwnProperty = ObjProto.hasOwnProperty;
   
// All **ECMAScript 5** native function implementations that we hope to use // All **ECMAScript 5** native function implementations that we hope to use
// are declared here. // are declared here.
var var
nativeForEach = ArrayProto.forEach, nativeForEach = ArrayProto.forEach,
nativeMap = ArrayProto.map, nativeMap = ArrayProto.map,
nativeReduce = ArrayProto.reduce, nativeReduce = ArrayProto.reduce,
nativeReduceRight = ArrayProto.reduceRight, nativeReduceRight = ArrayProto.reduceRight,
nativeFilter = ArrayProto.filter, nativeFilter = ArrayProto.filter,
nativeEvery = ArrayProto.every, nativeEvery = ArrayProto.every,
nativeSome = ArrayProto.some, nativeSome = ArrayProto.some,
nativeIndexOf = ArrayProto.indexOf, nativeIndexOf = ArrayProto.indexOf,
nativeLastIndexOf = ArrayProto.lastIndexOf, nativeLastIndexOf = ArrayProto.lastIndexOf,
nativeIsArray = Array.isArray, nativeIsArray = Array.isArray,
nativeKeys = Object.keys, nativeKeys = Object.keys,
nativeBind = FuncProto.bind; nativeBind = FuncProto.bind;
   
// Create a safe reference to the Underscore object for use below. // Create a safe reference to the Underscore object for use below.
var _ = function(obj) { return new wrapper(obj); }; var _ = function (obj) {
  return new wrapper(obj);
// Export the Underscore object for **CommonJS**, with backwards-compatibility };
// for the old `require()` API. If we're not in CommonJS, add `_` to the  
// global object. // Export the Underscore object for **CommonJS**, with backwards-compatibility
if (typeof module !== 'undefined' && module.exports) { // for the old `require()` API. If we're not in CommonJS, add `_` to the
module.exports = _; // global object.
_._ = _; if (typeof module !== 'undefined' && module.exports) {
} else { module.exports = _;
// Exported as a string, for Closure Compiler "advanced" mode. _._ = _;
root['_'] = _;  
}  
   
// Current version.  
_.VERSION = '1.1.7';  
   
// Collection Functions  
// --------------------  
   
// The cornerstone, an `each` implementation, aka `forEach`.  
// Handles objects with the built-in `forEach`, arrays, and raw objects.  
// Delegates to **ECMAScript 5**'s native `forEach` if available.  
var each = _.each = _.forEach = function(obj, iterator, context) {  
if (obj == null) return;  
if (nativeForEach && obj.forEach === nativeForEach) {  
obj.forEach(iterator, context);  
} else if (obj.length === +obj.length) {  
for (var i = 0, l = obj.length; i < l; i++) {  
if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;  
}  
} else { } else {
for (var key in obj) { // Exported as a string, for Closure Compiler "advanced" mode.
if (hasOwnProperty.call(obj, key)) { root['_'] = _;
if (iterator.call(context, obj[key], key, obj) === breaker) return;  
}  
}  
} }
};  
  // Current version.
// Return the results of applying the iterator to each element. _.VERSION = '1.1.7';
// Delegates to **ECMAScript 5**'s native `map` if available.  
_.map = function(obj, iterator, context) { // Collection Functions
var results = []; // --------------------
if (obj == null) return results;  
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); // The cornerstone, an `each` implementation, aka `forEach`.
each(obj, function(value, index, list) { // Handles objects with the built-in `forEach`, arrays, and raw objects.
results[results.length] = iterator.call(context, value, index, list); // Delegates to **ECMAScript 5**'s native `forEach` if available.
  var each = _.each = _.forEach = function (obj, iterator, context) {
  if (obj == null) return;
  if (nativeForEach && obj.forEach === nativeForEach) {
  obj.forEach(iterator, context);
  } else if (obj.length === +obj.length) {
  for (var i = 0, l = obj.length; i < l; i++) {
  if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
  }
  } else {
  for (var key in obj) {
  if (hasOwnProperty.call(obj, key)) {
  if (iterator.call(context, obj[key], key, obj) === breaker) return;
  }
  }
  }
  };
   
  // Return the results of applying the iterator to each element.
  // Delegates to **ECMAScript 5**'s native `map` if available.
  _.map = function (obj, iterator, context) {
  var results = [];
  if (obj == null) return results;
  if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
  each(obj, function (value, index, list) {
  results[results.length] = iterator.call(context, value, index, list);
  });
  return results;
  };
   
  // **Reduce** builds up a single result from a list of values, aka `inject`,
  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
  _.reduce = _.foldl = _.inject = function (obj, iterator, memo, context) {
  var initial = memo !== void 0;
  if (obj == null) obj = [];
  if (nativeReduce && obj.reduce === nativeReduce) {
  if (context) iterator = _.bind(iterator, context);
  return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
  }
  each(obj, function (value, index, list) {
  if (!initial) {
  memo = value;
  initial = true;
  } else {
  memo = iterator.call(context, memo, value, index, list);
  }
  });
  if (!initial) throw new TypeError("Reduce of empty array with no initial value");
  return memo;
  };
   
  // The right-associative version of reduce, also known as `foldr`.
  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
  _.reduceRight = _.foldr = function (obj, iterator, memo, context) {
  if (obj == null) obj = [];
  if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
  if (context) iterator = _.bind(iterator, context);
  return memo !== void 0 ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
  }
  var reversed = (_.isArray(obj) ? obj.slice() : _.toArray(obj)).reverse();
  return _.reduce(reversed, iterator, memo, context);
  };
   
  // Return the first value which passes a truth test. Aliased as `detect`.
  _.find = _.detect = function (obj, iterator, context) {
  var result;
  any(obj, function (value, index, list) {
  if (iterator.call(context, value, index, list)) {
  result = value;
  return true;
  }
  });
  return result;
  };
   
  // Return all the elements that pass a truth test.
  // Delegates to **ECMAScript 5**'s native `filter` if available.
  // Aliased as `select`.
  _.filter = _.select = function (obj, iterator, context) {
  var results = [];
  if (obj == null) return results;
  if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
  each(obj, function (value, index, list) {
  if (iterator.call(context, value, index, list)) results[results.length] = value;
  });
  return results;
  };
   
  // Return all the elements for which a truth test fails.
  _.reject = function (obj, iterator, context) {
  var results = [];
  if (obj == null) return results;
  each(obj, function (value, index, list) {
  if (!iterator.call(context, value, index, list)) results[results.length] = value;
  });
  return results;
  };
   
  // Determine whether all of the elements match a truth test.
  // Delegates to **ECMAScript 5**'s native `every` if available.
  // Aliased as `all`.
  _.every = _.all = function (obj, iterator, context) {
  var result = true;
  if (obj == null) return result;
  if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
  each(obj, function (value, index, list) {
  if (!(result = result && iterator.call(context, value, index, list))) return breaker;
  });
  return result;
  };
   
  // Determine if at least one element in the object matches a truth test.
  // Delegates to **ECMAScript 5**'s native `some` if available.
  // Aliased as `any`.
  var any = _.some = _.any = function (obj, iterator, context) {
  iterator = iterator || _.identity;
  var result = false;
  if (obj == null) return result;
  if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
  each(obj, function (value, index, list) {
  if (result |= iterator.call(context, value, index, list)) return breaker;
  });
  return !!result;
  };
   
  // Determine if a given value is included in the array or object using `===`.
  // Aliased as `contains`.
  _.include = _.contains = function (obj, target) {
  var found = false;
  if (obj == null) return found;
  if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
  any(obj, function (value) {
  if (found = value === target) return true;
  });
  return found;
  };
   
  // Invoke a method (with arguments) on every item in a collection.
  _.invoke = function (obj, method) {
  var args = slice.call(arguments, 2);
  return _.map(obj, function (value) {
  return (method.call ? method || value : value[method]).apply(value, args);
  });
  };
   
  // Convenience version of a common use case of `map`: fetching a property.
  _.pluck = function (obj, key) {
  return _.map(obj, function (value) {
  return value[key];
  });
  };
   
  // Return the maximum element or (element-based computation).
  _.max = function (obj, iterator, context) {
  if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
  var result = {computed: -Infinity};
  each(obj, function (value, index, list) {
  var computed = iterator ? iterator.call(context, value, index, list) : value;
  computed >= result.computed && (result = {value: value, computed: computed});
  });
  return result.value;
  };
   
  // Return the minimum element (or element-based computation).
  _.min = function (obj, iterator, context) {
  if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
  var result = {computed: Infinity};
  each(obj, function (value, index, list) {
  var computed = iterator ? iterator.call(context, value, index, list) : value;
  computed < result.computed && (result = {value: value, computed: computed});
  });
  return result.value;
  };
   
  // Sort the object's values by a criterion produced by an iterator.
  _.sortBy = function (obj, iterator, context) {
  return _.pluck(_.map(obj,function (value, index, list) {
  return {
  value: value,
  criteria: iterator.call(context, value, index, list)
  };
  }).sort(function (left, right) {
  var a = left.criteria, b = right.criteria;
  return a < b ? -1 : a > b ? 1 : 0;
  }), 'value');
  };
   
  // Groups the object's values by a criterion produced by an iterator
  _.groupBy = function (obj, iterator) {
  var result = {};
  each(obj, function (value, index) {
  var key = iterator(value, index);
  (result[key] || (result[key] = [])).push(value);
  });
  return result;
  };
   
  // Use a comparator function to figure out at what index an object should
  // be inserted so as to maintain order. Uses binary search.
  _.sortedIndex = function (array, obj, iterator) {
  iterator || (iterator = _.identity);
  var low = 0, high = array.length;
  while (low < high) {
  var mid = (low + high) >> 1;
  iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
  }
  return low;
  };
   
  // Safely convert anything iterable into a real, live array.
  _.toArray = function (iterable) {
  if (!iterable) return [];
  if (iterable.toArray) return iterable.toArray();
  if (_.isArray(iterable)) return slice.call(iterable);
  if (_.isArguments(iterable)) return slice.call(iterable);
  return _.values(iterable);
  };
   
  // Return the number of elements in an object.
  _.size = function (obj) {
  return _.toArray(obj).length;
  };
   
  // Array Functions
  // ---------------
   
  // Get the first element of an array. Passing **n** will return the first N
  // values in the array. Aliased as `head`. The **guard** check allows it to work
  // with `_.map`.
  _.first = _.head = function (array, n, guard) {
  return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
  };
   
  // Returns everything but the first entry of the array. Aliased as `tail`.
  // Especially useful on the arguments object. Passing an **index** will return
  // the rest of the values in the array from that index onward. The **guard**
  // check allows it to work with `_.map`.
  _.rest = _.tail = function (array, index, guard) {
  return slice.call(array, (index == null) || guard ? 1 : index);
  };
   
  // Get the last element of an array.
  _.last = function (array) {
  return array[array.length - 1];
  };
   
  // Trim out all falsy values from an array.
  _.compact = function (array) {
  return _.filter(array, function (value) {
  return !!value;
  });
  };
   
  // Return a completely flattened version of an array.
  _.flatten = function (array) {
  return _.reduce(array, function (memo, value) {
  if (_.isArray(value)) return memo.concat(_.flatten(value));
  memo[memo.length] = value;
  return memo;
  }, []);
  };
   
  // Return a version of the array that does not contain the specified value(s).
  _.without = function (array) {
  return _.difference(array, slice.call(arguments, 1));
  };
   
  // Produce a duplicate-free version of the array. If the array has already
  // been sorted, you have the option of using a faster algorithm.
  // Aliased as `unique`.
  _.uniq = _.unique = function (array, isSorted) {
  return _.reduce(array, function (memo, el, i) {
  if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo[memo.length] = el;
  return memo;
  }, []);
  };
   
  // Produce an array that contains the union: each distinct element from all of
  // the passed-in arrays.
  _.union = function () {
  return _.uniq(_.flatten(arguments));
  };
   
  // Produce an array that contains every item shared between all the
  // passed-in arrays. (Aliased as "intersect" for back-compat.)
  _.intersection = _.intersect = function (array) {
  var rest = slice.call(arguments, 1);
  return _.filter(_.uniq(array), function (item) {
  return _.every(rest, function (other) {
  return _.indexOf(other, item) >= 0;
  });
  });
  };
   
  // Take the difference between one array and another.
  // Only the elements present in just the first array will remain.
  _.difference = function (array, other) {
  return _.filter(array, function (value) {
  return !_.include(other, value);
  });
  };
   
  // Zip together multiple lists into a single array -- elements that share
  // an index go together.
  _.zip = function () {
  var args = slice.call(arguments);
  var length = _.max(_.pluck(args, 'length'));
  var results = new Array(length);
  for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
  return results;
  };
   
  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
  // we need this function. Return the position of the first occurrence of an
  // item in an array, or -1 if the item is not included in the array.
  // Delegates to **ECMAScript 5**'s native `indexOf` if available.
  // If the array is large and already in sort order, pass `true`
  // for **isSorted** to use binary search.
  _.indexOf = function (array, item, isSorted) {
  if (array == null) return -1;
  var i, l;
  if (isSorted) {
  i = _.sortedIndex(array, item);
  return array[i] === item ? i : -1;
  }
  if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
  for (i = 0, l = array.length; i < l; i++) if (array[i] === item) return i;
  return -1;
  };
   
   
  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
  _.lastIndexOf = function (array, item) {
  if (array == null) return -1;
  if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
  var i = array.length;
  while (i--) if (array[i] === item) return i;
  return -1;
  };
   
  // Generate an integer Array containing an arithmetic progression. A port of
  // the native Python `range()` function. See
  // [the Python documentation](http://docs.python.org/library/functions.html#range).
  _.range = function (start, stop, step) {
  if (arguments.length <= 1) {
  stop = start || 0;
  start = 0;
  }
  step = arguments[2] || 1;
   
  var len = Math.max(Math.ceil((stop - start) / step), 0);
  var idx = 0;
  var range = new Array(len);
   
  while (idx < len) {
  range[idx++] = start;
  start += step;
  }
   
  return range;
  };
   
  // Function (ahem) Functions
  // ------------------
   
  // Create a function bound to a given object (assigning `this`, and arguments,
  // optionally). Binding with arguments is also known as `curry`.
  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
  // We check for `func.bind` first, to fail fast when `func` is undefined.
  _.bind = function (func, obj) {
  if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
  var args = slice.call(arguments, 2);
  return function () {
  return func.apply(obj, args.concat(slice.call(arguments)));
  };
  };
   
  // Bind all of an object's methods to that object. Useful for ensuring that
  // all callbacks defined on an object belong to it.
  _.bindAll = function (obj) {
  var funcs = slice.call(arguments, 1);
  if (funcs.length == 0) funcs = _.functions(obj);
  each(funcs, function (f) {
  obj[f] = _.bind(obj[f], obj);
  });
  return obj;
  };
   
  // Memoize an expensive function by storing its results.
  _.memoize = function (func, hasher) {
  var memo = {};
  hasher || (hasher = _.identity);
  return function () {
  var key = hasher.apply(this, arguments);
  return hasOwnProperty.call(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
  };
  };
   
  // Delays a function for the given number of milliseconds, and then calls
  // it with the arguments supplied.
  _.delay = function (func, wait) {
  var args = slice.call(arguments, 2);
  return setTimeout(function () {
  return func.apply(func, args);
  }, wait);
  };
   
  // Defers a function, scheduling it to run after the current call stack has
  // cleared.
  _.defer = function (func) {
  return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
  };
   
  // Internal function used to implement `_.throttle` and `_.debounce`.
  var limit = function (func, wait, debounce) {
  var timeout;
  return function () {
  var context = this, args = arguments;
  var throttler = function () {
  timeout = null;
  func.apply(context, args);
  };
  if (debounce) clearTimeout(timeout);
  if (debounce || !timeout) timeout = setTimeout(throttler, wait);
  };
  };
   
  // Returns a function, that, when invoked, will only be triggered at most once
  // during a given window of time.
  _.throttle = function (func, wait) {
  return limit(func, wait, false);
  };
   
  // Returns a function, that, as long as it continues to be invoked, will not
  // be triggered. The function will be called after it stops being called for
  // N milliseconds.
  _.debounce = function (func, wait) {
  return limit(func, wait, true);
  };
   
  // Returns a function that will be executed at most one time, no matter how
  // often you call it. Useful for lazy initialization.
  _.once = function (func) {
  var ran = false, memo;
  return function () {
  if (ran) return memo;
  ran = true;
  return memo = func.apply(this, arguments);
  };
  };
   
  // Returns the first function passed as an argument to the second,
  // allowing you to adjust arguments, run code before and after, and
  // conditionally execute the original function.
  _.wrap = function (func, wrapper) {
  return function () {
  var args = [func].concat(slice.call(arguments));
  return wrapper.apply(this, args);
  };
  };
   
  // Returns a function that is the composition of a list of functions, each
  // consuming the return value of the function that follows.
  _.compose = function () {
  var funcs = slice.call(arguments);
  return function () {
  var args = slice.call(arguments);
  for (var i = funcs.length - 1; i >= 0; i--) {
  args = [funcs[i].apply(this, args)];
  }
  return args[0];
  };
  };
   
  // Returns a function that will only be executed after being called N times.
  _.after = function (times, func) {
  return function () {
  if (--times < 1) {
  return func.apply(this, arguments);
  }
  };
  };
   
   
  // Object Functions
  // ----------------
   
  // Retrieve the names of an object's properties.
  // Delegates to **ECMAScript 5**'s native `Object.keys`
  _.keys = nativeKeys || function (obj) {
  if (obj !== Object(obj)) throw new TypeError('Invalid object');
  var keys = [];
  for (var key in obj) if (hasOwnProperty.call(obj, key)) keys[keys.length] = key;
  return keys;
  };
   
  // Retrieve the values of an object's properties.
  _.values = function (obj) {
  return _.map(obj, _.identity);
  };
   
  // Return a sorted list of the function names available on the object.
  // Aliased as `methods`
  _.functions = _.methods = function (obj) {
  var names = [];
  for (var key in obj) {
  if (_.isFunction(obj[key])) names.push(key);
  }
  return names.sort();
  };
   
  // Extend a given object with all the properties in passed-in object(s).
  _.extend = function (obj) {
  each(slice.call(arguments, 1), function (source) {
  for (var prop in source) {
  if (source[prop] !== void 0) obj[prop] = source[prop];
  }
  });
  return obj;
  };
   
  // Fill in a given object with default properties.
  _.defaults = function (obj) {
  each(slice.call(arguments, 1), function (source) {
  for (var prop in source) {
  if (obj[prop] == null) obj[prop] = source[prop];
  }
  });
  return obj;
  };
   
  // Create a (shallow-cloned) duplicate of an object.
  _.clone = function (obj) {
  return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
  };
   
  // Invokes interceptor with the obj, and then returns obj.
  // The primary purpose of this method is to "tap into" a method chain, in
  // order to perform operations on intermediate results within the chain.
  _.tap = function (obj, interceptor) {
  interceptor(obj);
  return obj;
  };
   
  // Perform a deep comparison to check if two objects are equal.
  _.isEqual = function (a, b) {
  // Check object identity.
  if (a === b) return true;
  // Different types?
  var atype = typeof(a), btype = typeof(b);
  if (atype != btype) return false;
  // Basic equality test (watch out for coercions).
  if (a == b) return true;
  // One is falsy and the other truthy.
  if ((!a && b) || (a && !b)) return false;
  // Unwrap any wrapped objects.
  if (a._chain) a = a._wrapped;
  if (b._chain) b = b._wrapped;
  // One of them implements an isEqual()?
  if (a.isEqual) return a.isEqual(b);
  if (b.isEqual) return b.isEqual(a);
  // Check dates' integer values.
  if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();
  // Both are NaN?
  if (_.isNaN(a) && _.isNaN(b)) return false;
  // Compare regular expressions.
  if (_.isRegExp(a) && _.isRegExp(b))
  return a.source === b.source &&
  a.global === b.global &&
  a.ignoreCase === b.ignoreCase &&
  a.multiline === b.multiline;
  // If a is not an object by this point, we can't handle it.
  if (atype !== 'object') return false;
  // Check for different array lengths before comparing contents.
  if (a.length && (a.length !== b.length)) return false;
  // Nothing else worked, deep compare the contents.
  var aKeys = _.keys(a), bKeys = _.keys(b);
  // Different object sizes?
  if (aKeys.length != bKeys.length) return false;
  // Recursive comparison of contents.
  for (var key in a) if (!(key in b) || !_.isEqual(a[key], b[key])) return false;
  return true;
  };
   
  // Is a given array or object empty?
  _.isEmpty = function (obj) {
  if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
  for (var key in obj) if (hasOwnProperty.call(obj, key)) return false;
  return true;
  };
   
  // Is a given value a DOM element?
  _.isElement = function (obj) {
  return !!(obj && obj.nodeType == 1);
  };
   
  // Is a given value an array?
  // Delegates to ECMA5's native Array.isArray
  _.isArray = nativeIsArray || function (obj) {
  return toString.call(obj) === '[object Array]';
  };
   
  // Is a given variable an object?
  _.isObject = function (obj) {
  return obj === Object(obj);
  };
   
  // Is a given variable an arguments object?
  _.isArguments = function (obj) {
  return !!(obj && hasOwnProperty.call(obj, 'callee'));
  };
   
  // Is a given value a function?
  _.isFunction = function (obj) {
  return !!(obj && obj.constructor && obj.call && obj.apply);
  };
   
  // Is a given value a string?
  _.isString = function (obj) {
  return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));
  };
   
  // Is a given value a number?
  _.isNumber = function (obj) {
  return !!(obj === 0 || (obj && obj.toExponential && obj.toFixed));
  };
   
  // Is the given value `NaN`? `NaN` happens to be the only value in JavaScript
  // that does not equal itself.
  _.isNaN = function (obj) {
  return obj !== obj;
  };
   
  // Is a given value a boolean?
  _.isBoolean = function (obj) {
  return obj === true || obj === false;
  };
   
  // Is a given value a date?
  _.isDate = function (obj) {
  return !!(obj && obj.getTimezoneOffset && obj.setUTCFullYear);
  };
   
  // Is the given value a regular expression?
  _.isRegExp = function (obj) {
  return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
  };
   
  // Is a given value equal to null?
  _.isNull = function (obj) {
  return obj === null;
  };
   
  // Is a given variable undefined?
  _.isUndefined = function (obj) {
  return obj === void 0;
  };
   
  // Utility Functions
  // -----------------
   
  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
  // previous owner. Returns a reference to the Underscore object.
  _.noConflict = function () {
  root._ = previousUnderscore;
  return this;
  };
   
  // Keep the identity function around for default iterators.
  _.identity = function (value) {
  return value;
  };
   
  // Run a function **n** times.
  _.times = function (n, iterator, context) {
  for (var i = 0; i < n; i++) iterator.call(context, i);
  };
   
  // Add your own custom functions to the Underscore object, ensuring that
  // they're correctly added to the OOP wrapper as well.
  _.mixin = function (obj) {
  each(_.functions(obj), function (name) {
  addToWrapper(name, _[name] = obj[name]);
  });
  };
   
  // Generate a unique integer id (unique within the entire client session).
  // Useful for temporary DOM ids.
  var idCounter = 0;
  _.uniqueId = function (prefix) {
  var id = idCounter++;
  return prefix ? prefix + id : id;
  };
   
  // By default, Underscore uses ERB-style template delimiters, change the
  // following template settings to use alternative delimiters.
  _.templateSettings = {
  evaluate: /<%([\s\S]+?)%>/g,
  interpolate: /<%=([\s\S]+?)%>/g
  };
   
  // JavaScript micro-templating, similar to John Resig's implementation.
  // Underscore templating handles arbitrary delimiters, preserves whitespace,
  // and correctly escapes quotes within interpolated code.
  _.template = function (str, data) {
  var c = _.templateSettings;
  var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
  'with(obj||{}){__p.push(\'' +
  str.replace(/\\/g, '\\\\')
  .replace(/'/g, "\\'")
  .replace(c.interpolate, function (match, code) {
  return "'," + code.replace(/\\'/g, "'") + ",'";
  })
  .replace(c.evaluate || null, function (match, code) {
  return "');" + code.replace(/\\'/g, "'")
  .replace(/[\r\n\t]/g, ' ') + "__p.push('";
  })
  .replace(/\r/g, '\\r')
  .replace(/\n/g, '\\n')
  .replace(/\t/g, '\\t')
  + "');}return __p.join('');";
  var func = new Function('obj', tmpl);
  return data ? func(data) : func;
  };
   
  // The OOP Wrapper
  // ---------------
   
  // If Underscore is called as a function, it returns a wrapped object that
  // can be used OO-style. This wrapper holds altered versions of all the
  // underscore functions. Wrapped objects may be chained.
  var wrapper = function (obj) {
  this._wrapped = obj;
  };
   
  // Expose `wrapper.prototype` as `_.prototype`
  _.prototype = wrapper.prototype;
   
  // Helper function to continue chaining intermediate results.
  var result = function (obj, chain) {
  return chain ? _(obj).chain() : obj;
  };
   
  // A method to easily add functions to the OOP wrapper.
  var addToWrapper = function (name, func) {
  wrapper.prototype[name] = function () {
  var args = slice.call(arguments);
  unshift.call(args, this._wrapped);
  return result(func.apply(_, args), this._chain);
  };
  };
   
  // Add all of the Underscore functions to the wrapper object.
  _.mixin(_);
   
  // Add all mutator Array functions to the wrapper.
  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function (name) {
  var method = ArrayProto[name];
  wrapper.prototype[name] = function () {
  method.apply(this._wrapped, arguments);
  return result(this._wrapped, this._chain);
  };
}); });
return results;  
}; // Add all accessor Array functions to the wrapper.
  each(['concat', 'join', 'slice'], function (name) {
// **Reduce** builds up a single result from a list of values, aka `inject`, var method = ArrayProto[name];
// or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. wrapper.prototype[name] = function () {
_.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { return result(method.apply(this._wrapped, arguments), this._chain);
var initial = memo !== void 0; };
if (obj == null) obj = [];  
if (nativeReduce && obj.reduce === nativeReduce) {  
if (context) iterator = _.bind(iterator, context);  
return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);  
}  
each(obj, function(value, index, list) {  
if (!initial) {  
memo = value;  
initial = true;  
} else {  
memo = iterator.call(context, memo, value, index, list);  
}  
}); });
if (!initial) throw new TypeError("Reduce of empty array with no initial value");  
return memo; // Start chaining a wrapped Underscore object.
}; wrapper.prototype.chain = function () {
  this._chain = true;
// The right-associative version of reduce, also known as `foldr`. return this;
// Delegates to **ECMAScript 5**'s native `reduceRight` if available. };
_.reduceRight = _.foldr = function(obj, iterator, memo, context) {  
if (obj == null) obj = []; // Extracts the result from a wrapped and chained object.
if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { wrapper.prototype.value = function () {
if (context) iterator = _.bind(iterator, context); return this._wrapped;
return memo !== void 0 ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); };
}  
var reversed = (_.isArray(obj) ? obj.slice() : _.toArray(obj)).reverse();  
return _.reduce(reversed, iterator, memo, context);  
};  
   
// Return the first value which passes a truth test. Aliased as `detect`.  
_.find = _.detect = function(obj, iterator, context) {  
var result;  
any(obj, function(value, index, list) {  
if (iterator.call(context, value, index, list)) {  
result = value;  
return true;  
}  
});  
return result;  
};  
   
// Return all the elements that pass a truth test.  
// Delegates to **ECMAScript 5**'s native `filter` if available.  
// Aliased as `select`.  
_.filter = _.select = function(obj, iterator, context) {  
var results = [];  
if (obj == null) return results;  
if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);  
each(obj, function(value, index, list) {  
if (iterator.call(context, value, index, list)) results[results.length] = value;  
});  
return results;  
};  
   
// Return all the elements for which a truth test fails.  
_.reject = function(obj, iterator, context) {  
var results = [];  
if (obj == null) return results;  
each(obj, function(value, index, list) {  
if (!iterator.call(context, value, index, list)) results[results.length] = value;  
});  
return results;  
};  
   
// Determine whether all of the elements match a truth test.  
// Delegates to **ECMAScript 5**'s native `every` if available.  
// Aliased as `all`.  
_.every = _.all = function(obj, iterator, context) {  
var result = true;  
if (obj == null) return result;  
if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);  
each(obj, function(value, index, list) {  
if (!(result = result && iterator.call(context, value, index, list))) return breaker;  
});  
return result;  
};  
   
// Determine if at least one element in the object matches a truth test.  
// Delegates to **ECMAScript 5**'s native `some` if available.  
// Aliased as `any`.  
var any = _.some = _.any = function(obj, iterator, context) {  
iterator = iterator || _.identity;  
var result = false;  
if (obj == null) return result;  
if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);  
each(obj, function(value, index, list) {  
if (result |= iterator.call(context, value, index, list)) return breaker;  
});  
return !!result;  
};  
   
// Determine if a given value is included in the array or object using `===`.  
// Aliased as `contains`.  
_.include = _.contains = function(obj, target) {  
var found = false;  
if (obj == null) return found;  
if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;  
any(obj, function(value) {  
if (found = value === target) return true;  
});  
return found;  
};  
   
// Invoke a method (with arguments) on every item in a collection.  
_.invoke = function(obj, method) {  
var args = slice.call(arguments, 2);  
return _.map(obj, function(value) {  
return (method.call ? method || value : value[method]).apply(value, args);  
});  
};  
   
// Convenience version of a common use case of `map`: fetching a property.  
_.pluck = function(obj, key) {  
return _.map(obj, function(value){ return value[key]; });  
};  
   
// Return the maximum element or (element-based computation).  
_.max = function(obj, iterator, context) {  
if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);  
var result = {computed : -Infinity};  
each(obj, function(value, index, list) {  
var computed = iterator ? iterator.call(context, value, index, list) : value;  
computed >= result.computed && (result = {value : value, computed : computed});  
});  
return result.value;  
};  
   
// Return the minimum element (or element-based computation).  
_.min = function(obj, iterator, context) {  
if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);  
var result = {computed : Infinity};  
each(obj, function(value, index, list) {  
var computed = iterator ? iterator.call(context, value, index, list) : value;  
computed < result.computed && (result = {value : value, computed : computed});  
});  
return result.value;  
};  
   
// Sort the object's values by a criterion produced by an iterator.  
_.sortBy = function(obj, iterator, context) {  
return _.pluck(_.map(obj, function(value, index, list) {  
return {  
value : value,  
criteria : iterator.call(context, value, index, list)  
};  
}).sort(function(left, right) {  
var a = left.criteria, b = right.criteria;  
return a < b ? -1 : a > b ? 1 : 0;  
}), 'value');  
};  
   
// Groups the object's values by a criterion produced by an iterator  
_.groupBy = function(obj, iterator) {  
var result = {};  
each(obj, function(value, index) {  
var key = iterator(value, index);  
(result[key] || (result[key] = [])).push(value);  
});  
return result;  
};  
   
// Use a comparator function to figure out at what index an object should  
// be inserted so as to maintain order. Uses binary search.  
_.sortedIndex = function(array, obj, iterator) {  
iterator || (iterator = _.identity);  
var low = 0, high = array.length;  
while (low < high) {  
var mid = (low + high) >> 1;  
iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;  
}  
return low;  
};  
   
// Safely convert anything iterable into a real, live array.  
_.toArray = function(iterable) {  
if (!iterable) return [];  
if (iterable.toArray) return iterable.toArray();  
if (_.isArray(iterable)) return slice.call(iterable);  
if (_.isArguments(iterable)) return slice.call(iterable);  
return _.values(iterable);  
};  
   
// Return the number of elements in an object.  
_.size = function(obj) {  
return _.toArray(obj).length;  
};  
   
// Array Functions  
// ---------------  
   
// Get the first element of an array. Passing **n** will return the first N  
// values in the array. Aliased as `head`. The **guard** check allows it to work  
// with `_.map`.  
_.first = _.head = function(array, n, guard) {  
return (n != null) && !guard ? slice.call(array, 0, n) : array[0];  
};  
   
// Returns everything but the first entry of the array. Aliased as `tail`.  
// Especially useful on the arguments object. Passing an **index** will return  
// the rest of the values in the array from that index onward. The **guard**  
// check allows it to work with `_.map`.  
_.rest = _.tail = function(array, index, guard) {  
return slice.call(array, (index == null) || guard ? 1 : index);  
};  
   
// Get the last element of an array.  
_.last = function(array) {  
return array[array.length - 1];  
};  
   
// Trim out all falsy values from an array.  
_.compact = function(array) {  
return _.filter(array, function(value){ return !!value; });  
};  
   
// Return a completely flattened version of an array.  
_.flatten = function(array) {  
return _.reduce(array, function(memo, value) {  
if (_.isArray(value)) return memo.concat(_.flatten(value));  
memo[memo.length] = value;  
return memo;  
}, []);  
};  
   
// Return a version of the array that does not contain the specified value(s).  
_.without = function(array) {  
return _.difference(array, slice.call(arguments, 1));  
};  
   
// Produce a duplicate-free version of the array. If the array has already  
// been sorted, you have the option of using a faster algorithm.  
// Aliased as `unique`.  
_.uniq = _.unique = function(array, isSorted) {  
return _.reduce(array, function(memo, el, i) {  
if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo[memo.length] = el;  
return memo;  
}, []);  
};  
   
// Produce an array that contains the union: each distinct element from all of  
// the passed-in arrays.  
_.union = function() {  
return _.uniq(_.flatten(arguments));  
};  
   
// Produce an array that contains every item shared between all the  
// passed-in arrays. (Aliased as "intersect" for back-compat.)  
_.intersection = _.intersect = function(array) {  
var rest = slice.call(arguments, 1);  
return _.filter(_.uniq(array), function(item) {  
return _.every(rest, function(other) {  
return _.indexOf(other, item) >= 0;  
});  
});  
};  
   
// Take the difference between one array and another.  
// Only the elements present in just the first array will remain.  
_.difference = function(array, other) {  
return _.filter(array, function(value){ return !_.include(other, value); });  
};  
   
// Zip together multiple lists into a single array -- elements that share  
// an index go together.  
_.zip = function() {  
var args = slice.call(arguments);  
var length = _.max(_.pluck(args, 'length'));  
var results = new Array(length);  
for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);  
return results;  
};  
   
// If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),  
// we need this function. Return the position of the first occurrence of an  
// item in an array, or -1 if the item is not included in the array.  
// Delegates to **ECMAScript 5**'s native `indexOf` if available.  
// If the array is large and already in sort order, pass `true`  
// for **isSorted** to use binary search.  
_.indexOf = function(array, item, isSorted) {  
if (array == null) return -1;  
var i, l;  
if (isSorted) {  
i = _.sortedIndex(array, item);  
return array[i] === item ? i : -1;  
}  
if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);  
for (i = 0, l = array.length; i < l; i++) if (array[i] === item) return i;  
return -1;  
};  
   
   
// Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.  
_.lastIndexOf = function(array, item) {  
if (array == null) return -1;  
if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);  
var i = array.length;  
while (i--) if (array[i] === item) return i;  
return -1;  
};  
   
// Generate an integer Array containing an arithmetic progression. A port of  
// the native Python `range()` function. See  
// [the Python documentation](http://docs.python.org/library/functions.html#range).  
_.range = function(start, stop, step) {  
if (arguments.length <= 1) {  
stop = start || 0;  
start = 0;  
}  
step = arguments[2] || 1;  
   
var len = Math.max(Math.ceil((stop - start) / step), 0);  
var idx = 0;  
var range = new Array(len);  
   
while(idx < len) {  
range[idx++] = start;  
start += step;  
}  
   
return range;  
};  
   
// Function (ahem) Functions  
// ------------------  
   
// Create a function bound to a given object (assigning `this`, and arguments,  
// optionally). Binding with arguments is also known as `curry`.  
// Delegates to **ECMAScript 5**'s native `Function.bind` if available.  
// We check for `func.bind` first, to fail fast when `func` is undefined.  
_.bind = function(func, obj) {  
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));  
var args = slice.call(arguments, 2);  
return function() {  
return func.apply(obj, args.concat(slice.call(arguments)));  
};  
};  
   
// Bind all of an object's methods to that object. Useful for ensuring that  
// all callbacks defined on an object belong to it.  
_.bindAll = function(obj) {  
var funcs = slice.call(arguments, 1);  
if (funcs.length == 0) funcs = _.functions(obj);  
each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });  
return obj;  
};  
   
// Memoize an expensive function by storing its results.  
_.memoize = function(func, hasher) {  
var memo = {};  
hasher || (hasher = _.identity);  
return function() {  
var key = hasher.apply(this, arguments);  
return hasOwnProperty.call(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));  
};  
};  
   
// Delays a function for the given number of milliseconds, and then calls  
// it with the arguments supplied.  
_.delay = function(func, wait) {  
var args = slice.call(arguments, 2);  
return setTimeout(function(){ return func.apply(func, args); }, wait);  
};  
   
// Defers a function, scheduling it to run after the current call stack has  
// cleared.  
_.defer = function(func) {  
return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));  
};  
   
// Internal function used to implement `_.throttle` and `_.debounce`.  
var limit = function(func, wait, debounce) {  
var timeout;  
return function() {  
var context = this, args = arguments;  
var throttler = function() {  
timeout = null;  
func.apply(context, args);  
};  
if (debounce) clearTimeout(timeout);  
if (debounce || !timeout) timeout = setTimeout(throttler, wait);  
};  
};  
   
// Returns a function, that, when invoked, will only be triggered at most once  
// during a given window of time.  
_.throttle = function(func, wait) {  
return limit(func, wait, false);  
};  
   
// Returns a function, that, as long as it continues to be invoked, will not  
// be triggered. The function will be called after it stops being called for  
// N milliseconds.  
_.debounce = function(func, wait) {  
return limit(func, wait, true);  
};  
   
// Returns a function that will be executed at most one time, no matter how  
// often you call it. Useful for lazy initialization.  
_.once = function(func) {  
var ran = false, memo;  
return function() {  
if (ran) return memo;  
ran = true;  
return memo = func.apply(this, arguments);  
};  
};  
   
// Returns the first function passed as an argument to the second,  
// allowing you to adjust arguments, run code before and after, and  
// conditionally execute the original function.  
_.wrap = function(func, wrapper) {  
return function() {  
var args = [func].concat(slice.call(arguments));  
return wrapper.apply(this, args);  
};  
};  
   
// Returns a function that is the composition of a list of functions, each  
// consuming the return value of the function that follows.  
_.compose = function() {  
var funcs = slice.call(arguments);  
return function() {  
var args = slice.call(arguments);  
for (var i = funcs.length - 1; i >= 0; i--) {  
args = [funcs[i].apply(this, args)];  
}  
return args[0];  
};  
};  
   
// Returns a function that will only be executed after being called N times.  
_.after = function(times, func) {  
return function() {  
if (--times < 1) { return func.apply(this, arguments); }  
};  
};  
   
   
// Object Functions  
// ----------------  
   
// Retrieve the names of an object's properties.  
// Delegates to **ECMAScript 5**'s native `Object.keys`  
_.keys = nativeKeys || function(obj) {  
if (obj !== Object(obj)) throw new TypeError('Invalid object');  
var keys = [];  
for (var key in obj) if (hasOwnProperty.call(obj, key)) keys[keys.length] = key;  
return keys;  
};  
   
// Retrieve the values of an object's properties.  
_.values = function(obj) {  
return _.map(obj, _.identity);  
};  
   
// Return a sorted list of the function names available on the object.  
// Aliased as `methods`  
_.functions = _.methods = function(obj) {  
var names = [];  
for (var key in obj) {  
if (_.isFunction(obj[key])) names.push(key);  
}  
return names.sort();  
};  
   
// Extend a given object with all the properties in passed-in object(s).  
_.extend = function(obj) {  
each(slice.call(arguments, 1), function(source) {  
for (var prop in source) {  
if (source[prop] !== void 0) obj[prop] = source[prop];  
}  
});  
return obj;  
};  
   
// Fill in a given object with default properties.  
_.defaults = function(obj) {  
each(slice.call(arguments, 1), function(source) {  
for (var prop in source) {  
if (obj[prop] == null) obj[prop] = source[prop];  
}  
});  
return obj;  
};  
   
// Create a (shallow-cloned) duplicate of an object.  
_.clone = function(obj) {  
return _.isArray(obj) ? obj.slice() : _.extend({}, obj);  
};  
   
// Invokes interceptor with the obj, and then returns obj.  
// The primary purpose of this method is to "tap into" a method chain, in  
// order to perform operations on intermediate results within the chain.  
_.tap = function(obj, interceptor) {  
interceptor(obj);  
return obj;  
};  
   
// Perform a deep comparison to check if two objects are equal.  
_.isEqual = function(a, b) {  
// Check object identity.  
if (a === b) return true;  
// Different types?  
var atype = typeof(a), btype = typeof(b);  
if (atype != btype) return false;  
// Basic equality test (watch out for coercions).  
if (a == b) return true;  
// One is falsy and the other truthy.  
if ((!a && b) || (a && !b)) return false;  
// Unwrap any wrapped objects.  
if (a._chain) a = a._wrapped;  
if (b._chain) b = b._wrapped;  
// One of them implements an isEqual()?  
if (a.isEqual) return a.isEqual(b);  
if (b.isEqual) return b.isEqual(a);  
// Check dates' integer values.  
if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();  
// Both are NaN?  
if (_.isNaN(a) && _.isNaN(b)) return false;  
// Compare regular expressions.  
if (_.isRegExp(a) && _.isRegExp(b))  
return a.source === b.source &&  
a.global === b.global &&  
a.ignoreCase === b.ignoreCase &&  
a.multiline === b.multiline;  
// If a is not an object by this point, we can't handle it.  
if (atype !== 'object') return false;  
// Check for different array lengths before comparing contents.  
if (a.length && (a.length !== b.length)) return false;  
// Nothing else worked, deep compare the contents.  
var aKeys = _.keys(a), bKeys = _.keys(b);  
// Different object sizes?  
if (aKeys.length != bKeys.length) return false;  
// Recursive comparison of contents.  
for (var key in a) if (!(key in b) || !_.isEqual(a[key], b[key])) return false;  
return true;  
};  
   
// Is a given array or object empty?  
_.isEmpty = function(obj) {  
if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;  
for (var key in obj) if (hasOwnProperty.call(obj, key)) return false;  
return true;  
};  
   
// Is a given value a DOM element?  
_.isElement = function(obj) {  
return !!(obj && obj.nodeType == 1);  
};  
   
// Is a given value an array?  
// Delegates to ECMA5's native Array.isArray  
_.isArray = nativeIsArray || function(obj) {  
return toString.call(obj) === '[object Array]';  
};  
   
// Is a given variable an object?  
_.isObject = function(obj) {  
return obj === Object(obj);  
};  
   
// Is a given variable an arguments object?  
_.isArguments = function(obj) {  
return !!(obj && hasOwnProperty.call(obj, 'callee'));  
};  
   
// Is a given value a function?  
_.isFunction = function(obj) {  
return !!(obj && obj.constructor && obj.call && obj.apply);  
};  
   
// Is a given value a string?  
_.isString = function(obj) {  
return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));  
};  
   
// Is a given value a number?  
_.isNumber = function(obj) {  
return !!(obj === 0 || (obj && obj.toExponential && obj.toFixed));  
};  
   
// Is the given value `NaN`? `NaN` happens to be the only value in JavaScript  
// that does not equal itself.  
_.isNaN = function(obj) {  
return obj !== obj;  
};  
   
// Is a given value a boolean?  
_.isBoolean = function(obj) {  
return obj === true || obj === false;  
};  
   
// Is a given value a date?  
_.isDate = function(obj) {  
return !!(obj && obj.getTimezoneOffset && obj.setUTCFullYear);  
};  
   
// Is the given value a regular expression?  
_.isRegExp = function(obj) {  
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));  
};  
   
// Is a given value equal to null?  
_.isNull = function(obj) {  
return obj === null;  
};  
   
// Is a given variable undefined?  
_.isUndefined = function(obj) {  
return obj === void 0;  
};  
   
// Utility Functions  
// -----------------  
   
// Run Underscore.js in *noConflict* mode, returning the `_` variable to its  
// previous owner. Returns a reference to the Underscore object.  
_.noConflict = function() {  
root._ = previousUnderscore;  
return this;  
};  
   
// Keep the identity function around for default iterators.  
_.identity = function(value) {  
return value;  
};  
   
// Run a function **n** times.  
_.times = function (n, iterator, context) {  
for (var i = 0; i < n; i++) iterator.call(context, i);  
};  
   
// Add your own custom functions to the Underscore object, ensuring that  
// they're correctly added to the OOP wrapper as well.  
_.mixin = function(obj) {  
each(_.functions(obj), function(name){  
addToWrapper(name, _[name] = obj[name]);  
});  
};  
   
// Generate a unique integer id (unique within the entire client session).  
// Useful for temporary DOM ids.  
var idCounter = 0;  
_.uniqueId = function(prefix) {  
var id = idCounter++;  
return prefix ? prefix + id : id;  
};  
   
// By default, Underscore uses ERB-style template delimiters, change the  
// following template settings to use alternative delimiters.  
_.templateSettings = {  
evaluate : /<%([\s\S]+?)%>/g,  
interpolate : /<%=([\s\S]+?)%>/g  
};  
   
// JavaScript micro-templating, similar to John Resig's implementation.  
// Underscore templating handles arbitrary delimiters, preserves whitespace,  
// and correctly escapes quotes within interpolated code.  
_.template = function(str, data) {  
var c = _.templateSettings;  
var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +  
'with(obj||{}){__p.push(\'' +  
str.replace(/\\/g, '\\\\')  
.replace(/'/g, "\\'")  
.replace(c.interpolate, function(match, code) {  
return "'," + code.replace(/\\'/g, "'") + ",'";  
})  
.replace(c.evaluate || null, function(match, code) {  
return "');" + code.replace(/\\'/g, "'")  
.replace(/[\r\n\t]/g, ' ') + "__p.push('";  
})  
.replace(/\r/g, '\\r')  
.replace(/\n/g, '\\n')  
.replace(/\t/g, '\\t')  
+ "');}return __p.join('');";  
var func = new Function('obj', tmpl);  
return data ? func(data) : func;  
};  
   
// The OOP Wrapper  
// ---------------  
   
// If Underscore is called as a function, it returns a wrapped object that  
// can be used OO-style. This wrapper holds altered versions of all the  
// underscore functions. Wrapped objects may be chained.  
var wrapper = function(obj) { this._wrapped = obj; };  
   
// Expose `wrapper.prototype` as `_.prototype`  
_.prototype = wrapper.prototype;  
   
// Helper function to continue chaining intermediate results.  
var result = function(obj, chain) {  
return chain ? _(obj).chain() : obj;  
};  
   
// A method to easily add functions to the OOP wrapper.  
var addToWrapper = function(name, func) {  
wrapper.prototype[name] = function() {  
var args = slice.call(arguments);  
unshift.call(args, this._wrapped);  
return result(func.apply(_, args), this._chain);  
};  
};  
   
// Add all of the Underscore functions to the wrapper object.  
_.mixin(_);  
   
// Add all mutator Array functions to the wrapper.  
each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {  
var method = ArrayProto[name];  
wrapper.prototype[name] = function() {  
method.apply(this._wrapped, arguments);  
return result(this._wrapped, this._chain);  
};  
});  
   
// Add all accessor Array functions to the wrapper.  
each(['concat', 'join', 'slice'], function(name) {  
var method = ArrayProto[name];  
wrapper.prototype[name] = function() {  
return result(method.apply(this._wrapped, arguments), this._chain);  
};  
});  
   
// Start chaining a wrapped Underscore object.  
wrapper.prototype.chain = function() {  
this._chain = true;  
return this;  
};  
   
// Extracts the result from a wrapped and chained object.  
wrapper.prototype.value = function() {  
return this._wrapped;  
};  
   
})(); })();
/** /**
* Flotr2 (c) 2012 Carl Sutherland * Flotr2 (c) 2012 Carl Sutherland
* MIT License * MIT License
* Special thanks to: * Special thanks to:
* Flotr: http://code.google.com/p/flotr/ (fork) * Flotr: http://code.google.com/p/flotr/ (fork)
* Flot: https://github.com/flot/flot (original fork) * Flot: https://github.com/flot/flot (original fork)
*/ */
(function () { (function () {
   
var var
global = this, global = this,
previousFlotr = this.Flotr, previousFlotr = this.Flotr,
Flotr; Flotr;
   
Flotr = { Flotr = {
_: _, _: _,
bean: bean, bean: bean,
isIphone: /iphone/i.test(navigator.userAgent), isIphone: /iphone/i.test(navigator.userAgent),
isIE: (navigator.appVersion.indexOf("MSIE") != -1 ? parseFloat(navigator.appVersion.split("MSIE")[1]) : false), isIE: (navigator.appVersion.indexOf("MSIE") != -1 ? parseFloat(navigator.appVersion.split("MSIE")[1]) : false),
   
/** /**
* An object of the registered graph types. Use Flotr.addType(type, object) * An object of the registered graph types. Use Flotr.addType(type, object)
* to add your own type. * to add your own type.
*/ */
graphTypes: {}, graphTypes: {},
   
/** /**
* The list of the registered plugins * The list of the registered plugins
*/ */
plugins: {}, plugins: {},
   
/** /**
* Can be used to add your own chart type. * Can be used to add your own chart type.
* @param {String} name - Type of chart, like 'pies', 'bars' etc. * @param {String} name - Type of chart, like 'pies', 'bars' etc.
* @param {String} graphType - The object containing the basic drawing functions (draw, etc) * @param {String} graphType - The object containing the basic drawing functions (draw, etc)
*/ */
addType: function(name, graphType){ addType: function (name, graphType) {
Flotr.graphTypes[name] = graphType; Flotr.graphTypes[name] = graphType;
Flotr.defaultOptions[name] = graphType.options || {}; Flotr.defaultOptions[name] = graphType.options || {};
Flotr.defaultOptions.defaultType = Flotr.defaultOptions.defaultType || name; Flotr.defaultOptions.defaultType = Flotr.defaultOptions.defaultType || name;
}, },
   
/** /**
* Can be used to add a plugin * Can be used to add a plugin
* @param {String} name - The name of the plugin * @param {String} name - The name of the plugin
* @param {String} plugin - The object containing the plugin's data (callbacks, options, function1, function2, ...) * @param {String} plugin - The object containing the plugin's data (callbacks, options, function1, function2, ...)
*/ */
addPlugin: function(name, plugin){ addPlugin: function (name, plugin) {
Flotr.plugins[name] = plugin; Flotr.plugins[name] = plugin;
Flotr.defaultOptions[name] = plugin.options || {}; Flotr.defaultOptions[name] = plugin.options || {};
}, },
   
/** /**
* Draws the graph. This function is here for backwards compatibility with Flotr version 0.1.0alpha. * Draws the graph. This function is here for backwards compatibility with Flotr version 0.1.0alpha.
* You could also draw graphs by directly calling Flotr.Graph(element, data, options). * You could also draw graphs by directly calling Flotr.Graph(element, data, options).
* @param {Element} el - element to insert the graph into * @param {Element} el - element to insert the graph into
* @param {Object} data - an array or object of dataseries * @param {Object} data - an array or object of dataseries
* @param {Object} options - an object containing options * @param {Object} options - an object containing options
* @param {Class} _GraphKlass_ - (optional) Class to pass the arguments to, defaults to Flotr.Graph * @param {Class} _GraphKlass_ - (optional) Class to pass the arguments to, defaults to Flotr.Graph
* @return {Object} returns a new graph object and of course draws the graph. * @return {Object} returns a new graph object and of course draws the graph.
*/ */
draw: function(el, data, options, GraphKlass){ draw: function (el, data, options, GraphKlass) {
GraphKlass = GraphKlass || Flotr.Graph; GraphKlass = GraphKlass || Flotr.Graph;
return new GraphKlass(el, data, options); return new GraphKlass(el, data, options);
}, },
   
/** /**
* Recursively merges two objects. * Recursively merges two objects.
* @param {Object} src - source object (likely the object with the least properties) * @param {Object} src - source object (likely the object with the least properties)
* @param {Object} dest - destination object (optional, object with the most properties) * @param {Object} dest - destination object (optional, object with the most properties)
* @return {Object} recursively merged Object * @return {Object} recursively merged Object
* @TODO See if we can't remove this. * @TODO See if we can't remove this.
*/ */
merge: function(src, dest){ merge: function (src, dest) {
var i, v, result = dest || {}; var i, v, result = dest || {};
   
for (i in src) { for (i in src) {
v = src[i]; v = src[i];
if (v && typeof(v) === 'object') { if (v && typeof(v) === 'object') {
if (v.constructor === Array) { if (v.constructor === Array) {
result[i] = this._.clone(v); result[i] = this._.clone(v);
} else if (v.constructor !== RegExp && !this._.isElement(v)) { } else if (v.constructor !== RegExp && !this._.isElement(v)) {
result[i] = Flotr.merge(v, (dest ? dest[i] : undefined)); result[i] = Flotr.merge(v, (dest ? dest[i] : undefined));
} else { } else {
result[i] = v; result[i] = v;
} }
} else { } else {
result[i] = v; result[i] = v;
} }
} }
   
return result; return result;
}, },
   
/** /**
* Recursively clones an object. * Recursively clones an object.
* @param {Object} object - The object to clone * @param {Object} object - The object to clone
* @return {Object} the clone * @return {Object} the clone
* @TODO See if we can't remove this. * @TODO See if we can't remove this.
*/ */
clone: function(object){ clone: function (object) {
return Flotr.merge(object, {}); return Flotr.merge(object, {});
}, },
   
/** /**
* Function calculates the ticksize and returns it. * Function calculates the ticksize and returns it.
* @param {Integer} noTicks - number of ticks * @param {Integer} noTicks - number of ticks
* @param {Integer} min - lower bound integer value for the current axis * @param {Integer} min - lower bound integer value for the current axis
* @param {Integer} max - upper bound integer value for the current axis * @param {Integer} max - upper bound integer value for the current axis
* @param {Integer} decimals - number of decimals for the ticks * @param {Integer} decimals - number of decimals for the ticks
* @return {Integer} returns the ticksize in pixels * @return {Integer} returns the ticksize in pixels
*/ */
getTickSize: function(noTicks, min, max, decimals){ getTickSize: function (noTicks, min, max, decimals) {
var delta = (max - min) / noTicks, var delta = (max - min) / noTicks,
magn = Flotr.getMagnitude(delta), magn = Flotr.getMagnitude(delta),
tickSize = 10, tickSize = 10,
norm = delta / magn; // Norm is between 1.0 and 10.0. norm = delta / magn; // Norm is between 1.0 and 10.0.
   
if(norm < 1.5) tickSize = 1; if (norm < 1.5) tickSize = 1;
else if(norm < 2.25) tickSize = 2; else if (norm < 2.25) tickSize = 2;
else if(norm < 3) tickSize = ((decimals === 0) ? 2 : 2.5); else if (norm < 3) tickSize = ((decimals === 0) ? 2 : 2.5);
else if(norm < 7.5) tickSize = 5; else if (norm < 7.5) tickSize = 5;
   
return tickSize * magn; return tickSize * magn;
}, },
   
/** /**
* Default tick formatter. * Default tick formatter.
* @param {String, Integer} val - tick value integer * @param {String, Integer} val - tick value integer
* @param {Object} axisOpts - the axis' options * @param {Object} axisOpts - the axis' options
* @return {String} formatted tick string * @return {String} formatted tick string
*/ */
defaultTickFormatter: function(val, axisOpts){ defaultTickFormatter: function (val, axisOpts) {
return val+''; return val + '';
}, },
   
/** /**
* Formats the mouse tracker values. * Formats the mouse tracker values.
* @param {Object} obj - Track value Object {x:..,y:..} * @param {Object} obj - Track value Object {x:..,y:..}
* @return {String} Formatted track string * @return {String} Formatted track string
*/ */
defaultTrackFormatter: function(obj){ defaultTrackFormatter: function (obj) {
return '('+obj.x+', '+obj.y+')'; return '(' + obj.x + ', ' + obj.y + ')';
}, },
   
/** /**
* Utility function to convert file size values in bytes to kB, MB, ... * Utility function to convert file size values in bytes to kB, MB, ...
* @param value {Number} - The value to convert * @param value {Number} - The value to convert
* @param precision {Number} - The number of digits after the comma (default: 2) * @param precision {Number} - The number of digits after the comma (default: 2)
* @param base {Number} - The base (default: 1000) * @param base {Number} - The base (default: 1000)
*/ */
engineeringNotation: function(value, precision, base){ engineeringNotation: function (value, precision, base) {
var sizes = ['Y','Z','E','P','T','G','M','k',''], var sizes = ['Y', 'Z', 'E', 'P', 'T', 'G', 'M', 'k', ''],
fractionSizes = ['y','z','a','f','p','n','µ','m',''], fractionSizes = ['y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', ''],
total = sizes.length; total = sizes.length;
   
base = base || 1000; base = base || 1000;
precision = Math.pow(10, precision || 2); precision = Math.pow(10, precision || 2);
   
if (value === 0) return 0; if (value === 0) return 0;
   
if (value > 1) { if (value > 1) {
while (total-- && (value >= base)) value /= base; while (total-- && (value >= base)) value /= base;
} }
else { else {
sizes = fractionSizes; sizes = fractionSizes;
total = sizes.length; total = sizes.length;
while (total-- && (value < 1)) value *= base; while (total-- && (value < 1)) value *= base;
} }
   
return (Math.round(value * precision) / precision) + sizes[total]; return (Math.round(value * precision) / precision) + sizes[total];
}, },
   
/** /**
* Returns the magnitude of the input value. * Returns the magnitude of the input value.
* @param {Integer, Float} x - integer or float value * @param {Integer, Float} x - integer or float value
* @return {Integer, Float} returns the magnitude of the input value * @return {Integer, Float} returns the magnitude of the input value
*/ */
getMagnitude: function(x){ getMagnitude: function (x) {
return Math.pow(10, Math.floor(Math.log(x) / Math.LN10)); return Math.pow(10, Math.floor(Math.log(x) / Math.LN10));
}, },
toPixel: function(val){ toPixel: function (val) {
return Math.floor(val)+0.5;//((val-Math.round(val) < 0.4) ? (Math.floor(val)-0.5) : val); return Math.floor(val) + 0.5;//((val-Math.round(val) < 0.4) ? (Math.floor(val)-0.5) : val);
}, },
toRad: function(angle){ toRad: function (angle) {
return -angle * (Math.PI/180); return -angle * (Math.PI / 180);
}, },
floorInBase: function(n, base) { floorInBase: function (n, base) {
return base * Math.floor(n / base); return base * Math.floor(n / base);
}, },
drawText: function(ctx, text, x, y, style) { drawText: function (ctx, text, x, y, style) {
if (!ctx.fillText) { if (!ctx.fillText) {
ctx.drawText(text, x, y, style); ctx.drawText(text, x, y, style);
return; return;
} }
   
style = this._.extend({ style = this._.extend({
size: Flotr.defaultOptions.fontSize, size: Flotr.defaultOptions.fontSize,
color: '#000000', color: '#000000',
textAlign: 'left', textAlign: 'left',
textBaseline: 'bottom', textBaseline: 'bottom',
weight: 1, weight: 1,
angle: 0 angle: 0
}, style); }, style);
   
ctx.save(); ctx.save();
ctx.translate(x, y); ctx.translate(x, y);
ctx.rotate(style.angle); ctx.rotate(style.angle);
ctx.fillStyle = style.color; ctx.fillStyle = style.color;
ctx.font = (style.weight > 1 ? "bold " : "") + (style.size*1.3) + "px sans-serif"; ctx.font = (style.weight > 1 ? "bold " : "") + (style.size * 1.3) + "px sans-serif";
ctx.textAlign = style.textAlign; ctx.textAlign = style.textAlign;
ctx.textBaseline = style.textBaseline; ctx.textBaseline = style.textBaseline;
ctx.fillText(text, 0, 0); ctx.fillText(text, 0, 0);
ctx.restore(); ctx.restore();
}, },
getBestTextAlign: function(angle, style) { getBestTextAlign: function (angle, style) {
style = style || {textAlign: 'center', textBaseline: 'middle'}; style = style || {textAlign: 'center', textBaseline: 'middle'};
angle += Flotr.getTextAngleFromAlign(style); angle += Flotr.getTextAngleFromAlign(style);
   
if (Math.abs(Math.cos(angle)) > 10e-3) if (Math.abs(Math.cos(angle)) > 10e-3)
style.textAlign = (Math.cos(angle) > 0 ? 'right' : 'left'); style.textAlign = (Math.cos(angle) > 0 ? 'right' : 'left');
   
if (Math.abs(Math.sin(angle)) > 10e-3) if (Math.abs(Math.sin(angle)) > 10e-3)
style.textBaseline = (Math.sin(angle) > 0 ? 'top' : 'bottom'); style.textBaseline = (Math.sin(angle) > 0 ? 'top' : 'bottom');
   
return style; return style;
}, },
alignTable: { alignTable: {
'right middle' : 0, 'right middle': 0,
'right top' : Math.PI/4, 'right top': Math.PI / 4,
'center top' : Math.PI/2, 'center top': Math.PI / 2,
'left top' : 3*(Math.PI/4), 'left top': 3 * (Math.PI / 4),
'left middle' : Math.PI, 'left middle': Math.PI,
'left bottom' : -3*(Math.PI/4), 'left bottom': -3 * (Math.PI / 4),
'center bottom': -Math.PI/2, 'center bottom': -Math.PI / 2,
'right bottom' : -Math.PI/4, 'right bottom': -Math.PI / 4,
'center middle': 0 'center middle': 0
}, },
getTextAngleFromAlign: function(style) { getTextAngleFromAlign: function (style) {
return Flotr.alignTable[style.textAlign+' '+style.textBaseline] || 0; return Flotr.alignTable[style.textAlign + ' ' + style.textBaseline] || 0;
}, },
noConflict : function () { noConflict: function () {
global.Flotr = previousFlotr; global.Flotr = previousFlotr;
return this; return this;
} }
}; };
   
global.Flotr = Flotr; global.Flotr = Flotr;
   
})(); })();
   
/** /**
* Flotr Defaults * Flotr Defaults
*/ */
Flotr.defaultOptions = { Flotr.defaultOptions = {
colors: ['#00A8F0', '#C0D800', '#CB4B4B', '#4DA74D', '#9440ED'], //=> The default colorscheme. When there are > 5 series, additional colors are generated. colors: ['#00A8F0', '#C0D800', '#CB4B4B', '#4DA74D', '#9440ED'], //=> The default colorscheme. When there are > 5 series, additional colors are generated.
ieBackgroundColor: '#FFFFFF', // Background color for excanvas clipping ieBackgroundColor: '#FFFFFF', // Background color for excanvas clipping
title: null, // => The graph's title title: null, // => The graph's title
subtitle: null, // => The graph's subtitle subtitle: null, // => The graph's subtitle
shadowSize: 4, // => size of the 'fake' shadow shadowSize: 4, // => size of the 'fake' shadow
defaultType: null, // => default series type defaultType: null, // => default series type
HtmlText: true, // => wether to draw the text using HTML or on the canvas HtmlText: true, // => wether to draw the text using HTML or on the canvas
fontColor: '#545454', // => default font color fontColor: '#545454', // => default font color
fontSize: 7.5, // => canvas' text font size fontSize: 7.5, // => canvas' text font size
resolution: 1, // => resolution of the graph, to have printer-friendly graphs ! resolution: 1, // => resolution of the graph, to have printer-friendly graphs !
parseFloat: true, // => whether to preprocess data for floats (ie. if input is string) parseFloat: true, // => whether to preprocess data for floats (ie. if input is string)
xaxis: { xaxis: {
ticks: null, // => format: either [1, 3] or [[1, 'a'], 3] ticks: null, // => format: either [1, 3] or [[1, 'a'], 3]
minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3] minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3]
showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise
showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide
labelsAngle: 0, // => labels' angle, in degrees labelsAngle: 0, // => labels' angle, in degrees
title: null, // => axis title title: null, // => axis title
titleAngle: 0, // => axis title's angle, in degrees titleAngle: 0, // => axis title's angle, in degrees
noTicks: 5, // => number of ticks for automagically generated ticks noTicks: 5, // => number of ticks for automagically generated ticks
minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks
tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string
tickDecimals: null, // => no. of decimals, null means auto tickDecimals: null, // => no. of decimals, null means auto
min: null, // => min. value to show, null means set automatically min: null, // => min. value to show, null means set automatically
max: null, // => max. value to show, null means set automatically max: null, // => max. value to show, null means set automatically
autoscale: false, // => Turns autoscaling on with true autoscale: false, // => Turns autoscaling on with true
autoscaleMargin: 0, // => margin in % to add if auto-setting min/max autoscaleMargin: 0, // => margin in % to add if auto-setting min/max
color: null, // => color of the ticks color: null, // => color of the ticks
mode: 'normal', // => can be 'time' or 'normal' mode: 'normal', // => can be 'time' or 'normal'
timeFormat: null, timeFormat: null,
timeMode:'UTC', // => For UTC time ('local' for local time). timeMode: 'UTC', // => For UTC time ('local' for local time).
timeUnit:'millisecond',// => Unit for time (millisecond, second, minute, hour, day, month, year) timeUnit: 'millisecond',// => Unit for time (millisecond, second, minute, hour, day, month, year)
scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic' scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic'
base: Math.E, base: Math.E,
titleAlign: 'center', titleAlign: 'center',
margin: true // => Turn off margins with false margin: true // => Turn off margins with false
}, },
x2axis: {}, x2axis: {},
yaxis: { yaxis: {
ticks: null, // => format: either [1, 3] or [[1, 'a'], 3] ticks: null, // => format: either [1, 3] or [[1, 'a'], 3]
minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3] minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3]
showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise
showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide
labelsAngle: 0, // => labels' angle, in degrees labelsAngle: 0, // => labels' angle, in degrees
title: null, // => axis title title: null, // => axis title
titleAngle: 90, // => axis title's angle, in degrees titleAngle: 90, // => axis title's angle, in degrees
noTicks: 5, // => number of ticks for automagically generated ticks noTicks: 5, // => number of ticks for automagically generated ticks
minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks
tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string
tickDecimals: null, // => no. of decimals, null means auto tickDecimals: null, // => no. of decimals, null means auto
min: null, // => min. value to show, null means set automatically min: null, // => min. value to show, null means set automatically
max: null, // => max. value to show, null means set automatically max: null, // => max. value to show, null means set automatically
autoscale: false, // => Turns autoscaling on with true autoscale: false, // => Turns autoscaling on with true
autoscaleMargin: 0, // => margin in % to add if auto-setting min/max autoscaleMargin: 0, // => margin in % to add if auto-setting min/max
color: null, // => The color of the ticks color: null, // => The color of the ticks
scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic' scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic'
base: Math.E, base: Math.E,
titleAlign: 'center', titleAlign: 'center',
margin: true // => Turn off margins with false margin: true // => Turn off margins with false
}, },
y2axis: { y2axis: {
titleAngle: 270 titleAngle: 270
}, },
grid: { grid: {
color: '#545454', // => primary color used for outline and labels color: '#545454', // => primary color used for outline and labels
backgroundColor: null, // => null for transparent, else color backgroundColor: null, // => null for transparent, else color
backgroundImage: null, // => background image. String or object with src, left and top backgroundImage: null, // => background image. String or object with src, left and top
watermarkAlpha: 0.4, // => watermarkAlpha: 0.4, // =>
tickColor: '#DDDDDD', // => color used for the ticks tickColor: '#DDDDDD', // => color used for the ticks
labelMargin: 3, // => margin in pixels labelMargin: 3, // => margin in pixels
verticalLines: true, // => whether to show gridlines in vertical direction verticalLines: true, // => whether to show gridlines in vertical direction
minorVerticalLines: null, // => whether to show gridlines for minor ticks in vertical dir. minorVerticalLines: null, // => whether to show gridlines for minor ticks in vertical dir.
horizontalLines: true, // => whether to show gridlines in horizontal direction horizontalLines: true, // => whether to show gridlines in horizontal direction
minorHorizontalLines: null, // => whether to show gridlines for minor ticks in horizontal dir. minorHorizontalLines: null, // => whether to show gridlines for minor ticks in horizontal dir.
outlineWidth: 1, // => width of the grid outline/border in pixels outlineWidth: 1, // => width of the grid outline/border in pixels
outline : 'nsew', // => walls of the outline to display outline: 'nsew', // => walls of the outline to display
circular: false // => if set to true, the grid will be circular, must be used when radars are drawn circular: false // => if set to true, the grid will be circular, must be used when radars are drawn
}, },
mouse: { mouse: {
track: false, // => true to track the mouse, no tracking otherwise track: false, // => true to track the mouse, no tracking otherwise
trackAll: false, trackAll: false,
position: 'se', // => position of the value box (default south-east) position: 'se', // => position of the value box (default south-east)
relative: false, // => next to the mouse cursor relative: false, // => next to the mouse cursor
trackFormatter: Flotr.defaultTrackFormatter, // => formats the values in the value box trackFormatter: Flotr.defaultTrackFormatter, // => formats the values in the value box
margin: 5, // => margin in pixels of the valuebox margin: 5, // => margin in pixels of the valuebox
lineColor: '#FF3F19', // => line color of points that are drawn when mouse comes near a value of a series lineColor: '#FF3F19', // => line color of points that are drawn when mouse comes near a value of a series
trackDecimals: 1, // => decimals for the track values trackDecimals: 1, // => decimals for the track values
sensibility: 2, // => the lower this number, the more precise you have to aim to show a value sensibility: 2, // => the lower this number, the more precise you have to aim to show a value
trackY: true, // => whether or not to track the mouse in the y axis trackY: true, // => whether or not to track the mouse in the y axis
radius: 3, // => radius of the track point radius: 3, // => radius of the track point
fillColor: null, // => color to fill our select bar with only applies to bar and similar graphs (only bars for now) fillColor: null, // => color to fill our select bar with only applies to bar and similar graphs (only bars for now)
fillOpacity: 0.4 // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.4 // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
} }
}; };
   
/** /**
* Flotr Color * Flotr Color
*/ */
   
(function () { (function () {
   
var var
_ = Flotr._; _ = Flotr._;
   
// Constructor // Constructor
function Color (r, g, b, a) { function Color(r, g, b, a) {
this.rgba = ['r','g','b','a']; this.rgba = ['r', 'g', 'b', 'a'];
var x = 4; var x = 4;
while(-1<--x){ while (-1 < --x) {
this[this.rgba[x]] = arguments[x] || ((x==3) ? 1.0 : 0); this[this.rgba[x]] = arguments[x] || ((x == 3) ? 1.0 : 0);
} }
this.normalize(); this.normalize();
} }
   
// Constants // Constants
var COLOR_NAMES = { var COLOR_NAMES = {
aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255], aqua: [0, 255, 255], azure: [240, 255, 255], beige: [245, 245, 220], black: [0, 0, 0], blue: [0, 0, 255],
brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169], brown: [165, 42, 42], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgrey: [169, 169, 169],
darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47], darkgreen: [0, 100, 0], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47],
darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122],
darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130], darkviolet: [148, 0, 211], fuchsia: [255, 0, 255], gold: [255, 215, 0], green: [0, 128, 0], indigo: [75, 0, 130],
khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144], khaki: [240, 230, 140], lightblue: [173, 216, 230], lightcyan: [224, 255, 255], lightgreen: [144, 238, 144],
lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightyellow: [255, 255, 224], lime: [0, 255, 0], magenta: [255, 0, 255],
maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128], maroon: [128, 0, 0], navy: [0, 0, 128], olive: [128, 128, 0], orange: [255, 165, 0], pink: [255, 192, 203], purple: [128, 0, 128],
violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0] violet: [128, 0, 128], red: [255, 0, 0], silver: [192, 192, 192], white: [255, 255, 255], yellow: [255, 255, 0]
}; };
   
Color.prototype = { Color.prototype = {
scale: function(rf, gf, bf, af){ scale: function (rf, gf, bf, af) {
var x = 4; var x = 4;
while (-1 < --x) { while (-1 < --x) {
if (!_.isUndefined(arguments[x])) this[this.rgba[x]] *= arguments[x]; if (!_.isUndefined(arguments[x])) this[this.rgba[x]] *= arguments[x];
} }
return this.normalize(); return this.normalize();
}, },
alpha: function(alpha) { alpha: function (alpha) {
if (!_.isUndefined(alpha) && !_.isNull(alpha)) { if (!_.isUndefined(alpha) && !_.isNull(alpha)) {
this.a = alpha; this.a = alpha;
} }
return this.normalize(); return this.normalize();
}, },
clone: function(){ clone: function () {
return new Color(this.r, this.b, this.g, this.a); return new Color(this.r, this.b, this.g, this.a);
}, },
limit: function(val,minVal,maxVal){ limit: function (val, minVal, maxVal) {
return Math.max(Math.min(val, maxVal), minVal); return Math.max(Math.min(val, maxVal), minVal);
}, },
normalize: function(){ normalize: function () {
var limit = this.limit; var limit = this.limit;
this.r = limit(parseInt(this.r, 10), 0, 255); this.r = limit(parseInt(this.r, 10), 0, 255);
this.g = limit(parseInt(this.g, 10), 0, 255); this.g = limit(parseInt(this.g, 10), 0, 255);
this.b = limit(parseInt(this.b, 10), 0, 255); this.b = limit(parseInt(this.b, 10), 0, 255);
this.a = limit(this.a, 0, 1); this.a = limit(this.a, 0, 1);
return this; return this;
}, },
distance: function(color){ distance: function (color) {
if (!color) return; if (!color) return;
color = new Color.parse(color); color = new Color.parse(color);
var dist = 0, x = 3; var dist = 0, x = 3;
while(-1<--x){ while (-1 < --x) {
dist += Math.abs(this[this.rgba[x]] - color[this.rgba[x]]); dist += Math.abs(this[this.rgba[x]] - color[this.rgba[x]]);
} }
return dist; return dist;
}, },
toString: function(){ toString: function () {
return (this.a >= 1.0) ? 'rgb('+[this.r,this.g,this.b].join(',')+')' : 'rgba('+[this.r,this.g,this.b,this.a].join(',')+')'; return (this.a >= 1.0) ? 'rgb(' + [this.r, this.g, this.b].join(',') + ')' : 'rgba(' + [this.r, this.g, this.b, this.a].join(',') + ')';
}, },
contrast: function () { contrast: function () {
var var
test = 1 - ( 0.299 * this.r + 0.587 * this.g + 0.114 * this.b) / 255; test = 1 - ( 0.299 * this.r + 0.587 * this.g + 0.114 * this.b) / 255;
return (test < 0.5 ? '#000000' : '#ffffff'); return (test < 0.5 ? '#000000' : '#ffffff');
} }
}; };
   
_.extend(Color, { _.extend(Color, {
/** /**
* Parses a color string and returns a corresponding Color. * Parses a color string and returns a corresponding Color.
* The different tests are in order of probability to improve speed. * The different tests are in order of probability to improve speed.
* @param {String, Color} str - string thats representing a color * @param {String, Color} str - string thats representing a color
* @return {Color} returns a Color object or false * @return {Color} returns a Color object or false
*/ */
parse: function(color){ parse: function (color) {
if (color instanceof Color) return color; if (color instanceof Color) return color;
   
var result; var result;
   
// #a0b1c2 // #a0b1c2
if((result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))) if ((result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)))
return new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)); return new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16));
   
// rgb(num,num,num) // rgb(num,num,num)
if((result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))) if ((result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)))
return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10)); return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10));
   
// #fff // #fff
if((result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))) if ((result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)))
return new Color(parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)); return new Color(parseInt(result[1] + result[1], 16), parseInt(result[2] + result[2], 16), parseInt(result[3] + result[3], 16));
   
// rgba(num,num,num,num) // rgba(num,num,num,num)
if((result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(color))) if ((result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(color)))
return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10), parseFloat(result[4])); return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10), parseFloat(result[4]));
   
// rgb(num%,num%,num%) // rgb(num%,num%,num%)
if((result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))) if ((result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)))
return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55); return new Color(parseFloat(result[1]) * 2.55, parseFloat(result[2]) * 2.55, parseFloat(result[3]) * 2.55);
   
// rgba(num%,num%,num%,num) // rgba(num%,num%,num%,num)
if((result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(color))) if ((result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(color)))
return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4])); return new Color(parseFloat(result[1]) * 2.55, parseFloat(result[2]) * 2.55, parseFloat(result[3]) * 2.55, parseFloat(result[4]));
   
// Otherwise, we're most likely dealing with a named color. // Otherwise, we're most likely dealing with a named color.
var name = (color+'').replace(/^\s*([\S\s]*?)\s*$/, '$1').toLowerCase(); var name = (color + '').replace(/^\s*([\S\s]*?)\s*$/, '$1').toLowerCase();
if(name == 'transparent'){ if (name == 'transparent') {
return new Color(255, 255, 255, 0); return new Color(255, 255, 255, 0);
} }
return (result = COLOR_NAMES[name]) ? new Color(result[0], result[1], result[2]) : new Color(0, 0, 0, 0); return (result = COLOR_NAMES[name]) ? new Color(result[0], result[1], result[2]) : new Color(0, 0, 0, 0);
}, },
   
/** /**
* Process color and options into color style. * Process color and options into color style.
*/ */
processColor: function(color, options) { processColor: function (color, options) {
   
var opacity = options.opacity; var opacity = options.opacity;
if (!color) return 'rgba(0, 0, 0, 0)'; if (!color) return 'rgba(0, 0, 0, 0)';
if (color instanceof Color) return color.alpha(opacity).toString(); if (color instanceof Color) return color.alpha(opacity).toString();
if (_.isString(color)) return Color.parse(color).alpha(opacity).toString(); if (_.isString(color)) return Color.parse(color).alpha(opacity).toString();
   
var grad = color.colors ? color : {colors: color}; var grad = color.colors ? color : {colors: color};
   
if (!options.ctx) { if (!options.ctx) {
if (!_.isArray(grad.colors)) return 'rgba(0, 0, 0, 0)'; if (!_.isArray(grad.colors)) return 'rgba(0, 0, 0, 0)';
return Color.parse(_.isArray(grad.colors[0]) ? grad.colors[0][1] : grad.colors[0]).alpha(opacity).toString(); return Color.parse(_.isArray(grad.colors[0]) ? grad.colors[0][1] : grad.colors[0]).alpha(opacity).toString();
} }
grad = _.extend({start: 'top', end: 'bottom'}, grad); grad = _.extend({start: 'top', end: 'bottom'}, grad);
   
if (/top/i.test(grad.start)) options.x1 = 0; if (/top/i.test(grad.start)) options.x1 = 0;
if (/left/i.test(grad.start)) options.y1 = 0; if (/left/i.test(grad.start)) options.y1 = 0;
if (/bottom/i.test(grad.end)) options.x2 = 0; if (/bottom/i.test(grad.end)) options.x2 = 0;
if (/right/i.test(grad.end)) options.y2 = 0; if (/right/i.test(grad.end)) options.y2 = 0;
   
var i, c, stop, gradient = options.ctx.createLinearGradient(options.x1, options.y1, options.x2, options.y2); var i, c, stop, gradient = options.ctx.createLinearGradient(options.x1, options.y1, options.x2, options.y2);
for (i = 0; i < grad.colors.length; i++) { for (i = 0; i < grad.colors.length; i++) {
c = grad.colors[i]; c = grad.colors[i];
if (_.isArray(c)) { if (_.isArray(c)) {
stop = c[0]; stop = c[0];
c = c[1]; c = c[1];
} }
else stop = i / (grad.colors.length-1); else stop = i / (grad.colors.length - 1);
gradient.addColorStop(stop, Color.parse(c).alpha(opacity)); gradient.addColorStop(stop, Color.parse(c).alpha(opacity));
} }
return gradient; return gradient;
} }
}); });
   
Flotr.Color = Color; Flotr.Color = Color;
   
})(); })();
   
/** /**
* Flotr Date * Flotr Date
*/ */
Flotr.Date = { Flotr.Date = {
   
set : function (date, name, mode, value) { set: function (date, name, mode, value) {
mode = mode || 'UTC'; mode = mode || 'UTC';
name = 'set' + (mode === 'UTC' ? 'UTC' : '') + name; name = 'set' + (mode === 'UTC' ? 'UTC' : '') + name;
date[name](value); date[name](value);
}, },
   
get : function (date, name, mode) { get: function (date, name, mode) {
mode = mode || 'UTC'; mode = mode || 'UTC';
name = 'get' + (mode === 'UTC' ? 'UTC' : '') + name; name = 'get' + (mode === 'UTC' ? 'UTC' : '') + name;
return date[name](); return date[name]();
}, },
   
format: function(d, format, mode) { format: function (d, format, mode) {
if (!d) return; if (!d) return;
   
// We should maybe use an "official" date format spec, like PHP date() or ColdFusion // We should maybe use an "official" date format spec, like PHP date() or ColdFusion
// http://fr.php.net/manual/en/function.date.php // http://fr.php.net/manual/en/function.date.php
// http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_c-d_29.html // http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_c-d_29.html
var var
get = this.get, get = this.get,
tokens = { tokens = {
h: get(d, 'Hours', mode).toString(), h: get(d, 'Hours', mode).toString(),
H: leftPad(get(d, 'Hours', mode)), H: leftPad(get(d, 'Hours', mode)),
M: leftPad(get(d, 'Minutes', mode)), M: leftPad(get(d, 'Minutes', mode)),
S: leftPad(get(d, 'Seconds', mode)), S: leftPad(get(d, 'Seconds', mode)),
s: get(d, 'Milliseconds', mode), s: get(d, 'Milliseconds', mode),
d: get(d, 'Date', mode).toString(), d: get(d, 'Date', mode).toString(),
m: (get(d, 'Month') + 1).toString(), m: (get(d, 'Month') + 1).toString(),
y: get(d, 'FullYear').toString(), y: get(d, 'FullYear').toString(),
b: Flotr.Date.monthNames[get(d, 'Month', mode)] b: Flotr.Date.monthNames[get(d, 'Month', mode)]
}; };
   
function leftPad(n){ function leftPad(n) {
n += ''; n += '';
return n.length == 1 ? "0" + n : n; return n.length == 1 ? "0" + n : n;
} }
   
var r = [], c, var r = [], c,
escape = false; escape = false;
   
for (var i = 0; i < format.length; ++i) { for (var i = 0; i < format.length; ++i) {
c = format.charAt(i); c = format.charAt(i);
   
if (escape) { if (escape) {
r.push(tokens[c] || c); r.push(tokens[c] || c);
escape = false; escape = false;
} }
else if (c == "%") else if (c == "%")
escape = true; escape = true;
else else
r.push(c); r.push(c);
} }
return r.join(''); return r.join('');
}, },
getFormat: function(time, span) { getFormat: function (time, span) {
var tu = Flotr.Date.timeUnits; var tu = Flotr.Date.timeUnits;
if (time < tu.second) return "%h:%M:%S.%s"; if (time < tu.second) return "%h:%M:%S.%s";
else if (time < tu.minute) return "%h:%M:%S"; else if (time < tu.minute) return "%h:%M:%S";
else if (time < tu.day) return (span < 2 * tu.day) ? "%h:%M" : "%b %d %h:%M"; else if (time < tu.day) return (span < 2 * tu.day) ? "%h:%M" : "%b %d %h:%M";
else if (time < tu.month) return "%b %d"; else if (time < tu.month) return "%b %d";
else if (time < tu.year) return (span < tu.year) ? "%b" : "%b %y"; else if (time < tu.year) return (span < tu.year) ? "%b" : "%b %y";
else return "%y"; else return "%y";
}, },
formatter: function (v, axis) { formatter: function (v, axis) {
var var
options = axis.options, options = axis.options,
scale = Flotr.Date.timeUnits[options.timeUnit], scale = Flotr.Date.timeUnits[options.timeUnit],
d = new Date(v * scale); d = new Date(v * scale);
   
// first check global format // first check global format
if (axis.options.timeFormat) if (axis.options.timeFormat)
return Flotr.Date.format(d, options.timeFormat, options.timeMode); return Flotr.Date.format(d, options.timeFormat, options.timeMode);
   
var span = (axis.max - axis.min) * scale, var span = (axis.max - axis.min) * scale,
t = axis.tickSize * Flotr.Date.timeUnits[axis.tickUnit]; t = axis.tickSize * Flotr.Date.timeUnits[axis.tickUnit];
   
return Flotr.Date.format(d, Flotr.Date.getFormat(t, span), options.timeMode); return Flotr.Date.format(d, Flotr.Date.getFormat(t, span), options.timeMode);
}, },
generator: function(axis) { generator: function (axis) {
   
var var
set = this.set, set = this.set,
get = this.get, get = this.get,
timeUnits = this.timeUnits, timeUnits = this.timeUnits,
spec = this.spec, spec = this.spec,
options = axis.options, options = axis.options,
mode = options.timeMode, mode = options.timeMode,
scale = timeUnits[options.timeUnit], scale = timeUnits[options.timeUnit],
min = axis.min * scale, min = axis.min * scale,
max = axis.max * scale, max = axis.max * scale,
delta = (max - min) / options.noTicks, delta = (max - min) / options.noTicks,
ticks = [], ticks = [],
tickSize = axis.tickSize, tickSize = axis.tickSize,
tickUnit, tickUnit,
formatter, i; formatter, i;
   
// Use custom formatter or time tick formatter // Use custom formatter or time tick formatter
formatter = (options.tickFormatter === Flotr.defaultTickFormatter ? formatter = (options.tickFormatter === Flotr.defaultTickFormatter ?
this.formatter : options.tickFormatter this.formatter : options.tickFormatter
); );
   
for (i = 0; i < spec.length - 1; ++i) { for (i = 0; i < spec.length - 1; ++i) {
var d = spec[i][0] * timeUnits[spec[i][1]]; var d = spec[i][0] * timeUnits[spec[i][1]];
if (delta < (d + spec[i+1][0] * timeUnits[spec[i+1][1]]) / 2 && d >= tickSize) if (delta < (d + spec[i + 1][0] * timeUnits[spec[i + 1][1]]) / 2 && d >= tickSize)
break; break;
} }
tickSize = spec[i][0]; tickSize = spec[i][0];
tickUnit = spec[i][1]; tickUnit = spec[i][1];
   
// special-case the possibility of several years // special-case the possibility of several years
if (tickUnit == "year") { if (tickUnit == "year") {
tickSize = Flotr.getTickSize(options.noTicks*timeUnits.year, min, max, 0); tickSize = Flotr.getTickSize(options.noTicks * timeUnits.year, min, max, 0);
   
// Fix for 0.5 year case // Fix for 0.5 year case
if (tickSize == 0.5) { if (tickSize == 0.5) {
tickUnit = "month"; tickUnit = "month";
tickSize = 6; tickSize = 6;
} }
} }
   
axis.tickUnit = tickUnit; axis.tickUnit = tickUnit;
axis.tickSize = tickSize; axis.tickSize = tickSize;
   
var var
d = new Date(min); d = new Date(min);
   
var step = tickSize * timeUnits[tickUnit]; var step = tickSize * timeUnits[tickUnit];
   
function setTick (name) { function setTick(name) {
set(d, name, mode, Flotr.floorInBase( set(d, name, mode, Flotr.floorInBase(
get(d, name, mode), tickSize get(d, name, mode), tickSize
)); ));
} }
   
switch (tickUnit) { switch (tickUnit) {
case "millisecond": setTick('Milliseconds'); break; case "millisecond":
case "second": setTick('Seconds'); break; setTick('Milliseconds');
case "minute": setTick('Minutes'); break; break;
case "hour": setTick('Hours'); break; case "second":
case "month": setTick('Month'); break; setTick('Seconds');
case "year": setTick('FullYear'); break; break;
} case "minute":
  setTick('Minutes');
// reset smaller components break;
if (step >= timeUnits.second) set(d, 'Milliseconds', mode, 0); case "hour":
if (step >= timeUnits.minute) set(d, 'Seconds', mode, 0); setTick('Hours');
if (step >= timeUnits.hour) set(d, 'Minutes', mode, 0); break;
if (step >= timeUnits.day) set(d, 'Hours', mode, 0); case "month":
if (step >= timeUnits.day * 4) set(d, 'Date', mode, 1); setTick('Month');
if (step >= timeUnits.year) set(d, 'Month', mode, 0); break;
  case "year":
var carry = 0, v = NaN, prev; setTick('FullYear');
do { break;
prev = v; }
v = d.getTime();  
ticks.push({ v: v / scale, label: formatter(v / scale, axis) }); // reset smaller components
if (tickUnit == "month") { if (step >= timeUnits.second) set(d, 'Milliseconds', mode, 0);
if (tickSize < 1) { if (step >= timeUnits.minute) set(d, 'Seconds', mode, 0);
/* a bit complicated - we'll divide the month up but we need to take care of fractions if (step >= timeUnits.hour) set(d, 'Minutes', mode, 0);
so we don't end up in the middle of a day */ if (step >= timeUnits.day) set(d, 'Hours', mode, 0);
set(d, 'Date', mode, 1); if (step >= timeUnits.day * 4) set(d, 'Date', mode, 1);
var start = d.getTime(); if (step >= timeUnits.year) set(d, 'Month', mode, 0);
set(d, 'Month', mode, get(d, 'Month', mode) + 1)  
var end = d.getTime(); var carry = 0, v = NaN, prev;
d.setTime(v + carry * timeUnits.hour + (end - start) * tickSize); do {
carry = get(d, 'Hours', mode) prev = v;
set(d, 'Hours', mode, 0); v = d.getTime();
} ticks.push({ v: v / scale, label: formatter(v / scale, axis) });
else if (tickUnit == "month") {
set(d, 'Month', mode, get(d, 'Month', mode) + tickSize); if (tickSize < 1) {
} /* a bit complicated - we'll divide the month up but we need to take care of fractions
else if (tickUnit == "year") { so we don't end up in the middle of a day */
set(d, 'FullYear', mode, get(d, 'FullYear', mode) + tickSize); set(d, 'Date', mode, 1);
} var start = d.getTime();
else set(d, 'Month', mode, get(d, 'Month', mode) + 1)
d.setTime(v + step); var end = d.getTime();
  d.setTime(v + carry * timeUnits.hour + (end - start) * tickSize);
} while (v < max && v != prev); carry = get(d, 'Hours', mode)
  set(d, 'Hours', mode, 0);
return ticks; }
}, else
timeUnits: { set(d, 'Month', mode, get(d, 'Month', mode) + tickSize);
millisecond: 1, }
second: 1000, else if (tickUnit == "year") {
minute: 1000 * 60, set(d, 'FullYear', mode, get(d, 'FullYear', mode) + tickSize);
hour: 1000 * 60 * 60, }
day: 1000 * 60 * 60 * 24, else
month: 1000 * 60 * 60 * 24 * 30, d.setTime(v + step);
year: 1000 * 60 * 60 * 24 * 365.2425  
}, } while (v < max && v != prev);
// the allowed tick sizes, after 1 year we use an integer algorithm  
spec: [ return ticks;
[1, "millisecond"], [20, "millisecond"], [50, "millisecond"], [100, "millisecond"], [200, "millisecond"], [500, "millisecond"], },
[1, "second"], [2, "second"], [5, "second"], [10, "second"], [30, "second"], timeUnits: {
[1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], [30, "minute"], millisecond: 1,
[1, "hour"], [2, "hour"], [4, "hour"], [8, "hour"], [12, "hour"], second: 1000,
[1, "day"], [2, "day"], [3, "day"], minute: 1000 * 60,
[0.25, "month"], [0.5, "month"], [1, "month"], [2, "month"], [3, "month"], [6, "month"], hour: 1000 * 60 * 60,
[1, "year"] day: 1000 * 60 * 60 * 24,
], month: 1000 * 60 * 60 * 24 * 30,
monthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] year: 1000 * 60 * 60 * 24 * 365.2425
  },
  // the allowed tick sizes, after 1 year we use an integer algorithm
  spec: [
  [1, "millisecond"],
  [20, "millisecond"],
  [50, "millisecond"],
  [100, "millisecond"],
  [200, "millisecond"],
  [500, "millisecond"],
  [1, "second"],
  [2, "second"],
  [5, "second"],
  [10, "second"],
  [30, "second"],
  [1, "minute"],
  [2, "minute"],
  [5, "minute"],
  [10, "minute"],
  [30, "minute"],
  [1, "hour"],
  [2, "hour"],
  [4, "hour"],
  [8, "hour"],
  [12, "hour"],
  [1, "day"],
  [2, "day"],
  [3, "day"],
  [0.25, "month"],
  [0.5, "month"],
  [1, "month"],
  [2, "month"],
  [3, "month"],
  [6, "month"],
  [1, "year"]
  ],
  monthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
}; };
   
(function () { (function () {
   
var _ = Flotr._; var _ = Flotr._;
   
Flotr.DOM = { Flotr.DOM = {
addClass: function(element, name){ addClass: function (element, name) {
var classList = (element.className ? element.className : ''); var classList = (element.className ? element.className : '');
if (_.include(classList.split(/\s+/g), name)) return; if (_.include(classList.split(/\s+/g), name)) return;
element.className = (classList ? classList + ' ' : '') + name; element.className = (classList ? classList + ' ' : '') + name;
}, },
/** /**
* Create an element. * Create an element.
*/ */
create: function(tag){ create: function (tag) {
return document.createElement(tag); return document.createElement(tag);
}, },
node: function(html) { node: function (html) {
var div = Flotr.DOM.create('div'), n; var div = Flotr.DOM.create('div'), n;
div.innerHTML = html; div.innerHTML = html;
n = div.children[0]; n = div.children[0];
div.innerHTML = ''; div.innerHTML = '';
return n; return n;
}, },
/** /**
* Remove all children. * Remove all children.
*/ */
empty: function(element){ empty: function (element) {
element.innerHTML = ''; element.innerHTML = '';
/* /*
if (!element) return; if (!element) return;
_.each(element.childNodes, function (e) { _.each(element.childNodes, function (e) {
Flotr.DOM.empty(e); Flotr.DOM.empty(e);
element.removeChild(e); element.removeChild(e);
}); });
*/ */
}, },
hide: function(element){ hide: function (element) {
Flotr.DOM.setStyles(element, {display:'none'}); Flotr.DOM.setStyles(element, {display: 'none'});
}, },
/** /**
* Insert a child. * Insert a child.
* @param {Element} element * @param {Element} element
* @param {Element|String} Element or string to be appended. * @param {Element|String} Element or string to be appended.
*/ */
insert: function(element, child){ insert: function (element, child) {
if(_.isString(child)) if (_.isString(child))
element.innerHTML += child; element.innerHTML += child;
else if (_.isElement(child)) else if (_.isElement(child))
element.appendChild(child); element.appendChild(child);
}, },
// @TODO find xbrowser implementation // @TODO find xbrowser implementation
opacity: function(element, opacity) { opacity: function (element, opacity) {
element.style.opacity = opacity; element.style.opacity = opacity;
}, },
position: function(element, p){ position: function (element, p) {
if (!element.offsetParent) if (!element.offsetParent)
return {left: (element.offsetLeft || 0), top: (element.offsetTop || 0)}; return {left: (element.offsetLeft || 0), top: (element.offsetTop || 0)};
   
p = this.position(element.offsetParent); p = this.position(element.offsetParent);
p.left += element.offsetLeft; p.left += element.offsetLeft;
p.top += element.offsetTop; p.top += element.offsetTop;
return p; return p;
}, },
removeClass: function(element, name) { removeClass: function (element, name) {
var classList = (element.className ? element.className : ''); var classList = (element.className ? element.className : '');
element.className = _.filter(classList.split(/\s+/g), function (c) { element.className = _.filter(classList.split(/\s+/g),function (c) {
if (c != name) return true; } if (c != name) return true;
).join(' '); }
}, ).join(' ');
setStyles: function(element, o) { },
_.each(o, function (value, key) { setStyles: function (element, o) {
element.style[key] = value; _.each(o, function (value, key) {
}); element.style[key] = value;
}, });
show: function(element){ },
Flotr.DOM.setStyles(element, {display:''}); show: function (element) {
}, Flotr.DOM.setStyles(element, {display: ''});
/** },
* Return element size. /**
*/ * Return element size.
size: function(element){ */
return { size: function (element) {
height : element.offsetHeight, return {
width : element.offsetWidth }; height: element.offsetHeight,
} width: element.offsetWidth };
}; }
  };
   
})(); })();
   
/** /**
* Flotr Event Adapter * Flotr Event Adapter
*/ */
(function () { (function () {
var var
F = Flotr, F = Flotr,
bean = F.bean; bean = F.bean;
F.EventAdapter = { F.EventAdapter = {
observe: function(object, name, callback) { observe: function (object, name, callback) {
bean.add(object, name, callback); bean.add(object, name, callback);
return this; return this;
}, },
fire: function(object, name, args) { fire: function (object, name, args) {
bean.fire(object, name, args); bean.fire(object, name, args);
if (typeof(Prototype) != 'undefined') if (typeof(Prototype) != 'undefined')
Event.fire(object, name, args); Event.fire(object, name, args);
// @TODO Someone who uses mootools, add mootools adapter for existing applciations. // @TODO Someone who uses mootools, add mootools adapter for existing applciations.
return this; return this;
}, },
stopObserving: function(object, name, callback) { stopObserving: function (object, name, callback) {
bean.remove(object, name, callback); bean.remove(object, name, callback);
return this; return this;
}, },
eventPointer: function(e) { eventPointer: function (e) {
if (!F._.isUndefined(e.touches) && e.touches.length > 0) { if (!F._.isUndefined(e.touches) && e.touches.length > 0) {
return { return {
x : e.touches[0].pageX, x: e.touches[0].pageX,
y : e.touches[0].pageY y: e.touches[0].pageY
}; };
} else if (!F._.isUndefined(e.changedTouches) && e.changedTouches.length > 0) { } else if (!F._.isUndefined(e.changedTouches) && e.changedTouches.length > 0) {
return { return {
x : e.changedTouches[0].pageX, x: e.changedTouches[0].pageX,
y : e.changedTouches[0].pageY y: e.changedTouches[0].pageY
}; };
} else if (e.pageX || e.pageY) { } else if (e.pageX || e.pageY) {
return { return {
x : e.pageX, x: e.pageX,
y : e.pageY y: e.pageY
}; };
} else if (e.clientX || e.clientY) { } else if (e.clientX || e.clientY) {
var var
d = document, d = document,
b = d.body, b = d.body,
de = d.documentElement; de = d.documentElement;
return { return {
x: e.clientX + b.scrollLeft + de.scrollLeft, x: e.clientX + b.scrollLeft + de.scrollLeft,
y: e.clientY + b.scrollTop + de.scrollTop y: e.clientY + b.scrollTop + de.scrollTop
}; };
} }
} }
}; };
})(); })();
   
/** /**
* Text Utilities * Text Utilities
*/ */
(function () { (function () {
   
var  
F = Flotr,  
D = F.DOM,  
_ = F._,  
   
Text = function (o) {  
this.o = o;  
};  
   
Text.prototype = {  
   
dimensions : function (text, canvasStyle, htmlStyle, className) {  
   
if (!text) return { width : 0, height : 0 };  
   
return (this.o.html) ?  
this.html(text, this.o.element, htmlStyle, className) :  
this.canvas(text, canvasStyle);  
},  
   
canvas : function (text, style) {  
   
if (!this.o.textEnabled) return;  
style = style || {};  
   
var var
metrics = this.measureText(text, style), F = Flotr,
width = metrics.width, D = F.DOM,
height = style.size || F.defaultOptions.fontSize, _ = F._,
angle = style.angle || 0,  
cosAngle = Math.cos(angle), Text = function (o) {
sinAngle = Math.sin(angle), this.o = o;
widthPadding = 2, };
heightPadding = 6,  
bounds; Text.prototype = {
   
bounds = { dimensions: function (text, canvasStyle, htmlStyle, className) {
width: Math.abs(cosAngle * width) + Math.abs(sinAngle * height) + widthPadding,  
height: Math.abs(sinAngle * width) + Math.abs(cosAngle * height) + heightPadding if (!text) return { width: 0, height: 0 };
};  
  return (this.o.html) ?
return bounds; this.html(text, this.o.element, htmlStyle, className) :
}, this.canvas(text, canvasStyle);
  },
html : function (text, element, style, className) {  
  canvas: function (text, style) {
var div = D.create('div');  
  if (!this.o.textEnabled) return;
D.setStyles(div, { 'position' : 'absolute', 'top' : '-10000px' }); style = style || {};
D.insert(div, '<div style="'+style+'" class="'+className+' flotr-dummy-div">' + text + '</div>');  
D.insert(this.o.element, div); var
  metrics = this.measureText(text, style),
return D.size(div); width = metrics.width,
}, height = style.size || F.defaultOptions.fontSize,
  angle = style.angle || 0,
measureText : function (text, style) { cosAngle = Math.cos(angle),
  sinAngle = Math.sin(angle),
var widthPadding = 2,
context = this.o.ctx, heightPadding = 6,
metrics; bounds;
   
if (!context.fillText || (F.isIphone && context.measure)) { bounds = {
return { width : context.measure(text, style)}; width: Math.abs(cosAngle * width) + Math.abs(sinAngle * height) + widthPadding,
} height: Math.abs(sinAngle * width) + Math.abs(cosAngle * height) + heightPadding
  };
style = _.extend({  
size: F.defaultOptions.fontSize, return bounds;
weight: 1, },
angle: 0  
}, style); html: function (text, element, style, className) {
   
context.save(); var div = D.create('div');
context.font = (style.weight > 1 ? "bold " : "") + (style.size*1.3) + "px sans-serif";  
metrics = context.measureText(text); D.setStyles(div, { 'position': 'absolute', 'top': '-10000px' });
context.restore(); D.insert(div, '<div style="' + style + '" class="' + className + ' flotr-dummy-div">' + text + '</div>');
  D.insert(this.o.element, div);
return metrics;  
} return D.size(div);
}; },
   
Flotr.Text = Text; measureText: function (text, style) {
   
  var
  context = this.o.ctx,
  metrics;
   
  if (!context.fillText || (F.isIphone && context.measure)) {
  return { width: context.measure(text, style)};
  }
   
  style = _.extend({
  size: F.defaultOptions.fontSize,
  weight: 1,
  angle: 0
  }, style);
   
  context.save();
  context.font = (style.weight > 1 ? "bold " : "") + (style.size * 1.3) + "px sans-serif";
  metrics = context.measureText(text);
  context.restore();
   
  return metrics;
  }
  };
   
  Flotr.Text = Text;
   
})(); })();
   
/** /**
* Flotr Graph class that plots a graph on creation. * Flotr Graph class that plots a graph on creation.
*/ */
(function () { (function () {
   
var var
D = Flotr.DOM, D = Flotr.DOM,
E = Flotr.EventAdapter, E = Flotr.EventAdapter,
_ = Flotr._, _ = Flotr._,
flotr = Flotr; flotr = Flotr;
/** /**
* Flotr Graph constructor. * Flotr Graph constructor.
* @param {Element} el - element to insert the graph into * @param {Element} el - element to insert the graph into
* @param {Object} data - an array or object of dataseries * @param {Object} data - an array or object of dataseries
* @param {Object} options - an object containing options * @param {Object} options - an object containing options
*/ */
Graph = function(el, data, options){ Graph = function (el, data, options) {
// Let's see if we can get away with out this [JS] // Let's see if we can get away with out this [JS]
// try { // try {
this._setEl(el); this._setEl(el);
this._initMembers(); this._initMembers();
this._initPlugins(); this._initPlugins();
   
E.fire(this.el, 'flotr:beforeinit', [this]); E.fire(this.el, 'flotr:beforeinit', [this]);
   
this.data = data; this.data = data;
this.series = flotr.Series.getSeries(data); this.series = flotr.Series.getSeries(data);
this._initOptions(options); this._initOptions(options);
this._initGraphTypes(); this._initGraphTypes();
this._initCanvas(); this._initCanvas();
this._text = new flotr.Text({ this._text = new flotr.Text({
element : this.el, element: this.el,
ctx : this.ctx, ctx: this.ctx,
html : this.options.HtmlText, html: this.options.HtmlText,
textEnabled : this.textEnabled textEnabled: this.textEnabled
}); });
E.fire(this.el, 'flotr:afterconstruct', [this]); E.fire(this.el, 'flotr:afterconstruct', [this]);
this._initEvents(); this._initEvents();
   
this.findDataRanges(); this.findDataRanges();
this.calculateSpacing(); this.calculateSpacing();
   
this.draw(_.bind(function() { this.draw(_.bind(function () {
E.fire(this.el, 'flotr:afterinit', [this]); E.fire(this.el, 'flotr:afterinit', [this]);
}, this)); }, this));
/* /*
try { try {
} catch (e) { } catch (e) {
try { try {
console.error(e); console.error(e);
} catch (e2) {} } catch (e2) {}
}*/ }*/
}; };
   
function observe (object, name, callback) { function observe(object, name, callback) {
E.observe.apply(this, arguments); E.observe.apply(this, arguments);
this._handles.push(arguments); this._handles.push(arguments);
return this; return this;
}  
   
Graph.prototype = {  
   
destroy: function () {  
E.fire(this.el, 'flotr:destroy');  
_.each(this._handles, function (handle) {  
E.stopObserving.apply(this, handle);  
});  
this._handles = [];  
this.el.graph = null;  
},  
   
observe : observe,  
   
/**  
* @deprecated  
*/  
_observe : observe,  
   
processColor: function(color, options){  
var o = { x1: 0, y1: 0, x2: this.plotWidth, y2: this.plotHeight, opacity: 1, ctx: this.ctx };  
_.extend(o, options);  
return flotr.Color.processColor(color, o);  
},  
/**  
* Function determines the min and max values for the xaxis and yaxis.  
*  
* TODO logarithmic range validation (consideration of 0)  
*/  
findDataRanges: function(){  
var a = this.axes,  
xaxis, yaxis, range;  
   
_.each(this.series, function (series) {  
range = series.getRange();  
if (range) {  
xaxis = series.xaxis;  
yaxis = series.yaxis;  
xaxis.datamin = Math.min(range.xmin, xaxis.datamin);  
xaxis.datamax = Math.max(range.xmax, xaxis.datamax);  
yaxis.datamin = Math.min(range.ymin, yaxis.datamin);  
yaxis.datamax = Math.max(range.ymax, yaxis.datamax);  
xaxis.used = (xaxis.used || range.xused);  
yaxis.used = (yaxis.used || range.yused);  
}  
}, this);  
   
// Check for empty data, no data case (none used)  
if (!a.x.used && !a.x2.used) a.x.used = true;  
if (!a.y.used && !a.y2.used) a.y.used = true;  
   
_.each(a, function (axis) {  
axis.calculateRange();  
});  
   
var  
types = _.keys(flotr.graphTypes),  
drawn = false;  
   
_.each(this.series, function (series) {  
if (series.hide) return;  
_.each(types, function (type) {  
if (series[type] && series[type].show) {  
this.extendRange(type, series);  
drawn = true;  
}  
}, this);  
if (!drawn) {  
this.extendRange(this.options.defaultType, series);  
}  
}, this);  
},  
   
extendRange : function (type, series) {  
if (this[type].extendRange) this[type].extendRange(series, series.data, series[type], this[type]);  
if (this[type].extendYRange) this[type].extendYRange(series.yaxis, series.data, series[type], this[type]);  
if (this[type].extendXRange) this[type].extendXRange(series.xaxis, series.data, series[type], this[type]);  
},  
   
/**  
* Calculates axis label sizes.  
*/  
calculateSpacing: function(){  
   
var a = this.axes,  
options = this.options,  
series = this.series,  
margin = options.grid.labelMargin,  
T = this._text,  
x = a.x,  
x2 = a.x2,  
y = a.y,  
y2 = a.y2,  
maxOutset = options.grid.outlineWidth,  
i, j, l, dim;  
   
// TODO post refactor, fix this  
_.each(a, function (axis) {  
axis.calculateTicks();  
axis.calculateTextDimensions(T, options);  
});  
   
// Title height  
dim = T.dimensions(  
options.title,  
{size: options.fontSize*1.5},  
'font-size:1em;font-weight:bold;',  
'flotr-title'  
);  
this.titleHeight = dim.height;  
   
// Subtitle height  
dim = T.dimensions(  
options.subtitle,  
{size: options.fontSize},  
'font-size:smaller;',  
'flotr-subtitle'  
);  
this.subtitleHeight = dim.height;  
   
for(j = 0; j < options.length; ++j){  
if (series[j].points.show){  
maxOutset = Math.max(maxOutset, series[j].points.radius + series[j].points.lineWidth/2);  
}  
} }
   
var p = this.plotOffset; Graph.prototype = {
if (x.options.margin === false) {  
p.bottom = 0; destroy: function () {
p.top = 0; E.fire(this.el, 'flotr:destroy');
} else { _.each(this._handles, function (handle) {
p.bottom += (options.grid.circular ? 0 : (x.used && x.options.showLabels ? (x.maxLabel.height + margin) : 0)) + E.stopObserving.apply(this, handle);
(x.used && x.options.title ? (x.titleSize.height + margin) : 0) + maxOutset; });
  this._handles = [];
p.top += (options.grid.circular ? 0 : (x2.used && x2.options.showLabels ? (x2.maxLabel.height + margin) : 0)) + this.el.graph = null;
(x2.used && x2.options.title ? (x2.titleSize.height + margin) : 0) + this.subtitleHeight + this.titleHeight + maxOutset; },
}  
if (y.options.margin === false) { observe: observe,
p.left = 0;  
p.right = 0; /**
} else { * @deprecated
p.left += (options.grid.circular ? 0 : (y.used && y.options.showLabels ? (y.maxLabel.width + margin) : 0)) + */
(y.used && y.options.title ? (y.titleSize.width + margin) : 0) + maxOutset; _observe: observe,
   
p.right += (options.grid.circular ? 0 : (y2.used && y2.options.showLabels ? (y2.maxLabel.width + margin) : 0)) + processColor: function (color, options) {
(y2.used && y2.options.title ? (y2.titleSize.width + margin) : 0) + maxOutset; var o = { x1: 0, y1: 0, x2: this.plotWidth, y2: this.plotHeight, opacity: 1, ctx: this.ctx };
} _.extend(o, options);
  return flotr.Color.processColor(color, o);
p.top = Math.floor(p.top); // In order the outline not to be blured },
  /**
this.plotWidth = this.canvasWidth - p.left - p.right; * Function determines the min and max values for the xaxis and yaxis.
this.plotHeight = this.canvasHeight - p.bottom - p.top; *
  * TODO logarithmic range validation (consideration of 0)
// TODO post refactor, fix this */
x.length = x2.length = this.plotWidth; findDataRanges: function () {
y.length = y2.length = this.plotHeight; var a = this.axes,
y.offset = y2.offset = this.plotHeight; xaxis, yaxis, range;
x.setScale();  
x2.setScale(); _.each(this.series, function (series) {
y.setScale(); range = series.getRange();
y2.setScale(); if (range) {
}, xaxis = series.xaxis;
/** yaxis = series.yaxis;
* Draws grid, labels, series and outline. xaxis.datamin = Math.min(range.xmin, xaxis.datamin);
*/ xaxis.datamax = Math.max(range.xmax, xaxis.datamax);
draw: function(after) { yaxis.datamin = Math.min(range.ymin, yaxis.datamin);
  yaxis.datamax = Math.max(range.ymax, yaxis.datamax);
var xaxis.used = (xaxis.used || range.xused);
context = this.ctx, yaxis.used = (yaxis.used || range.yused);
i; }
  }, this);
E.fire(this.el, 'flotr:beforedraw', [this.series, this]);  
  // Check for empty data, no data case (none used)
if (this.series.length) { if (!a.x.used && !a.x2.used) a.x.used = true;
  if (!a.y.used && !a.y2.used) a.y.used = true;
context.save();  
context.translate(this.plotOffset.left, this.plotOffset.top); _.each(a, function (axis) {
  axis.calculateRange();
for (i = 0; i < this.series.length; i++) { });
if (!this.series[i].hide) this.drawSeries(this.series[i]);  
} var
  types = _.keys(flotr.graphTypes),
context.restore(); drawn = false;
this.clip();  
} _.each(this.series, function (series) {
  if (series.hide) return;
E.fire(this.el, 'flotr:afterdraw', [this.series, this]); _.each(types, function (type) {
if (after) after(); if (series[type] && series[type].show) {
}, this.extendRange(type, series);
/** drawn = true;
* Actually draws the graph. }
* @param {Object} series - series to draw }, this);
*/ if (!drawn) {
drawSeries: function(series){ this.extendRange(this.options.defaultType, series);
  }
function drawChart (series, typeKey) { }, this);
var options = this.getOptions(series, typeKey); },
this[typeKey].draw(options);  
} extendRange: function (type, series) {
  if (this[type].extendRange) this[type].extendRange(series, series.data, series[type], this[type]);
var drawn = false; if (this[type].extendYRange) this[type].extendYRange(series.yaxis, series.data, series[type], this[type]);
series = series || this.series; if (this[type].extendXRange) this[type].extendXRange(series.xaxis, series.data, series[type], this[type]);
  },
_.each(flotr.graphTypes, function (type, typeKey) {  
if (series[typeKey] && series[typeKey].show && this[typeKey]) { /**
drawn = true; * Calculates axis label sizes.
drawChart.call(this, series, typeKey); */
} calculateSpacing: function () {
}, this);  
  var a = this.axes,
if (!drawn) drawChart.call(this, series, this.options.defaultType); options = this.options,
}, series = this.series,
  margin = options.grid.labelMargin,
getOptions : function (series, typeKey) { T = this._text,
var x = a.x,
type = series[typeKey], x2 = a.x2,
graphType = this[typeKey], y = a.y,
options = { y2 = a.y2,
context : this.ctx, maxOutset = options.grid.outlineWidth,
width : this.plotWidth, i, j, l, dim;
height : this.plotHeight,  
fontSize : this.options.fontSize, // TODO post refactor, fix this
fontColor : this.options.fontColor, _.each(a, function (axis) {
textEnabled : this.textEnabled, axis.calculateTicks();
htmlText : this.options.HtmlText, axis.calculateTextDimensions(T, options);
text : this._text, // TODO Is this necessary? });
element : this.el,  
data : series.data, // Title height
color : series.color, dim = T.dimensions(
shadowSize : series.shadowSize, options.title,
xScale : _.bind(series.xaxis.d2p, series.xaxis), {size: options.fontSize * 1.5},
yScale : _.bind(series.yaxis.d2p, series.yaxis) 'font-size:1em;font-weight:bold;',
}; 'flotr-title'
  );
options = flotr.merge(type, options); this.titleHeight = dim.height;
   
// Fill // Subtitle height
options.fillStyle = this.processColor( dim = T.dimensions(
type.fillColor || series.color, options.subtitle,
{opacity: type.fillOpacity} {size: options.fontSize},
); 'font-size:smaller;',
  'flotr-subtitle'
return options; );
}, this.subtitleHeight = dim.height;
/**  
* Calculates the coordinates from a mouse event object. for (j = 0; j < options.length; ++j) {
* @param {Event} event - Mouse Event object. if (series[j].points.show) {
* @return {Object} Object with coordinates of the mouse. maxOutset = Math.max(maxOutset, series[j].points.radius + series[j].points.lineWidth / 2);
*/ }
getEventPosition: function (e){ }
   
var var p = this.plotOffset;
d = document, if (x.options.margin === false) {
b = d.body, p.bottom = 0;
de = d.documentElement, p.top = 0;
axes = this.axes, } else {
plotOffset = this.plotOffset, p.bottom += (options.grid.circular ? 0 : (x.used && x.options.showLabels ? (x.maxLabel.height + margin) : 0)) +
lastMousePos = this.lastMousePos, (x.used && x.options.title ? (x.titleSize.height + margin) : 0) + maxOutset;
pointer = E.eventPointer(e),  
dx = pointer.x - lastMousePos.pageX, p.top += (options.grid.circular ? 0 : (x2.used && x2.options.showLabels ? (x2.maxLabel.height + margin) : 0)) +
dy = pointer.y - lastMousePos.pageY, (x2.used && x2.options.title ? (x2.titleSize.height + margin) : 0) + this.subtitleHeight + this.titleHeight + maxOutset;
r, rx, ry; }
  if (y.options.margin === false) {
if ('ontouchstart' in this.el) { p.left = 0;
r = D.position(this.overlay); p.right = 0;
rx = pointer.x - r.left - plotOffset.left; } else {
ry = pointer.y - r.top - plotOffset.top; p.left += (options.grid.circular ? 0 : (y.used && y.options.showLabels ? (y.maxLabel.width + margin) : 0)) +
} else { (y.used && y.options.title ? (y.titleSize.width + margin) : 0) + maxOutset;
r = this.overlay.getBoundingClientRect();  
rx = e.clientX - r.left - plotOffset.left - b.scrollLeft - de.scrollLeft; p.right += (options.grid.circular ? 0 : (y2.used && y2.options.showLabels ? (y2.maxLabel.width + margin) : 0)) +
ry = e.clientY - r.top - plotOffset.top - b.scrollTop - de.scrollTop; (y2.used && y2.options.title ? (y2.titleSize.width + margin) : 0) + maxOutset;
} }
   
return { p.top = Math.floor(p.top); // In order the outline not to be blured
x: axes.x.p2d(rx),  
x2: axes.x2.p2d(rx), this.plotWidth = this.canvasWidth - p.left - p.right;
y: axes.y.p2d(ry), this.plotHeight = this.canvasHeight - p.bottom - p.top;
y2: axes.y2.p2d(ry),  
relX: rx, // TODO post refactor, fix this
relY: ry, x.length = x2.length = this.plotWidth;
dX: dx, y.length = y2.length = this.plotHeight;
dY: dy, y.offset = y2.offset = this.plotHeight;
absX: pointer.x, x.setScale();
absY: pointer.y, x2.setScale();
pageX: pointer.x, y.setScale();
pageY: pointer.y y2.setScale();
}; },
}, /**
/** * Draws grid, labels, series and outline.
* Observes the 'click' event and fires the 'flotr:click' event. */
* @param {Event} event - 'click' Event object. draw: function (after) {
*/  
clickHandler: function(event){ var
if(this.ignoreClick){ context = this.ctx,
this.ignoreClick = false; i;
return this.ignoreClick;  
} E.fire(this.el, 'flotr:beforedraw', [this.series, this]);
E.fire(this.el, 'flotr:click', [this.getEventPosition(event), this]);  
}, if (this.series.length) {
/**  
* Observes mouse movement over the graph area. Fires the 'flotr:mousemove' event. context.save();
* @param {Event} event - 'mousemove' Event object. context.translate(this.plotOffset.left, this.plotOffset.top);
*/  
mouseMoveHandler: function(event){ for (i = 0; i < this.series.length; i++) {
if (this.mouseDownMoveHandler) return; if (!this.series[i].hide) this.drawSeries(this.series[i]);
var pos = this.getEventPosition(event); }
E.fire(this.el, 'flotr:mousemove', [event, pos, this]);  
this.lastMousePos = pos; context.restore();
}, this.clip();
/** }
* Observes the 'mousedown' event.  
* @param {Event} event - 'mousedown' Event object. E.fire(this.el, 'flotr:afterdraw', [this.series, this]);
*/ if (after) after();
mouseDownHandler: function (event){ },
  /**
/* * Actually draws the graph.
// @TODO Context menu? * @param {Object} series - series to draw
if(event.isRightClick()) { */
event.stop(); drawSeries: function (series) {
   
var overlay = this.overlay; function drawChart(series, typeKey) {
overlay.hide(); var options = this.getOptions(series, typeKey);
  this[typeKey].draw(options);
function cancelContextMenu () { }
overlay.show();  
E.stopObserving(document, 'mousemove', cancelContextMenu); var drawn = false;
} series = series || this.series;
E.observe(document, 'mousemove', cancelContextMenu);  
return; _.each(flotr.graphTypes, function (type, typeKey) {
} if (series[typeKey] && series[typeKey].show && this[typeKey]) {
*/ drawn = true;
  drawChart.call(this, series, typeKey);
if (this.mouseUpHandler) return; }
this.mouseUpHandler = _.bind(function (e) { }, this);
E.stopObserving(document, 'mouseup', this.mouseUpHandler);  
E.stopObserving(document, 'mousemove', this.mouseDownMoveHandler); if (!drawn) drawChart.call(this, series, this.options.defaultType);
this.mouseDownMoveHandler = null; },
this.mouseUpHandler = null;  
// @TODO why? getOptions: function (series, typeKey) {
//e.stop(); var
E.fire(this.el, 'flotr:mouseup', [e, this]); type = series[typeKey],
}, this); graphType = this[typeKey],
this.mouseDownMoveHandler = _.bind(function (e) { options = {
var pos = this.getEventPosition(e); context: this.ctx,
E.fire(this.el, 'flotr:mousemove', [event, pos, this]); width: this.plotWidth,
this.lastMousePos = pos; height: this.plotHeight,
}, this); fontSize: this.options.fontSize,
E.observe(document, 'mouseup', this.mouseUpHandler); fontColor: this.options.fontColor,
E.observe(document, 'mousemove', this.mouseDownMoveHandler); textEnabled: this.textEnabled,
E.fire(this.el, 'flotr:mousedown', [event, this]); htmlText: this.options.HtmlText,
this.ignoreClick = false; text: this._text, // TODO Is this necessary?
}, element: this.el,
drawTooltip: function(content, x, y, options) { data: series.data,
var mt = this.getMouseTrack(), color: series.color,
style = 'opacity:0.7;background-color:#000;color:#fff;display:none;position:absolute;padding:2px 8px;-moz-border-radius:4px;border-radius:4px;white-space:nowrap;', shadowSize: series.shadowSize,
p = options.position, xScale: _.bind(series.xaxis.d2p, series.xaxis),
m = options.margin, yScale: _.bind(series.yaxis.d2p, series.yaxis)
plotOffset = this.plotOffset; };
   
if(x !== null && y !== null){ options = flotr.merge(type, options);
if (!options.relative) { // absolute to the canvas  
if(p.charAt(0) == 'n') style += 'top:' + (m + plotOffset.top) + 'px;bottom:auto;'; // Fill
else if(p.charAt(0) == 's') style += 'bottom:' + (m + plotOffset.bottom) + 'px;top:auto;'; options.fillStyle = this.processColor(
if(p.charAt(1) == 'e') style += 'right:' + (m + plotOffset.right) + 'px;left:auto;'; type.fillColor || series.color,
else if(p.charAt(1) == 'w') style += 'left:' + (m + plotOffset.left) + 'px;right:auto;'; {opacity: type.fillOpacity}
} );
else { // relative to the mouse  
if(p.charAt(0) == 'n') style += 'bottom:' + (m - plotOffset.top - y + this.canvasHeight) + 'px;top:auto;'; return options;
else if(p.charAt(0) == 's') style += 'top:' + (m + plotOffset.top + y) + 'px;bottom:auto;'; },
if(p.charAt(1) == 'e') style += 'left:' + (m + plotOffset.left + x) + 'px;right:auto;'; /**
else if(p.charAt(1) == 'w') style += 'right:' + (m - plotOffset.left - x + this.canvasWidth) + 'px;left:auto;'; * Calculates the coordinates from a mouse event object.
} * @param {Event} event - Mouse Event object.
  * @return {Object} Object with coordinates of the mouse.
mt.style.cssText = style; */
D.empty(mt); getEventPosition: function (e) {
D.insert(mt, content);  
D.show(mt); var
} d = document,
else { b = d.body,
D.hide(mt); de = d.documentElement,
} axes = this.axes,
}, plotOffset = this.plotOffset,
  lastMousePos = this.lastMousePos,
clip: function (ctx) { pointer = E.eventPointer(e),
  dx = pointer.x - lastMousePos.pageX,
var dy = pointer.y - lastMousePos.pageY,
o = this.plotOffset, r, rx, ry;
w = this.canvasWidth,  
h = this.canvasHeight; if ('ontouchstart' in this.el) {
  r = D.position(this.overlay);
ctx = ctx || this.ctx; rx = pointer.x - r.left - plotOffset.left;
  ry = pointer.y - r.top - plotOffset.top;
if (flotr.isIE && flotr.isIE < 9) { } else {
// Clipping for excanvas :-( r = this.overlay.getBoundingClientRect();
ctx.save(); rx = e.clientX - r.left - plotOffset.left - b.scrollLeft - de.scrollLeft;
ctx.fillStyle = this.processColor(this.options.ieBackgroundColor); ry = e.clientY - r.top - plotOffset.top - b.scrollTop - de.scrollTop;
ctx.fillRect(0, 0, w, o.top); }
ctx.fillRect(0, 0, o.left, h);  
ctx.fillRect(0, h - o.bottom, w, o.bottom); return {
ctx.fillRect(w - o.right, 0, o.right,h); x: axes.x.p2d(rx),
ctx.restore(); x2: axes.x2.p2d(rx),
} else { y: axes.y.p2d(ry),
ctx.clearRect(0, 0, w, o.top); y2: axes.y2.p2d(ry),
ctx.clearRect(0, 0, o.left, h); relX: rx,
ctx.clearRect(0, h - o.bottom, w, o.bottom); relY: ry,
ctx.clearRect(w - o.right, 0, o.right,h); dX: dx,
} dY: dy,
}, absX: pointer.x,
  absY: pointer.y,
_initMembers: function() { pageX: pointer.x,
this._handles = []; pageY: pointer.y
this.lastMousePos = {pageX: null, pageY: null }; };
this.plotOffset = {left: 0, right: 0, top: 0, bottom: 0}; },
this.ignoreClick = true; /**
this.prevHit = null; * Observes the 'click' event and fires the 'flotr:click' event.
}, * @param {Event} event - 'click' Event object.
  */
_initGraphTypes: function() { clickHandler: function (event) {
_.each(flotr.graphTypes, function(handler, graphType){ if (this.ignoreClick) {
this[graphType] = flotr.clone(handler); this.ignoreClick = false;
}, this); return this.ignoreClick;
}, }
  E.fire(this.el, 'flotr:click', [this.getEventPosition(event), this]);
_initEvents: function () { },
  /**
var * Observes mouse movement over the graph area. Fires the 'flotr:mousemove' event.
el = this.el, * @param {Event} event - 'mousemove' Event object.
touchendHandler, movement, touchend; */
  mouseMoveHandler: function (event) {
if ('ontouchstart' in el) { if (this.mouseDownMoveHandler) return;
  var pos = this.getEventPosition(event);
touchendHandler = _.bind(function (e) { E.fire(this.el, 'flotr:mousemove', [event, pos, this]);
touchend = true; this.lastMousePos = pos;
E.stopObserving(document, 'touchend', touchendHandler); },
E.fire(el, 'flotr:mouseup', [event, this]); /**
this.multitouches = null; * Observes the 'mousedown' event.
  * @param {Event} event - 'mousedown' Event object.
if (!movement) { */
this.clickHandler(e); mouseDownHandler: function (event) {
}  
}, this); /*
  // @TODO Context menu?
this.observe(this.overlay, 'touchstart', _.bind(function (e) { if(event.isRightClick()) {
movement = false; event.stop();
touchend = false;  
this.ignoreClick = false; var overlay = this.overlay;
  overlay.hide();
if (e.touches && e.touches.length > 1) {  
this.multitouches = e.touches; function cancelContextMenu () {
} overlay.show();
  E.stopObserving(document, 'mousemove', cancelContextMenu);
E.fire(el, 'flotr:mousedown', [event, this]); }
this.observe(document, 'touchend', touchendHandler); E.observe(document, 'mousemove', cancelContextMenu);
}, this)); return;
  }
this.observe(this.overlay, 'touchmove', _.bind(function (e) { */
   
var pos = this.getEventPosition(e); if (this.mouseUpHandler) return;
  this.mouseUpHandler = _.bind(function (e) {
e.preventDefault(); E.stopObserving(document, 'mouseup', this.mouseUpHandler);
  E.stopObserving(document, 'mousemove', this.mouseDownMoveHandler);
movement = true; this.mouseDownMoveHandler = null;
  this.mouseUpHandler = null;
if (this.multitouches || (e.touches && e.touches.length > 1)) { // @TODO why?
this.multitouches = e.touches; //e.stop();
} else { E.fire(this.el, 'flotr:mouseup', [e, this]);
if (!touchend) { }, this);
E.fire(el, 'flotr:mousemove', [event, pos, this]); this.mouseDownMoveHandler = _.bind(function (e) {
} var pos = this.getEventPosition(e);
} E.fire(this.el, 'flotr:mousemove', [event, pos, this]);
this.lastMousePos = pos; this.lastMousePos = pos;
}, this)); }, this);
  E.observe(document, 'mouseup', this.mouseUpHandler);
} else { E.observe(document, 'mousemove', this.mouseDownMoveHandler);
this. E.fire(this.el, 'flotr:mousedown', [event, this]);
observe(this.overlay, 'mousedown', _.bind(this.mouseDownHandler, this)). this.ignoreClick = false;
observe(el, 'mousemove', _.bind(this.mouseMoveHandler, this)). },
observe(this.overlay, 'click', _.bind(this.clickHandler, this)). drawTooltip: function (content, x, y, options) {
observe(el, 'mouseout', function () { var mt = this.getMouseTrack(),
E.fire(el, 'flotr:mouseout'); style = 'opacity:0.7;background-color:#000;color:#fff;display:none;position:absolute;padding:2px 8px;-moz-border-radius:4px;border-radius:4px;white-space:nowrap;',
}); p = options.position,
} m = options.margin,
}, plotOffset = this.plotOffset;
   
/** if (x !== null && y !== null) {
* Initializes the canvas and it's overlay canvas element. When the browser is IE, this makes use if (!options.relative) { // absolute to the canvas
* of excanvas. The overlay canvas is inserted for displaying interactions. After the canvas elements if (p.charAt(0) == 'n') style += 'top:' + (m + plotOffset.top) + 'px;bottom:auto;';
* are created, the elements are inserted into the container element. else if (p.charAt(0) == 's') style += 'bottom:' + (m + plotOffset.bottom) + 'px;top:auto;';
*/ if (p.charAt(1) == 'e') style += 'right:' + (m + plotOffset.right) + 'px;left:auto;';
_initCanvas: function(){ else if (p.charAt(1) == 'w') style += 'left:' + (m + plotOffset.left) + 'px;right:auto;';
var el = this.el, }
o = this.options, else { // relative to the mouse
children = el.children, if (p.charAt(0) == 'n') style += 'bottom:' + (m - plotOffset.top - y + this.canvasHeight) + 'px;top:auto;';
removedChildren = [], else if (p.charAt(0) == 's') style += 'top:' + (m + plotOffset.top + y) + 'px;bottom:auto;';
child, i, if (p.charAt(1) == 'e') style += 'left:' + (m + plotOffset.left + x) + 'px;right:auto;';
size, style; else if (p.charAt(1) == 'w') style += 'right:' + (m - plotOffset.left - x + this.canvasWidth) + 'px;left:auto;';
  }
// Empty the el  
for (i = children.length; i--;) { mt.style.cssText = style;
child = children[i]; D.empty(mt);
if (!this.canvas && child.className === 'flotr-canvas') { D.insert(mt, content);
this.canvas = child; D.show(mt);
} else if (!this.overlay && child.className === 'flotr-overlay') { }
this.overlay = child; else {
} else { D.hide(mt);
removedChildren.push(child); }
} },
}  
for (i = removedChildren.length; i--;) { clip: function (ctx) {
el.removeChild(removedChildren[i]);  
} var
  o = this.plotOffset,
D.setStyles(el, {position: 'relative'}); // For positioning labels and overlay. w = this.canvasWidth,
size = {}; h = this.canvasHeight;
size.width = el.clientWidth;  
size.height = el.clientHeight; ctx = ctx || this.ctx;
   
if(size.width <= 0 || size.height <= 0 || o.resolution <= 0){ if (flotr.isIE && flotr.isIE < 9) {
throw 'Invalid dimensions for plot, width = ' + size.width + ', height = ' + size.height + ', resolution = ' + o.resolution; // Clipping for excanvas :-(
} ctx.save();
  ctx.fillStyle = this.processColor(this.options.ieBackgroundColor);
// Main canvas for drawing graph types ctx.fillRect(0, 0, w, o.top);
this.canvas = getCanvas(this.canvas, 'canvas'); ctx.fillRect(0, 0, o.left, h);
// Overlay canvas for interactive features ctx.fillRect(0, h - o.bottom, w, o.bottom);
this.overlay = getCanvas(this.overlay, 'overlay'); ctx.fillRect(w - o.right, 0, o.right, h);
this.ctx = getContext(this.canvas); ctx.restore();
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); } else {
this.octx = getContext(this.overlay); ctx.clearRect(0, 0, w, o.top);
this.octx.clearRect(0, 0, this.overlay.width, this.overlay.height); ctx.clearRect(0, 0, o.left, h);
this.canvasHeight = size.height; ctx.clearRect(0, h - o.bottom, w, o.bottom);
this.canvasWidth = size.width; ctx.clearRect(w - o.right, 0, o.right, h);
this.textEnabled = !!this.ctx.drawText || !!this.ctx.fillText; // Enable text functions }
  },
function getCanvas(canvas, name){  
if(!canvas){ _initMembers: function () {
canvas = D.create('canvas'); this._handles = [];
if (typeof FlashCanvas != "undefined" && typeof canvas.getContext === 'function') { this.lastMousePos = {pageX: null, pageY: null };
FlashCanvas.initElement(canvas); this.plotOffset = {left: 0, right: 0, top: 0, bottom: 0};
} this.ignoreClick = true;
canvas.className = 'flotr-'+name; this.prevHit = null;
canvas.style.cssText = 'position:absolute;left:0px;top:0px;'; },
D.insert(el, canvas);  
} _initGraphTypes: function () {
_.each(size, function(size, attribute){ _.each(flotr.graphTypes, function (handler, graphType) {
D.show(canvas); this[graphType] = flotr.clone(handler);
if (name == 'canvas' && canvas.getAttribute(attribute) === size) { }, this);
return; },
}  
canvas.setAttribute(attribute, size * o.resolution); _initEvents: function () {
canvas.style[attribute] = size + 'px';  
}); var
canvas.context_ = null; // Reset the ExCanvas context el = this.el,
return canvas; touchendHandler, movement, touchend;
}  
  if ('ontouchstart' in el) {
function getContext(canvas){  
if(window.G_vmlCanvasManager) window.G_vmlCanvasManager.initElement(canvas); // For ExCanvas touchendHandler = _.bind(function (e) {
var context = canvas.getContext('2d'); touchend = true;
if(!window.G_vmlCanvasManager) context.scale(o.resolution, o.resolution); E.stopObserving(document, 'touchend', touchendHandler);
return context; E.fire(el, 'flotr:mouseup', [event, this]);
} this.multitouches = null;
},  
  if (!movement) {
_initPlugins: function(){ this.clickHandler(e);
// TODO Should be moved to flotr and mixed in. }
_.each(flotr.plugins, function(plugin, name){ }, this);
_.each(plugin.callbacks, function(fn, c){  
this.observe(this.el, c, _.bind(fn, this)); this.observe(this.overlay, 'touchstart', _.bind(function (e) {
}, this); movement = false;
this[name] = flotr.clone(plugin); touchend = false;
_.each(this[name], function(fn, p){ this.ignoreClick = false;
if (_.isFunction(fn))  
this[name][p] = _.bind(fn, this); if (e.touches && e.touches.length > 1) {
}, this); this.multitouches = e.touches;
}, this); }
},  
  E.fire(el, 'flotr:mousedown', [event, this]);
/** this.observe(document, 'touchend', touchendHandler);
* Sets options and initializes some variables and color specific values, used by the constructor. }, this));
* @param {Object} opts - options object  
*/ this.observe(this.overlay, 'touchmove', _.bind(function (e) {
_initOptions: function(opts){  
var options = flotr.clone(flotr.defaultOptions); var pos = this.getEventPosition(e);
options.x2axis = _.extend(_.clone(options.xaxis), options.x2axis);  
options.y2axis = _.extend(_.clone(options.yaxis), options.y2axis); e.preventDefault();
this.options = flotr.merge(opts || {}, options);  
  movement = true;
if (this.options.grid.minorVerticalLines === null &&  
this.options.xaxis.scaling === 'logarithmic') { if (this.multitouches || (e.touches && e.touches.length > 1)) {
this.options.grid.minorVerticalLines = true; this.multitouches = e.touches;
} } else {
if (this.options.grid.minorHorizontalLines === null && if (!touchend) {
this.options.yaxis.scaling === 'logarithmic') { E.fire(el, 'flotr:mousemove', [event, pos, this]);
this.options.grid.minorHorizontalLines = true; }
} }
  this.lastMousePos = pos;
E.fire(this.el, 'flotr:afterinitoptions', [this]); }, this));
   
this.axes = flotr.Axis.getAxes(this.options); } else {
  this.
// Initialize some variables used throughout this function. observe(this.overlay, 'mousedown', _.bind(this.mouseDownHandler, this)).
var assignedColors = [], observe(el, 'mousemove', _.bind(this.mouseMoveHandler, this)).
colors = [], observe(this.overlay, 'click', _.bind(this.clickHandler, this)).
ln = this.series.length, observe(el, 'mouseout', function () {
neededColors = this.series.length, E.fire(el, 'flotr:mouseout');
oc = this.options.colors, });
usedColors = [], }
variation = 0, },
c, i, j, s;  
  /**
// Collect user-defined colors from series. * Initializes the canvas and it's overlay canvas element. When the browser is IE, this makes use
for(i = neededColors - 1; i > -1; --i){ * of excanvas. The overlay canvas is inserted for displaying interactions. After the canvas elements
c = this.series[i].color; * are created, the elements are inserted into the container element.
if(c){ */
--neededColors; _initCanvas: function () {
if(_.isNumber(c)) assignedColors.push(c); var el = this.el,
else usedColors.push(flotr.Color.parse(c)); o = this.options,
} children = el.children,
} removedChildren = [],
  child, i,
// Calculate the number of colors that need to be generated. size, style;
for(i = assignedColors.length - 1; i > -1; --i)  
neededColors = Math.max(neededColors, assignedColors[i] + 1); // Empty the el
  for (i = children.length; i--;) {
// Generate needed number of colors. child = children[i];
for(i = 0; colors.length < neededColors;){ if (!this.canvas && child.className === 'flotr-canvas') {
c = (oc.length == i) ? new flotr.Color(100, 100, 100) : flotr.Color.parse(oc[i]); this.canvas = child;
  } else if (!this.overlay && child.className === 'flotr-overlay') {
// Make sure each serie gets a different color. this.overlay = child;
var sign = variation % 2 == 1 ? -1 : 1, } else {
factor = 1 + sign * Math.ceil(variation / 2) * 0.2; removedChildren.push(child);
c.scale(factor, factor, factor); }
  }
/** for (i = removedChildren.length; i--;) {
* @todo if we're getting too close to something else, we should probably skip this one el.removeChild(removedChildren[i]);
*/ }
colors.push(c);  
  D.setStyles(el, {position: 'relative'}); // For positioning labels and overlay.
if(++i >= oc.length){ size = {};
i = 0; size.width = el.clientWidth;
++variation; size.height = el.clientHeight;
}  
} if (size.width <= 0 || size.height <= 0 || o.resolution <= 0) {
  throw 'Invalid dimensions for plot, width = ' + size.width + ', height = ' + size.height + ', resolution = ' + o.resolution;
// Fill the options with the generated colors. }
for(i = 0, j = 0; i < ln; ++i){  
s = this.series[i]; // Main canvas for drawing graph types
  this.canvas = getCanvas(this.canvas, 'canvas');
// Assign the color. // Overlay canvas for interactive features
if (!s.color){ this.overlay = getCanvas(this.overlay, 'overlay');
s.color = colors[j++].toString(); this.ctx = getContext(this.canvas);
}else if(_.isNumber(s.color)){ this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
s.color = colors[s.color].toString(); this.octx = getContext(this.overlay);
} this.octx.clearRect(0, 0, this.overlay.width, this.overlay.height);
  this.canvasHeight = size.height;
// Every series needs an axis this.canvasWidth = size.width;
if (!s.xaxis) s.xaxis = this.axes.x; this.textEnabled = !!this.ctx.drawText || !!this.ctx.fillText; // Enable text functions
if (s.xaxis == 1) s.xaxis = this.axes.x;  
else if (s.xaxis == 2) s.xaxis = this.axes.x2; function getCanvas(canvas, name) {
  if (!canvas) {
if (!s.yaxis) s.yaxis = this.axes.y; canvas = D.create('canvas');
if (s.yaxis == 1) s.yaxis = this.axes.y; if (typeof FlashCanvas != "undefined" && typeof canvas.getContext === 'function') {
else if (s.yaxis == 2) s.yaxis = this.axes.y2; FlashCanvas.initElement(canvas);
  }
// Apply missing options to the series. canvas.className = 'flotr-' + name;
for (var t in flotr.graphTypes){ canvas.style.cssText = 'position:absolute;left:0px;top:0px;';
s[t] = _.extend(_.clone(this.options[t]), s[t]); D.insert(el, canvas);
} }
s.mouse = _.extend(_.clone(this.options.mouse), s.mouse); _.each(size, function (size, attribute) {
  D.show(canvas);
if (_.isUndefined(s.shadowSize)) s.shadowSize = this.options.shadowSize; if (name == 'canvas' && canvas.getAttribute(attribute) === size) {
} return;
}, }
  canvas.setAttribute(attribute, size * o.resolution);
_setEl: function(el) { canvas.style[attribute] = size + 'px';
if (!el) throw 'The target container doesn\'t exist'; });
else if (el.graph instanceof Graph) el.graph.destroy(); canvas.context_ = null; // Reset the ExCanvas context
else if (!el.clientWidth) throw 'The target container must be visible'; return canvas;
  }
el.graph = this;  
this.el = el; function getContext(canvas) {
} if (window.G_vmlCanvasManager) window.G_vmlCanvasManager.initElement(canvas); // For ExCanvas
}; var context = canvas.getContext('2d');
  if (!window.G_vmlCanvasManager) context.scale(o.resolution, o.resolution);
Flotr.Graph = Graph; return context;
  }
  },
   
  _initPlugins: function () {
  // TODO Should be moved to flotr and mixed in.
  _.each(flotr.plugins, function (plugin, name) {
  _.each(plugin.callbacks, function (fn, c) {
  this.observe(this.el, c, _.bind(fn, this));
  }, this);
  this[name] = flotr.clone(plugin);
  _.each(this[name], function (fn, p) {
  if (_.isFunction(fn))
  this[name][p] = _.bind(fn, this);
  }, this);
  }, this);
  },
   
  /**
  * Sets options and initializes some variables and color specific values, used by the constructor.
  * @param {Object} opts - options object
  */
  _initOptions: function (opts) {
  var options = flotr.clone(flotr.defaultOptions);
  options.x2axis = _.extend(_.clone(options.xaxis), options.x2axis);
  options.y2axis = _.extend(_.clone(options.yaxis), options.y2axis);
  this.options = flotr.merge(opts || {}, options);
   
  if (this.options.grid.minorVerticalLines === null &&
  this.options.xaxis.scaling === 'logarithmic') {
  this.options.grid.minorVerticalLines = true;
  }
  if (this.options.grid.minorHorizontalLines === null &&
  this.options.yaxis.scaling === 'logarithmic') {
  this.options.grid.minorHorizontalLines = true;
  }
   
  E.fire(this.el, 'flotr:afterinitoptions', [this]);
   
  this.axes = flotr.Axis.getAxes(this.options);
   
  // Initialize some variables used throughout this function.
  var assignedColors = [],
  colors = [],
  ln = this.series.length,
  neededColors = this.series.length,
  oc = this.options.colors,
  usedColors = [],
  variation = 0,
  c, i, j, s;
   
  // Collect user-defined colors from series.
  for (i = neededColors - 1; i > -1; --i) {
  c = this.series[i].color;
  if (c) {
  --neededColors;
  if (_.isNumber(c)) assignedColors.push(c);
  else usedColors.push(flotr.Color.parse(c));
  }
  }
   
  // Calculate the number of colors that need to be generated.
  for (i = assignedColors.length - 1; i > -1; --i)
  neededColors = Math.max(neededColors, assignedColors[i] + 1);
   
  // Generate needed number of colors.
  for (i = 0; colors.length < neededColors;) {
  c = (oc.length == i) ? new flotr.Color(100, 100, 100) : flotr.Color.parse(oc[i]);
   
  // Make sure each serie gets a different color.
  var sign = variation % 2 == 1 ? -1 : 1,
  factor = 1 + sign * Math.ceil(variation / 2) * 0.2;
  c.scale(factor, factor, factor);
   
  /**
  * @todo if we're getting too close to something else, we should probably skip this one
  */
  colors.push(c);
   
  if (++i >= oc.length) {
  i = 0;
  ++variation;
  }
  }
   
  // Fill the options with the generated colors.
  for (i = 0, j = 0; i < ln; ++i) {
  s = this.series[i];
   
  // Assign the color.
  if (!s.color) {
  s.color = colors[j++].toString();
  } else if (_.isNumber(s.color)) {
  s.color = colors[s.color].toString();
  }
   
  // Every series needs an axis
  if (!s.xaxis) s.xaxis = this.axes.x;
  if (s.xaxis == 1) s.xaxis = this.axes.x;
  else if (s.xaxis == 2) s.xaxis = this.axes.x2;
   
  if (!s.yaxis) s.yaxis = this.axes.y;
  if (s.yaxis == 1) s.yaxis = this.axes.y;
  else if (s.yaxis == 2) s.yaxis = this.axes.y2;
   
  // Apply missing options to the series.
  for (var t in flotr.graphTypes) {
  s[t] = _.extend(_.clone(this.options[t]), s[t]);
  }
  s.mouse = _.extend(_.clone(this.options.mouse), s.mouse);
   
  if (_.isUndefined(s.shadowSize)) s.shadowSize = this.options.shadowSize;
  }
  },
   
  _setEl: function (el) {
  if (!el) throw 'The target container doesn\'t exist';
  else if (el.graph instanceof Graph) el.graph.destroy();
  else if (!el.clientWidth) throw 'The target container must be visible';
   
  el.graph = this;
  this.el = el;
  }
  };
   
  Flotr.Graph = Graph;
   
})(); })();
   
/** /**
* Flotr Axis Library * Flotr Axis Library
*/ */
   
(function () { (function () {
   
var var
_ = Flotr._, _ = Flotr._,
LOGARITHMIC = 'logarithmic'; LOGARITHMIC = 'logarithmic';
   
function Axis (o) { function Axis(o) {
   
this.orientation = 1; this.orientation = 1;
this.offset = 0; this.offset = 0;
this.datamin = Number.MAX_VALUE; this.datamin = Number.MAX_VALUE;
this.datamax = -Number.MAX_VALUE; this.datamax = -Number.MAX_VALUE;
   
_.extend(this, o); _.extend(this, o);
   
this._setTranslations(); this._setTranslations();
} }
   
   
// Prototype // Prototype
Axis.prototype = { Axis.prototype = {
   
setScale : function () { setScale: function () {
var length = this.length; var length = this.length;
if (this.options.scaling == LOGARITHMIC) { if (this.options.scaling == LOGARITHMIC) {
this.scale = length / (log(this.max, this.options.base) - log(this.min, this.options.base)); this.scale = length / (log(this.max, this.options.base) - log(this.min, this.options.base));
} else { } else {
this.scale = length / (this.max - this.min); this.scale = length / (this.max - this.min);
  }
  },
   
  calculateTicks: function () {
  var options = this.options;
   
  this.ticks = [];
  this.minorTicks = [];
   
  // User Ticks
  if (options.ticks) {
  this._cleanUserTicks(options.ticks, this.ticks);
  this._cleanUserTicks(options.minorTicks || [], this.minorTicks);
  }
  else {
  if (options.mode == 'time') {
  this._calculateTimeTicks();
  } else if (options.scaling === 'logarithmic') {
  this._calculateLogTicks();
  } else {
  this._calculateTicks();
  }
  }
   
  // Ticks to strings
  _.each(this.ticks, function (tick) {
  tick.label += '';
  });
  _.each(this.minorTicks, function (tick) {
  tick.label += '';
  });
  },
   
  /**
  * Calculates the range of an axis to apply autoscaling.
  */
  calculateRange: function () {
   
  if (!this.used) return;
   
  var axis = this,
  o = axis.options,
  min = o.min !== null ? o.min : axis.datamin,
  max = o.max !== null ? o.max : axis.datamax,
  margin = o.autoscaleMargin;
   
  if (o.scaling == 'logarithmic') {
  if (min <= 0) min = axis.datamin;
   
  // Let it widen later on
  if (max <= 0) max = min;
  }
   
  if (max == min) {
  var widen = max ? 0.01 : 1.00;
  if (o.min === null) min -= widen;
  if (o.max === null) max += widen;
  }
   
  if (o.scaling === 'logarithmic') {
  if (min < 0) min = max / o.base; // Could be the result of widening
   
  var maxexp = Math.log(max);
  if (o.base != Math.E) maxexp /= Math.log(o.base);
  maxexp = Math.ceil(maxexp);
   
  var minexp = Math.log(min);
  if (o.base != Math.E) minexp /= Math.log(o.base);
  minexp = Math.ceil(minexp);
   
  axis.tickSize = Flotr.getTickSize(o.noTicks, minexp, maxexp, o.tickDecimals === null ? 0 : o.tickDecimals);
   
  // Try to determine a suitable amount of miniticks based on the length of a decade
  if (o.minorTickFreq === null) {
  if (maxexp - minexp > 10)
  o.minorTickFreq = 0;
  else if (maxexp - minexp > 5)
  o.minorTickFreq = 2;
  else
  o.minorTickFreq = 5;
  }
  } else {
  axis.tickSize = Flotr.getTickSize(o.noTicks, min, max, o.tickDecimals);
  }
   
  axis.min = min;
  axis.max = max; //extendRange may use axis.min or axis.max, so it should be set before it is caled
   
  // Autoscaling. @todo This probably fails with log scale. Find a testcase and fix it
  if (o.min === null && o.autoscale) {
  axis.min -= axis.tickSize * margin;
  // Make sure we don't go below zero if all values are positive.
  if (axis.min < 0 && axis.datamin >= 0) axis.min = 0;
  axis.min = axis.tickSize * Math.floor(axis.min / axis.tickSize);
  }
   
  if (o.max === null && o.autoscale) {
  axis.max += axis.tickSize * margin;
  if (axis.max > 0 && axis.datamax <= 0 && axis.datamax != axis.datamin) axis.max = 0;
  axis.max = axis.tickSize * Math.ceil(axis.max / axis.tickSize);
  }
   
  if (axis.min == axis.max) axis.max = axis.min + 1;
  },
   
  calculateTextDimensions: function (T, options) {
   
  var maxLabel = '',
  length,
  i;
   
  if (this.options.showLabels) {
  for (i = 0; i < this.ticks.length; ++i) {
  length = this.ticks[i].label.length;
  if (length > maxLabel.length) {
  maxLabel = this.ticks[i].label;
  }
  }
  }
   
  this.maxLabel = T.dimensions(
  maxLabel,
  {size: options.fontSize, angle: Flotr.toRad(this.options.labelsAngle)},
  'font-size:smaller;',
  'flotr-grid-label'
  );
   
  this.titleSize = T.dimensions(
  this.options.title,
  {size: options.fontSize * 1.2, angle: Flotr.toRad(this.options.titleAngle)},
  'font-weight:bold;',
  'flotr-axis-title'
  );
  },
   
  _cleanUserTicks: function (ticks, axisTicks) {
   
  var axis = this, options = this.options,
  v, i, label, tick;
   
  if (_.isFunction(ticks)) ticks = ticks({min: axis.min, max: axis.max});
   
  for (i = 0; i < ticks.length; ++i) {
  tick = ticks[i];
  if (typeof(tick) === 'object') {
  v = tick[0];
  label = (tick.length > 1) ? tick[1] : options.tickFormatter(v, {min: axis.min, max: axis.max});
  } else {
  v = tick;
  label = options.tickFormatter(v, {min: this.min, max: this.max});
  }
  axisTicks[i] = { v: v, label: label };
  }
  },
   
  _calculateTimeTicks: function () {
  this.ticks = Flotr.Date.generator(this);
  },
   
  _calculateLogTicks: function () {
   
  var axis = this,
  o = axis.options,
  v,
  decadeStart;
   
  var max = Math.log(axis.max);
  if (o.base != Math.E) max /= Math.log(o.base);
  max = Math.ceil(max);
   
  var min = Math.log(axis.min);
  if (o.base != Math.E) min /= Math.log(o.base);
  min = Math.ceil(min);
   
  for (i = min; i < max; i += axis.tickSize) {
  decadeStart = (o.base == Math.E) ? Math.exp(i) : Math.pow(o.base, i);
  // Next decade begins here:
  var decadeEnd = decadeStart * ((o.base == Math.E) ? Math.exp(axis.tickSize) : Math.pow(o.base, axis.tickSize));
  var stepSize = (decadeEnd - decadeStart) / o.minorTickFreq;
   
  axis.ticks.push({v: decadeStart, label: o.tickFormatter(decadeStart, {min: axis.min, max: axis.max})});
  for (v = decadeStart + stepSize; v < decadeEnd; v += stepSize)
  axis.minorTicks.push({v: v, label: o.tickFormatter(v, {min: axis.min, max: axis.max})});
  }
   
  // Always show the value at the would-be start of next decade (end of this decade)
  decadeStart = (o.base == Math.E) ? Math.exp(i) : Math.pow(o.base, i);
  axis.ticks.push({v: decadeStart, label: o.tickFormatter(decadeStart, {min: axis.min, max: axis.max})});
  },
   
  _calculateTicks: function () {
   
  var axis = this,
  o = axis.options,
  tickSize = axis.tickSize,
  min = axis.min,
  max = axis.max,
  start = tickSize * Math.ceil(min / tickSize), // Round to nearest multiple of tick size.
  decimals,
  minorTickSize,
  v, v2,
  i, j;
   
  if (o.minorTickFreq)
  minorTickSize = tickSize / o.minorTickFreq;
   
  // Then store all possible ticks.
  for (i = 0; (v = v2 = start + i * tickSize) <= max; ++i) {
   
  // Round (this is always needed to fix numerical instability).
  decimals = o.tickDecimals;
  if (decimals === null) decimals = 1 - Math.floor(Math.log(tickSize) / Math.LN10);
  if (decimals < 0) decimals = 0;
   
  v = v.toFixed(decimals);
  axis.ticks.push({ v: v, label: o.tickFormatter(v, {min: axis.min, max: axis.max}) });
   
  if (o.minorTickFreq) {
  for (j = 0; j < o.minorTickFreq && (i * tickSize + j * minorTickSize) < max; ++j) {
  v = v2 + j * minorTickSize;
  axis.minorTicks.push({ v: v, label: o.tickFormatter(v, {min: axis.min, max: axis.max}) });
  }
  }
  }
   
  },
   
  _setTranslations: function (logarithmic) {
  this.d2p = (logarithmic ? d2pLog : d2p);
  this.p2d = (logarithmic ? p2dLog : p2d);
  }
  };
   
   
  // Static Methods
  _.extend(Axis, {
  getAxes: function (options) {
  return {
  x: new Axis({options: options.xaxis, n: 1, length: this.plotWidth}),
  x2: new Axis({options: options.x2axis, n: 2, length: this.plotWidth}),
  y: new Axis({options: options.yaxis, n: 1, length: this.plotHeight, offset: this.plotHeight, orientation: -1}),
  y2: new Axis({options: options.y2axis, n: 2, length: this.plotHeight, offset: this.plotHeight, orientation: -1})
  };
  }
  });
   
   
  // Helper Methods
   
  function d2p(dataValue) {
  return this.offset + this.orientation * (dataValue - this.min) * this.scale;
} }
},  
  function p2d(pointValue) {
calculateTicks : function () { return (this.offset + this.orientation * pointValue) / this.scale + this.min;
var options = this.options;  
   
this.ticks = [];  
this.minorTicks = [];  
   
// User Ticks  
if(options.ticks){  
this._cleanUserTicks(options.ticks, this.ticks);  
this._cleanUserTicks(options.minorTicks || [], this.minorTicks);  
} }
else {  
if (options.mode == 'time') { function d2pLog(dataValue) {
this._calculateTimeTicks(); return this.offset + this.orientation * (log(dataValue, this.options.base) - log(this.min, this.options.base)) * this.scale;
} else if (options.scaling === 'logarithmic') {  
this._calculateLogTicks();  
} else {  
this._calculateTicks();  
}  
} }
   
// Ticks to strings function p2dLog(pointValue) {
_.each(this.ticks, function (tick) { tick.label += ''; }); return exp((this.offset + this.orientation * pointValue) / this.scale + log(this.min, this.options.base), this.options.base);
_.each(this.minorTicks, function (tick) { tick.label += ''; });  
},  
   
/**  
* Calculates the range of an axis to apply autoscaling.  
*/  
calculateRange: function () {  
   
if (!this.used) return;  
   
var axis = this,  
o = axis.options,  
min = o.min !== null ? o.min : axis.datamin,  
max = o.max !== null ? o.max : axis.datamax,  
margin = o.autoscaleMargin;  
   
if (o.scaling == 'logarithmic') {  
if (min <= 0) min = axis.datamin;  
   
// Let it widen later on  
if (max <= 0) max = min;  
} }
   
if (max == min) { function log(value, base) {
var widen = max ? 0.01 : 1.00; value = Math.log(Math.max(value, Number.MIN_VALUE));
if (o.min === null) min -= widen; if (base !== Math.E)
if (o.max === null) max += widen; value /= Math.log(base);
  return value;
} }
   
if (o.scaling === 'logarithmic') { function exp(value, base) {
if (min < 0) min = max / o.base; // Could be the result of widening return (base === Math.E) ? Math.exp(value) : Math.pow(base, value);
   
var maxexp = Math.log(max);  
if (o.base != Math.E) maxexp /= Math.log(o.base);  
maxexp = Math.ceil(maxexp);  
   
var minexp = Math.log(min);  
if (o.base != Math.E) minexp /= Math.log(o.base);  
minexp = Math.ceil(minexp);  
   
axis.tickSize = Flotr.getTickSize(o.noTicks, minexp, maxexp, o.tickDecimals === null ? 0 : o.tickDecimals);  
   
// Try to determine a suitable amount of miniticks based on the length of a decade  
if (o.minorTickFreq === null) {  
if (maxexp - minexp > 10)  
o.minorTickFreq = 0;  
else if (maxexp - minexp > 5)  
o.minorTickFreq = 2;  
else  
o.minorTickFreq = 5;  
}  
} else {  
axis.tickSize = Flotr.getTickSize(o.noTicks, min, max, o.tickDecimals);  
} }
   
axis.min = min; Flotr.Axis = Axis;
axis.max = max; //extendRange may use axis.min or axis.max, so it should be set before it is caled  
   
// Autoscaling. @todo This probably fails with log scale. Find a testcase and fix it  
if(o.min === null && o.autoscale){  
axis.min -= axis.tickSize * margin;  
// Make sure we don't go below zero if all values are positive.  
if(axis.min < 0 && axis.datamin >= 0) axis.min = 0;  
axis.min = axis.tickSize * Math.floor(axis.min / axis.tickSize);  
}  
   
if(o.max === null && o.autoscale){  
axis.max += axis.tickSize * margin;  
if(axis.max > 0 && axis.datamax <= 0 && axis.datamax != axis.datamin) axis.max = 0;  
axis.max = axis.tickSize * Math.ceil(axis.max / axis.tickSize);  
}  
   
if (axis.min == axis.max) axis.max = axis.min + 1;  
},  
   
calculateTextDimensions : function (T, options) {  
   
var maxLabel = '',  
length,  
i;  
   
if (this.options.showLabels) {  
for (i = 0; i < this.ticks.length; ++i) {  
length = this.ticks[i].label.length;  
if (length > maxLabel.length){  
maxLabel = this.ticks[i].label;  
}  
}  
}  
   
this.maxLabel = T.dimensions(  
maxLabel,  
{size:options.fontSize, angle: Flotr.toRad(this.options.labelsAngle)},  
'font-size:smaller;',  
'flotr-grid-label'  
);  
   
this.titleSize = T.dimensions(  
this.options.title,  
{size:options.fontSize*1.2, angle: Flotr.toRad(this.options.titleAngle)},  
'font-weight:bold;',  
'flotr-axis-title'  
);  
},  
   
_cleanUserTicks : function (ticks, axisTicks) {  
   
var axis = this, options = this.options,  
v, i, label, tick;  
   
if(_.isFunction(ticks)) ticks = ticks({min : axis.min, max : axis.max});  
   
for(i = 0; i < ticks.length; ++i){  
tick = ticks[i];  
if(typeof(tick) === 'object'){  
v = tick[0];  
label = (tick.length > 1) ? tick[1] : options.tickFormatter(v, {min : axis.min, max : axis.max});  
} else {  
v = tick;  
label = options.tickFormatter(v, {min : this.min, max : this.max});  
}  
axisTicks[i] = { v: v, label: label };  
}  
},  
   
_calculateTimeTicks : function () {  
this.ticks = Flotr.Date.generator(this);  
},  
   
_calculateLogTicks : function () {  
   
var axis = this,  
o = axis.options,  
v,  
decadeStart;  
   
var max = Math.log(axis.max);  
if (o.base != Math.E) max /= Math.log(o.base);  
max = Math.ceil(max);  
   
var min = Math.log(axis.min);  
if (o.base != Math.E) min /= Math.log(o.base);  
min = Math.ceil(min);  
   
for (i = min; i < max; i += axis.tickSize) {  
decadeStart = (o.base == Math.E) ? Math.exp(i) : Math.pow(o.base, i);  
// Next decade begins here:  
var decadeEnd = decadeStart * ((o.base == Math.E) ? Math.exp(axis.tickSize) : Math.pow(o.base, axis.tickSize));  
var stepSize = (decadeEnd - decadeStart) / o.minorTickFreq;  
   
axis.ticks.push({v: decadeStart, label: o.tickFormatter(decadeStart, {min : axis.min, max : axis.max})});  
for (v = decadeStart + stepSize; v < decadeEnd; v += stepSize)  
axis.minorTicks.push({v: v, label: o.tickFormatter(v, {min : axis.min, max : axis.max})});  
}  
   
// Always show the value at the would-be start of next decade (end of this decade)  
decadeStart = (o.base == Math.E) ? Math.exp(i) : Math.pow(o.base, i);  
axis.ticks.push({v: decadeStart, label: o.tickFormatter(decadeStart, {min : axis.min, max : axis.max})});  
},  
   
_calculateTicks : function () {  
   
var axis = this,  
o = axis.options,  
tickSize = axis.tickSize,  
min = axis.min,  
max = axis.max,  
start = tickSize * Math.ceil(min / tickSize), // Round to nearest multiple of tick size.  
decimals,  
minorTickSize,  
v, v2,  
i, j;  
   
if (o.minorTickFreq)  
minorTickSize = tickSize / o.minorTickFreq;  
   
// Then store all possible ticks.  
for (i = 0; (v = v2 = start + i * tickSize) <= max; ++i){  
   
// Round (this is always needed to fix numerical instability).  
decimals = o.tickDecimals;  
if (decimals === null) decimals = 1 - Math.floor(Math.log(tickSize) / Math.LN10);  
if (decimals < 0) decimals = 0;  
   
v = v.toFixed(decimals);  
axis.ticks.push({ v: v, label: o.tickFormatter(v, {min : axis.min, max : axis.max}) });  
   
if (o.minorTickFreq) {  
for (j = 0; j < o.minorTickFreq && (i * tickSize + j * minorTickSize) < max; ++j) {  
v = v2 + j * minorTickSize;  
axis.minorTicks.push({ v: v, label: o.tickFormatter(v, {min : axis.min, max : axis.max}) });  
}  
}  
}  
   
},  
   
_setTranslations : function (logarithmic) {  
this.d2p = (logarithmic ? d2pLog : d2p);  
this.p2d = (logarithmic ? p2dLog : p2d);  
}  
};  
   
   
// Static Methods  
_.extend(Axis, {  
getAxes : function (options) {  
return {  
x: new Axis({options: options.xaxis, n: 1, length: this.plotWidth}),  
x2: new Axis({options: options.x2axis, n: 2, length: this.plotWidth}),  
y: new Axis({options: options.yaxis, n: 1, length: this.plotHeight, offset: this.plotHeight, orientation: -1}),  
y2: new Axis({options: options.y2axis, n: 2, length: this.plotHeight, offset: this.plotHeight, orientation: -1})  
};  
}  
});  
   
   
// Helper Methods  
   
function d2p (dataValue) {  
return this.offset + this.orientation * (dataValue - this.min) * this.scale;  
}  
   
function p2d (pointValue) {  
return (this.offset + this.orientation * pointValue) / this.scale + this.min;  
}  
   
function d2pLog (dataValue) {  
return this.offset + this.orientation * (log(dataValue, this.options.base) - log(this.min, this.options.base)) * this.scale;  
}  
   
function p2dLog (pointValue) {  
return exp((this.offset + this.orientation * pointValue) / this.scale + log(this.min, this.options.base), this.options.base);  
}  
   
function log (value, base) {  
value = Math.log(Math.max(value, Number.MIN_VALUE));  
if (base !== Math.E)  
value /= Math.log(base);  
return value;  
}  
   
function exp (value, base) {  
return (base === Math.E) ? Math.exp(value) : Math.pow(base, value);  
}  
   
Flotr.Axis = Axis;  
   
})(); })();
   
/** /**
* Flotr Series Library * Flotr Series Library
*/ */
   
(function () { (function () {
   
var  
_ = Flotr._;  
   
function Series (o) {  
_.extend(this, o);  
}  
   
Series.prototype = {  
   
getRange: function () {  
   
var var
data = this.data, _ = Flotr._;
length = data.length,  
xmin = Number.MAX_VALUE, function Series(o) {
ymin = Number.MAX_VALUE, _.extend(this, o);
xmax = -Number.MAX_VALUE,  
ymax = -Number.MAX_VALUE,  
xused = false,  
yused = false,  
x, y, i;  
   
if (length < 0 || this.hide) return false;  
   
for (i = 0; i < length; i++) {  
x = data[i][0];  
y = data[i][1];  
if (x < xmin) { xmin = x; xused = true; }  
if (x > xmax) { xmax = x; xused = true; }  
if (y < ymin) { ymin = y; yused = true; }  
if (y > ymax) { ymax = y; yused = true; }  
} }
   
return { Series.prototype = {
xmin : xmin,  
xmax : xmax, getRange: function () {
ymin : ymin,  
ymax : ymax, var
xused : xused, data = this.data,
yused : yused length = data.length,
}; xmin = Number.MAX_VALUE,
} ymin = Number.MAX_VALUE,
}; xmax = -Number.MAX_VALUE,
  ymax = -Number.MAX_VALUE,
_.extend(Series, { xused = false,
/** yused = false,
* Collects dataseries from input and parses the series into the right format. It returns an Array x, y, i;
* of Objects each having at least the 'data' key set.  
* @param {Array, Object} data - Object or array of dataseries if (length < 0 || this.hide) return false;
* @return {Array} Array of Objects parsed into the right format ({(...,) data: [[x1,y1], [x2,y2], ...] (, ...)})  
*/ for (i = 0; i < length; i++) {
getSeries: function(data){ x = data[i][0];
return _.map(data, function(s){ y = data[i][1];
var series; if (x < xmin) {
if (s.data) { xmin = x;
series = new Series(); xused = true;
_.extend(series, s); }
} else { if (x > xmax) {
series = new Series({data:s}); xmax = x;
} xused = true;
return series; }
  if (y < ymin) {
  ymin = y;
  yused = true;
  }
  if (y > ymax) {
  ymax = y;
  yused = true;
  }
  }
   
  return {
  xmin: xmin,
  xmax: xmax,
  ymin: ymin,
  ymax: ymax,
  xused: xused,
  yused: yused
  };
  }
  };
   
  _.extend(Series, {
  /**
  * Collects dataseries from input and parses the series into the right format. It returns an Array
  * of Objects each having at least the 'data' key set.
  * @param {Array, Object} data - Object or array of dataseries
  * @return {Array} Array of Objects parsed into the right format ({(...,) data: [[x1,y1], [x2,y2], ...] (, ...)})
  */
  getSeries: function (data) {
  return _.map(data, function (s) {
  var series;
  if (s.data) {
  series = new Series();
  _.extend(series, s);
  } else {
  series = new Series({data: s});
  }
  return series;
  });
  }
}); });
}  
}); Flotr.Series = Series;
   
Flotr.Series = Series;  
   
})(); })();
   
/** Lines **/ /** Lines **/
Flotr.addType('lines', { Flotr.addType('lines', {
options: { options: {
show: false, // => setting to true will show lines, false will hide show: false, // => setting to true will show lines, false will hide
lineWidth: 2, // => line width in pixels lineWidth: 2, // => line width in pixels
fill: false, // => true to fill the area from the line to the x axis, false for (transparent) no fill fill: false, // => true to fill the area from the line to the x axis, false for (transparent) no fill
fillBorder: false, // => draw a border around the fill fillBorder: false, // => draw a border around the fill
fillColor: null, // => fill color fillColor: null, // => fill color
fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
steps: false, // => draw steps steps: false, // => draw steps
stacked: false // => setting to true will show stacked lines, false will show normal lines stacked: false // => setting to true will show stacked lines, false will show normal lines
}, },
   
stack : { stack: {
values : [] values: []
}, },
   
/** /**
* Draws lines series in the canvas element. * Draws lines series in the canvas element.
* @param {Object} options * @param {Object} options
*/ */
draw : function (options) { draw: function (options) {
   
var var
context = options.context, context = options.context,
lineWidth = options.lineWidth, lineWidth = options.lineWidth,
shadowSize = options.shadowSize, shadowSize = options.shadowSize,
offset; offset;
   
context.save(); context.save();
context.lineJoin = 'round'; context.lineJoin = 'round';
   
if (shadowSize) { if (shadowSize) {
   
context.lineWidth = shadowSize / 2; context.lineWidth = shadowSize / 2;
offset = lineWidth / 2 + context.lineWidth / 2; offset = lineWidth / 2 + context.lineWidth / 2;
   
// @TODO do this instead with a linear gradient // @TODO do this instead with a linear gradient
context.strokeStyle = "rgba(0,0,0,0.1)"; context.strokeStyle = "rgba(0,0,0,0.1)";
this.plot(options, offset + shadowSize / 2, false); this.plot(options, offset + shadowSize / 2, false);
   
context.strokeStyle = "rgba(0,0,0,0.2)"; context.strokeStyle = "rgba(0,0,0,0.2)";
this.plot(options, offset, false); this.plot(options, offset, false);
  }
   
  context.lineWidth = lineWidth;
  context.strokeStyle = options.color;
   
  this.plot(options, 0, true);
   
  context.restore();
  },
   
  plot: function (options, shadowOffset, incStack) {
   
  var
  context = options.context,
  width = options.width,
  height = options.height,
  xScale = options.xScale,
  yScale = options.yScale,
  data = options.data,
  stack = options.stacked ? this.stack : false,
  length = data.length - 1,
  prevx = null,
  prevy = null,
  zero = yScale(0),
  start = null,
  x1, x2, y1, y2, stack1, stack2, i;
   
  if (length < 1) return;
   
  context.beginPath();
   
  for (i = 0; i < length; ++i) {
   
  // To allow empty values
  if (data[i][1] === null || data[i + 1][1] === null) {
  if (options.fill) {
  if (i > 0 && data[i][1]) {
  context.stroke();
  fill();
  start = null;
  context.closePath();
  context.beginPath();
  }
  }
  continue;
  }
   
  // Zero is infinity for log scales
  // TODO handle zero for logarithmic
  // if (xa.options.scaling === 'logarithmic' && (data[i][0] <= 0 || data[i+1][0] <= 0)) continue;
  // if (ya.options.scaling === 'logarithmic' && (data[i][1] <= 0 || data[i+1][1] <= 0)) continue;
   
  x1 = xScale(data[i][0]);
  x2 = xScale(data[i + 1][0]);
   
  if (start === null) start = data[i];
   
  if (stack) {
   
  stack1 = stack.values[data[i][0]] || 0;
  stack2 = stack.values[data[i + 1][0]] || stack.values[data[i][0]] || 0;
   
  y1 = yScale(data[i][1] + stack1);
  y2 = yScale(data[i + 1][1] + stack2);
   
  if (incStack) {
  stack.values[data[i][0]] = data[i][1] + stack1;
   
  if (i == length - 1)
  stack.values[data[i + 1][0]] = data[i + 1][1] + stack2;
  }
  }
  else {
  y1 = yScale(data[i][1]);
  y2 = yScale(data[i + 1][1]);
  }
   
  if (
  (y1 > height && y2 > height) ||
  (y1 < 0 && y2 < 0) ||
  (x1 < 0 && x2 < 0) ||
  (x1 > width && x2 > width)
  ) continue;
   
  if ((prevx != x1) || (prevy != y1 + shadowOffset))
  context.moveTo(x1, y1 + shadowOffset);
   
  prevx = x2;
  prevy = y2 + shadowOffset;
  if (options.steps) {
  context.lineTo(prevx + shadowOffset / 2, y1 + shadowOffset);
  context.lineTo(prevx + shadowOffset / 2, prevy);
  } else {
  context.lineTo(prevx, prevy);
  }
  }
   
  if (!options.fill || options.fill && !options.fillBorder) context.stroke();
   
  fill();
   
  function fill() {
  // TODO stacked lines
  if (!shadowOffset && options.fill && start) {
  x1 = xScale(start[0]);
  context.fillStyle = options.fillStyle;
  context.lineTo(x2, zero);
  context.lineTo(x1, zero);
  context.lineTo(x1, yScale(start[1]));
  context.fill();
  if (options.fillBorder) {
  context.stroke();
  }
  }
  }
   
  context.closePath();
  },
   
  // Perform any pre-render precalculations (this should be run on data first)
  // - Pie chart total for calculating measures
  // - Stacks for lines and bars
  // precalculate : function () {
  // }
  //
  //
  // Get any bounds after pre calculation (axis can fetch this if does not have explicit min/max)
  // getBounds : function () {
  // }
  // getMin : function () {
  // }
  // getMax : function () {
  // }
  //
  //
  // Padding around rendered elements
  // getPadding : function () {
  // }
   
  extendYRange: function (axis, data, options, lines) {
   
  var o = axis.options;
   
  // If stacked and auto-min
  if (options.stacked && ((!o.max && o.max !== 0) || (!o.min && o.min !== 0))) {
   
  var
  newmax = axis.max,
  newmin = axis.min,
  positiveSums = lines.positiveSums || {},
  negativeSums = lines.negativeSums || {},
  x, j;
   
  for (j = 0; j < data.length; j++) {
   
  x = data[j][0] + '';
   
  // Positive
  if (data[j][1] > 0) {
  positiveSums[x] = (positiveSums[x] || 0) + data[j][1];
  newmax = Math.max(newmax, positiveSums[x]);
  }
   
  // Negative
  else {
  negativeSums[x] = (negativeSums[x] || 0) + data[j][1];
  newmin = Math.min(newmin, negativeSums[x]);
  }
  }
   
  lines.negativeSums = negativeSums;
  lines.positiveSums = positiveSums;
   
  axis.max = newmax;
  axis.min = newmin;
  }
   
  if (options.steps) {
   
  this.hit = function (options) {
  var
  data = options.data,
  args = options.args,
  yScale = options.yScale,
  mouse = args[0],
  length = data.length,
  n = args[1],
  x = mouse.x,
  relY = mouse.relY,
  i;
   
  for (i = 0; i < length - 1; i++) {
  if (x >= data[i][0] && x <= data[i + 1][0]) {
  if (Math.abs(yScale(data[i][1]) - relY) < 8) {
  n.x = data[i][0];
  n.y = data[i][1];
  n.index = i;
  n.seriesIndex = options.index;
  }
  break;
  }
  }
  };
   
  this.drawHit = function (options) {
  var
  context = options.context,
  args = options.args,
  data = options.data,
  xScale = options.xScale,
  index = args.index,
  x = xScale(args.x),
  y = options.yScale(args.y),
  x2;
   
  if (data.length - 1 > index) {
  x2 = options.xScale(data[index + 1][0]);
  context.save();
  context.strokeStyle = options.color;
  context.lineWidth = options.lineWidth;
  context.beginPath();
  context.moveTo(x, y);
  context.lineTo(x2, y);
  context.stroke();
  context.closePath();
  context.restore();
  }
  };
   
  this.clearHit = function (options) {
  var
  context = options.context,
  args = options.args,
  data = options.data,
  xScale = options.xScale,
  width = options.lineWidth,
  index = args.index,
  x = xScale(args.x),
  y = options.yScale(args.y),
  x2;
   
  if (data.length - 1 > index) {
  x2 = options.xScale(data[index + 1][0]);
  context.clearRect(x - width, y - width, x2 - x + 2 * width, 2 * width);
  }
  };
  }
} }
   
context.lineWidth = lineWidth;  
context.strokeStyle = options.color;  
   
this.plot(options, 0, true);  
   
context.restore();  
},  
   
plot : function (options, shadowOffset, incStack) {  
   
var  
context = options.context,  
width = options.width,  
height = options.height,  
xScale = options.xScale,  
yScale = options.yScale,  
data = options.data,  
stack = options.stacked ? this.stack : false,  
length = data.length - 1,  
prevx = null,  
prevy = null,  
zero = yScale(0),  
start = null,  
x1, x2, y1, y2, stack1, stack2, i;  
   
if (length < 1) return;  
   
context.beginPath();  
   
for (i = 0; i < length; ++i) {  
   
// To allow empty values  
if (data[i][1] === null || data[i+1][1] === null) {  
if (options.fill) {  
if (i > 0 && data[i][1]) {  
context.stroke();  
fill();  
start = null;  
context.closePath();  
context.beginPath();  
}  
}  
continue;  
}  
   
// Zero is infinity for log scales  
// TODO handle zero for logarithmic  
// if (xa.options.scaling === 'logarithmic' && (data[i][0] <= 0 || data[i+1][0] <= 0)) continue;  
// if (ya.options.scaling === 'logarithmic' && (data[i][1] <= 0 || data[i+1][1] <= 0)) continue;  
   
x1 = xScale(data[i][0]);  
x2 = xScale(data[i+1][0]);  
   
if (start === null) start = data[i];  
   
if (stack) {  
   
stack1 = stack.values[data[i][0]] || 0;  
stack2 = stack.values[data[i+1][0]] || stack.values[data[i][0]] || 0;  
   
y1 = yScale(data[i][1] + stack1);  
y2 = yScale(data[i+1][1] + stack2);  
   
if(incStack){  
stack.values[data[i][0]] = data[i][1]+stack1;  
   
if(i == length-1)  
stack.values[data[i+1][0]] = data[i+1][1]+stack2;  
}  
}  
else{  
y1 = yScale(data[i][1]);  
y2 = yScale(data[i+1][1]);  
}  
   
if (  
(y1 > height && y2 > height) ||  
(y1 < 0 && y2 < 0) ||  
(x1 < 0 && x2 < 0) ||  
(x1 > width && x2 > width)  
) continue;  
   
if((prevx != x1) || (prevy != y1 + shadowOffset))  
context.moveTo(x1, y1 + shadowOffset);  
   
prevx = x2;  
prevy = y2 + shadowOffset;  
if (options.steps) {  
context.lineTo(prevx + shadowOffset / 2, y1 + shadowOffset);  
context.lineTo(prevx + shadowOffset / 2, prevy);  
} else {  
context.lineTo(prevx, prevy);  
}  
}  
   
if (!options.fill || options.fill && !options.fillBorder) context.stroke();  
   
fill();  
   
function fill () {  
// TODO stacked lines  
if(!shadowOffset && options.fill && start){  
x1 = xScale(start[0]);  
context.fillStyle = options.fillStyle;  
context.lineTo(x2, zero);  
context.lineTo(x1, zero);  
context.lineTo(x1, yScale(start[1]));  
context.fill();  
if (options.fillBorder) {  
context.stroke();  
}  
}  
}  
   
context.closePath();  
},  
   
// Perform any pre-render precalculations (this should be run on data first)  
// - Pie chart total for calculating measures  
// - Stacks for lines and bars  
// precalculate : function () {  
// }  
//  
//  
// Get any bounds after pre calculation (axis can fetch this if does not have explicit min/max)  
// getBounds : function () {  
// }  
// getMin : function () {  
// }  
// getMax : function () {  
// }  
//  
//  
// Padding around rendered elements  
// getPadding : function () {  
// }  
   
extendYRange : function (axis, data, options, lines) {  
   
var o = axis.options;  
   
// If stacked and auto-min  
if (options.stacked && ((!o.max && o.max !== 0) || (!o.min && o.min !== 0))) {  
   
var  
newmax = axis.max,  
newmin = axis.min,  
positiveSums = lines.positiveSums || {},  
negativeSums = lines.negativeSums || {},  
x, j;  
   
for (j = 0; j < data.length; j++) {  
   
x = data[j][0] + '';  
   
// Positive  
if (data[j][1] > 0) {  
positiveSums[x] = (positiveSums[x] || 0) + data[j][1];  
newmax = Math.max(newmax, positiveSums[x]);  
}  
   
// Negative  
else {  
negativeSums[x] = (negativeSums[x] || 0) + data[j][1];  
newmin = Math.min(newmin, negativeSums[x]);  
}  
}  
   
lines.negativeSums = negativeSums;  
lines.positiveSums = positiveSums;  
   
axis.max = newmax;  
axis.min = newmin;  
}  
   
if (options.steps) {  
   
this.hit = function (options) {  
var  
data = options.data,  
args = options.args,  
yScale = options.yScale,  
mouse = args[0],  
length = data.length,  
n = args[1],  
x = mouse.x,  
relY = mouse.relY,  
i;  
   
for (i = 0; i < length - 1; i++) {  
if (x >= data[i][0] && x <= data[i+1][0]) {  
if (Math.abs(yScale(data[i][1]) - relY) < 8) {  
n.x = data[i][0];  
n.y = data[i][1];  
n.index = i;  
n.seriesIndex = options.index;  
}  
break;  
}  
}  
};  
   
this.drawHit = function (options) {  
var  
context = options.context,  
args = options.args,  
data = options.data,  
xScale = options.xScale,  
index = args.index,  
x = xScale(args.x),  
y = options.yScale(args.y),  
x2;  
   
if (data.length - 1 > index) {  
x2 = options.xScale(data[index + 1][0]);  
context.save();  
context.strokeStyle = options.color;  
context.lineWidth = options.lineWidth;  
context.beginPath();  
context.moveTo(x, y);  
context.lineTo(x2, y);  
context.stroke();  
context.closePath();  
context.restore();  
}  
};  
   
this.clearHit = function (options) {  
var  
context = options.context,  
args = options.args,  
data = options.data,  
xScale = options.xScale,  
width = options.lineWidth,  
index = args.index,  
x = xScale(args.x),  
y = options.yScale(args.y),  
x2;  
   
if (data.length - 1 > index) {  
x2 = options.xScale(data[index + 1][0]);  
context.clearRect(x - width, y - width, x2 - x + 2 * width, 2 * width);  
}  
};  
}  
}  
   
}); });
   
/** Bars **/ /** Bars **/
Flotr.addType('bars', { Flotr.addType('bars', {
   
options: { options: {
show: false, // => setting to true will show bars, false will hide show: false, // => setting to true will show bars, false will hide
lineWidth: 2, // => in pixels lineWidth: 2, // => in pixels
barWidth: 1, // => in units of the x axis barWidth: 1, // => in units of the x axis
fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
fillColor: null, // => fill color fillColor: null, // => fill color
fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
horizontal: false, // => horizontal bars (x and y inverted) horizontal: false, // => horizontal bars (x and y inverted)
stacked: false, // => stacked bar charts stacked: false, // => stacked bar charts
centered: true, // => center the bars to their x axis value centered: true, // => center the bars to their x axis value
topPadding: 0.1, // => top padding in percent topPadding: 0.1, // => top padding in percent
grouped: false // => groups bars together which share x value, hit not supported. grouped: false // => groups bars together which share x value, hit not supported.
}, },
   
stack : { stack: {
positive : [], positive: [],
negative : [], negative: [],
_positive : [], // Shadow _positive: [], // Shadow
_negative : [] // Shadow _negative: [] // Shadow
}, },
   
draw : function (options) { draw: function (options) {
var var
context = options.context; context = options.context;
   
this.current += 1; this.current += 1;
   
context.save();  
context.lineJoin = 'miter';  
// @TODO linewidth not interpreted the right way.  
context.lineWidth = options.lineWidth;  
context.strokeStyle = options.color;  
if (options.fill) context.fillStyle = options.fillStyle;  
   
this.plot(options);  
   
context.restore();  
},  
   
plot : function (options) {  
   
var  
data = options.data,  
context = options.context,  
shadowSize = options.shadowSize,  
i, geometry, left, top, width, height;  
   
if (data.length < 1) return;  
   
this.translate(context, options.horizontal);  
   
for (i = 0; i < data.length; i++) {  
   
geometry = this.getBarGeometry(data[i][0], data[i][1], options);  
if (geometry === null) continue;  
   
left = geometry.left;  
top = geometry.top;  
width = geometry.width;  
height = geometry.height;  
   
if (options.fill) context.fillRect(left, top, width, height);  
if (shadowSize) {  
context.save(); context.save();
context.fillStyle = 'rgba(0,0,0,0.05)'; context.lineJoin = 'miter';
context.fillRect(left + shadowSize, top + shadowSize, width, height); // @TODO linewidth not interpreted the right way.
  context.lineWidth = options.lineWidth;
  context.strokeStyle = options.color;
  if (options.fill) context.fillStyle = options.fillStyle;
   
  this.plot(options);
   
context.restore(); context.restore();
} },
if (options.lineWidth) {  
context.strokeRect(left, top, width, height); plot: function (options) {
}  
  var
  data = options.data,
  context = options.context,
  shadowSize = options.shadowSize,
  i, geometry, left, top, width, height;
   
  if (data.length < 1) return;
   
  this.translate(context, options.horizontal);
   
  for (i = 0; i < data.length; i++) {
   
  geometry = this.getBarGeometry(data[i][0], data[i][1], options);
  if (geometry === null) continue;
   
  left = geometry.left;
  top = geometry.top;
  width = geometry.width;
  height = geometry.height;
   
  if (options.fill) context.fillRect(left, top, width, height);
  if (shadowSize) {
  context.save();
  context.fillStyle = 'rgba(0,0,0,0.05)';
  context.fillRect(left + shadowSize, top + shadowSize, width, height);
  context.restore();
  }
  if (options.lineWidth) {
  context.strokeRect(left, top, width, height);
  }
  }
  },
   
  translate: function (context, horizontal) {
  if (horizontal) {
  context.rotate(-Math.PI / 2);
  context.scale(-1, 1);
  }
  },
   
  getBarGeometry: function (x, y, options) {
   
  var
  horizontal = options.horizontal,
  barWidth = options.barWidth,
  centered = options.centered,
  stack = options.stacked ? this.stack : false,
  lineWidth = options.lineWidth,
  bisection = centered ? barWidth / 2 : 0,
  xScale = horizontal ? options.yScale : options.xScale,
  yScale = horizontal ? options.xScale : options.yScale,
  xValue = horizontal ? y : x,
  yValue = horizontal ? x : y,
  stackOffset = 0,
  stackValue, left, right, top, bottom;
   
  if (options.grouped) {
  this.current / this.groups
  xValue = xValue - bisection;
  barWidth = barWidth / this.groups;
  bisection = barWidth / 2;
  xValue = xValue + barWidth * this.current - bisection;
  }
   
  // Stacked bars
  if (stack) {
  stackValue = yValue > 0 ? stack.positive : stack.negative;
  stackOffset = stackValue[xValue] || stackOffset;
  stackValue[xValue] = stackOffset + yValue;
  }
   
  left = xScale(xValue - bisection);
  right = xScale(xValue + barWidth - bisection);
  top = yScale(yValue + stackOffset);
  bottom = yScale(stackOffset);
   
  // TODO for test passing... probably looks better without this
  if (bottom < 0) bottom = 0;
   
  // TODO Skipping...
  // if (right < xa.min || left > xa.max || top < ya.min || bottom > ya.max) continue;
   
  return (x === null || y === null) ? null : {
  x: xValue,
  y: yValue,
  xScale: xScale,
  yScale: yScale,
  top: top,
  left: Math.min(left, right) - lineWidth / 2,
  width: Math.abs(right - left) - lineWidth,
  height: bottom - top
  };
  },
   
  hit: function (options) {
  var
  data = options.data,
  args = options.args,
  mouse = args[0],
  n = args[1],
  x = mouse.x,
  y = mouse.y,
  hitGeometry = this.getBarGeometry(x, y, options),
  width = hitGeometry.width / 2,
  left = hitGeometry.left,
  geometry, i;
   
  for (i = data.length; i--;) {
  geometry = this.getBarGeometry(data[i][0], data[i][1], options);
  if (geometry.y > hitGeometry.y && Math.abs(left - geometry.left) < width) {
  n.x = data[i][0];
  n.y = data[i][1];
  n.index = i;
  n.seriesIndex = options.index;
  }
  }
  },
   
  drawHit: function (options) {
  // TODO hits for stacked bars; implement using calculateStack option?
  var
  context = options.context,
  args = options.args,
  geometry = this.getBarGeometry(args.x, args.y, options),
  left = geometry.left,
  top = geometry.top,
  width = geometry.width,
  height = geometry.height;
   
  context.save();
  context.strokeStyle = options.color;
  context.lineWidth = options.lineWidth;
  this.translate(context, options.horizontal);
   
  // Draw highlight
  context.beginPath();
  context.moveTo(left, top + height);
  context.lineTo(left, top);
  context.lineTo(left + width, top);
  context.lineTo(left + width, top + height);
  if (options.fill) {
  context.fillStyle = options.fillStyle;
  context.fill();
  }
  context.stroke();
  context.closePath();
   
  context.restore();
  },
   
  clearHit: function (options) {
  var
  context = options.context,
  args = options.args,
  geometry = this.getBarGeometry(args.x, args.y, options),
  left = geometry.left,
  width = geometry.width,
  top = geometry.top,
  height = geometry.height,
  lineWidth = 2 * options.lineWidth;
   
  context.save();
  this.translate(context, options.horizontal);
  context.clearRect(
  left - lineWidth,
  Math.min(top, top + height) - lineWidth,
  width + 2 * lineWidth,
  Math.abs(height) + 2 * lineWidth
  );
  context.restore();
  },
   
  extendXRange: function (axis, data, options, bars) {
  this._extendRange(axis, data, options, bars);
  this.groups = (this.groups + 1) || 1;
  this.current = 0;
  },
   
  extendYRange: function (axis, data, options, bars) {
  this._extendRange(axis, data, options, bars);
  },
  _extendRange: function (axis, data, options, bars) {
   
  var
  max = axis.options.max;
   
  if (_.isNumber(max) || _.isString(max)) return;
   
  var
  newmin = axis.min,
  newmax = axis.max,
  horizontal = options.horizontal,
  orientation = axis.orientation,
  positiveSums = this.positiveSums || {},
  negativeSums = this.negativeSums || {},
  value, datum, index, j;
   
  // Sides of bars
  if ((orientation == 1 && !horizontal) || (orientation == -1 && horizontal)) {
  if (options.centered) {
  newmax = Math.max(axis.datamax + options.barWidth, newmax);
  newmin = Math.min(axis.datamin - options.barWidth, newmin);
  }
  }
   
  if (options.stacked &&
  ((orientation == 1 && horizontal) || (orientation == -1 && !horizontal))) {
   
  for (j = data.length; j--;) {
  value = data[j][(orientation == 1 ? 1 : 0)] + '';
  datum = data[j][(orientation == 1 ? 0 : 1)];
   
  // Positive
  if (datum > 0) {
  positiveSums[value] = (positiveSums[value] || 0) + datum;
  newmax = Math.max(newmax, positiveSums[value]);
  }
   
  // Negative
  else {
  negativeSums[value] = (negativeSums[value] || 0) + datum;
  newmin = Math.min(newmin, negativeSums[value]);
  }
  }
  }
   
  // End of bars
  if ((orientation == 1 && horizontal) || (orientation == -1 && !horizontal)) {
  if (options.topPadding && (axis.max === axis.datamax || (options.stacked && this.stackMax !== newmax))) {
  newmax += options.topPadding * (newmax - newmin);
  }
  }
   
  this.stackMin = newmin;
  this.stackMax = newmax;
  this.negativeSums = negativeSums;
  this.positiveSums = positiveSums;
   
  axis.max = newmax;
  axis.min = newmin;
} }
},  
   
translate : function (context, horizontal) {  
if (horizontal) {  
context.rotate(-Math.PI / 2);  
context.scale(-1, 1);  
}  
},  
   
getBarGeometry : function (x, y, options) {  
   
var  
horizontal = options.horizontal,  
barWidth = options.barWidth,  
centered = options.centered,  
stack = options.stacked ? this.stack : false,  
lineWidth = options.lineWidth,  
bisection = centered ? barWidth / 2 : 0,  
xScale = horizontal ? options.yScale : options.xScale,  
yScale = horizontal ? options.xScale : options.yScale,  
xValue = horizontal ? y : x,  
yValue = horizontal ? x : y,  
stackOffset = 0,  
stackValue, left, right, top, bottom;  
   
if (options.grouped) {  
this.current / this.groups  
xValue = xValue - bisection;  
barWidth = barWidth / this.groups;  
bisection = barWidth / 2;  
xValue = xValue + barWidth * this.current - bisection;  
}  
   
// Stacked bars  
if (stack) {  
stackValue = yValue > 0 ? stack.positive : stack.negative;  
stackOffset = stackValue[xValue] || stackOffset;  
stackValue[xValue] = stackOffset + yValue;  
}  
   
left = xScale(xValue - bisection);  
right = xScale(xValue + barWidth - bisection);  
top = yScale(yValue + stackOffset);  
bottom = yScale(stackOffset);  
   
// TODO for test passing... probably looks better without this  
if (bottom < 0) bottom = 0;  
   
// TODO Skipping...  
// if (right < xa.min || left > xa.max || top < ya.min || bottom > ya.max) continue;  
   
return (x === null || y === null) ? null : {  
x : xValue,  
y : yValue,  
xScale : xScale,  
yScale : yScale,  
top : top,  
left : Math.min(left, right) - lineWidth / 2,  
width : Math.abs(right - left) - lineWidth,  
height : bottom - top  
};  
},  
   
hit : function (options) {  
var  
data = options.data,  
args = options.args,  
mouse = args[0],  
n = args[1],  
x = mouse.x,  
y = mouse.y,  
hitGeometry = this.getBarGeometry(x, y, options),  
width = hitGeometry.width / 2,  
left = hitGeometry.left,  
geometry, i;  
   
for (i = data.length; i--;) {  
geometry = this.getBarGeometry(data[i][0], data[i][1], options);  
if (geometry.y > hitGeometry.y && Math.abs(left - geometry.left) < width) {  
n.x = data[i][0];  
n.y = data[i][1];  
n.index = i;  
n.seriesIndex = options.index;  
}  
}  
},  
   
drawHit : function (options) {  
// TODO hits for stacked bars; implement using calculateStack option?  
var  
context = options.context,  
args = options.args,  
geometry = this.getBarGeometry(args.x, args.y, options),  
left = geometry.left,  
top = geometry.top,  
width = geometry.width,  
height = geometry.height;  
   
context.save();  
context.strokeStyle = options.color;  
context.lineWidth = options.lineWidth;  
this.translate(context, options.horizontal);  
   
// Draw highlight  
context.beginPath();  
context.moveTo(left, top + height);  
context.lineTo(left, top);  
context.lineTo(left + width, top);  
context.lineTo(left + width, top + height);  
if (options.fill) {  
context.fillStyle = options.fillStyle;  
context.fill();  
}  
context.stroke();  
context.closePath();  
   
context.restore();  
},  
   
clearHit: function (options) {  
var  
context = options.context,  
args = options.args,  
geometry = this.getBarGeometry(args.x, args.y, options),  
left = geometry.left,  
width = geometry.width,  
top = geometry.top,  
height = geometry.height,  
lineWidth = 2 * options.lineWidth;  
   
context.save();  
this.translate(context, options.horizontal);  
context.clearRect(  
left - lineWidth,  
Math.min(top, top + height) - lineWidth,  
width + 2 * lineWidth,  
Math.abs(height) + 2 * lineWidth  
);  
context.restore();  
},  
   
extendXRange : function (axis, data, options, bars) {  
this._extendRange(axis, data, options, bars);  
this.groups = (this.groups + 1) || 1;  
this.current = 0;  
},  
   
extendYRange : function (axis, data, options, bars) {  
this._extendRange(axis, data, options, bars);  
},  
_extendRange: function (axis, data, options, bars) {  
   
var  
max = axis.options.max;  
   
if (_.isNumber(max) || _.isString(max)) return;  
   
var  
newmin = axis.min,  
newmax = axis.max,  
horizontal = options.horizontal,  
orientation = axis.orientation,  
positiveSums = this.positiveSums || {},  
negativeSums = this.negativeSums || {},  
value, datum, index, j;  
   
// Sides of bars  
if ((orientation == 1 && !horizontal) || (orientation == -1 && horizontal)) {  
if (options.centered) {  
newmax = Math.max(axis.datamax + options.barWidth, newmax);  
newmin = Math.min(axis.datamin - options.barWidth, newmin);  
}  
}  
   
if (options.stacked &&  
((orientation == 1 && horizontal) || (orientation == -1 && !horizontal))){  
   
for (j = data.length; j--;) {  
value = data[j][(orientation == 1 ? 1 : 0)]+'';  
datum = data[j][(orientation == 1 ? 0 : 1)];  
   
// Positive  
if (datum > 0) {  
positiveSums[value] = (positiveSums[value] || 0) + datum;  
newmax = Math.max(newmax, positiveSums[value]);  
}  
   
// Negative  
else {  
negativeSums[value] = (negativeSums[value] || 0) + datum;  
newmin = Math.min(newmin, negativeSums[value]);  
}  
}  
}  
   
// End of bars  
if ((orientation == 1 && horizontal) || (orientation == -1 && !horizontal)) {  
if (options.topPadding && (axis.max === axis.datamax || (options.stacked && this.stackMax !== newmax))) {  
newmax += options.topPadding * (newmax - newmin);  
}  
}  
   
this.stackMin = newmin;  
this.stackMax = newmax;  
this.negativeSums = negativeSums;  
this.positiveSums = positiveSums;  
   
axis.max = newmax;  
axis.min = newmin;  
}  
   
}); });
   
/** Bubbles **/ /** Bubbles **/
Flotr.addType('bubbles', { Flotr.addType('bubbles', {
options: { options: {
show: false, // => setting to true will show radar chart, false will hide show: false, // => setting to true will show radar chart, false will hide
lineWidth: 2, // => line width in pixels lineWidth: 2, // => line width in pixels
fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
baseRadius: 2 // => ratio of the radar, against the plot size baseRadius: 2 // => ratio of the radar, against the plot size
}, },
draw : function (options) { draw: function (options) {
var var
context = options.context, context = options.context,
shadowSize = options.shadowSize; shadowSize = options.shadowSize;
   
context.save(); context.save();
context.lineWidth = options.lineWidth; context.lineWidth = options.lineWidth;
   
// Shadows // Shadows
context.fillStyle = 'rgba(0,0,0,0.05)'; context.fillStyle = 'rgba(0,0,0,0.05)';
context.strokeStyle = 'rgba(0,0,0,0.05)'; context.strokeStyle = 'rgba(0,0,0,0.05)';
this.plot(options, shadowSize / 2); this.plot(options, shadowSize / 2);
context.strokeStyle = 'rgba(0,0,0,0.1)'; context.strokeStyle = 'rgba(0,0,0,0.1)';
this.plot(options, shadowSize / 4); this.plot(options, shadowSize / 4);
   
// Chart // Chart
context.strokeStyle = options.color; context.strokeStyle = options.color;
context.fillStyle = options.fillStyle; context.fillStyle = options.fillStyle;
this.plot(options); this.plot(options);
   
context.restore(); context.restore();
}, },
plot : function (options, offset) { plot: function (options, offset) {
   
var var
data = options.data, data = options.data,
context = options.context, context = options.context,
geometry, geometry,
i, x, y, z; i, x, y, z;
   
offset = offset || 0; offset = offset || 0;
   
for (i = 0; i < data.length; ++i){ for (i = 0; i < data.length; ++i) {
   
geometry = this.getGeometry(data[i], options); geometry = this.getGeometry(data[i], options);
   
context.beginPath(); context.beginPath();
context.arc(geometry.x + offset, geometry.y + offset, geometry.z, 0, 2 * Math.PI, true); context.arc(geometry.x + offset, geometry.y + offset, geometry.z, 0, 2 * Math.PI, true);
context.stroke(); context.stroke();
if (options.fill) context.fill(); if (options.fill) context.fill();
context.closePath(); context.closePath();
  }
  },
  getGeometry: function (point, options) {
  return {
  x: options.xScale(point[0]),
  y: options.yScale(point[1]),
  z: point[2] * options.baseRadius
  };
  },
  hit: function (options) {
  var
  data = options.data,
  args = options.args,
  mouse = args[0],
  n = args[1],
  x = mouse.x,
  y = mouse.y,
  distance,
  geometry,
  dx, dy;
   
  n.best = n.best || Number.MAX_VALUE;
   
  for (i = data.length; i--;) {
  geometry = this.getGeometry(data[i], options);
   
  dx = geometry.x - options.xScale(x);
  dy = geometry.y - options.yScale(y);
  distance = Math.sqrt(dx * dx + dy * dy);
   
  if (distance < geometry.z && geometry.z < n.best) {
  n.x = data[i][0];
  n.y = data[i][1];
  n.index = i;
  n.seriesIndex = options.index;
  n.best = geometry.z;
  }
  }
  },
  drawHit: function (options) {
   
  var
  context = options.context,
  geometry = this.getGeometry(options.data[options.args.index], options);
   
  context.save();
  context.lineWidth = options.lineWidth;
  context.fillStyle = options.fillStyle;
  context.strokeStyle = options.color;
  context.beginPath();
  context.arc(geometry.x, geometry.y, geometry.z, 0, 2 * Math.PI, true);
  context.fill();
  context.stroke();
  context.closePath();
  context.restore();
  },
  clearHit: function (options) {
   
  var
  context = options.context,
  geometry = this.getGeometry(options.data[options.args.index], options),
  offset = geometry.z + options.lineWidth;
   
  context.save();
  context.clearRect(
  geometry.x - offset,
  geometry.y - offset,
  2 * offset,
  2 * offset
  );
  context.restore();
} }
}, // TODO Add a hit calculation method (like pie)
getGeometry : function (point, options) {  
return {  
x : options.xScale(point[0]),  
y : options.yScale(point[1]),  
z : point[2] * options.baseRadius  
};  
},  
hit : function (options) {  
var  
data = options.data,  
args = options.args,  
mouse = args[0],  
n = args[1],  
x = mouse.x,  
y = mouse.y,  
distance,  
geometry,  
dx, dy;  
   
n.best = n.best || Number.MAX_VALUE;  
   
for (i = data.length; i--;) {  
geometry = this.getGeometry(data[i], options);  
   
dx = geometry.x - options.xScale(x);  
dy = geometry.y - options.yScale(y);  
distance = Math.sqrt(dx * dx + dy * dy);  
   
if (distance < geometry.z && geometry.z < n.best) {  
n.x = data[i][0];  
n.y = data[i][1];  
n.index = i;  
n.seriesIndex = options.index;  
n.best = geometry.z;  
}  
}  
},  
drawHit : function (options) {  
   
var  
context = options.context,  
geometry = this.getGeometry(options.data[options.args.index], options);  
   
context.save();  
context.lineWidth = options.lineWidth;  
context.fillStyle = options.fillStyle;  
context.strokeStyle = options.color;  
context.beginPath();  
context.arc(geometry.x, geometry.y, geometry.z, 0, 2 * Math.PI, true);  
context.fill();  
context.stroke();  
context.closePath();  
context.restore();  
},  
clearHit : function (options) {  
   
var  
context = options.context,  
geometry = this.getGeometry(options.data[options.args.index], options),  
offset = geometry.z + options.lineWidth;  
   
context.save();  
context.clearRect(  
geometry.x - offset,  
geometry.y - offset,  
2 * offset,  
2 * offset  
);  
context.restore();  
}  
// TODO Add a hit calculation method (like pie)  
}); });
   
/** Candles **/ /** Candles **/
Flotr.addType('candles', { Flotr.addType('candles', {
options: { options: {
show: false, // => setting to true will show candle sticks, false will hide show: false, // => setting to true will show candle sticks, false will hide
lineWidth: 1, // => in pixels lineWidth: 1, // => in pixels
wickLineWidth: 1, // => in pixels wickLineWidth: 1, // => in pixels
candleWidth: 0.6, // => in units of the x axis candleWidth: 0.6, // => in units of the x axis
fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
upFillColor: '#00A8F0',// => up sticks fill color upFillColor: '#00A8F0',// => up sticks fill color
downFillColor: '#CB4B4B',// => down sticks fill color downFillColor: '#CB4B4B',// => down sticks fill color
fillOpacity: 0.5, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.5, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
// TODO Test this barcharts option. // TODO Test this barcharts option.
barcharts: false // => draw as barcharts (not standard bars but financial barcharts) barcharts: false // => draw as barcharts (not standard bars but financial barcharts)
}, },
   
draw : function (options) { draw: function (options) {
   
var var
context = options.context; context = options.context;
   
context.save();  
context.lineJoin = 'miter';  
context.lineCap = 'butt';  
// @TODO linewidth not interpreted the right way.  
context.lineWidth = options.wickLineWidth || options.lineWidth;  
   
this.plot(options);  
   
context.restore();  
},  
   
plot : function (options) {  
   
var  
data = options.data,  
context = options.context,  
xScale = options.xScale,  
yScale = options.yScale,  
width = options.candleWidth / 2,  
shadowSize = options.shadowSize,  
lineWidth = options.lineWidth,  
wickLineWidth = options.wickLineWidth,  
pixelOffset = (wickLineWidth % 2) / 2,  
color,  
datum, x, y,  
open, high, low, close,  
left, right, bottom, top, bottom2, top2,  
i;  
   
if (data.length < 1) return;  
   
for (i = 0; i < data.length; i++) {  
datum = data[i];  
x = datum[0];  
open = datum[1];  
high = datum[2];  
low = datum[3];  
close = datum[4];  
left = xScale(x - width);  
right = xScale(x + width);  
bottom = yScale(low);  
top = yScale(high);  
bottom2 = yScale(Math.min(open, close));  
top2 = yScale(Math.max(open, close));  
   
/*  
// TODO skipping  
if(right < xa.min || left > xa.max || top < ya.min || bottom > ya.max)  
continue;  
*/  
   
color = options[open > close ? 'downFillColor' : 'upFillColor'];  
   
// Fill the candle.  
// TODO Test the barcharts option  
if (options.fill && !options.barcharts) {  
context.fillStyle = 'rgba(0,0,0,0.05)';  
context.fillRect(left + shadowSize, top2 + shadowSize, right - left, bottom2 - top2);  
context.save(); context.save();
context.globalAlpha = options.fillOpacity; context.lineJoin = 'miter';
context.fillStyle = color; context.lineCap = 'butt';
context.fillRect(left, top2 + lineWidth, right - left, bottom2 - top2); // @TODO linewidth not interpreted the right way.
  context.lineWidth = options.wickLineWidth || options.lineWidth;
   
  this.plot(options);
   
context.restore(); context.restore();
} },
   
// Draw candle outline/border, high, low. plot: function (options) {
if (lineWidth || wickLineWidth) {  
  var
x = Math.floor((left + right) / 2) + pixelOffset; data = options.data,
  context = options.context,
context.strokeStyle = color; xScale = options.xScale,
context.beginPath(); yScale = options.yScale,
  width = options.candleWidth / 2,
// TODO Again with the bartcharts shadowSize = options.shadowSize,
if (options.barcharts) { lineWidth = options.lineWidth,
  wickLineWidth = options.wickLineWidth,
context.moveTo(x, Math.floor(top + width)); pixelOffset = (wickLineWidth % 2) / 2,
context.lineTo(x, Math.floor(bottom + width)); color,
  datum, x, y,
y = Math.floor(open + width) + 0.5; open, high, low, close,
context.moveTo(Math.floor(left) + pixelOffset, y); left, right, bottom, top, bottom2, top2,
context.lineTo(x, y); i;
   
y = Math.floor(close + width) + 0.5; if (data.length < 1) return;
context.moveTo(Math.floor(right) + pixelOffset, y);  
context.lineTo(x, y); for (i = 0; i < data.length; i++) {
} else { datum = data[i];
context.strokeRect(left, top2 + lineWidth, right - left, bottom2 - top2); x = datum[0];
  open = datum[1];
context.moveTo(x, Math.floor(top2 + lineWidth)); high = datum[2];
context.lineTo(x, Math.floor(top + lineWidth)); low = datum[3];
context.moveTo(x, Math.floor(bottom2 + lineWidth)); close = datum[4];
context.lineTo(x, Math.floor(bottom + lineWidth)); left = xScale(x - width);
} right = xScale(x + width);
  bottom = yScale(low);
context.closePath(); top = yScale(high);
context.stroke(); bottom2 = yScale(Math.min(open, close));
} top2 = yScale(Math.max(open, close));
   
  /*
  // TODO skipping
  if(right < xa.min || left > xa.max || top < ya.min || bottom > ya.max)
  continue;
  */
   
  color = options[open > close ? 'downFillColor' : 'upFillColor'];
   
  // Fill the candle.
  // TODO Test the barcharts option
  if (options.fill && !options.barcharts) {
  context.fillStyle = 'rgba(0,0,0,0.05)';
  context.fillRect(left + shadowSize, top2 + shadowSize, right - left, bottom2 - top2);
  context.save();
  context.globalAlpha = options.fillOpacity;
  context.fillStyle = color;
  context.fillRect(left, top2 + lineWidth, right - left, bottom2 - top2);
  context.restore();
  }
   
  // Draw candle outline/border, high, low.
  if (lineWidth || wickLineWidth) {
   
  x = Math.floor((left + right) / 2) + pixelOffset;
   
  context.strokeStyle = color;
  context.beginPath();
   
  // TODO Again with the bartcharts
  if (options.barcharts) {
   
  context.moveTo(x, Math.floor(top + width));
  context.lineTo(x, Math.floor(bottom + width));
   
  y = Math.floor(open + width) + 0.5;
  context.moveTo(Math.floor(left) + pixelOffset, y);
  context.lineTo(x, y);
   
  y = Math.floor(close + width) + 0.5;
  context.moveTo(Math.floor(right) + pixelOffset, y);
  context.lineTo(x, y);
  } else {
  context.strokeRect(left, top2 + lineWidth, right - left, bottom2 - top2);
   
  context.moveTo(x, Math.floor(top2 + lineWidth));
  context.lineTo(x, Math.floor(top + lineWidth));
  context.moveTo(x, Math.floor(bottom2 + lineWidth));
  context.lineTo(x, Math.floor(bottom + lineWidth));
  }
   
  context.closePath();
  context.stroke();
  }
  }
  },
  extendXRange: function (axis, data, options) {
  if (axis.options.max === null) {
  axis.max = Math.max(axis.datamax + 0.5, axis.max);
  axis.min = Math.min(axis.datamin - 0.5, axis.min);
  }
} }
},  
extendXRange: function (axis, data, options) {  
if (axis.options.max === null) {  
axis.max = Math.max(axis.datamax + 0.5, axis.max);  
axis.min = Math.min(axis.datamin - 0.5, axis.min);  
}  
}  
}); });
   
/** Gantt /** Gantt
* Base on data in form [s,y,d] where: * Base on data in form [s,y,d] where:
* y - executor or simply y value * y - executor or simply y value
* s - task start value * s - task start value
* d - task duration * d - task duration
* **/ * **/
Flotr.addType('gantt', { Flotr.addType('gantt', {
options: { options: {
show: false, // => setting to true will show gantt, false will hide show: false, // => setting to true will show gantt, false will hide
lineWidth: 2, // => in pixels lineWidth: 2, // => in pixels
barWidth: 1, // => in units of the x axis barWidth: 1, // => in units of the x axis
fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
fillColor: null, // => fill color fillColor: null, // => fill color
fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
centered: true // => center the bars to their x axis value centered: true // => center the bars to their x axis value
}, },
/**  
* Draws gantt series in the canvas element.  
* @param {Object} series - Series with options.gantt.show = true.  
*/  
draw: function(series) {  
var ctx = this.ctx,  
bw = series.gantt.barWidth,  
lw = Math.min(series.gantt.lineWidth, bw);  
   
ctx.save();  
ctx.translate(this.plotOffset.left, this.plotOffset.top);  
ctx.lineJoin = 'miter';  
   
/** /**
* @todo linewidth not interpreted the right way. * Draws gantt series in the canvas element.
  * @param {Object} series - Series with options.gantt.show = true.
*/ */
ctx.lineWidth = lw; draw: function (series) {
ctx.strokeStyle = series.color; var ctx = this.ctx,
  bw = series.gantt.barWidth,
ctx.save(); lw = Math.min(series.gantt.lineWidth, bw);
this.gantt.plotShadows(series, bw, 0, series.gantt.fill);  
ctx.restore(); ctx.save();
  ctx.translate(this.plotOffset.left, this.plotOffset.top);
if(series.gantt.fill){ ctx.lineJoin = 'miter';
var color = series.gantt.fillColor || series.color;  
ctx.fillStyle = this.processColor(color, {opacity: series.gantt.fillOpacity}); /**
  * @todo linewidth not interpreted the right way.
  */
  ctx.lineWidth = lw;
  ctx.strokeStyle = series.color;
   
  ctx.save();
  this.gantt.plotShadows(series, bw, 0, series.gantt.fill);
  ctx.restore();
   
  if (series.gantt.fill) {
  var color = series.gantt.fillColor || series.color;
  ctx.fillStyle = this.processColor(color, {opacity: series.gantt.fillOpacity});
  }
   
  this.gantt.plot(series, bw, 0, series.gantt.fill);
  ctx.restore();
  },
  plot: function (series, barWidth, offset, fill) {
  var data = series.data;
  if (data.length < 1) return;
   
  var xa = series.xaxis,
  ya = series.yaxis,
  ctx = this.ctx, i;
   
  for (i = 0; i < data.length; i++) {
  var y = data[i][0],
  s = data[i][1],
  d = data[i][2],
  drawLeft = true, drawTop = true, drawRight = true;
   
  if (s === null || d === null) continue;
   
  var left = s,
  right = s + d,
  bottom = y - (series.gantt.centered ? barWidth / 2 : 0),
  top = y + barWidth - (series.gantt.centered ? barWidth / 2 : 0);
   
  if (right < xa.min || left > xa.max || top < ya.min || bottom > ya.max)
  continue;
   
  if (left < xa.min) {
  left = xa.min;
  drawLeft = false;
  }
   
  if (right > xa.max) {
  right = xa.max;
  if (xa.lastSerie != series)
  drawTop = false;
  }
   
  if (bottom < ya.min)
  bottom = ya.min;
   
  if (top > ya.max) {
  top = ya.max;
  if (ya.lastSerie != series)
  drawTop = false;
  }
   
  /**
  * Fill the bar.
  */
  if (fill) {
  ctx.beginPath();
  ctx.moveTo(xa.d2p(left), ya.d2p(bottom) + offset);
  ctx.lineTo(xa.d2p(left), ya.d2p(top) + offset);
  ctx.lineTo(xa.d2p(right), ya.d2p(top) + offset);
  ctx.lineTo(xa.d2p(right), ya.d2p(bottom) + offset);
  ctx.fill();
  ctx.closePath();
  }
   
  /**
  * Draw bar outline/border.
  */
  if (series.gantt.lineWidth && (drawLeft || drawRight || drawTop)) {
  ctx.beginPath();
  ctx.moveTo(xa.d2p(left), ya.d2p(bottom) + offset);
   
  ctx[drawLeft ? 'lineTo' : 'moveTo'](xa.d2p(left), ya.d2p(top) + offset);
  ctx[drawTop ? 'lineTo' : 'moveTo'](xa.d2p(right), ya.d2p(top) + offset);
  ctx[drawRight ? 'lineTo' : 'moveTo'](xa.d2p(right), ya.d2p(bottom) + offset);
   
  ctx.stroke();
  ctx.closePath();
  }
  }
  },
  plotShadows: function (series, barWidth, offset) {
  var data = series.data;
  if (data.length < 1) return;
   
  var i, y, s, d,
  xa = series.xaxis,
  ya = series.yaxis,
  ctx = this.ctx,
  sw = this.options.shadowSize;
   
  for (i = 0; i < data.length; i++) {
  y = data[i][0];
  s = data[i][1];
  d = data[i][2];
   
  if (s === null || d === null) continue;
   
  var left = s,
  right = s + d,
  bottom = y - (series.gantt.centered ? barWidth / 2 : 0),
  top = y + barWidth - (series.gantt.centered ? barWidth / 2 : 0);
   
  if (right < xa.min || left > xa.max || top < ya.min || bottom > ya.max)
  continue;
   
  if (left < xa.min) left = xa.min;
  if (right > xa.max) right = xa.max;
  if (bottom < ya.min) bottom = ya.min;
  if (top > ya.max) top = ya.max;
   
  var width = xa.d2p(right) - xa.d2p(left) - ((xa.d2p(right) + sw <= this.plotWidth) ? 0 : sw);
  var height = ya.d2p(bottom) - ya.d2p(top) - ((ya.d2p(bottom) + sw <= this.plotHeight) ? 0 : sw );
   
  ctx.fillStyle = 'rgba(0,0,0,0.05)';
  ctx.fillRect(Math.min(xa.d2p(left) + sw, this.plotWidth), Math.min(ya.d2p(top) + sw, this.plotHeight), width, height);
  }
  },
  extendXRange: function (axis) {
  if (axis.options.max === null) {
  var newmin = axis.min,
  newmax = axis.max,
  i, j, x, s, g,
  stackedSumsPos = {},
  stackedSumsNeg = {},
  lastSerie = null;
   
  for (i = 0; i < this.series.length; ++i) {
  s = this.series[i];
  g = s.gantt;
   
  if (g.show && s.xaxis == axis) {
  for (j = 0; j < s.data.length; j++) {
  if (g.show) {
  y = s.data[j][0] + '';
  stackedSumsPos[y] = Math.max((stackedSumsPos[y] || 0), s.data[j][1] + s.data[j][2]);
  lastSerie = s;
  }
  }
  for (j in stackedSumsPos) {
  newmax = Math.max(stackedSumsPos[j], newmax);
  }
  }
  }
  axis.lastSerie = lastSerie;
  axis.max = newmax;
  axis.min = newmin;
  }
  },
  extendYRange: function (axis) {
  if (axis.options.max === null) {
  var newmax = Number.MIN_VALUE,
  newmin = Number.MAX_VALUE,
  i, j, s, g,
  stackedSumsPos = {},
  stackedSumsNeg = {},
  lastSerie = null;
   
  for (i = 0; i < this.series.length; ++i) {
  s = this.series[i];
  g = s.gantt;
   
  if (g.show && !s.hide && s.yaxis == axis) {
  var datamax = Number.MIN_VALUE, datamin = Number.MAX_VALUE;
  for (j = 0; j < s.data.length; j++) {
  datamax = Math.max(datamax, s.data[j][0]);
  datamin = Math.min(datamin, s.data[j][0]);
  }
   
  if (g.centered) {
  newmax = Math.max(datamax + 0.5, newmax);
  newmin = Math.min(datamin - 0.5, newmin);
  }
  else {
  newmax = Math.max(datamax + 1, newmax);
  newmin = Math.min(datamin, newmin);
  }
  // For normal horizontal bars
  if (g.barWidth + datamax > newmax) {
  newmax = axis.max + g.barWidth;
  }
  }
  }
  axis.lastSerie = lastSerie;
  axis.max = newmax;
  axis.min = newmin;
  axis.tickSize = Flotr.getTickSize(axis.options.noTicks, newmin, newmax, axis.options.tickDecimals);
  }
} }
   
this.gantt.plot(series, bw, 0, series.gantt.fill);  
ctx.restore();  
},  
plot: function(series, barWidth, offset, fill){  
var data = series.data;  
if(data.length < 1) return;  
   
var xa = series.xaxis,  
ya = series.yaxis,  
ctx = this.ctx, i;  
   
for(i = 0; i < data.length; i++){  
var y = data[i][0],  
s = data[i][1],  
d = data[i][2],  
drawLeft = true, drawTop = true, drawRight = true;  
   
if (s === null || d === null) continue;  
   
var left = s,  
right = s + d,  
bottom = y - (series.gantt.centered ? barWidth/2 : 0),  
top = y + barWidth - (series.gantt.centered ? barWidth/2 : 0);  
   
if(right < xa.min || left > xa.max || top < ya.min || bottom > ya.max)  
continue;  
   
if(left < xa.min){  
left = xa.min;  
drawLeft = false;  
}  
   
if(right > xa.max){  
right = xa.max;  
if (xa.lastSerie != series)  
drawTop = false;  
}  
   
if(bottom < ya.min)  
bottom = ya.min;  
   
if(top > ya.max){  
top = ya.max;  
if (ya.lastSerie != series)  
drawTop = false;  
}  
   
/**  
* Fill the bar.  
*/  
if(fill){  
ctx.beginPath();  
ctx.moveTo(xa.d2p(left), ya.d2p(bottom) + offset);  
ctx.lineTo(xa.d2p(left), ya.d2p(top) + offset);  
ctx.lineTo(xa.d2p(right), ya.d2p(top) + offset);  
ctx.lineTo(xa.d2p(right), ya.d2p(bottom) + offset);  
ctx.fill();  
ctx.closePath();  
}  
   
/**  
* Draw bar outline/border.  
*/  
if(series.gantt.lineWidth && (drawLeft || drawRight || drawTop)){  
ctx.beginPath();  
ctx.moveTo(xa.d2p(left), ya.d2p(bottom) + offset);  
   
ctx[drawLeft ?'lineTo':'moveTo'](xa.d2p(left), ya.d2p(top) + offset);  
ctx[drawTop ?'lineTo':'moveTo'](xa.d2p(right), ya.d2p(top) + offset);  
ctx[drawRight?'lineTo':'moveTo'](xa.d2p(right), ya.d2p(bottom) + offset);  
   
ctx.stroke();  
ctx.closePath();  
}  
}  
},  
plotShadows: function(series, barWidth, offset){  
var data = series.data;  
if(data.length < 1) return;  
   
var i, y, s, d,  
xa = series.xaxis,  
ya = series.yaxis,  
ctx = this.ctx,  
sw = this.options.shadowSize;  
   
for(i = 0; i < data.length; i++){  
y = data[i][0];  
s = data[i][1];  
d = data[i][2];  
   
if (s === null || d === null) continue;  
   
var left = s,  
right = s + d,  
bottom = y - (series.gantt.centered ? barWidth/2 : 0),  
top = y + barWidth - (series.gantt.centered ? barWidth/2 : 0);  
   
if(right < xa.min || left > xa.max || top < ya.min || bottom > ya.max)  
continue;  
   
if(left < xa.min) left = xa.min;  
if(right > xa.max) right = xa.max;  
if(bottom < ya.min) bottom = ya.min;  
if(top > ya.max) top = ya.max;  
   
var width = xa.d2p(right)-xa.d2p(left)-((xa.d2p(right)+sw <= this.plotWidth) ? 0 : sw);  
var height = ya.d2p(bottom)-ya.d2p(top)-((ya.d2p(bottom)+sw <= this.plotHeight) ? 0 : sw );  
   
ctx.fillStyle = 'rgba(0,0,0,0.05)';  
ctx.fillRect(Math.min(xa.d2p(left)+sw, this.plotWidth), Math.min(ya.d2p(top)+sw, this.plotHeight), width, height);  
}  
},  
extendXRange: function(axis) {  
if(axis.options.max === null){  
var newmin = axis.min,  
newmax = axis.max,  
i, j, x, s, g,  
stackedSumsPos = {},  
stackedSumsNeg = {},  
lastSerie = null;  
   
for(i = 0; i < this.series.length; ++i){  
s = this.series[i];  
g = s.gantt;  
   
if(g.show && s.xaxis == axis) {  
for (j = 0; j < s.data.length; j++) {  
if (g.show) {  
y = s.data[j][0]+'';  
stackedSumsPos[y] = Math.max((stackedSumsPos[y] || 0), s.data[j][1]+s.data[j][2]);  
lastSerie = s;  
}  
}  
for (j in stackedSumsPos) {  
newmax = Math.max(stackedSumsPos[j], newmax);  
}  
}  
}  
axis.lastSerie = lastSerie;  
axis.max = newmax;  
axis.min = newmin;  
}  
},  
extendYRange: function(axis){  
if(axis.options.max === null){  
var newmax = Number.MIN_VALUE,  
newmin = Number.MAX_VALUE,  
i, j, s, g,  
stackedSumsPos = {},  
stackedSumsNeg = {},  
lastSerie = null;  
   
for(i = 0; i < this.series.length; ++i){  
s = this.series[i];  
g = s.gantt;  
   
if (g.show && !s.hide && s.yaxis == axis) {  
var datamax = Number.MIN_VALUE, datamin = Number.MAX_VALUE;  
for(j=0; j < s.data.length; j++){  
datamax = Math.max(datamax,s.data[j][0]);  
datamin = Math.min(datamin,s.data[j][0]);  
}  
   
if (g.centered) {  
newmax = Math.max(datamax + 0.5, newmax);  
newmin = Math.min(datamin - 0.5, newmin);  
}  
else {  
newmax = Math.max(datamax + 1, newmax);  
newmin = Math.min(datamin, newmin);  
}  
// For normal horizontal bars  
if (g.barWidth + datamax > newmax){  
newmax = axis.max + g.barWidth;  
}  
}  
}  
axis.lastSerie = lastSerie;  
axis.max = newmax;  
axis.min = newmin;  
axis.tickSize = Flotr.getTickSize(axis.options.noTicks, newmin, newmax, axis.options.tickDecimals);  
}  
}  
}); });
   
/** Markers **/ /** Markers **/
/** /**
* Formats the marker labels. * Formats the marker labels.
* @param {Object} obj - Marker value Object {x:..,y:..} * @param {Object} obj - Marker value Object {x:..,y:..}
* @return {String} Formatted marker string * @return {String} Formatted marker string
*/ */
(function () { (function () {
   
Flotr.defaultMarkerFormatter = function(obj){ Flotr.defaultMarkerFormatter = function (obj) {
return (Math.round(obj.y*100)/100)+''; return (Math.round(obj.y * 100) / 100) + '';
}; };
   
Flotr.addType('markers', { Flotr.addType('markers', {
options: { options: {
show: false, // => setting to true will show markers, false will hide show: false, // => setting to true will show markers, false will hide
lineWidth: 1, // => line width of the rectangle around the marker lineWidth: 1, // => line width of the rectangle around the marker
color: '#000000', // => text color color: '#000000', // => text color
fill: false, // => fill or not the marekers' rectangles fill: false, // => fill or not the marekers' rectangles
fillColor: "#FFFFFF", // => fill color fillColor: "#FFFFFF", // => fill color
fillOpacity: 0.4, // => fill opacity fillOpacity: 0.4, // => fill opacity
stroke: false, // => draw the rectangle around the markers stroke: false, // => draw the rectangle around the markers
position: 'ct', // => the markers position (vertical align: b, m, t, horizontal align: l, c, r) position: 'ct', // => the markers position (vertical align: b, m, t, horizontal align: l, c, r)
verticalMargin: 0, // => the margin between the point and the text. verticalMargin: 0, // => the margin between the point and the text.
labelFormatter: Flotr.defaultMarkerFormatter, labelFormatter: Flotr.defaultMarkerFormatter,
fontSize: Flotr.defaultOptions.fontSize, fontSize: Flotr.defaultOptions.fontSize,
stacked: false, // => true if markers should be stacked stacked: false, // => true if markers should be stacked
stackingType: 'b', // => define staching behavior, (b- bars like, a - area like) (see Issue 125 for details) stackingType: 'b', // => define staching behavior, (b- bars like, a - area like) (see Issue 125 for details)
horizontal: false // => true if markers should be horizontal (For now only in a case on horizontal stacked bars, stacks should be calculated horizontaly) horizontal: false // => true if markers should be horizontal (For now only in a case on horizontal stacked bars, stacks should be calculated horizontaly)
}, },
   
// TODO test stacked markers. // TODO test stacked markers.
stack : { stack: {
positive : [], positive: [],
negative : [], negative: [],
values : [] values: []
}, },
   
draw : function (options) { draw: function (options) {
   
var var
data = options.data, data = options.data,
context = options.context, context = options.context,
stack = options.stacked ? options.stack : false, stack = options.stacked ? options.stack : false,
stackType = options.stackingType, stackType = options.stackingType,
stackOffsetNeg, stackOffsetNeg,
stackOffsetPos, stackOffsetPos,
stackOffset, stackOffset,
i, x, y, label; i, x, y, label;
   
context.save(); context.save();
context.lineJoin = 'round'; context.lineJoin = 'round';
context.lineWidth = options.lineWidth; context.lineWidth = options.lineWidth;
context.strokeStyle = 'rgba(0,0,0,0.5)'; context.strokeStyle = 'rgba(0,0,0,0.5)';
context.fillStyle = options.fillStyle; context.fillStyle = options.fillStyle;
   
function stackPos (a, b) { function stackPos(a, b) {
stackOffsetPos = stack.negative[a] || 0; stackOffsetPos = stack.negative[a] || 0;
stackOffsetNeg = stack.positive[a] || 0; stackOffsetNeg = stack.positive[a] || 0;
if (b > 0) { if (b > 0) {
stack.positive[a] = stackOffsetPos + b; stack.positive[a] = stackOffsetPos + b;
return stackOffsetPos + b; return stackOffsetPos + b;
} else { } else {
stack.negative[a] = stackOffsetNeg + b; stack.negative[a] = stackOffsetNeg + b;
return stackOffsetNeg + b; return stackOffsetNeg + b;
} }
  }
   
  for (i = 0; i < data.length; ++i) {
   
  x = data[i][0];
  y = data[i][1];
   
  if (stack) {
  if (stackType == 'b') {
  if (options.horizontal) y = stackPos(y, x);
  else x = stackPos(x, y);
  } else if (stackType == 'a') {
  stackOffset = stack.values[x] || 0;
  stack.values[x] = stackOffset + y;
  y = stackOffset + y;
  }
  }
   
  label = options.labelFormatter({x: x, y: y, index: i, data: data});
  this.plot(options.xScale(x), options.yScale(y), label, options);
  }
  context.restore();
  },
  plot: function (x, y, label, options) {
  var context = options.context;
  if (isImage(label) && !label.complete) {
  throw 'Marker image not loaded.';
  } else {
  this._plot(x, y, label, options);
  }
  },
   
  _plot: function (x, y, label, options) {
  var context = options.context,
  margin = 2,
  left = x,
  top = y,
  dim;
   
  if (isImage(label))
  dim = {height: label.height, width: label.width};
  else
  dim = options.text.canvas(label);
   
  dim.width = Math.floor(dim.width + margin * 2);
  dim.height = Math.floor(dim.height + margin * 2);
   
  if (options.position.indexOf('c') != -1) left -= dim.width / 2 + margin;
  else if (options.position.indexOf('l') != -1) left -= dim.width;
   
  if (options.position.indexOf('m') != -1) top -= dim.height / 2 + margin;
  else if (options.position.indexOf('t') != -1) top -= dim.height + options.verticalMargin;
  else top += options.verticalMargin;
   
  left = Math.floor(left) + 0.5;
  top = Math.floor(top) + 0.5;
   
  if (options.fill)
  context.fillRect(left, top, dim.width, dim.height);
   
  if (options.stroke)
  context.strokeRect(left, top, dim.width, dim.height);
   
  if (isImage(label))
  context.drawImage(label, left + margin, top + margin);
  else
  Flotr.drawText(context, label, left + margin, top + margin, {textBaseline: 'top', textAlign: 'left', size: options.fontSize, color: options.color});
  }
  });
   
  function isImage(i) {
  return typeof i === 'object' && i.constructor && (Image ? true : i.constructor === Image);
} }
   
for (i = 0; i < data.length; ++i) {  
   
x = data[i][0];  
y = data[i][1];  
   
if (stack) {  
if (stackType == 'b') {  
if (options.horizontal) y = stackPos(y, x);  
else x = stackPos(x, y);  
} else if (stackType == 'a') {  
stackOffset = stack.values[x] || 0;  
stack.values[x] = stackOffset + y;  
y = stackOffset + y;  
}  
}  
   
label = options.labelFormatter({x: x, y: y, index: i, data : data});  
this.plot(options.xScale(x), options.yScale(y), label, options);  
}  
context.restore();  
},  
plot: function(x, y, label, options) {  
var context = options.context;  
if (isImage(label) && !label.complete) {  
throw 'Marker image not loaded.';  
} else {  
this._plot(x, y, label, options);  
}  
},  
   
_plot: function(x, y, label, options) {  
var context = options.context,  
margin = 2,  
left = x,  
top = y,  
dim;  
   
if (isImage(label))  
dim = {height : label.height, width: label.width};  
else  
dim = options.text.canvas(label);  
   
dim.width = Math.floor(dim.width+margin*2);  
dim.height = Math.floor(dim.height+margin*2);  
   
if (options.position.indexOf('c') != -1) left -= dim.width/2 + margin;  
else if (options.position.indexOf('l') != -1) left -= dim.width;  
   
if (options.position.indexOf('m') != -1) top -= dim.height/2 + margin;  
else if (options.position.indexOf('t') != -1) top -= dim.height + options.verticalMargin;  
else top += options.verticalMargin;  
   
left = Math.floor(left)+0.5;  
top = Math.floor(top)+0.5;  
   
if(options.fill)  
context.fillRect(left, top, dim.width, dim.height);  
   
if(options.stroke)  
context.strokeRect(left, top, dim.width, dim.height);  
   
if (isImage(label))  
context.drawImage(label, left+margin, top+margin);  
else  
Flotr.drawText(context, label, left+margin, top+margin, {textBaseline: 'top', textAlign: 'left', size: options.fontSize, color: options.color});  
}  
});  
   
function isImage (i) {  
return typeof i === 'object' && i.constructor && (Image ? true : i.constructor === Image);  
}  
   
})(); })();
   
/** Pie **/ /** Pie **/
/** /**
* Formats the pies labels. * Formats the pies labels.
* @param {Object} slice - Slice object * @param {Object} slice - Slice object
* @return {String} Formatted pie label string * @return {String} Formatted pie label string
*/ */
(function () { (function () {
   
var  
_ = Flotr._;  
   
Flotr.defaultPieLabelFormatter = function (total, value) {  
return (100 * value / total).toFixed(2)+'%';  
};  
   
Flotr.addType('pie', {  
options: {  
show: false, // => setting to true will show bars, false will hide  
lineWidth: 1, // => in pixels  
fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill  
fillColor: null, // => fill color  
fillOpacity: 0.6, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill  
explode: 6, // => the number of pixels the splices will be far from the center  
sizeRatio: 0.6, // => the size ratio of the pie relative to the plot  
startAngle: Math.PI/4, // => the first slice start angle  
labelFormatter: Flotr.defaultPieLabelFormatter,  
pie3D: false, // => whether to draw the pie in 3 dimenstions or not (ineffective)  
pie3DviewAngle: (Math.PI/2 * 0.8),  
pie3DspliceThickness: 20  
},  
   
draw : function (options) {  
   
// TODO 3D charts what?  
   
var var
data = options.data, _ = Flotr._;
context = options.context,  
canvas = context.canvas, Flotr.defaultPieLabelFormatter = function (total, value) {
lineWidth = options.lineWidth, return (100 * value / total).toFixed(2) + '%';
shadowSize = options.shadowSize, };
sizeRatio = options.sizeRatio,  
height = options.height, Flotr.addType('pie', {
width = options.width, options: {
explode = options.explode, show: false, // => setting to true will show bars, false will hide
color = options.color, lineWidth: 1, // => in pixels
fill = options.fill, fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
fillStyle = options.fillStyle, fillColor: null, // => fill color
radius = Math.min(canvas.width, canvas.height) * sizeRatio / 2, fillOpacity: 0.6, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
value = data[0][1], explode: 6, // => the number of pixels the splices will be far from the center
html = [], sizeRatio: 0.6, // => the size ratio of the pie relative to the plot
vScale = 1,//Math.cos(series.pie.viewAngle); startAngle: Math.PI / 4, // => the first slice start angle
measure = Math.PI * 2 * value / this.total, labelFormatter: Flotr.defaultPieLabelFormatter,
startAngle = this.startAngle || (2 * Math.PI * options.startAngle), // TODO: this initial startAngle is already in radians (fixing will be test-unstable) pie3D: false, // => whether to draw the pie in 3 dimenstions or not (ineffective)
endAngle = startAngle + measure, pie3DviewAngle: (Math.PI / 2 * 0.8),
bisection = startAngle + measure / 2, pie3DspliceThickness: 20
label = options.labelFormatter(this.total, value), },
//plotTickness = Math.sin(series.pie.viewAngle)*series.pie.spliceThickness / vScale;  
explodeCoeff = explode + radius + 4, draw: function (options) {
distX = Math.cos(bisection) * explodeCoeff,  
distY = Math.sin(bisection) * explodeCoeff, // TODO 3D charts what?
textAlign = distX < 0 ? 'right' : 'left',  
textBaseline = distY > 0 ? 'top' : 'bottom', var
style, data = options.data,
x, y, context = options.context,
distX, distY; canvas = context.canvas,
  lineWidth = options.lineWidth,
context.save(); shadowSize = options.shadowSize,
context.translate(width / 2, height / 2); sizeRatio = options.sizeRatio,
context.scale(1, vScale); height = options.height,
  width = options.width,
x = Math.cos(bisection) * explode; explode = options.explode,
y = Math.sin(bisection) * explode; color = options.color,
  fill = options.fill,
// Shadows fillStyle = options.fillStyle,
if (shadowSize > 0) { radius = Math.min(canvas.width, canvas.height) * sizeRatio / 2,
this.plotSlice(x + shadowSize, y + shadowSize, radius, startAngle, endAngle, context); value = data[0][1],
if (fill) { html = [],
context.fillStyle = 'rgba(0,0,0,0.1)'; vScale = 1,//Math.cos(series.pie.viewAngle);
context.fill(); measure = Math.PI * 2 * value / this.total,
} startAngle = this.startAngle || (2 * Math.PI * options.startAngle), // TODO: this initial startAngle is already in radians (fixing will be test-unstable)
} endAngle = startAngle + measure,
  bisection = startAngle + measure / 2,
this.plotSlice(x, y, radius, startAngle, endAngle, context); label = options.labelFormatter(this.total, value),
if (fill) { //plotTickness = Math.sin(series.pie.viewAngle)*series.pie.spliceThickness / vScale;
context.fillStyle = fillStyle; explodeCoeff = explode + radius + 4,
context.fill(); distX = Math.cos(bisection) * explodeCoeff,
} distY = Math.sin(bisection) * explodeCoeff,
context.lineWidth = lineWidth; textAlign = distX < 0 ? 'right' : 'left',
context.strokeStyle = color; textBaseline = distY > 0 ? 'top' : 'bottom',
context.stroke(); style,
  x, y,
style = { distX, distY;
size : options.fontSize * 1.2,  
color : options.fontColor, context.save();
weight : 1.5 context.translate(width / 2, height / 2);
}; context.scale(1, vScale);
   
if (label) { x = Math.cos(bisection) * explode;
if (options.htmlText || !options.textEnabled) { y = Math.sin(bisection) * explode;
divStyle = 'position:absolute;' + textBaseline + ':' + (height / 2 + (textBaseline === 'top' ? distY : -distY)) + 'px;';  
divStyle += textAlign + ':' + (width / 2 + (textAlign === 'right' ? -distX : distX)) + 'px;'; // Shadows
html.push('<div style="', divStyle, '" class="flotr-grid-label">', label, '</div>'); if (shadowSize > 0) {
} this.plotSlice(x + shadowSize, y + shadowSize, radius, startAngle, endAngle, context);
else { if (fill) {
style.textAlign = textAlign; context.fillStyle = 'rgba(0,0,0,0.1)';
style.textBaseline = textBaseline; context.fill();
Flotr.drawText(context, label, distX, distY, style); }
} }
}  
  this.plotSlice(x, y, radius, startAngle, endAngle, context);
if (options.htmlText || !options.textEnabled) { if (fill) {
var div = Flotr.DOM.node('<div style="color:' + options.fontColor + '" class="flotr-labels"></div>'); context.fillStyle = fillStyle;
Flotr.DOM.insert(div, html.join('')); context.fill();
Flotr.DOM.insert(options.element, div); }
} context.lineWidth = lineWidth;
  context.strokeStyle = color;
context.restore(); context.stroke();
   
// New start angle style = {
this.startAngle = endAngle; size: options.fontSize * 1.2,
this.slices = this.slices || []; color: options.fontColor,
this.slices.push({ weight: 1.5
radius : Math.min(canvas.width, canvas.height) * sizeRatio / 2, };
x : x,  
y : y, if (label) {
explode : explode, if (options.htmlText || !options.textEnabled) {
start : startAngle, divStyle = 'position:absolute;' + textBaseline + ':' + (height / 2 + (textBaseline === 'top' ? distY : -distY)) + 'px;';
end : endAngle divStyle += textAlign + ':' + (width / 2 + (textAlign === 'right' ? -distX : distX)) + 'px;';
  html.push('<div style="', divStyle, '" class="flotr-grid-label">', label, '</div>');
  }
  else {
  style.textAlign = textAlign;
  style.textBaseline = textBaseline;
  Flotr.drawText(context, label, distX, distY, style);
  }
  }
   
  if (options.htmlText || !options.textEnabled) {
  var div = Flotr.DOM.node('<div style="color:' + options.fontColor + '" class="flotr-labels"></div>');
  Flotr.DOM.insert(div, html.join(''));
  Flotr.DOM.insert(options.element, div);
  }
   
  context.restore();
   
  // New start angle
  this.startAngle = endAngle;
  this.slices = this.slices || [];
  this.slices.push({
  radius: Math.min(canvas.width, canvas.height) * sizeRatio / 2,
  x: x,
  y: y,
  explode: explode,
  start: startAngle,
  end: endAngle
  });
  },
  plotSlice: function (x, y, radius, startAngle, endAngle, context) {
  context.beginPath();
  context.moveTo(x, y);
  context.arc(x, y, radius, startAngle, endAngle, false);
  context.lineTo(x, y);
  context.closePath();
  },
  hit: function (options) {
   
  var
  data = options.data[0],
  args = options.args,
  index = options.index,
  mouse = args[0],
  n = args[1],
  slice = this.slices[index],
  x = mouse.relX - options.width / 2,
  y = mouse.relY - options.height / 2,
  r = Math.sqrt(x * x + y * y),
  theta = Math.atan(y / x),
  circle = Math.PI * 2,
  explode = slice.explode || options.explode,
  start = slice.start % circle,
  end = slice.end % circle;
   
  if (x < 0) {
  theta += Math.PI;
  } else if (x > 0 && y < 0) {
  theta += circle;
  }
   
  if (r < slice.radius + explode && r > explode) {
  if ((start >= end && (theta < end || theta > start)) ||
  (theta > start && theta < end)) {
   
  // TODO Decouple this from hit plugin (chart shouldn't know what n means)
  n.x = data[0];
  n.y = data[1];
  n.sAngle = start;
  n.eAngle = end;
  n.index = 0;
  n.seriesIndex = index;
  n.fraction = data[1] / this.total;
  }
  }
  },
  drawHit: function (options) {
  var
  context = options.context,
  slice = this.slices[options.args.seriesIndex];
   
  context.save();
  context.translate(options.width / 2, options.height / 2);
  this.plotSlice(slice.x, slice.y, slice.radius, slice.start, slice.end, context);
  context.stroke();
  context.restore();
  },
  clearHit: function (options) {
  var
  context = options.context,
  slice = this.slices[options.args.seriesIndex],
  padding = 2 * options.lineWidth,
  radius = slice.radius + padding;
   
  context.save();
  context.translate(options.width / 2, options.height / 2);
  context.clearRect(
  slice.x - radius,
  slice.y - radius,
  2 * radius + padding,
  2 * radius + padding
  );
  context.restore();
  },
  extendYRange: function (axis, data) {
  this.total = (this.total || 0) + data[0][1];
  }
}); });
},  
plotSlice : function (x, y, radius, startAngle, endAngle, context) {  
context.beginPath();  
context.moveTo(x, y);  
context.arc(x, y, radius, startAngle, endAngle, false);  
context.lineTo(x, y);  
context.closePath();  
},  
hit : function (options) {  
   
var  
data = options.data[0],  
args = options.args,  
index = options.index,  
mouse = args[0],  
n = args[1],  
slice = this.slices[index],  
x = mouse.relX - options.width / 2,  
y = mouse.relY - options.height / 2,  
r = Math.sqrt(x * x + y * y),  
theta = Math.atan(y / x),  
circle = Math.PI * 2,  
explode = slice.explode || options.explode,  
start = slice.start % circle,  
end = slice.end % circle;  
   
if (x < 0) {  
theta += Math.PI;  
} else if (x > 0 && y < 0) {  
theta += circle;  
}  
   
if (r < slice.radius + explode && r > explode) {  
if ((start >= end && (theta < end || theta > start)) ||  
(theta > start && theta < end)) {  
   
// TODO Decouple this from hit plugin (chart shouldn't know what n means)  
n.x = data[0];  
n.y = data[1];  
n.sAngle = start;  
n.eAngle = end;  
n.index = 0;  
n.seriesIndex = index;  
n.fraction = data[1] / this.total;  
}  
}  
},  
drawHit: function (options) {  
var  
context = options.context,  
slice = this.slices[options.args.seriesIndex];  
   
context.save();  
context.translate(options.width / 2, options.height / 2);  
this.plotSlice(slice.x, slice.y, slice.radius, slice.start, slice.end, context);  
context.stroke();  
context.restore();  
},  
clearHit : function (options) {  
var  
context = options.context,  
slice = this.slices[options.args.seriesIndex],  
padding = 2 * options.lineWidth,  
radius = slice.radius + padding;  
   
context.save();  
context.translate(options.width / 2, options.height / 2);  
context.clearRect(  
slice.x - radius,  
slice.y - radius,  
2 * radius + padding,  
2 * radius + padding  
);  
context.restore();  
},  
extendYRange : function (axis, data) {  
this.total = (this.total || 0) + data[0][1];  
}  
});  
})(); })();
   
/** Points **/ /** Points **/
Flotr.addType('points', { Flotr.addType('points', {
options: { options: {
show: false, // => setting to true will show points, false will hide show: false, // => setting to true will show points, false will hide
radius: 3, // => point radius (pixels) radius: 3, // => point radius (pixels)
lineWidth: 2, // => line width in pixels lineWidth: 2, // => line width in pixels
fill: true, // => true to fill the points with a color, false for (transparent) no fill fill: true, // => true to fill the points with a color, false for (transparent) no fill
fillColor: '#FFFFFF', // => fill color fillColor: '#FFFFFF', // => fill color
fillOpacity: 0.4 // => opacity of color inside the points fillOpacity: 0.4 // => opacity of color inside the points
}, },
   
draw : function (options) { draw: function (options) {
var var
context = options.context, context = options.context,
lineWidth = options.lineWidth, lineWidth = options.lineWidth,
shadowSize = options.shadowSize; shadowSize = options.shadowSize;
   
context.save(); context.save();
   
if (shadowSize > 0) { if (shadowSize > 0) {
context.lineWidth = shadowSize / 2; context.lineWidth = shadowSize / 2;
   
context.strokeStyle = 'rgba(0,0,0,0.1)'; context.strokeStyle = 'rgba(0,0,0,0.1)';
this.plot(options, shadowSize / 2 + context.lineWidth / 2); this.plot(options, shadowSize / 2 + context.lineWidth / 2);
   
context.strokeStyle = 'rgba(0,0,0,0.2)'; context.strokeStyle = 'rgba(0,0,0,0.2)';
this.plot(options, context.lineWidth / 2); this.plot(options, context.lineWidth / 2);
  }
   
  context.lineWidth = options.lineWidth;
  context.strokeStyle = options.color;
  context.fillStyle = options.fillColor || options.color;
   
  this.plot(options);
  context.restore();
  },
   
  plot: function (options, offset) {
  var
  data = options.data,
  context = options.context,
  xScale = options.xScale,
  yScale = options.yScale,
  i, x, y;
   
  for (i = data.length - 1; i > -1; --i) {
  y = data[i][1];
  if (y === null) continue;
   
  x = xScale(data[i][0]);
  y = yScale(y);
   
  if (x < 0 || x > options.width || y < 0 || y > options.height) continue;
   
  context.beginPath();
  if (offset) {
  context.arc(x, y + offset, options.radius, 0, Math.PI, false);
  } else {
  context.arc(x, y, options.radius, 0, 2 * Math.PI, true);
  if (options.fill) context.fill();
  }
  context.stroke();
  context.closePath();
  }
} }
   
context.lineWidth = options.lineWidth;  
context.strokeStyle = options.color;  
context.fillStyle = options.fillColor || options.color;  
   
this.plot(options);  
context.restore();  
},  
   
plot : function (options, offset) {  
var  
data = options.data,  
context = options.context,  
xScale = options.xScale,  
yScale = options.yScale,  
i, x, y;  
   
for (i = data.length - 1; i > -1; --i) {  
y = data[i][1];  
if (y === null) continue;  
   
x = xScale(data[i][0]);  
y = yScale(y);  
   
if (x < 0 || x > options.width || y < 0 || y > options.height) continue;  
   
context.beginPath();  
if (offset) {  
context.arc(x, y + offset, options.radius, 0, Math.PI, false);  
} else {  
context.arc(x, y, options.radius, 0, 2 * Math.PI, true);  
if (options.fill) context.fill();  
}  
context.stroke();  
context.closePath();  
}  
}  
}); });
   
/** Radar **/ /** Radar **/
Flotr.addType('radar', { Flotr.addType('radar', {
options: { options: {
show: false, // => setting to true will show radar chart, false will hide show: false, // => setting to true will show radar chart, false will hide
lineWidth: 2, // => line width in pixels lineWidth: 2, // => line width in pixels
fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
radiusRatio: 0.90 // => ratio of the radar, against the plot size radiusRatio: 0.90 // => ratio of the radar, against the plot size
}, },
draw : function (options) { draw: function (options) {
  var
  context = options.context,
  shadowSize = options.shadowSize;
   
  context.save();
  context.translate(options.width / 2, options.height / 2);
  context.lineWidth = options.lineWidth;
   
  // Shadow
  context.fillStyle = 'rgba(0,0,0,0.05)';
  context.strokeStyle = 'rgba(0,0,0,0.05)';
  this.plot(options, shadowSize / 2);
  context.strokeStyle = 'rgba(0,0,0,0.1)';
  this.plot(options, shadowSize / 4);
   
  // Chart
  context.strokeStyle = options.color;
  context.fillStyle = options.fillStyle;
  this.plot(options);
   
  context.restore();
  },
  plot: function (options, offset) {
  var
  data = options.data,
  context = options.context,
  radius = Math.min(options.height, options.width) * options.radiusRatio / 2,
  step = 2 * Math.PI / data.length,
  angle = -Math.PI / 2,
  i, ratio;
   
  offset = offset || 0;
   
  context.beginPath();
  for (i = 0; i < data.length; ++i) {
  ratio = data[i][1] / this.max;
   
  context[i === 0 ? 'moveTo' : 'lineTo'](
  Math.cos(i * step + angle) * radius * ratio + offset,
  Math.sin(i * step + angle) * radius * ratio + offset
  );
  }
  context.closePath();
  if (options.fill) context.fill();
  context.stroke();
  },
  extendYRange: function (axis, data) {
  this.max = Math.max(axis.max, this.max || -Number.MAX_VALUE);
  }
  });
   
  Flotr.addType('timeline', {
  options: {
  show: false,
  lineWidth: 1,
  barWidth: 0.2,
  fill: true,
  fillColor: null,
  fillOpacity: 0.4,
  centered: true
  },
   
  draw: function (options) {
   
  var
  context = options.context;
   
  context.save();
  context.lineJoin = 'miter';
  context.lineWidth = options.lineWidth;
  context.strokeStyle = options.color;
  context.fillStyle = options.fillStyle;
   
  this.plot(options);
   
  context.restore();
  },
   
  plot: function (options) {
   
  var
  data = options.data,
  context = options.context,
  xScale = options.xScale,
  yScale = options.yScale,
  barWidth = options.barWidth,
  lineWidth = options.lineWidth,
  i;
   
  Flotr._.each(data, function (timeline) {
   
  var
  x = timeline[0],
  y = timeline[1],
  w = timeline[2],
  h = barWidth,
   
  xt = Math.ceil(xScale(x)),
  wt = Math.ceil(xScale(x + w)) - xt,
  yt = Math.round(yScale(y)),
  ht = Math.round(yScale(y - h)) - yt,
   
  x0 = xt - lineWidth / 2,
  y0 = Math.round(yt - ht / 2) - lineWidth / 2;
   
  context.strokeRect(x0, y0, wt, ht);
  context.fillRect(x0, y0, wt, ht);
   
  });
  },
   
  extendRange: function (series) {
   
  var
  data = series.data,
  xa = series.xaxis,
  ya = series.yaxis,
  w = series.timeline.barWidth;
   
  if (xa.options.min === null)
  xa.min = xa.datamin - w / 2;
   
  if (xa.options.max === null) {
   
  var
  max = xa.max;
   
  Flotr._.each(data, function (timeline) {
  max = Math.max(max, timeline[0] + timeline[2]);
  }, this);
   
  xa.max = max + w / 2;
  }
   
  if (ya.options.min === null)
  ya.min = ya.datamin - w;
  if (ya.options.min === null)
  ya.max = ya.datamax + w;
  }
   
  });
   
  (function () {
   
  var D = Flotr.DOM;
   
  Flotr.addPlugin('crosshair', {
  options: {
  mode: null, // => one of null, 'x', 'y' or 'xy'
  color: '#FF0000', // => crosshair color
  hideCursor: true // => hide the cursor when the crosshair is shown
  },
  callbacks: {
  'flotr:mousemove': function (e, pos) {
  if (this.options.crosshair.mode) {
  this.crosshair.clearCrosshair();
  this.crosshair.drawCrosshair(pos);
  }
  }
  },
  /**
  * Draws the selection box.
  */
  drawCrosshair: function (pos) {
  var octx = this.octx,
  options = this.options.crosshair,
  plotOffset = this.plotOffset,
  x = plotOffset.left + pos.relX + 0.5,
  y = plotOffset.top + pos.relY + 0.5;
   
  if (pos.relX < 0 || pos.relY < 0 || pos.relX > this.plotWidth || pos.relY > this.plotHeight) {
  this.el.style.cursor = null;
  D.removeClass(this.el, 'flotr-crosshair');
  return;
  }
   
  if (options.hideCursor) {
  this.el.style.cursor = 'none';
  D.addClass(this.el, 'flotr-crosshair');
  }
   
  octx.save();
  octx.strokeStyle = options.color;
  octx.lineWidth = 1;
  octx.beginPath();
   
  if (options.mode.indexOf('x') != -1) {
  octx.moveTo(x, plotOffset.top);
  octx.lineTo(x, plotOffset.top + this.plotHeight);
  }
   
  if (options.mode.indexOf('y') != -1) {
  octx.moveTo(plotOffset.left, y);
  octx.lineTo(plotOffset.left + this.plotWidth, y);
  }
   
  octx.stroke();
  octx.restore();
  },
  /**
  * Removes the selection box from the overlay canvas.
  */
  clearCrosshair: function () {
   
  var
  plotOffset = this.plotOffset,
  position = this.lastMousePos,
  context = this.octx;
   
  if (position) {
  context.clearRect(
  position.relX + plotOffset.left,
  plotOffset.top,
  1,
  this.plotHeight + 1
  );
  context.clearRect(
  plotOffset.left,
  position.relY + plotOffset.top,
  this.plotWidth + 1,
  1
  );
  }
  }
  });
  })();
   
  (function () {
   
var var
context = options.context, D = Flotr.DOM,
shadowSize = options.shadowSize; _ = Flotr._;
   
context.save(); function getImage(type, canvas, width, height) {
context.translate(options.width / 2, options.height / 2);  
context.lineWidth = options.lineWidth; // TODO add scaling for w / h
  var
// Shadow mime = 'image/' + type,
context.fillStyle = 'rgba(0,0,0,0.05)'; data = canvas.toDataURL(mime),
context.strokeStyle = 'rgba(0,0,0,0.05)'; image = new Image();
this.plot(options, shadowSize / 2); image.src = data;
context.strokeStyle = 'rgba(0,0,0,0.1)'; return image;
this.plot(options, shadowSize / 4); }
   
// Chart Flotr.addPlugin('download', {
context.strokeStyle = options.color;  
context.fillStyle = options.fillStyle; saveImage: function (type, width, height, replaceCanvas) {
this.plot(options); var image = null;
  if (Flotr.isIE && Flotr.isIE < 9) {
context.restore(); image = '<html><body>' + this.canvas.firstChild.innerHTML + '</body></html>';
}, return window.open().document.write(image);
plot : function (options, offset) { }
   
  if (type !== 'jpeg' && type !== 'png') return;
   
  image = getImage(type, this.canvas, width, height);
   
  if (_.isElement(image) && replaceCanvas) {
  this.download.restoreCanvas();
  D.hide(this.canvas);
  D.hide(this.overlay);
  D.setStyles({position: 'absolute'});
  D.insert(this.el, image);
  this.saveImageElement = image;
  } else {
  return window.open(image.src);
  }
  },
   
  restoreCanvas: function () {
  D.show(this.canvas);
  D.show(this.overlay);
  if (this.saveImageElement) this.el.removeChild(this.saveImageElement);
  this.saveImageElement = null;
  }
  });
   
  })();
   
  (function () {
   
  var E = Flotr.EventAdapter,
  _ = Flotr._;
   
  Flotr.addPlugin('graphGrid', {
   
  callbacks: {
  'flotr:beforedraw': function () {
  this.graphGrid.drawGrid();
  },
  'flotr:afterdraw': function () {
  this.graphGrid.drawOutline();
  }
  },
   
  drawGrid: function () {
   
  var
  ctx = this.ctx,
  options = this.options,
  grid = options.grid,
  verticalLines = grid.verticalLines,
  horizontalLines = grid.horizontalLines,
  minorVerticalLines = grid.minorVerticalLines,
  minorHorizontalLines = grid.minorHorizontalLines,
  plotHeight = this.plotHeight,
  plotWidth = this.plotWidth,
  a, v, i, j;
   
  if (verticalLines || minorVerticalLines ||
  horizontalLines || minorHorizontalLines) {
  E.fire(this.el, 'flotr:beforegrid', [this.axes.x, this.axes.y, options, this]);
  }
  ctx.save();
  ctx.lineWidth = 1;
  ctx.strokeStyle = grid.tickColor;
   
  function circularHorizontalTicks(ticks) {
  for (i = 0; i < ticks.length; ++i) {
  var ratio = ticks[i].v / a.max;
  for (j = 0; j <= sides; ++j) {
  ctx[j === 0 ? 'moveTo' : 'lineTo'](
  Math.cos(j * coeff + angle) * radius * ratio,
  Math.sin(j * coeff + angle) * radius * ratio
  );
  }
  }
  }
   
  function drawGridLines(ticks, callback) {
  _.each(_.pluck(ticks, 'v'), function (v) {
  // Don't show lines on upper and lower bounds.
  if ((v <= a.min || v >= a.max) ||
  (v == a.min || v == a.max) && grid.outlineWidth)
  return;
  callback(Math.floor(a.d2p(v)) + ctx.lineWidth / 2);
  });
  }
   
  function drawVerticalLines(x) {
  ctx.moveTo(x, 0);
  ctx.lineTo(x, plotHeight);
  }
   
  function drawHorizontalLines(y) {
  ctx.moveTo(0, y);
  ctx.lineTo(plotWidth, y);
  }
   
  if (grid.circular) {
  ctx.translate(this.plotOffset.left + plotWidth / 2, this.plotOffset.top + plotHeight / 2);
  var radius = Math.min(plotHeight, plotWidth) * options.radar.radiusRatio / 2,
  sides = this.axes.x.ticks.length,
  coeff = 2 * (Math.PI / sides),
  angle = -Math.PI / 2;
   
  // Draw grid lines in vertical direction.
  ctx.beginPath();
   
  a = this.axes.y;
   
  if (horizontalLines) {
  circularHorizontalTicks(a.ticks);
  }
  if (minorHorizontalLines) {
  circularHorizontalTicks(a.minorTicks);
  }
   
  if (verticalLines) {
  _.times(sides, function (i) {
  ctx.moveTo(0, 0);
  ctx.lineTo(Math.cos(i * coeff + angle) * radius, Math.sin(i * coeff + angle) * radius);
  });
  }
  ctx.stroke();
  }
  else {
  ctx.translate(this.plotOffset.left, this.plotOffset.top);
   
  // Draw grid background, if present in options.
  if (grid.backgroundColor) {
  ctx.fillStyle = this.processColor(grid.backgroundColor, {x1: 0, y1: 0, x2: plotWidth, y2: plotHeight});
  ctx.fillRect(0, 0, plotWidth, plotHeight);
  }
   
  ctx.beginPath();
   
  a = this.axes.x;
  if (verticalLines) drawGridLines(a.ticks, drawVerticalLines);
  if (minorVerticalLines) drawGridLines(a.minorTicks, drawVerticalLines);
   
  a = this.axes.y;
  if (horizontalLines) drawGridLines(a.ticks, drawHorizontalLines);
  if (minorHorizontalLines) drawGridLines(a.minorTicks, drawHorizontalLines);
   
  ctx.stroke();
  }
   
  ctx.restore();
  if (verticalLines || minorVerticalLines ||
  horizontalLines || minorHorizontalLines) {
  E.fire(this.el, 'flotr:aftergrid', [this.axes.x, this.axes.y, options, this]);
  }
  },
   
  drawOutline: function () {
  var
  that = this,
  options = that.options,
  grid = options.grid,
  outline = grid.outline,
  ctx = that.ctx,
  backgroundImage = grid.backgroundImage,
  plotOffset = that.plotOffset,
  leftOffset = plotOffset.left,
  topOffset = plotOffset.top,
  plotWidth = that.plotWidth,
  plotHeight = that.plotHeight,
  v, img, src, left, top, globalAlpha;
   
  if (!grid.outlineWidth) return;
   
  ctx.save();
   
  if (grid.circular) {
  ctx.translate(leftOffset + plotWidth / 2, topOffset + plotHeight / 2);
  var radius = Math.min(plotHeight, plotWidth) * options.radar.radiusRatio / 2,
  sides = this.axes.x.ticks.length,
  coeff = 2 * (Math.PI / sides),
  angle = -Math.PI / 2;
   
  // Draw axis/grid border.
  ctx.beginPath();
  ctx.lineWidth = grid.outlineWidth;
  ctx.strokeStyle = grid.color;
  ctx.lineJoin = 'round';
   
  for (i = 0; i <= sides; ++i) {
  ctx[i === 0 ? 'moveTo' : 'lineTo'](Math.cos(i * coeff + angle) * radius, Math.sin(i * coeff + angle) * radius);
  }
  //ctx.arc(0, 0, radius, 0, Math.PI*2, true);
   
  ctx.stroke();
  }
  else {
  ctx.translate(leftOffset, topOffset);
   
  // Draw axis/grid border.
  var lw = grid.outlineWidth,
  orig = 0.5 - lw + ((lw + 1) % 2 / 2),
  lineTo = 'lineTo',
  moveTo = 'moveTo';
  ctx.lineWidth = lw;
  ctx.strokeStyle = grid.color;
  ctx.lineJoin = 'miter';
  ctx.beginPath();
  ctx.moveTo(orig, orig);
  plotWidth = plotWidth - (lw / 2) % 1;
  plotHeight = plotHeight + lw / 2;
  ctx[outline.indexOf('n') !== -1 ? lineTo : moveTo](plotWidth, orig);
  ctx[outline.indexOf('e') !== -1 ? lineTo : moveTo](plotWidth, plotHeight);
  ctx[outline.indexOf('s') !== -1 ? lineTo : moveTo](orig, plotHeight);
  ctx[outline.indexOf('w') !== -1 ? lineTo : moveTo](orig, orig);
  ctx.stroke();
  ctx.closePath();
  }
   
  ctx.restore();
   
  if (backgroundImage) {
   
  src = backgroundImage.src || backgroundImage;
  left = (parseInt(backgroundImage.left, 10) || 0) + plotOffset.left;
  top = (parseInt(backgroundImage.top, 10) || 0) + plotOffset.top;
  img = new Image();
   
  img.onload = function () {
  ctx.save();
  if (backgroundImage.alpha) ctx.globalAlpha = backgroundImage.alpha;
  ctx.globalCompositeOperation = 'destination-over';
  ctx.drawImage(img, 0, 0, img.width, img.height, left, top, plotWidth, plotHeight);
  ctx.restore();
  };
   
  img.src = src;
  }
  }
  });
   
  })();
   
  (function () {
   
var var
data = options.data, D = Flotr.DOM,
context = options.context, _ = Flotr._,
radius = Math.min(options.height, options.width) * options.radiusRatio / 2, flotr = Flotr,
step = 2 * Math.PI / data.length, S_MOUSETRACK = 'opacity:0.7;background-color:#000;color:#fff;display:none;position:absolute;padding:2px 8px;-moz-border-radius:4px;border-radius:4px;white-space:nowrap;';
angle = -Math.PI / 2,  
i, ratio; Flotr.addPlugin('hit', {
  callbacks: {
offset = offset || 0; 'flotr:mousemove': function (e, pos) {
  this.hit.track(pos);
context.beginPath(); },
for (i = 0; i < data.length; ++i) { 'flotr:click': function (pos) {
ratio = data[i][1] / this.max; this.hit.track(pos);
  },
context[i === 0 ? 'moveTo' : 'lineTo']( 'flotr:mouseout': function () {
Math.cos(i * step + angle) * radius * ratio + offset, this.hit.clearHit();
Math.sin(i * step + angle) * radius * ratio + offset }
); },
} track: function (pos) {
context.closePath(); if (this.options.mouse.track || _.any(this.series, function (s) {
if (options.fill) context.fill(); return s.mouse && s.mouse.track;
context.stroke(); })) {
}, this.hit.hit(pos);
extendYRange : function (axis, data) { }
this.max = Math.max(axis.max, this.max || -Number.MAX_VALUE); },
} /**
}); * Try a method on a graph type. If the method exists, execute it.
  * @param {Object} series
Flotr.addType('timeline', { * @param {String} method Method name.
options: { * @param {Array} args Arguments applied to method.
show: false, * @return executed successfully or failed.
lineWidth: 1, */
barWidth: 0.2, executeOnType: function (s, method, args) {
fill: true, var
fillColor: null, success = false,
fillOpacity: 0.4, options;
centered: true  
}, if (!_.isArray(s)) s = [s];
   
draw : function (options) { function e(s, index) {
  _.each(_.keys(flotr.graphTypes), function (type) {
var if (s[type] && s[type].show && this[type][method]) {
context = options.context; options = this.getOptions(s, type);
   
context.save(); options.fill = !!s.mouse.fillColor;
context.lineJoin = 'miter'; options.fillStyle = this.processColor(s.mouse.fillColor || '#ffffff', {opacity: s.mouse.fillOpacity});
context.lineWidth = options.lineWidth; options.color = s.mouse.lineColor;
context.strokeStyle = options.color; options.context = this.octx;
context.fillStyle = options.fillStyle; options.index = index;
   
this.plot(options); if (args) options.args = args;
  this[type][method].call(this[type], options);
context.restore(); success = true;
}, }
  }, this);
plot : function (options) { }
   
var _.each(s, e, this);
data = options.data,  
context = options.context, return success;
xScale = options.xScale, },
yScale = options.yScale, /**
barWidth = options.barWidth, * Updates the mouse tracking point on the overlay.
lineWidth = options.lineWidth, */
i; drawHit: function (n) {
  var octx = this.octx,
Flotr._.each(data, function (timeline) { s = n.series;
   
var if (s.mouse.lineColor) {
x = timeline[0], octx.save();
y = timeline[1], octx.lineWidth = (s.points ? s.points.lineWidth : 1);
w = timeline[2], octx.strokeStyle = s.mouse.lineColor;
h = barWidth, octx.fillStyle = this.processColor(s.mouse.fillColor || '#ffffff', {opacity: s.mouse.fillOpacity});
  octx.translate(this.plotOffset.left, this.plotOffset.top);
xt = Math.ceil(xScale(x)),  
wt = Math.ceil(xScale(x + w)) - xt, if (!this.hit.executeOnType(s, 'drawHit', n)) {
yt = Math.round(yScale(y)), var xa = n.xaxis,
ht = Math.round(yScale(y - h)) - yt, ya = n.yaxis;
   
x0 = xt - lineWidth / 2, octx.beginPath();
y0 = Math.round(yt - ht / 2) - lineWidth / 2; // TODO fix this (points) should move to general testable graph mixin
  octx.arc(xa.d2p(n.x), ya.d2p(n.y), s.points.radius || s.mouse.radius, 0, 2 * Math.PI, true);
context.strokeRect(x0, y0, wt, ht); octx.fill();
context.fillRect(x0, y0, wt, ht); octx.stroke();
  octx.closePath();
  }
  octx.restore();
  this.clip(octx);
  }
  this.prevHit = n;
  },
  /**
  * Removes the mouse tracking point from the overlay.
  */
  clearHit: function () {
  var prev = this.prevHit,
  octx = this.octx,
  plotOffset = this.plotOffset;
  octx.save();
  octx.translate(plotOffset.left, plotOffset.top);
  if (prev) {
  if (!this.hit.executeOnType(prev.series, 'clearHit', this.prevHit)) {
  // TODO fix this (points) should move to general testable graph mixin
  var
  s = prev.series,
  lw = (s.points ? s.points.lineWidth : 1);
  offset = (s.points.radius || s.mouse.radius) + lw;
  octx.clearRect(
  prev.xaxis.d2p(prev.x) - offset,
  prev.yaxis.d2p(prev.y) - offset,
  offset * 2,
  offset * 2
  );
  }
  D.hide(this.mouseTrack);
  this.prevHit = null;
  }
  octx.restore();
  },
  /**
  * Retrieves the nearest data point from the mouse cursor. If it's within
  * a certain range, draw a point on the overlay canvas and display the x and y
  * value of the data.
  * @param {Object} mouse - Object that holds the relative x and y coordinates of the cursor.
  */
  hit: function (mouse) {
   
  var
  options = this.options,
  prevHit = this.prevHit,
  closest, sensibility, dataIndex, seriesIndex, series, value, xaxis, yaxis;
   
  if (this.series.length === 0) return;
   
  // Nearest data element.
  // dist, x, y, relX, relY, absX, absY, sAngle, eAngle, fraction, mouse,
  // xaxis, yaxis, series, index, seriesIndex
  n = {
  relX: mouse.relX,
  relY: mouse.relY,
  absX: mouse.absX,
  absY: mouse.absY
  };
   
  if (options.mouse.trackY && !options.mouse.trackAll &&
  this.hit.executeOnType(this.series, 'hit', [mouse, n])) {
   
  if (!_.isUndefined(n.seriesIndex)) {
  series = this.series[n.seriesIndex];
  n.series = series;
  n.mouse = series.mouse;
  n.xaxis = series.xaxis;
  n.yaxis = series.yaxis;
  }
  } else {
   
  closest = this.hit.closest(mouse);
   
  if (closest) {
   
  closest = options.mouse.trackY ? closest.point : closest.x;
  seriesIndex = closest.seriesIndex;
  series = this.series[seriesIndex];
  xaxis = series.xaxis;
  yaxis = series.yaxis;
  sensibility = 2 * series.mouse.sensibility;
   
  if
  (options.mouse.trackAll ||
  (closest.distanceX < sensibility / xaxis.scale &&
  (!options.mouse.trackY || closest.distanceY < sensibility / yaxis.scale))) {
  n.series = series;
  n.xaxis = series.xaxis;
  n.yaxis = series.yaxis;
  n.mouse = series.mouse;
  n.x = closest.x;
  n.y = closest.y;
  n.dist = closest.distance;
  n.index = closest.dataIndex;
  n.seriesIndex = seriesIndex;
  }
  }
  }
   
  if (!prevHit || (prevHit.index !== n.index || prevHit.seriesIndex !== n.seriesIndex)) {
  this.hit.clearHit();
  if (n.series && n.mouse && n.mouse.track) {
  this.hit.drawMouseTrack(n);
  this.hit.drawHit(n);
  Flotr.EventAdapter.fire(this.el, 'flotr:hit', [n, this]);
  }
  }
  },
   
  closest: function (mouse) {
   
  var
  series = this.series,
  options = this.options,
  relX = mouse.relX,
  relY = mouse.relY,
  compare = Number.MAX_VALUE,
  compareX = Number.MAX_VALUE,
  closest = {},
  closestX = {},
  check = false,
  serie, data,
  distance, distanceX, distanceY,
  mouseX, mouseY,
  x, y, i, j;
   
  function setClosest(o) {
  o.distance = distance;
  o.distanceX = distanceX;
  o.distanceY = distanceY;
  o.seriesIndex = i;
  o.dataIndex = j;
  o.x = x;
  o.y = y;
  }
   
  for (i = 0; i < series.length; i++) {
   
  serie = series[i];
  data = serie.data;
  mouseX = serie.xaxis.p2d(relX);
  mouseY = serie.yaxis.p2d(relY);
   
  if (data.length) check = true;
   
  for (j = data.length; j--;) {
   
  x = data[j][0];
  y = data[j][1];
   
  if (x === null || y === null) continue;
   
  // don't check if the point isn't visible in the current range
  if (x < serie.xaxis.min || x > serie.xaxis.max) continue;
   
  distanceX = Math.abs(x - mouseX);
  distanceY = Math.abs(y - mouseY);
   
  // Skip square root for speed
  distance = distanceX * distanceX + distanceY * distanceY;
   
  if (distance < compare) {
  compare = distance;
  setClosest(closest);
  }
   
  if (distanceX < compareX) {
  compareX = distanceX;
  setClosest(closestX);
  }
  }
  }
   
  return check ? {
  point: closest,
  x: closestX
  } : false;
  },
   
  drawMouseTrack: function (n) {
   
  var
  pos = '',
  s = n.series,
  p = n.mouse.position,
  m = n.mouse.margin,
  elStyle = S_MOUSETRACK,
  mouseTrack = this.mouseTrack,
  plotOffset = this.plotOffset,
  left = plotOffset.left,
  right = plotOffset.right,
  bottom = plotOffset.bottom,
  top = plotOffset.top,
  decimals = n.mouse.trackDecimals,
  options = this.options;
   
  // Create
  if (!mouseTrack) {
  mouseTrack = D.node('<div class="flotr-mouse-value"></div>');
  this.mouseTrack = mouseTrack;
  D.insert(this.el, mouseTrack);
  }
   
  if (!n.mouse.relative) { // absolute to the canvas
   
  if (p.charAt(0) == 'n') pos += 'top:' + (m + top) + 'px;bottom:auto;';
  else if (p.charAt(0) == 's') pos += 'bottom:' + (m + bottom) + 'px;top:auto;';
  if (p.charAt(1) == 'e') pos += 'right:' + (m + right) + 'px;left:auto;';
  else if (p.charAt(1) == 'w') pos += 'left:' + (m + left) + 'px;right:auto;';
   
  // Bars
  } else if (s.bars.show) {
  pos += 'bottom:' + (m - top - n.yaxis.d2p(n.y / 2) + this.canvasHeight) + 'px;top:auto;';
  pos += 'left:' + (m + left + n.xaxis.d2p(n.x - options.bars.barWidth / 2)) + 'px;right:auto;';
   
  // Pie
  } else if (s.pie.show) {
  var center = {
  x: (this.plotWidth) / 2,
  y: (this.plotHeight) / 2
  },
  radius = (Math.min(this.canvasWidth, this.canvasHeight) * s.pie.sizeRatio) / 2,
  bisection = n.sAngle < n.eAngle ? (n.sAngle + n.eAngle) / 2 : (n.sAngle + n.eAngle + 2 * Math.PI) / 2;
   
  pos += 'bottom:' + (m - top - center.y - Math.sin(bisection) * radius / 2 + this.canvasHeight) + 'px;top:auto;';
  pos += 'left:' + (m + left + center.x + Math.cos(bisection) * radius / 2) + 'px;right:auto;';
   
  // Default
  } else {
  if (p.charAt(0) == 'n') pos += 'bottom:' + (m - top - n.yaxis.d2p(n.y) + this.canvasHeight) + 'px;top:auto;';
  else if (p.charAt(0) == 's') pos += 'top:' + (m + top + n.yaxis.d2p(n.y)) + 'px;bottom:auto;';
  if (p.charAt(1) == 'e') pos += 'left:' + (m + left + n.xaxis.d2p(n.x)) + 'px;right:auto;';
  else if (p.charAt(1) == 'w') pos += 'right:' + (m - left - n.xaxis.d2p(n.x) + this.canvasWidth) + 'px;left:auto;';
  }
   
  elStyle += pos;
  mouseTrack.style.cssText = elStyle;
   
  if (!decimals || decimals < 0) decimals = 0;
   
  mouseTrack.innerHTML = n.mouse.trackFormatter({
  x: n.x.toFixed(decimals),
  y: n.y.toFixed(decimals),
  series: n.series,
  index: n.index,
  nearest: n,
  fraction: n.fraction
  });
   
  D.show(mouseTrack);
  }
   
}); });
},  
   
extendRange : function (series) {  
   
var  
data = series.data,  
xa = series.xaxis,  
ya = series.yaxis,  
w = series.timeline.barWidth;  
   
if (xa.options.min === null)  
xa.min = xa.datamin - w / 2;  
   
if (xa.options.max === null) {  
   
var  
max = xa.max;  
   
Flotr._.each(data, function (timeline) {  
max = Math.max(max, timeline[0] + timeline[2]);  
}, this);  
   
xa.max = max + w / 2;  
}  
   
if (ya.options.min === null)  
ya.min = ya.datamin - w;  
if (ya.options.min === null)  
ya.max = ya.datamax + w;  
}  
   
});  
   
(function () {  
   
var D = Flotr.DOM;  
   
Flotr.addPlugin('crosshair', {  
options: {  
mode: null, // => one of null, 'x', 'y' or 'xy'  
color: '#FF0000', // => crosshair color  
hideCursor: true // => hide the cursor when the crosshair is shown  
},  
callbacks: {  
'flotr:mousemove': function(e, pos) {  
if (this.options.crosshair.mode) {  
this.crosshair.clearCrosshair();  
this.crosshair.drawCrosshair(pos);  
}  
}  
},  
/**  
* Draws the selection box.  
*/  
drawCrosshair: function(pos) {  
var octx = this.octx,  
options = this.options.crosshair,  
plotOffset = this.plotOffset,  
x = plotOffset.left + pos.relX + 0.5,  
y = plotOffset.top + pos.relY + 0.5;  
   
if (pos.relX < 0 || pos.relY < 0 || pos.relX > this.plotWidth || pos.relY > this.plotHeight) {  
this.el.style.cursor = null;  
D.removeClass(this.el, 'flotr-crosshair');  
return;  
}  
   
if (options.hideCursor) {  
this.el.style.cursor = 'none';  
D.addClass(this.el, 'flotr-crosshair');  
}  
   
octx.save();  
octx.strokeStyle = options.color;  
octx.lineWidth = 1;  
octx.beginPath();  
   
if (options.mode.indexOf('x') != -1) {  
octx.moveTo(x, plotOffset.top);  
octx.lineTo(x, plotOffset.top + this.plotHeight);  
}  
   
if (options.mode.indexOf('y') != -1) {  
octx.moveTo(plotOffset.left, y);  
octx.lineTo(plotOffset.left + this.plotWidth, y);  
}  
   
octx.stroke();  
octx.restore();  
},  
/**  
* Removes the selection box from the overlay canvas.  
*/  
clearCrosshair: function() {  
   
var  
plotOffset = this.plotOffset,  
position = this.lastMousePos,  
context = this.octx;  
   
if (position) {  
context.clearRect(  
position.relX + plotOffset.left,  
plotOffset.top,  
1,  
this.plotHeight + 1  
);  
context.clearRect(  
plotOffset.left,  
position.relY + plotOffset.top,  
this.plotWidth + 1,  
1  
);  
}  
}  
});  
})(); })();
   
(function() { /**
   
var  
D = Flotr.DOM,  
_ = Flotr._;  
   
function getImage (type, canvas, width, height) {  
   
// TODO add scaling for w / h  
var  
mime = 'image/'+type,  
data = canvas.toDataURL(mime),  
image = new Image();  
image.src = data;  
return image;  
}  
   
Flotr.addPlugin('download', {  
   
saveImage: function (type, width, height, replaceCanvas) {  
var image = null;  
if (Flotr.isIE && Flotr.isIE < 9) {  
image = '<html><body>'+this.canvas.firstChild.innerHTML+'</body></html>';  
return window.open().document.write(image);  
}  
   
if (type !== 'jpeg' && type !== 'png') return;  
   
image = getImage(type, this.canvas, width, height);  
   
if (_.isElement(image) && replaceCanvas) {  
this.download.restoreCanvas();  
D.hide(this.canvas);  
D.hide(this.overlay);  
D.setStyles({position: 'absolute'});  
D.insert(this.el, image);  
this.saveImageElement = image;  
} else {  
return window.open(image.src);  
}  
},  
   
restoreCanvas: function() {  
D.show(this.canvas);  
D.show(this.overlay);  
if (this.saveImageElement) this.el.removeChild(this.saveImageElement);  
this.saveImageElement = null;  
}  
});  
   
})();  
   
(function () {  
   
var E = Flotr.EventAdapter,  
_ = Flotr._;  
   
Flotr.addPlugin('graphGrid', {  
   
callbacks: {  
'flotr:beforedraw' : function () {  
this.graphGrid.drawGrid();  
},  
'flotr:afterdraw' : function () {  
this.graphGrid.drawOutline();  
}  
},  
   
drawGrid: function(){  
   
var  
ctx = this.ctx,  
options = this.options,  
grid = options.grid,  
verticalLines = grid.verticalLines,  
horizontalLines = grid.horizontalLines,  
minorVerticalLines = grid.minorVerticalLines,  
minorHorizontalLines = grid.minorHorizontalLines,  
plotHeight = this.plotHeight,  
plotWidth = this.plotWidth,  
a, v, i, j;  
   
if(verticalLines || minorVerticalLines ||  
horizontalLines || minorHorizontalLines){  
E.fire(this.el, 'flotr:beforegrid', [this.axes.x, this.axes.y, options, this]);  
}  
ctx.save();  
ctx.lineWidth = 1;  
ctx.strokeStyle = grid.tickColor;  
   
function circularHorizontalTicks (ticks) {  
for(i = 0; i < ticks.length; ++i){  
var ratio = ticks[i].v / a.max;  
for(j = 0; j <= sides; ++j){  
ctx[j === 0 ? 'moveTo' : 'lineTo'](  
Math.cos(j*coeff+angle)*radius*ratio,  
Math.sin(j*coeff+angle)*radius*ratio  
);  
}  
}  
}  
function drawGridLines (ticks, callback) {  
_.each(_.pluck(ticks, 'v'), function(v){  
// Don't show lines on upper and lower bounds.  
if ((v <= a.min || v >= a.max) ||  
(v == a.min || v == a.max) && grid.outlineWidth)  
return;  
callback(Math.floor(a.d2p(v)) + ctx.lineWidth/2);  
});  
}  
function drawVerticalLines (x) {  
ctx.moveTo(x, 0);  
ctx.lineTo(x, plotHeight);  
}  
function drawHorizontalLines (y) {  
ctx.moveTo(0, y);  
ctx.lineTo(plotWidth, y);  
}  
   
if (grid.circular) {  
ctx.translate(this.plotOffset.left+plotWidth/2, this.plotOffset.top+plotHeight/2);  
var radius = Math.min(plotHeight, plotWidth)*options.radar.radiusRatio/2,  
sides = this.axes.x.ticks.length,  
coeff = 2*(Math.PI/sides),  
angle = -Math.PI/2;  
   
// Draw grid lines in vertical direction.  
ctx.beginPath();  
   
a = this.axes.y;  
   
if(horizontalLines){  
circularHorizontalTicks(a.ticks);  
}  
if(minorHorizontalLines){  
circularHorizontalTicks(a.minorTicks);  
}  
   
if(verticalLines){  
_.times(sides, function(i){  
ctx.moveTo(0, 0);  
ctx.lineTo(Math.cos(i*coeff+angle)*radius, Math.sin(i*coeff+angle)*radius);  
});  
}  
ctx.stroke();  
}  
else {  
ctx.translate(this.plotOffset.left, this.plotOffset.top);  
   
// Draw grid background, if present in options.  
if(grid.backgroundColor){  
ctx.fillStyle = this.processColor(grid.backgroundColor, {x1: 0, y1: 0, x2: plotWidth, y2: plotHeight});  
ctx.fillRect(0, 0, plotWidth, plotHeight);  
}  
   
ctx.beginPath();  
   
a = this.axes.x;  
if (verticalLines) drawGridLines(a.ticks, drawVerticalLines);  
if (minorVerticalLines) drawGridLines(a.minorTicks, drawVerticalLines);  
   
a = this.axes.y;  
if (horizontalLines) drawGridLines(a.ticks, drawHorizontalLines);  
if (minorHorizontalLines) drawGridLines(a.minorTicks, drawHorizontalLines);  
   
ctx.stroke();  
}  
   
ctx.restore();  
if(verticalLines || minorVerticalLines ||  
horizontalLines || minorHorizontalLines){  
E.fire(this.el, 'flotr:aftergrid', [this.axes.x, this.axes.y, options, this]);  
}  
},  
   
drawOutline: function(){  
var  
that = this,  
options = that.options,  
grid = options.grid,  
outline = grid.outline,  
ctx = that.ctx,  
backgroundImage = grid.backgroundImage,  
plotOffset = that.plotOffset,  
leftOffset = plotOffset.left,  
topOffset = plotOffset.top,  
plotWidth = that.plotWidth,  
plotHeight = that.plotHeight,  
v, img, src, left, top, globalAlpha;  
   
if (!grid.outlineWidth) return;  
   
ctx.save();  
   
if (grid.circular) {  
ctx.translate(leftOffset + plotWidth / 2, topOffset + plotHeight / 2);  
var radius = Math.min(plotHeight, plotWidth) * options.radar.radiusRatio / 2,  
sides = this.axes.x.ticks.length,  
coeff = 2*(Math.PI/sides),  
angle = -Math.PI/2;  
   
// Draw axis/grid border.  
ctx.beginPath();  
ctx.lineWidth = grid.outlineWidth;  
ctx.strokeStyle = grid.color;  
ctx.lineJoin = 'round';  
   
for(i = 0; i <= sides; ++i){  
ctx[i === 0 ? 'moveTo' : 'lineTo'](Math.cos(i*coeff+angle)*radius, Math.sin(i*coeff+angle)*radius);  
}  
//ctx.arc(0, 0, radius, 0, Math.PI*2, true);  
   
ctx.stroke();  
}  
else {  
ctx.translate(leftOffset, topOffset);  
   
// Draw axis/grid border.  
var lw = grid.outlineWidth,  
orig = 0.5-lw+((lw+1)%2/2),  
lineTo = 'lineTo',  
moveTo = 'moveTo';  
ctx.lineWidth = lw;  
ctx.strokeStyle = grid.color;  
ctx.lineJoin = 'miter';  
ctx.beginPath();  
ctx.moveTo(orig, orig);  
plotWidth = plotWidth - (lw / 2) % 1;  
plotHeight = plotHeight + lw / 2;  
ctx[outline.indexOf('n') !== -1 ? lineTo : moveTo](plotWidth, orig);  
ctx[outline.indexOf('e') !== -1 ? lineTo : moveTo](plotWidth, plotHeight);  
ctx[outline.indexOf('s') !== -1 ? lineTo : moveTo](orig, plotHeight);  
ctx[outline.indexOf('w') !== -1 ? lineTo : moveTo](orig, orig);  
ctx.stroke();  
ctx.closePath();  
}  
   
ctx.restore();  
   
if (backgroundImage) {  
   
src = backgroundImage.src || backgroundImage;  
left = (parseInt(backgroundImage.left, 10) || 0) + plotOffset.left;  
top = (parseInt(backgroundImage.top, 10) || 0) + plotOffset.top;  
img = new Image();  
   
img.onload = function() {  
ctx.save();  
if (backgroundImage.alpha) ctx.globalAlpha = backgroundImage.alpha;  
ctx.globalCompositeOperation = 'destination-over';  
ctx.drawImage(img, 0, 0, img.width, img.height, left, top, plotWidth, plotHeight);  
ctx.restore();  
};  
   
img.src = src;  
}  
}  
});  
   
})();  
   
(function () {  
   
var  
D = Flotr.DOM,  
_ = Flotr._,  
flotr = Flotr,  
S_MOUSETRACK = 'opacity:0.7;background-color:#000;color:#fff;display:none;position:absolute;padding:2px 8px;-moz-border-radius:4px;border-radius:4px;white-space:nowrap;';  
   
Flotr.addPlugin('hit', {  
callbacks: {  
'flotr:mousemove': function(e, pos) {  
this.hit.track(pos);  
},  
'flotr:click': function(pos) {  
this.hit.track(pos);  
},  
'flotr:mouseout': function() {  
this.hit.clearHit();  
}  
},  
track : function (pos) {  
if (this.options.mouse.track || _.any(this.series, function(s){return s.mouse && s.mouse.track;})) {  
this.hit.hit(pos);  
}  
},  
/**  
* Try a method on a graph type. If the method exists, execute it.  
* @param {Object} series  
* @param {String} method Method name.  
* @param {Array} args Arguments applied to method.  
* @return executed successfully or failed.  
*/  
executeOnType: function(s, method, args){  
var  
success = false,  
options;  
   
if (!_.isArray(s)) s = [s];  
   
function e(s, index) {  
_.each(_.keys(flotr.graphTypes), function (type) {  
if (s[type] && s[type].show && this[type][method]) {  
options = this.getOptions(s, type);  
   
options.fill = !!s.mouse.fillColor;  
options.fillStyle = this.processColor(s.mouse.fillColor || '#ffffff', {opacity: s.mouse.fillOpacity});  
options.color = s.mouse.lineColor;  
options.context = this.octx;  
options.index = index;  
   
if (args) options.args = args;  
this[type][method].call(this[type], options);  
success = true;  
}  
}, this);  
}  
_.each(s, e, this);  
   
return success;  
},  
/**  
* Updates the mouse tracking point on the overlay.  
*/  
drawHit: function(n){  
var octx = this.octx,  
s = n.series;  
   
if (s.mouse.lineColor) {  
octx.save();  
octx.lineWidth = (s.points ? s.points.lineWidth : 1);  
octx.strokeStyle = s.mouse.lineColor;  
octx.fillStyle = this.processColor(s.mouse.fillColor || '#ffffff', {opacity: s.mouse.fillOpacity});  
octx.translate(this.plotOffset.left, this.plotOffset.top);  
   
if (!this.hit.executeOnType(s, 'drawHit', n)) {  
var xa = n.xaxis,  
ya = n.yaxis;  
   
octx.beginPath();  
// TODO fix this (points) should move to general testable graph mixin  
octx.arc(xa.d2p(n.x), ya.d2p(n.y), s.points.radius || s.mouse.radius, 0, 2 * Math.PI, true);  
octx.fill();  
octx.stroke();  
octx.closePath();  
}  
octx.restore();  
this.clip(octx);  
}  
this.prevHit = n;  
},  
/**  
* Removes the mouse tracking point from the overlay.  
*/  
clearHit: function(){  
var prev = this.prevHit,  
octx = this.octx,  
plotOffset = this.plotOffset;  
octx.save();  
octx.translate(plotOffset.left, plotOffset.top);  
if (prev) {  
if (!this.hit.executeOnType(prev.series, 'clearHit', this.prevHit)) {  
// TODO fix this (points) should move to general testable graph mixin  
var  
s = prev.series,  
lw = (s.points ? s.points.lineWidth : 1);  
offset = (s.points.radius || s.mouse.radius) + lw;  
octx.clearRect(  
prev.xaxis.d2p(prev.x) - offset,  
prev.yaxis.d2p(prev.y) - offset,  
offset*2,  
offset*2  
);  
}  
D.hide(this.mouseTrack);  
this.prevHit = null;  
}  
octx.restore();  
},  
/**  
* Retrieves the nearest data point from the mouse cursor. If it's within  
* a certain range, draw a point on the overlay canvas and display the x and y  
* value of the data.  
* @param {Object} mouse - Object that holds the relative x and y coordinates of the cursor.  
*/  
hit: function(mouse){  
   
var  
options = this.options,  
prevHit = this.prevHit,  
closest, sensibility, dataIndex, seriesIndex, series, value, xaxis, yaxis;  
   
if (this.series.length === 0) return;  
   
// Nearest data element.  
// dist, x, y, relX, relY, absX, absY, sAngle, eAngle, fraction, mouse,  
// xaxis, yaxis, series, index, seriesIndex  
n = {  
relX : mouse.relX,  
relY : mouse.relY,  
absX : mouse.absX,  
absY : mouse.absY  
};  
   
if (options.mouse.trackY &&  
!options.mouse.trackAll &&  
this.hit.executeOnType(this.series, 'hit', [mouse, n]))  
{  
   
if (!_.isUndefined(n.seriesIndex)) {  
series = this.series[n.seriesIndex];  
n.series = series;  
n.mouse = series.mouse;  
n.xaxis = series.xaxis;  
n.yaxis = series.yaxis;  
}  
} else {  
   
closest = this.hit.closest(mouse);  
   
if (closest) {  
   
closest = options.mouse.trackY ? closest.point : closest.x;  
seriesIndex = closest.seriesIndex;  
series = this.series[seriesIndex];  
xaxis = series.xaxis;  
yaxis = series.yaxis;  
sensibility = 2 * series.mouse.sensibility;  
   
if  
(options.mouse.trackAll ||  
(closest.distanceX < sensibility / xaxis.scale &&  
(!options.mouse.trackY || closest.distanceY < sensibility / yaxis.scale)))  
{  
n.series = series;  
n.xaxis = series.xaxis;  
n.yaxis = series.yaxis;  
n.mouse = series.mouse;  
n.x = closest.x;  
n.y = closest.y;  
n.dist = closest.distance;  
n.index = closest.dataIndex;  
n.seriesIndex = seriesIndex;  
}  
}  
}  
   
if (!prevHit || (prevHit.index !== n.index || prevHit.seriesIndex !== n.seriesIndex)) {  
this.hit.clearHit();  
if (n.series && n.mouse && n.mouse.track) {  
this.hit.drawMouseTrack(n);  
this.hit.drawHit(n);  
Flotr.EventAdapter.fire(this.el, 'flotr:hit', [n, this]);  
}  
}  
},  
   
closest : function (mouse) {  
   
var  
series = this.series,  
options = this.options,  
relX = mouse.relX,  
relY = mouse.relY,  
compare = Number.MAX_VALUE,  
compareX = Number.MAX_VALUE,  
closest = {},  
closestX = {},  
check = false,  
serie, data,  
distance, distanceX, distanceY,  
mouseX, mouseY,  
x, y, i, j;  
   
function setClosest (o) {  
o.distance = distance;  
o.distanceX = distanceX;  
o.distanceY = distanceY;  
o.seriesIndex = i;  
o.dataIndex = j;  
o.x = x;  
o.y = y;  
}  
   
for (i = 0; i < series.length; i++) {  
   
serie = series[i];  
data = serie.data;  
mouseX = serie.xaxis.p2d(relX);  
mouseY = serie.yaxis.p2d(relY);  
   
if (data.length) check = true;  
   
for (j = data.length; j--;) {  
   
x = data[j][0];  
y = data[j][1];  
   
if (x === null || y === null) continue;  
   
// don't check if the point isn't visible in the current range  
if (x < serie.xaxis.min || x > serie.xaxis.max) continue;  
   
distanceX = Math.abs(x - mouseX);  
distanceY = Math.abs(y - mouseY);  
   
// Skip square root for speed  
distance = distanceX * distanceX + distanceY * distanceY;  
   
if (distance < compare) {  
compare = distance;  
setClosest(closest);  
}  
   
if (distanceX < compareX) {  
compareX = distanceX;  
setClosest(closestX);  
}  
}  
}  
   
return check ? {  
point : closest,  
x : closestX  
} : false;  
},  
   
drawMouseTrack : function (n) {  
   
var  
pos = '',  
s = n.series,  
p = n.mouse.position,  
m = n.mouse.margin,  
elStyle = S_MOUSETRACK,  
mouseTrack = this.mouseTrack,  
plotOffset = this.plotOffset,  
left = plotOffset.left,  
right = plotOffset.right,  
bottom = plotOffset.bottom,  
top = plotOffset.top,  
decimals = n.mouse.trackDecimals,  
options = this.options;  
   
// Create  
if (!mouseTrack) {  
mouseTrack = D.node('<div class="flotr-mouse-value"></div>');  
this.mouseTrack = mouseTrack;  
D.insert(this.el, mouseTrack);  
}  
   
if (!n.mouse.relative) { // absolute to the canvas  
   
if (p.charAt(0) == 'n') pos += 'top:' + (m + top) + 'px;bottom:auto;';  
else if (p.charAt(0) == 's') pos += 'bottom:' + (m + bottom) + 'px;top:auto;';  
if (p.charAt(1) == 'e') pos += 'right:' + (m + right) + 'px;left:auto;';  
else if (p.charAt(1) == 'w') pos += 'left:' + (m + left) + 'px;right:auto;';  
   
// Bars  
} else if (s.bars.show) {  
pos += 'bottom:' + (m - top - n.yaxis.d2p(n.y/2) + this.canvasHeight) + 'px;top:auto;';  
pos += 'left:' + (m + left + n.xaxis.d2p(n.x - options.bars.barWidth/2)) + 'px;right:auto;';  
   
// Pie  
} else if (s.pie.show) {  
var center = {  
x: (this.plotWidth)/2,  
y: (this.plotHeight)/2  
},  
radius = (Math.min(this.canvasWidth, this.canvasHeight) * s.pie.sizeRatio) / 2,  
bisection = n.sAngle<n.eAngle ? (n.sAngle + n.eAngle) / 2: (n.sAngle + n.eAngle + 2* Math.PI) / 2;  
   
pos += 'bottom:' + (m - top - center.y - Math.sin(bisection) * radius/2 + this.canvasHeight) + 'px;top:auto;';  
pos += 'left:' + (m + left + center.x + Math.cos(bisection) * radius/2) + 'px;right:auto;';  
   
// Default  
} else {  
if (p.charAt(0) == 'n') pos += 'bottom:' + (m - top - n.yaxis.d2p(n.y) + this.canvasHeight) + 'px;top:auto;';  
else if (p.charAt(0) == 's') pos += 'top:' + (m + top + n.yaxis.d2p(n.y)) + 'px;bottom:auto;';  
if (p.charAt(1) == 'e') pos += 'left:' + (m + left + n.xaxis.d2p(n.x)) + 'px;right:auto;';  
else if (p.charAt(1) == 'w') pos += 'right:' + (m - left - n.xaxis.d2p(n.x) + this.canvasWidth) + 'px;left:auto;';  
}  
   
elStyle += pos;  
mouseTrack.style.cssText = elStyle;  
   
if (!decimals || decimals < 0) decimals = 0;  
   
mouseTrack.innerHTML = n.mouse.trackFormatter({  
x: n.x.toFixed(decimals),  
y: n.y.toFixed(decimals),  
series: n.series,  
index: n.index,  
nearest: n,  
fraction: n.fraction  
});  
   
D.show(mouseTrack);  
}  
   
});  
})();  
   
/**  
* Selection Handles Plugin * Selection Handles Plugin
* *
* *
* Options * Options
* show - True enables the handles plugin. * show - True enables the handles plugin.
* drag - Left and Right drag handles * drag - Left and Right drag handles
* scroll - Scrolling handle * scroll - Scrolling handle
*/ */
(function () { (function () {
   
function isLeftClick (e, type) { function isLeftClick(e, type) {
return (e.which ? (e.which === 1) : (e.button === 0 || e.button === 1)); return (e.which ? (e.which === 1) : (e.button === 0 || e.button === 1));
}  
   
function boundX(x, graph) {  
return Math.min(Math.max(0, x), graph.plotWidth - 1);  
}  
   
function boundY(y, graph) {  
return Math.min(Math.max(0, y), graph.plotHeight);  
}  
   
var  
D = Flotr.DOM,  
E = Flotr.EventAdapter,  
_ = Flotr._;  
   
   
Flotr.addPlugin('selection', {  
   
options: {  
pinchOnly: null, // Only select on pinch  
mode: null, // => one of null, 'x', 'y' or 'xy'  
color: '#B6D9FF', // => selection box color  
fps: 20 // => frames-per-second  
},  
   
callbacks: {  
'flotr:mouseup' : function (event) {  
   
var  
options = this.options.selection,  
selection = this.selection,  
pointer = this.getEventPosition(event);  
   
if (!options || !options.mode) return;  
if (selection.interval) clearInterval(selection.interval);  
   
if (this.multitouches) {  
selection.updateSelection();  
} else  
if (!options.pinchOnly) {  
selection.setSelectionPos(selection.selection.second, pointer);  
}  
selection.clearSelection();  
   
if(selection.selecting && selection.selectionIsSane()){  
selection.drawSelection();  
selection.fireSelectEvent();  
this.ignoreClick = true;  
}  
},  
'flotr:mousedown' : function (event) {  
   
var  
options = this.options.selection,  
selection = this.selection,  
pointer = this.getEventPosition(event);  
   
if (!options || !options.mode) return;  
if (!options.mode || (!isLeftClick(event) && _.isUndefined(event.touches))) return;  
if (!options.pinchOnly) selection.setSelectionPos(selection.selection.first, pointer);  
if (selection.interval) clearInterval(selection.interval);  
   
this.lastMousePos.pageX = null;  
selection.selecting = false;  
selection.interval = setInterval(  
_.bind(selection.updateSelection, this),  
1000 / options.fps  
);  
},  
'flotr:destroy' : function (event) {  
clearInterval(this.selection.interval);  
} }
},  
  function boundX(x, graph) {
// TODO This isn't used. Maybe it belongs in the draw area and fire select event methods? return Math.min(Math.max(0, x), graph.plotWidth - 1);
getArea: function() {  
   
var s = this.selection.selection,  
first = s.first,  
second = s.second;  
   
return {  
x1: Math.min(first.x, second.x),  
x2: Math.max(first.x, second.x),  
y1: Math.min(first.y, second.y),  
y2: Math.max(first.y, second.y)  
};  
},  
   
selection: {first: {x: -1, y: -1}, second: {x: -1, y: -1}},  
prevSelection: null,  
interval: null,  
   
/**  
* Fires the 'flotr:select' event when the user made a selection.  
*/  
fireSelectEvent: function(name){  
var a = this.axes,  
s = this.selection.selection,  
x1, x2, y1, y2;  
   
name = name || 'select';  
   
x1 = a.x.p2d(s.first.x);  
x2 = a.x.p2d(s.second.x);  
y1 = a.y.p2d(s.first.y);  
y2 = a.y.p2d(s.second.y);  
   
E.fire(this.el, 'flotr:'+name, [{  
x1:Math.min(x1, x2),  
y1:Math.min(y1, y2),  
x2:Math.max(x1, x2),  
y2:Math.max(y1, y2),  
xfirst:x1, xsecond:x2, yfirst:y1, ysecond:y2  
}, this]);  
},  
   
/**  
* Allows the user the manually select an area.  
* @param {Object} area - Object with coordinates to select.  
*/  
setSelection: function(area, preventEvent){  
var options = this.options,  
xa = this.axes.x,  
ya = this.axes.y,  
vertScale = ya.scale,  
hozScale = xa.scale,  
selX = options.selection.mode.indexOf('x') != -1,  
selY = options.selection.mode.indexOf('y') != -1,  
s = this.selection.selection;  
   
this.selection.clearSelection();  
   
s.first.y = boundY((selX && !selY) ? 0 : (ya.max - area.y1) * vertScale, this);  
s.second.y = boundY((selX && !selY) ? this.plotHeight - 1: (ya.max - area.y2) * vertScale, this);  
s.first.x = boundX((selY && !selX) ? 0 : area.x1, this);  
s.second.x = boundX((selY && !selX) ? this.plotWidth : area.x2, this);  
   
this.selection.drawSelection();  
if (!preventEvent)  
this.selection.fireSelectEvent();  
},  
   
/**  
* Calculates the position of the selection.  
* @param {Object} pos - Position object.  
* @param {Event} event - Event object.  
*/  
setSelectionPos: function(pos, pointer) {  
var mode = this.options.selection.mode,  
selection = this.selection.selection;  
   
if(mode.indexOf('x') == -1) {  
pos.x = (pos == selection.first) ? 0 : this.plotWidth;  
}else{  
pos.x = boundX(pointer.relX, this);  
} }
   
if (mode.indexOf('y') == -1) { function boundY(y, graph) {
pos.y = (pos == selection.first) ? 0 : this.plotHeight - 1; return Math.min(Math.max(0, y), graph.plotHeight);
}else{  
pos.y = boundY(pointer.relY, this);  
} }
},  
/** var
* Draws the selection box. D = Flotr.DOM,
*/ E = Flotr.EventAdapter,
drawSelection: function() { _ = Flotr._;
   
this.selection.fireSelectEvent('selecting');  
  Flotr.addPlugin('selection', {
var s = this.selection.selection,  
octx = this.octx, options: {
options = this.options, pinchOnly: null, // Only select on pinch
plotOffset = this.plotOffset, mode: null, // => one of null, 'x', 'y' or 'xy'
prevSelection = this.selection.prevSelection; color: '#B6D9FF', // => selection box color
  fps: 20 // => frames-per-second
if (prevSelection && },
s.first.x == prevSelection.first.x &&  
s.first.y == prevSelection.first.y && callbacks: {
s.second.x == prevSelection.second.x && 'flotr:mouseup': function (event) {
s.second.y == prevSelection.second.y) {  
return; var
  options = this.options.selection,
  selection = this.selection,
  pointer = this.getEventPosition(event);
   
  if (!options || !options.mode) return;
  if (selection.interval) clearInterval(selection.interval);
   
  if (this.multitouches) {
  selection.updateSelection();
  } else if (!options.pinchOnly) {
  selection.setSelectionPos(selection.selection.second, pointer);
  }
  selection.clearSelection();
   
  if (selection.selecting && selection.selectionIsSane()) {
  selection.drawSelection();
  selection.fireSelectEvent();
  this.ignoreClick = true;
  }
  },
  'flotr:mousedown': function (event) {
   
  var
  options = this.options.selection,
  selection = this.selection,
  pointer = this.getEventPosition(event);
   
  if (!options || !options.mode) return;
  if (!options.mode || (!isLeftClick(event) && _.isUndefined(event.touches))) return;
  if (!options.pinchOnly) selection.setSelectionPos(selection.selection.first, pointer);
  if (selection.interval) clearInterval(selection.interval);
   
  this.lastMousePos.pageX = null;
  selection.selecting = false;
  selection.interval = setInterval(
  _.bind(selection.updateSelection, this),
  1000 / options.fps
  );
  },
  'flotr:destroy': function (event) {
  clearInterval(this.selection.interval);
  }
  },
   
  // TODO This isn't used. Maybe it belongs in the draw area and fire select event methods?
  getArea: function () {
   
  var s = this.selection.selection,
  first = s.first,
  second = s.second;
   
  return {
  x1: Math.min(first.x, second.x),
  x2: Math.max(first.x, second.x),
  y1: Math.min(first.y, second.y),
  y2: Math.max(first.y, second.y)
  };
  },
   
  selection: {first: {x: -1, y: -1}, second: {x: -1, y: -1}},
  prevSelection: null,
  interval: null,
   
  /**
  * Fires the 'flotr:select' event when the user made a selection.
  */
  fireSelectEvent: function (name) {
  var a = this.axes,
  s = this.selection.selection,
  x1, x2, y1, y2;
   
  name = name || 'select';
   
  x1 = a.x.p2d(s.first.x);
  x2 = a.x.p2d(s.second.x);
  y1 = a.y.p2d(s.first.y);
  y2 = a.y.p2d(s.second.y);
   
  E.fire(this.el, 'flotr:' + name, [
  {
  x1: Math.min(x1, x2),
  y1: Math.min(y1, y2),
  x2: Math.max(x1, x2),
  y2: Math.max(y1, y2),
  xfirst: x1, xsecond: x2, yfirst: y1, ysecond: y2
  },
  this
  ]);
  },
   
  /**
  * Allows the user the manually select an area.
  * @param {Object} area - Object with coordinates to select.
  */
  setSelection: function (area, preventEvent) {
  var options = this.options,
  xa = this.axes.x,
  ya = this.axes.y,
  vertScale = ya.scale,
  hozScale = xa.scale,
  selX = options.selection.mode.indexOf('x') != -1,
  selY = options.selection.mode.indexOf('y') != -1,
  s = this.selection.selection;
   
  this.selection.clearSelection();
   
  s.first.y = boundY((selX && !selY) ? 0 : (ya.max - area.y1) * vertScale, this);
  s.second.y = boundY((selX && !selY) ? this.plotHeight - 1 : (ya.max - area.y2) * vertScale, this);
  s.first.x = boundX((selY && !selX) ? 0 : area.x1, this);
  s.second.x = boundX((selY && !selX) ? this.plotWidth : area.x2, this);
   
  this.selection.drawSelection();
  if (!preventEvent)
  this.selection.fireSelectEvent();
  },
   
  /**
  * Calculates the position of the selection.
  * @param {Object} pos - Position object.
  * @param {Event} event - Event object.
  */
  setSelectionPos: function (pos, pointer) {
  var mode = this.options.selection.mode,
  selection = this.selection.selection;
   
  if (mode.indexOf('x') == -1) {
  pos.x = (pos == selection.first) ? 0 : this.plotWidth;
  } else {
  pos.x = boundX(pointer.relX, this);
  }
   
  if (mode.indexOf('y') == -1) {
  pos.y = (pos == selection.first) ? 0 : this.plotHeight - 1;
  } else {
  pos.y = boundY(pointer.relY, this);
  }
  },
  /**
  * Draws the selection box.
  */
  drawSelection: function () {
   
  this.selection.fireSelectEvent('selecting');
   
  var s = this.selection.selection,
  octx = this.octx,
  options = this.options,
  plotOffset = this.plotOffset,
  prevSelection = this.selection.prevSelection;
   
  if (prevSelection &&
  s.first.x == prevSelection.first.x &&
  s.first.y == prevSelection.first.y &&
  s.second.x == prevSelection.second.x &&
  s.second.y == prevSelection.second.y) {
  return;
  }
   
  octx.save();
  octx.strokeStyle = this.processColor(options.selection.color, {opacity: 0.8});
  octx.lineWidth = 1;
  octx.lineJoin = 'miter';
  octx.fillStyle = this.processColor(options.selection.color, {opacity: 0.4});
   
  this.selection.prevSelection = {
  first: { x: s.first.x, y: s.first.y },
  second: { x: s.second.x, y: s.second.y }
  };
   
  var x = Math.min(s.first.x, s.second.x),
  y = Math.min(s.first.y, s.second.y),
  w = Math.abs(s.second.x - s.first.x),
  h = Math.abs(s.second.y - s.first.y);
   
  octx.fillRect(x + plotOffset.left + 0.5, y + plotOffset.top + 0.5, w, h);
  octx.strokeRect(x + plotOffset.left + 0.5, y + plotOffset.top + 0.5, w, h);
  octx.restore();
  },
   
  /**
  * Updates (draws) the selection box.
  */
  updateSelection: function () {
  if (!this.lastMousePos.pageX) return;
   
  this.selection.selecting = true;
   
  if (this.multitouches) {
  this.selection.setSelectionPos(this.selection.selection.first, this.getEventPosition(this.multitouches[0]));
  this.selection.setSelectionPos(this.selection.selection.second, this.getEventPosition(this.multitouches[1]));
  } else if (this.options.selection.pinchOnly) {
  return;
  } else {
  this.selection.setSelectionPos(this.selection.selection.second, this.lastMousePos);
  }
   
  this.selection.clearSelection();
   
  if (this.selection.selectionIsSane()) {
  this.selection.drawSelection();
  }
  },
   
  /**
  * Removes the selection box from the overlay canvas.
  */
  clearSelection: function () {
  if (!this.selection.prevSelection) return;
   
  var prevSelection = this.selection.prevSelection,
  lw = 1,
  plotOffset = this.plotOffset,
  x = Math.min(prevSelection.first.x, prevSelection.second.x),
  y = Math.min(prevSelection.first.y, prevSelection.second.y),
  w = Math.abs(prevSelection.second.x - prevSelection.first.x),
  h = Math.abs(prevSelection.second.y - prevSelection.first.y);
   
  this.octx.clearRect(x + plotOffset.left - lw + 0.5,
  y + plotOffset.top - lw,
  w + 2 * lw + 0.5,
  h + 2 * lw + 0.5);
   
  this.selection.prevSelection = null;
  },
  /**
  * Determines whether or not the selection is sane and should be drawn.
  * @return {Boolean} - True when sane, false otherwise.
  */
  selectionIsSane: function () {
  var s = this.selection.selection;
  return Math.abs(s.second.x - s.first.x) >= 5 ||
  Math.abs(s.second.y - s.first.y) >= 5;
  }
   
  });
   
  })();
   
  (function () {
   
  var D = Flotr.DOM;
   
  Flotr.addPlugin('labels', {
   
  callbacks: {
  'flotr:afterdraw': function () {
  this.labels.draw();
  }
  },
   
  draw: function () {
  // Construct fixed width label boxes, which can be styled easily.
  var
  axis, tick, left, top, xBoxWidth,
  radius, sides, coeff, angle,
  div, i, html = '',
  noLabels = 0,
  options = this.options,
  ctx = this.ctx,
  a = this.axes,
  style = { size: options.fontSize };
   
  for (i = 0; i < a.x.ticks.length; ++i) {
  if (a.x.ticks[i].label) {
  ++noLabels;
  }
  }
  xBoxWidth = this.plotWidth / noLabels;
   
  if (options.grid.circular) {
  ctx.save();
  ctx.translate(this.plotOffset.left + this.plotWidth / 2,
  this.plotOffset.top + this.plotHeight / 2);
   
  radius = this.plotHeight * options.radar.radiusRatio / 2 + options.fontSize;
  sides = this.axes.x.ticks.length;
  coeff = 2 * (Math.PI / sides);
  angle = -Math.PI / 2;
   
  drawLabelCircular(this, a.x, false);
  drawLabelCircular(this, a.x, true);
  drawLabelCircular(this, a.y, false);
  drawLabelCircular(this, a.y, true);
  ctx.restore();
  }
   
  if (!options.HtmlText && this.textEnabled) {
  drawLabelNoHtmlText(this, a.x, 'center', 'top');
  drawLabelNoHtmlText(this, a.x2, 'center', 'bottom');
  drawLabelNoHtmlText(this, a.y, 'right', 'middle');
  drawLabelNoHtmlText(this, a.y2, 'left', 'middle');
   
  } else if ((
  a.x.options.showLabels ||
  a.x2.options.showLabels ||
  a.y.options.showLabels ||
  a.y2.options.showLabels) && !options.grid.circular
  ) {
   
  html = '';
   
  drawLabelHtml(this, a.x);
  drawLabelHtml(this, a.x2);
  drawLabelHtml(this, a.y);
  drawLabelHtml(this, a.y2);
   
  ctx.stroke();
  ctx.restore();
  div = D.create('div');
  D.setStyles(div, {
  fontSize: 'smaller',
  color: options.grid.color
  });
  div.className = 'flotr-labels';
  D.insert(this.el, div);
  D.insert(div, html);
  }
   
  function drawLabelCircular(graph, axis, minorTicks) {
  var
  ticks = minorTicks ? axis.minorTicks : axis.ticks,
  isX = axis.orientation === 1,
  isFirst = axis.n === 1,
  style, offset;
   
  style = {
  color: axis.options.color || options.grid.color,
  angle: Flotr.toRad(axis.options.labelsAngle),
  textBaseline: 'middle'
  };
   
  for (i = 0; i < ticks.length &&
  (minorTicks ? axis.options.showMinorLabels : axis.options.showLabels); ++i) {
  tick = ticks[i];
  tick.label += '';
  if (!tick.label || !tick.label.length) {
  continue;
  }
   
  x = Math.cos(i * coeff + angle) * radius;
  y = Math.sin(i * coeff + angle) * radius;
   
  style.textAlign = isX ? (Math.abs(x) < 0.1 ? 'center' : (x < 0 ? 'right' : 'left')) : 'left';
   
  Flotr.drawText(
  ctx, tick.label,
  isX ? x : 3,
  isX ? y : -(axis.ticks[i].v / axis.max) * (radius - options.fontSize),
  style
  );
  }
  }
   
  function drawLabelNoHtmlText(graph, axis, textAlign, textBaseline) {
  var
  isX = axis.orientation === 1,
  isFirst = axis.n === 1,
  style, offset;
   
  style = {
  color: axis.options.color || options.grid.color,
  textAlign: textAlign,
  textBaseline: textBaseline,
  angle: Flotr.toRad(axis.options.labelsAngle)
  };
  style = Flotr.getBestTextAlign(style.angle, style);
   
  for (i = 0; i < axis.ticks.length && continueShowingLabels(axis); ++i) {
   
  tick = axis.ticks[i];
  if (!tick.label || !tick.label.length) {
  continue;
  }
   
  offset = axis.d2p(tick.v);
  if (offset < 0 ||
  offset > (isX ? graph.plotWidth : graph.plotHeight)) {
  continue;
  }
   
  Flotr.drawText(
  ctx, tick.label,
  leftOffset(graph, isX, isFirst, offset),
  topOffset(graph, isX, isFirst, offset),
  style
  );
   
  // Only draw on axis y2
  if (!isX && !isFirst) {
  ctx.save();
  ctx.strokeStyle = style.color;
  ctx.beginPath();
  ctx.moveTo(graph.plotOffset.left + graph.plotWidth - 8, graph.plotOffset.top + axis.d2p(tick.v));
  ctx.lineTo(graph.plotOffset.left + graph.plotWidth, graph.plotOffset.top + axis.d2p(tick.v));
  ctx.stroke();
  ctx.restore();
  }
  }
   
  function continueShowingLabels(axis) {
  return axis.options.showLabels && axis.used;
  }
   
  function leftOffset(graph, isX, isFirst, offset) {
  return graph.plotOffset.left +
  (isX ? offset :
  (isFirst ?
  -options.grid.labelMargin :
  options.grid.labelMargin + graph.plotWidth));
  }
   
  function topOffset(graph, isX, isFirst, offset) {
  return graph.plotOffset.top +
  (isX ? options.grid.labelMargin : offset) +
  ((isX && isFirst) ? graph.plotHeight : 0);
  }
  }
   
  function drawLabelHtml(graph, axis) {
  var
  isX = axis.orientation === 1,
  isFirst = axis.n === 1,
  name = '',
  left, style, top,
  offset = graph.plotOffset;
   
  if (!isX && !isFirst) {
  ctx.save();
  ctx.strokeStyle = axis.options.color || options.grid.color;
  ctx.beginPath();
  }
   
  if (axis.options.showLabels && (isFirst ? true : axis.used)) {
  for (i = 0; i < axis.ticks.length; ++i) {
  tick = axis.ticks[i];
  if (!tick.label || !tick.label.length ||
  ((isX ? offset.left : offset.top) + axis.d2p(tick.v) < 0) ||
  ((isX ? offset.left : offset.top) + axis.d2p(tick.v) > (isX ? graph.canvasWidth : graph.canvasHeight))) {
  continue;
  }
  top = offset.top +
  (isX ?
  ((isFirst ? 1 : -1 ) * (graph.plotHeight + options.grid.labelMargin)) :
  axis.d2p(tick.v) - axis.maxLabel.height / 2);
  left = isX ? (offset.left + axis.d2p(tick.v) - xBoxWidth / 2) : 0;
   
  name = '';
  if (i === 0) {
  name = ' first';
  } else if (i === axis.ticks.length - 1) {
  name = ' last';
  }
  name += isX ? ' flotr-grid-label-x' : ' flotr-grid-label-y';
   
  html += [
  '<div style="position:absolute; text-align:' + (isX ? 'center' : 'right') + '; ',
  'top:' + top + 'px; ',
  ((!isX && !isFirst) ? 'right:' : 'left:') + left + 'px; ',
  'width:' + (isX ? xBoxWidth : ((isFirst ? offset.left : offset.right) - options.grid.labelMargin)) + 'px; ',
  axis.options.color ? ('color:' + axis.options.color + '; ') : ' ',
  '" class="flotr-grid-label' + name + '">' + tick.label + '</div>'
  ].join(' ');
   
  if (!isX && !isFirst) {
  ctx.moveTo(offset.left + graph.plotWidth - 8, offset.top + axis.d2p(tick.v));
  ctx.lineTo(offset.left + graph.plotWidth, offset.top + axis.d2p(tick.v));
  }
  }
  }
  }
  }
   
  });
  })();
   
  (function () {
   
  var
  D = Flotr.DOM,
  _ = Flotr._;
   
  Flotr.addPlugin('legend', {
  options: {
  show: true, // => setting to true will show the legend, hide otherwise
  noColumns: 1, // => number of colums in legend table // @todo: doesn't work for HtmlText = false
  labelFormatter: function (v) {
  return v;
  }, // => fn: string -> string
  labelBoxBorderColor: '#CCCCCC', // => border color for the little label boxes
  labelBoxWidth: 14,
  labelBoxHeight: 10,
  labelBoxMargin: 5,
  labelBoxOpacity: 0.4,
  container: null, // => container (as jQuery object) to put legend in, null means default on top of graph
  position: 'nw', // => position of default legend container within plot
  margin: 5, // => distance from grid edge to default legend container within plot
  backgroundColor: null, // => null means auto-detect
  backgroundOpacity: 0.85// => set to 0 to avoid background, set to 1 for a solid background
  },
  callbacks: {
  'flotr:afterinit': function () {
  this.legend.insertLegend();
  }
  },
  /**
  * Adds a legend div to the canvas container or draws it on the canvas.
  */
  insertLegend: function () {
   
  if (!this.options.legend.show)
  return;
   
  var series = this.series,
  plotOffset = this.plotOffset,
  options = this.options,
  legend = options.legend,
  fragments = [],
  rowStarted = false,
  ctx = this.ctx,
  itemCount = _.filter(series,function (s) {
  return (s.label && !s.hide);
  }).length,
  p = legend.position,
  m = legend.margin,
  i, label, color;
   
  if (itemCount) {
  if (!options.HtmlText && this.textEnabled && !legend.container) {
  var style = {
  size: options.fontSize * 1.1,
  color: options.grid.color
  };
   
  var lbw = legend.labelBoxWidth,
  lbh = legend.labelBoxHeight,
  lbm = legend.labelBoxMargin,
  offsetX = plotOffset.left + m,
  offsetY = plotOffset.top + m;
   
  // We calculate the labels' max width
  var labelMaxWidth = 0;
  for (i = series.length - 1; i > -1; --i) {
  if (!series[i].label || series[i].hide) continue;
  label = legend.labelFormatter(series[i].label);
  labelMaxWidth = Math.max(labelMaxWidth, this._text.measureText(label, style).width);
  }
   
  var legendWidth = Math.round(lbw + lbm * 3 + labelMaxWidth),
  legendHeight = Math.round(itemCount * (lbm + lbh) + lbm);
   
  if (p.charAt(0) == 's') offsetY = plotOffset.top + this.plotHeight - (m + legendHeight);
  if (p.charAt(1) == 'e') offsetX = plotOffset.left + this.plotWidth - (m + legendWidth);
   
  // Legend box
  color = this.processColor(legend.backgroundColor || 'rgb(240,240,240)', {opacity: legend.backgroundOpacity || 0.1});
   
  ctx.fillStyle = color;
  ctx.fillRect(offsetX, offsetY, legendWidth, legendHeight);
  ctx.strokeStyle = legend.labelBoxBorderColor;
  ctx.strokeRect(Flotr.toPixel(offsetX), Flotr.toPixel(offsetY), legendWidth, legendHeight);
   
  // Legend labels
  var x = offsetX + lbm;
  var y = offsetY + lbm;
  for (i = 0; i < series.length; i++) {
  if (!series[i].label || series[i].hide) continue;
  label = legend.labelFormatter(series[i].label);
   
  ctx.fillStyle = series[i].color;
  ctx.fillRect(x, y, lbw - 1, lbh - 1);
   
  ctx.strokeStyle = legend.labelBoxBorderColor;
  ctx.lineWidth = 1;
  ctx.strokeRect(Math.ceil(x) - 1.5, Math.ceil(y) - 1.5, lbw + 2, lbh + 2);
   
  // Legend text
  Flotr.drawText(ctx, label, x + lbw + lbm, y + lbh, style);
   
  y += lbh + lbm;
  }
  }
  else {
  for (i = 0; i < series.length; ++i) {
  if (!series[i].label || series[i].hide) continue;
   
  if (i % legend.noColumns === 0) {
  fragments.push(rowStarted ? '</tr><tr>' : '<tr>');
  rowStarted = true;
  }
   
  // @TODO remove requirement on bars
  var s = series[i],
  boxWidth = legend.labelBoxWidth,
  boxHeight = legend.labelBoxHeight,
  opacityValue = (s.bars ? s.bars.fillOpacity : legend.labelBoxOpacity),
  opacity = 'opacity:' + opacityValue + ';filter:alpha(opacity=' + opacityValue * 100 + ');';
   
  label = legend.labelFormatter(s.label);
  color = 'background-color:' + ((s.bars && s.bars.show && s.bars.fillColor && s.bars.fill) ? s.bars.fillColor : s.color) + ';';
   
  fragments.push(
  '<td class="flotr-legend-color-box">',
  '<div style="border:1px solid ', legend.labelBoxBorderColor, ';padding:1px">',
  '<div style="width:', (boxWidth - 1), 'px;height:', (boxHeight - 1), 'px;border:1px solid ', series[i].color, '">', // Border
  '<div style="width:', boxWidth, 'px;height:', boxHeight, 'px;', 'opacity:.4;', color, '"></div>', // Background
  '</div>',
  '</div>',
  '</td>',
  '<td class="flotr-legend-label">', label, '</td>'
  );
  }
  if (rowStarted) fragments.push('</tr>');
   
  if (fragments.length > 0) {
  var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join('') + '</table>';
  if (legend.container) {
  D.insert(legend.container, table);
  }
  else {
  var styles = {position: 'absolute', 'z-index': 2};
   
  if (p.charAt(0) == 'n') {
  styles.top = (m + plotOffset.top) + 'px';
  styles.bottom = 'auto';
  }
  else if (p.charAt(0) == 's') {
  styles.bottom = (m + plotOffset.bottom) + 'px';
  styles.top = 'auto';
  }
  if (p.charAt(1) == 'e') {
  styles.right = (m + plotOffset.right) + 'px';
  styles.left = 'auto';
  }
  else if (p.charAt(1) == 'w') {
  styles.left = (m + plotOffset.left) + 'px';
  styles.right = 'auto';
  }
   
  var div = D.create('div'), size;
  div.className = 'flotr-legend';
  D.setStyles(div, styles);
  D.insert(div, table);
  D.insert(this.el, div);
   
  if (!legend.backgroundOpacity)
  return;
   
  var c = legend.backgroundColor || options.grid.backgroundColor || '#ffffff';
   
  _.extend(styles, D.size(div), {
  'backgroundColor': c,
  'z-index': 1
  });
  styles.width += 'px';
  styles.height += 'px';
   
  // Put in the transparent background separately to avoid blended labels and
  div = D.create('div');
  div.className = 'flotr-legend-bg';
  D.setStyles(div, styles);
  D.opacity(div, legend.backgroundOpacity);
  D.insert(div, ' ');
  D.insert(this.el, div);
  }
  }
  }
  }
  }
  });
  })();
   
  /** Spreadsheet **/
  (function () {
   
  function getRowLabel(value) {
  if (this.options.spreadsheet.tickFormatter) {
  //TODO maybe pass the xaxis formatter to the custom tick formatter as an opt-out?
  return this.options.spreadsheet.tickFormatter(value);
  }
  else {
  var t = _.find(this.axes.x.ticks, function (t) {
  return t.v == value;
  });
  if (t) {
  return t.label;
  }
  return value;
  }
} }
   
octx.save();  
octx.strokeStyle = this.processColor(options.selection.color, {opacity: 0.8});  
octx.lineWidth = 1;  
octx.lineJoin = 'miter';  
octx.fillStyle = this.processColor(options.selection.color, {opacity: 0.4});  
   
this.selection.prevSelection = {  
first: { x: s.first.x, y: s.first.y },  
second: { x: s.second.x, y: s.second.y }  
};  
   
var x = Math.min(s.first.x, s.second.x),  
y = Math.min(s.first.y, s.second.y),  
w = Math.abs(s.second.x - s.first.x),  
h = Math.abs(s.second.y - s.first.y);  
   
octx.fillRect(x + plotOffset.left+0.5, y + plotOffset.top+0.5, w, h);  
octx.strokeRect(x + plotOffset.left+0.5, y + plotOffset.top+0.5, w, h);  
octx.restore();  
},  
   
/**  
* Updates (draws) the selection box.  
*/  
updateSelection: function(){  
if (!this.lastMousePos.pageX) return;  
   
this.selection.selecting = true;  
   
if (this.multitouches) {  
this.selection.setSelectionPos(this.selection.selection.first, this.getEventPosition(this.multitouches[0]));  
this.selection.setSelectionPos(this.selection.selection.second, this.getEventPosition(this.multitouches[1]));  
} else  
if (this.options.selection.pinchOnly) {  
return;  
} else {  
this.selection.setSelectionPos(this.selection.selection.second, this.lastMousePos);  
}  
   
this.selection.clearSelection();  
   
if(this.selection.selectionIsSane()) {  
this.selection.drawSelection();  
}  
},  
   
/**  
* Removes the selection box from the overlay canvas.  
*/  
clearSelection: function() {  
if (!this.selection.prevSelection) return;  
   
var prevSelection = this.selection.prevSelection,  
lw = 1,  
plotOffset = this.plotOffset,  
x = Math.min(prevSelection.first.x, prevSelection.second.x),  
y = Math.min(prevSelection.first.y, prevSelection.second.y),  
w = Math.abs(prevSelection.second.x - prevSelection.first.x),  
h = Math.abs(prevSelection.second.y - prevSelection.first.y);  
   
this.octx.clearRect(x + plotOffset.left - lw + 0.5,  
y + plotOffset.top - lw,  
w + 2 * lw + 0.5,  
h + 2 * lw + 0.5);  
   
this.selection.prevSelection = null;  
},  
/**  
* Determines whether or not the selection is sane and should be drawn.  
* @return {Boolean} - True when sane, false otherwise.  
*/  
selectionIsSane: function(){  
var s = this.selection.selection;  
return Math.abs(s.second.x - s.first.x) >= 5 ||  
Math.abs(s.second.y - s.first.y) >= 5;  
}  
   
});  
   
})();  
   
(function () {  
   
var D = Flotr.DOM;  
   
Flotr.addPlugin('labels', {  
   
callbacks : {  
'flotr:afterdraw' : function () {  
this.labels.draw();  
}  
},  
   
draw: function(){  
// Construct fixed width label boxes, which can be styled easily.  
var var
axis, tick, left, top, xBoxWidth, D = Flotr.DOM,
radius, sides, coeff, angle, _ = Flotr._;
div, i, html = '',  
noLabels = 0, Flotr.addPlugin('spreadsheet', {
options = this.options, options: {
ctx = this.ctx, show: false, // => show the data grid using two tabs
a = this.axes, tabGraphLabel: 'Graph',
style = { size: options.fontSize }; tabDataLabel: 'Data',
  toolbarDownload: 'Download CSV', // @todo: add better language support
for (i = 0; i < a.x.ticks.length; ++i){ toolbarSelectAll: 'Select all',
if (a.x.ticks[i].label) { ++noLabels; } csvFileSeparator: ',',
} decimalSeparator: '.',
xBoxWidth = this.plotWidth / noLabels; tickFormatter: null,
  initialTab: 'graph'
if (options.grid.circular) { },
ctx.save(); /**
ctx.translate(this.plotOffset.left + this.plotWidth / 2, * Builds the tabs in the DOM
this.plotOffset.top + this.plotHeight / 2); */
  callbacks: {
radius = this.plotHeight * options.radar.radiusRatio / 2 + options.fontSize; 'flotr:afterconstruct': function () {
sides = this.axes.x.ticks.length; // @TODO necessary?
coeff = 2 * (Math.PI / sides); //this.el.select('.flotr-tabs-group,.flotr-datagrid-container').invoke('remove');
angle = -Math.PI / 2;  
  if (!this.options.spreadsheet.show) return;
drawLabelCircular(this, a.x, false);  
drawLabelCircular(this, a.x, true); var ss = this.spreadsheet,
drawLabelCircular(this, a.y, false); container = D.node('<div class="flotr-tabs-group" style="position:absolute;left:0px;width:' + this.canvasWidth + 'px"></div>'),
drawLabelCircular(this, a.y, true); graph = D.node('<div style="float:left" class="flotr-tab selected">' + this.options.spreadsheet.tabGraphLabel + '</div>'),
ctx.restore(); data = D.node('<div style="float:left" class="flotr-tab">' + this.options.spreadsheet.tabDataLabel + '</div>'),
} offset;
   
if (!options.HtmlText && this.textEnabled) { ss.tabsContainer = container;
drawLabelNoHtmlText(this, a.x, 'center', 'top'); ss.tabs = { graph: graph, data: data };
drawLabelNoHtmlText(this, a.x2, 'center', 'bottom');  
drawLabelNoHtmlText(this, a.y, 'right', 'middle'); D.insert(container, graph);
drawLabelNoHtmlText(this, a.y2, 'left', 'middle'); D.insert(container, data);
  D.insert(this.el, container);
} else if ((  
a.x.options.showLabels || offset = D.size(data).height + 2;
a.x2.options.showLabels || this.plotOffset.bottom += offset;
a.y.options.showLabels ||  
a.y2.options.showLabels) && D.setStyles(container, {top: this.canvasHeight - offset + 'px'});
!options.grid.circular  
) { this.
  observe(graph, 'click',function () {
html = ''; ss.showTab('graph');
  }).
drawLabelHtml(this, a.x); observe(data, 'click', function () {
drawLabelHtml(this, a.x2); ss.showTab('data');
drawLabelHtml(this, a.y); });
drawLabelHtml(this, a.y2); if (this.options.spreadsheet.initialTab !== 'graph') {
  ss.showTab(this.options.spreadsheet.initialTab);
ctx.stroke(); }
ctx.restore(); }
div = D.create('div'); },
D.setStyles(div, { /**
fontSize: 'smaller', * Builds a matrix of the data to make the correspondance between the x values and the y values :
color: options.grid.color * X value => Y values from the axes
}); * @return {Array} The data grid
div.className = 'flotr-labels'; */
D.insert(this.el, div); loadDataGrid: function () {
D.insert(div, html); if (this.seriesData) return this.seriesData;
}  
  var s = this.series,
function drawLabelCircular (graph, axis, minorTicks) { rows = {};
var  
ticks = minorTicks ? axis.minorTicks : axis.ticks, /* The data grid is a 2 dimensions array. There is a row for each X value.
isX = axis.orientation === 1, * Each row contains the x value and the corresponding y value for each serie ('undefined' if there isn't one)
isFirst = axis.n === 1, **/
style, offset; _.each(s, function (serie, i) {
  _.each(serie.data, function (v) {
style = { var x = v[0],
color : axis.options.color || options.grid.color, y = v[1],
angle : Flotr.toRad(axis.options.labelsAngle), r = rows[x];
textBaseline : 'middle' if (r) {
}; r[i + 1] = y;
  } else {
for (i = 0; i < ticks.length && var newRow = [];
(minorTicks ? axis.options.showMinorLabels : axis.options.showLabels); ++i){ newRow[0] = x;
tick = ticks[i]; newRow[i + 1] = y;
tick.label += ''; rows[x] = newRow;
if (!tick.label || !tick.label.length) { continue; } }
  });
x = Math.cos(i * coeff + angle) * radius;  
y = Math.sin(i * coeff + angle) * radius;  
   
style.textAlign = isX ? (Math.abs(x) < 0.1 ? 'center' : (x < 0 ? 'right' : 'left')) : 'left';  
   
Flotr.drawText(  
ctx, tick.label,  
isX ? x : 3,  
isX ? y : -(axis.ticks[i].v / axis.max) * (radius - options.fontSize),  
style  
);  
}  
}  
   
function drawLabelNoHtmlText (graph, axis, textAlign, textBaseline) {  
var  
isX = axis.orientation === 1,  
isFirst = axis.n === 1,  
style, offset;  
   
style = {  
color : axis.options.color || options.grid.color,  
textAlign : textAlign,  
textBaseline : textBaseline,  
angle : Flotr.toRad(axis.options.labelsAngle)  
};  
style = Flotr.getBestTextAlign(style.angle, style);  
   
for (i = 0; i < axis.ticks.length && continueShowingLabels(axis); ++i) {  
   
tick = axis.ticks[i];  
if (!tick.label || !tick.label.length) { continue; }  
   
offset = axis.d2p(tick.v);  
if (offset < 0 ||  
offset > (isX ? graph.plotWidth : graph.plotHeight)) { continue; }  
   
Flotr.drawText(  
ctx, tick.label,  
leftOffset(graph, isX, isFirst, offset),  
topOffset(graph, isX, isFirst, offset),  
style  
);  
   
// Only draw on axis y2  
if (!isX && !isFirst) {  
ctx.save();  
ctx.strokeStyle = style.color;  
ctx.beginPath();  
ctx.moveTo(graph.plotOffset.left + graph.plotWidth - 8, graph.plotOffset.top + axis.d2p(tick.v));  
ctx.lineTo(graph.plotOffset.left + graph.plotWidth, graph.plotOffset.top + axis.d2p(tick.v));  
ctx.stroke();  
ctx.restore();  
}  
}  
   
function continueShowingLabels (axis) {  
return axis.options.showLabels && axis.used;  
}  
function leftOffset (graph, isX, isFirst, offset) {  
return graph.plotOffset.left +  
(isX ? offset :  
(isFirst ?  
-options.grid.labelMargin :  
options.grid.labelMargin + graph.plotWidth));  
}  
function topOffset (graph, isX, isFirst, offset) {  
return graph.plotOffset.top +  
(isX ? options.grid.labelMargin : offset) +  
((isX && isFirst) ? graph.plotHeight : 0);  
}  
}  
   
function drawLabelHtml (graph, axis) {  
var  
isX = axis.orientation === 1,  
isFirst = axis.n === 1,  
name = '',  
left, style, top,  
offset = graph.plotOffset;  
   
if (!isX && !isFirst) {  
ctx.save();  
ctx.strokeStyle = axis.options.color || options.grid.color;  
ctx.beginPath();  
}  
   
if (axis.options.showLabels && (isFirst ? true : axis.used)) {  
for (i = 0; i < axis.ticks.length; ++i) {  
tick = axis.ticks[i];  
if (!tick.label || !tick.label.length ||  
((isX ? offset.left : offset.top) + axis.d2p(tick.v) < 0) ||  
((isX ? offset.left : offset.top) + axis.d2p(tick.v) > (isX ? graph.canvasWidth : graph.canvasHeight))) {  
continue;  
}  
top = offset.top +  
(isX ?  
((isFirst ? 1 : -1 ) * (graph.plotHeight + options.grid.labelMargin)) :  
axis.d2p(tick.v) - axis.maxLabel.height / 2);  
left = isX ? (offset.left + axis.d2p(tick.v) - xBoxWidth / 2) : 0;  
   
name = '';  
if (i === 0) {  
name = ' first';  
} else if (i === axis.ticks.length - 1) {  
name = ' last';  
}  
name += isX ? ' flotr-grid-label-x' : ' flotr-grid-label-y';  
   
html += [  
'<div style="position:absolute; text-align:' + (isX ? 'center' : 'right') + '; ',  
'top:' + top + 'px; ',  
((!isX && !isFirst) ? 'right:' : 'left:') + left + 'px; ',  
'width:' + (isX ? xBoxWidth : ((isFirst ? offset.left : offset.right) - options.grid.labelMargin)) + 'px; ',  
axis.options.color ? ('color:' + axis.options.color + '; ') : ' ',  
'" class="flotr-grid-label' + name + '">' + tick.label + '</div>'  
].join(' ');  
   
if (!isX && !isFirst) {  
ctx.moveTo(offset.left + graph.plotWidth - 8, offset.top + axis.d2p(tick.v));  
ctx.lineTo(offset.left + graph.plotWidth, offset.top + axis.d2p(tick.v));  
}  
}  
}  
}  
}  
   
});  
})();  
   
(function () {  
   
var  
D = Flotr.DOM,  
_ = Flotr._;  
   
Flotr.addPlugin('legend', {  
options: {  
show: true, // => setting to true will show the legend, hide otherwise  
noColumns: 1, // => number of colums in legend table // @todo: doesn't work for HtmlText = false  
labelFormatter: function(v){return v;}, // => fn: string -> string  
labelBoxBorderColor: '#CCCCCC', // => border color for the little label boxes  
labelBoxWidth: 14,  
labelBoxHeight: 10,  
labelBoxMargin: 5,  
labelBoxOpacity: 0.4,  
container: null, // => container (as jQuery object) to put legend in, null means default on top of graph  
position: 'nw', // => position of default legend container within plot  
margin: 5, // => distance from grid edge to default legend container within plot  
backgroundColor: null, // => null means auto-detect  
backgroundOpacity: 0.85// => set to 0 to avoid background, set to 1 for a solid background  
},  
callbacks: {  
'flotr:afterinit': function() {  
this.legend.insertLegend();  
}  
},  
/**  
* Adds a legend div to the canvas container or draws it on the canvas.  
*/  
insertLegend: function(){  
   
if(!this.options.legend.show)  
return;  
   
var series = this.series,  
plotOffset = this.plotOffset,  
options = this.options,  
legend = options.legend,  
fragments = [],  
rowStarted = false,  
ctx = this.ctx,  
itemCount = _.filter(series, function(s) {return (s.label && !s.hide);}).length,  
p = legend.position,  
m = legend.margin,  
i, label, color;  
   
if (itemCount) {  
if (!options.HtmlText && this.textEnabled && !legend.container) {  
var style = {  
size: options.fontSize*1.1,  
color: options.grid.color  
};  
   
var lbw = legend.labelBoxWidth,  
lbh = legend.labelBoxHeight,  
lbm = legend.labelBoxMargin,  
offsetX = plotOffset.left + m,  
offsetY = plotOffset.top + m;  
   
// We calculate the labels' max width  
var labelMaxWidth = 0;  
for(i = series.length - 1; i > -1; --i){  
if(!series[i].label || series[i].hide) continue;  
label = legend.labelFormatter(series[i].label);  
labelMaxWidth = Math.max(labelMaxWidth, this._text.measureText(label, style).width);  
}  
   
var legendWidth = Math.round(lbw + lbm*3 + labelMaxWidth),  
legendHeight = Math.round(itemCount*(lbm+lbh) + lbm);  
   
if(p.charAt(0) == 's') offsetY = plotOffset.top + this.plotHeight - (m + legendHeight);  
if(p.charAt(1) == 'e') offsetX = plotOffset.left + this.plotWidth - (m + legendWidth);  
   
// Legend box  
color = this.processColor(legend.backgroundColor || 'rgb(240,240,240)', {opacity: legend.backgroundOpacity || 0.1});  
   
ctx.fillStyle = color;  
ctx.fillRect(offsetX, offsetY, legendWidth, legendHeight);  
ctx.strokeStyle = legend.labelBoxBorderColor;  
ctx.strokeRect(Flotr.toPixel(offsetX), Flotr.toPixel(offsetY), legendWidth, legendHeight);  
   
// Legend labels  
var x = offsetX + lbm;  
var y = offsetY + lbm;  
for(i = 0; i < series.length; i++){  
if(!series[i].label || series[i].hide) continue;  
label = legend.labelFormatter(series[i].label);  
   
ctx.fillStyle = series[i].color;  
ctx.fillRect(x, y, lbw-1, lbh-1);  
   
ctx.strokeStyle = legend.labelBoxBorderColor;  
ctx.lineWidth = 1;  
ctx.strokeRect(Math.ceil(x)-1.5, Math.ceil(y)-1.5, lbw+2, lbh+2);  
   
// Legend text  
Flotr.drawText(ctx, label, x + lbw + lbm, y + lbh, style);  
   
y += lbh + lbm;  
}  
}  
else {  
for(i = 0; i < series.length; ++i){  
if(!series[i].label || series[i].hide) continue;  
   
if(i % legend.noColumns === 0){  
fragments.push(rowStarted ? '</tr><tr>' : '<tr>');  
rowStarted = true;  
}  
   
// @TODO remove requirement on bars  
var s = series[i],  
boxWidth = legend.labelBoxWidth,  
boxHeight = legend.labelBoxHeight,  
opacityValue = (s.bars ? s.bars.fillOpacity : legend.labelBoxOpacity),  
opacity = 'opacity:' + opacityValue + ';filter:alpha(opacity=' + opacityValue*100 + ');';  
   
label = legend.labelFormatter(s.label);  
color = 'background-color:' + ((s.bars && s.bars.show && s.bars.fillColor && s.bars.fill) ? s.bars.fillColor : s.color) + ';';  
   
fragments.push(  
'<td class="flotr-legend-color-box">',  
'<div style="border:1px solid ', legend.labelBoxBorderColor, ';padding:1px">',  
'<div style="width:', (boxWidth-1), 'px;height:', (boxHeight-1), 'px;border:1px solid ', series[i].color, '">', // Border  
'<div style="width:', boxWidth, 'px;height:', boxHeight, 'px;', 'opacity:.4;', color, '"></div>', // Background  
'</div>',  
'</div>',  
'</td>',  
'<td class="flotr-legend-label">', label, '</td>'  
);  
}  
if(rowStarted) fragments.push('</tr>');  
   
if(fragments.length > 0){  
var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join('') + '</table>';  
if(legend.container){  
D.insert(legend.container, table);  
}  
else {  
var styles = {position: 'absolute', 'z-index': 2};  
   
if(p.charAt(0) == 'n') { styles.top = (m + plotOffset.top) + 'px'; styles.bottom = 'auto'; }  
else if(p.charAt(0) == 's') { styles.bottom = (m + plotOffset.bottom) + 'px'; styles.top = 'auto'; }  
if(p.charAt(1) == 'e') { styles.right = (m + plotOffset.right) + 'px'; styles.left = 'auto'; }  
else if(p.charAt(1) == 'w') { styles.left = (m + plotOffset.left) + 'px'; styles.right = 'auto'; }  
   
var div = D.create('div'), size;  
div.className = 'flotr-legend';  
D.setStyles(div, styles);  
D.insert(div, table);  
D.insert(this.el, div);  
   
if(!legend.backgroundOpacity)  
return;  
   
var c = legend.backgroundColor || options.grid.backgroundColor || '#ffffff';  
   
_.extend(styles, D.size(div), {  
'backgroundColor': c,  
'z-index': 1  
}); });
styles.width += 'px';  
styles.height += 'px'; // The data grid is sorted by x value
  this.seriesData = _.sortBy(rows, function (row, x) {
// Put in the transparent background separately to avoid blended labels and return parseInt(x, 10);
div = D.create('div'); });
div.className = 'flotr-legend-bg'; return this.seriesData;
D.setStyles(div, styles); },
D.opacity(div, legend.backgroundOpacity); /**
D.insert(div, ' '); * Constructs the data table for the spreadsheet
D.insert(this.el, div); * @todo make a spreadsheet manager (Flotr.Spreadsheet)
} * @return {Element} The resulting table element
} */
} constructDataGrid: function () {
} // If the data grid has already been built, nothing to do here
} if (this.spreadsheet.datagrid) return this.spreadsheet.datagrid;
});  
})(); var s = this.series,
  datagrid = this.spreadsheet.loadDataGrid(),
/** Spreadsheet **/ colgroup = ['<colgroup><col />'],
(function() { buttonDownload, buttonSelect, t;
   
function getRowLabel(value){ // First row : series' labels
if (this.options.spreadsheet.tickFormatter){ var html = ['<table class="flotr-datagrid"><tr class="first-row">'];
//TODO maybe pass the xaxis formatter to the custom tick formatter as an opt-out? html.push('<th>&nbsp;</th>');
return this.options.spreadsheet.tickFormatter(value); _.each(s, function (serie, i) {
} html.push('<th scope="col">' + (serie.label || String.fromCharCode(65 + i)) + '</th>');
else { colgroup.push('<col />');
var t = _.find(this.axes.x.ticks, function(t){return t.v == value;}); });
if (t) { html.push('</tr>');
return t.label; // Data rows
} _.each(datagrid, function (row) {
return value; html.push('<tr>');
} _.times(s.length + 1, function (i) {
} var tag = 'td',
  value = row[i],
var // TODO: do we really want to handle problems with floating point
D = Flotr.DOM, // precision here?
_ = Flotr._; content = (!_.isUndefined(value) ? Math.round(value * 100000) / 100000 : '');
  if (i === 0) {
Flotr.addPlugin('spreadsheet', { tag = 'th';
options: { var label = getRowLabel.call(this, content);
show: false, // => show the data grid using two tabs if (label) content = label;
tabGraphLabel: 'Graph', }
tabDataLabel: 'Data',  
toolbarDownload: 'Download CSV', // @todo: add better language support html.push('<' + tag + (tag == 'th' ? ' scope="row"' : '') + '>' + content + '</' + tag + '>');
toolbarSelectAll: 'Select all', }, this);
csvFileSeparator: ',', html.push('</tr>');
decimalSeparator: '.', }, this);
tickFormatter: null, colgroup.push('</colgroup>');
initialTab: 'graph' t = D.node(html.join(''));
},  
/** /**
* Builds the tabs in the DOM * @TODO disabled this
*/ if (!Flotr.isIE || Flotr.isIE == 9) {
callbacks: {  
'flotr:afterconstruct': function(){  
// @TODO necessary?  
//this.el.select('.flotr-tabs-group,.flotr-datagrid-container').invoke('remove');  
   
if (!this.options.spreadsheet.show) return;  
   
var ss = this.spreadsheet,  
container = D.node('<div class="flotr-tabs-group" style="position:absolute;left:0px;width:'+this.canvasWidth+'px"></div>'),  
graph = D.node('<div style="float:left" class="flotr-tab selected">'+this.options.spreadsheet.tabGraphLabel+'</div>'),  
data = D.node('<div style="float:left" class="flotr-tab">'+this.options.spreadsheet.tabDataLabel+'</div>'),  
offset;  
   
ss.tabsContainer = container;  
ss.tabs = { graph : graph, data : data };  
   
D.insert(container, graph);  
D.insert(container, data);  
D.insert(this.el, container);  
   
offset = D.size(data).height + 2;  
this.plotOffset.bottom += offset;  
   
D.setStyles(container, {top: this.canvasHeight-offset+'px'});  
   
this.  
observe(graph, 'click', function(){ss.showTab('graph');}).  
observe(data, 'click', function(){ss.showTab('data');});  
if (this.options.spreadsheet.initialTab !== 'graph'){  
ss.showTab(this.options.spreadsheet.initialTab);  
}  
}  
},  
/**  
* Builds a matrix of the data to make the correspondance between the x values and the y values :  
* X value => Y values from the axes  
* @return {Array} The data grid  
*/  
loadDataGrid: function(){  
if (this.seriesData) return this.seriesData;  
   
var s = this.series,  
rows = {};  
   
/* The data grid is a 2 dimensions array. There is a row for each X value.  
* Each row contains the x value and the corresponding y value for each serie ('undefined' if there isn't one)  
**/  
_.each(s, function(serie, i){  
_.each(serie.data, function (v) {  
var x = v[0],  
y = v[1],  
r = rows[x];  
if (r) {  
r[i+1] = y;  
} else {  
var newRow = [];  
newRow[0] = x;  
newRow[i+1] = y;  
rows[x] = newRow;  
}  
});  
});  
   
// The data grid is sorted by x value  
this.seriesData = _.sortBy(rows, function(row, x){  
return parseInt(x, 10);  
});  
return this.seriesData;  
},  
/**  
* Constructs the data table for the spreadsheet  
* @todo make a spreadsheet manager (Flotr.Spreadsheet)  
* @return {Element} The resulting table element  
*/  
constructDataGrid: function(){  
// If the data grid has already been built, nothing to do here  
if (this.spreadsheet.datagrid) return this.spreadsheet.datagrid;  
   
var s = this.series,  
datagrid = this.spreadsheet.loadDataGrid(),  
colgroup = ['<colgroup><col />'],  
buttonDownload, buttonSelect, t;  
   
// First row : series' labels  
var html = ['<table class="flotr-datagrid"><tr class="first-row">'];  
html.push('<th>&nbsp;</th>');  
_.each(s, function(serie,i){  
html.push('<th scope="col">'+(serie.label || String.fromCharCode(65+i))+'</th>');  
colgroup.push('<col />');  
});  
html.push('</tr>');  
// Data rows  
_.each(datagrid, function(row){  
html.push('<tr>');  
_.times(s.length+1, function(i){  
var tag = 'td',  
value = row[i],  
// TODO: do we really want to handle problems with floating point  
// precision here?  
content = (!_.isUndefined(value) ? Math.round(value*100000)/100000 : '');  
if (i === 0) {  
tag = 'th';  
var label = getRowLabel.call(this, content);  
if (label) content = label;  
}  
   
html.push('<'+tag+(tag=='th'?' scope="row"':'')+'>'+content+'</'+tag+'>');  
}, this);  
html.push('</tr>');  
}, this);  
colgroup.push('</colgroup>');  
t = D.node(html.join(''));  
   
/**  
* @TODO disabled this  
if (!Flotr.isIE || Flotr.isIE == 9) {  
function handleMouseout(){ function handleMouseout(){
t.select('colgroup col.hover, th.hover').invoke('removeClassName', 'hover'); t.select('colgroup col.hover, th.hover').invoke('removeClassName', 'hover');
} }
function handleMouseover(e){ function handleMouseover(e){
var td = e.element(), var td = e.element(),
siblings = td.previousSiblings(); siblings = td.previousSiblings();
t.select('th[scope=col]')[siblings.length-1].addClassName('hover'); t.select('th[scope=col]')[siblings.length-1].addClassName('hover');
t.select('colgroup col')[siblings.length].addClassName('hover'); t.select('colgroup col')[siblings.length].addClassName('hover');
} }
_.each(t.select('td'), function(td) { _.each(t.select('td'), function(td) {
Flotr.EventAdapter. Flotr.EventAdapter.
observe(td, 'mouseover', handleMouseover). observe(td, 'mouseover', handleMouseover).
observe(td, 'mouseout', handleMouseout); observe(td, 'mouseout', handleMouseout);
}); });
} }
*/ */
   
buttonDownload = D.node( buttonDownload = D.node(
'<button type="button" class="flotr-datagrid-toolbar-button">' + '<button type="button" class="flotr-datagrid-toolbar-button">' +
this.options.spreadsheet.toolbarDownload + this.options.spreadsheet.toolbarDownload +
'</button>'); '</button>');
   
buttonSelect = D.node( buttonSelect = D.node(
'<button type="button" class="flotr-datagrid-toolbar-button">' + '<button type="button" class="flotr-datagrid-toolbar-button">' +
this.options.spreadsheet.toolbarSelectAll+ this.options.spreadsheet.toolbarSelectAll +
'</button>'); '</button>');
   
this. this.
observe(buttonDownload, 'click', _.bind(this.spreadsheet.downloadCSV, this)). observe(buttonDownload, 'click', _.bind(this.spreadsheet.downloadCSV, this)).
observe(buttonSelect, 'click', _.bind(this.spreadsheet.selectAllData, this)); observe(buttonSelect, 'click', _.bind(this.spreadsheet.selectAllData, this));
   
var toolbar = D.node('<div class="flotr-datagrid-toolbar"></div>'); var toolbar = D.node('<div class="flotr-datagrid-toolbar"></div>');
D.insert(toolbar, buttonDownload); D.insert(toolbar, buttonDownload);
D.insert(toolbar, buttonSelect); D.insert(toolbar, buttonSelect);
   
var containerHeight =this.canvasHeight - D.size(this.spreadsheet.tabsContainer).height-2, var containerHeight = this.canvasHeight - D.size(this.spreadsheet.tabsContainer).height - 2,
container = D.node('<div class="flotr-datagrid-container" style="position:absolute;left:0px;top:0px;width:'+ container = D.node('<div class="flotr-datagrid-container" style="position:absolute;left:0px;top:0px;width:' +
this.canvasWidth+'px;height:'+containerHeight+'px;overflow:auto;z-index:10"></div>'); this.canvasWidth + 'px;height:' + containerHeight + 'px;overflow:auto;z-index:10"></div>');
   
D.insert(container, toolbar); D.insert(container, toolbar);
D.insert(container, t); D.insert(container, t);
D.insert(this.el, container); D.insert(this.el, container);
this.spreadsheet.datagrid = t; this.spreadsheet.datagrid = t;
this.spreadsheet.container = container; this.spreadsheet.container = container;
   
return t; return t;
}, },
/** /**
* Shows the specified tab, by its name * Shows the specified tab, by its name
* @todo make a tab manager (Flotr.Tabs) * @todo make a tab manager (Flotr.Tabs)
* @param {String} tabName - The tab name * @param {String} tabName - The tab name
*/ */
showTab: function(tabName){ showTab: function (tabName) {
if (this.spreadsheet.activeTab === tabName){ if (this.spreadsheet.activeTab === tabName) {
return; return;
} }
switch(tabName) { switch (tabName) {
case 'graph': case 'graph':
D.hide(this.spreadsheet.container); D.hide(this.spreadsheet.container);
D.removeClass(this.spreadsheet.tabs.data, 'selected'); D.removeClass(this.spreadsheet.tabs.data, 'selected');
D.addClass(this.spreadsheet.tabs.graph, 'selected'); D.addClass(this.spreadsheet.tabs.graph, 'selected');
break; break;
case 'data': case 'data':
if (!this.spreadsheet.datagrid) if (!this.spreadsheet.datagrid)
this.spreadsheet.constructDataGrid(); this.spreadsheet.constructDataGrid();
D.show(this.spreadsheet.container); D.show(this.spreadsheet.container);
D.addClass(this.spreadsheet.tabs.data, 'selected'); D.addClass(this.spreadsheet.tabs.data, 'selected');
D.removeClass(this.spreadsheet.tabs.graph, 'selected'); D.removeClass(this.spreadsheet.tabs.graph, 'selected');
break; break;
default: default:
throw 'Illegal tab name: ' + tabName; throw 'Illegal tab name: ' + tabName;
} }
this.spreadsheet.activeTab = tabName; this.spreadsheet.activeTab = tabName;
}, },
/** /**
* Selects the data table in the DOM for copy/paste * Selects the data table in the DOM for copy/paste
*/ */
selectAllData: function(){ selectAllData: function () {
if (this.spreadsheet.tabs) { if (this.spreadsheet.tabs) {
var selection, range, doc, win, node = this.spreadsheet.constructDataGrid(); var selection, range, doc, win, node = this.spreadsheet.constructDataGrid();
   
this.spreadsheet.showTab('data'); this.spreadsheet.showTab('data');
   
// deferred to be able to select the table // deferred to be able to select the table
setTimeout(function () { setTimeout(function () {
if ((doc = node.ownerDocument) && (win = doc.defaultView) && if ((doc = node.ownerDocument) && (win = doc.defaultView) &&
win.getSelection && doc.createRange && win.getSelection && doc.createRange &&
(selection = window.getSelection()) && (selection = window.getSelection()) &&
selection.removeAllRanges) { selection.removeAllRanges) {
range = doc.createRange(); range = doc.createRange();
range.selectNode(node); range.selectNode(node);
selection.removeAllRanges(); selection.removeAllRanges();
selection.addRange(range); selection.addRange(range);
} }
else if (document.body && document.body.createTextRange && else if (document.body && document.body.createTextRange &&
(range = document.body.createTextRange())) { (range = document.body.createTextRange())) {
range.moveToElementText(node); range.moveToElementText(node);
range.select(); range.select();
} }
}, 0); }, 0);
return true; return true;
} }
else return false; else return false;
}, },
/** /**
* Converts the data into CSV in order to download a file * Converts the data into CSV in order to download a file
*/ */
downloadCSV: function(){ downloadCSV: function () {
var csv = '', var csv = '',
series = this.series, series = this.series,
options = this.options, options = this.options,
dg = this.spreadsheet.loadDataGrid(), dg = this.spreadsheet.loadDataGrid(),
separator = encodeURIComponent(options.spreadsheet.csvFileSeparator); separator = encodeURIComponent(options.spreadsheet.csvFileSeparator);
   
if (options.spreadsheet.decimalSeparator === options.spreadsheet.csvFileSeparator) { if (options.spreadsheet.decimalSeparator === options.spreadsheet.csvFileSeparator) {
throw "The decimal separator is the same as the column separator ("+options.spreadsheet.decimalSeparator+")"; throw "The decimal separator is the same as the column separator (" + options.spreadsheet.decimalSeparator + ")";
} }
   
// The first row // The first row
_.each(series, function(serie, i){ _.each(series, function (serie, i) {
csv += separator+'"'+(serie.label || String.fromCharCode(65+i)).replace(/\"/g, '\\"')+'"'; csv += separator + '"' + (serie.label || String.fromCharCode(65 + i)).replace(/\"/g, '\\"') + '"';
  });
   
  csv += "%0D%0A"; // \r\n
   
  // For each row
  csv += _.reduce(dg, function (memo, row) {
  var rowLabel = getRowLabel.call(this, row[0]) || '';
  rowLabel = '"' + (rowLabel + '').replace(/\"/g, '\\"') + '"';
  var numbers = row.slice(1).join(separator);
  if (options.spreadsheet.decimalSeparator !== '.') {
  numbers = numbers.replace(/\./g, options.spreadsheet.decimalSeparator);
  }
  return memo + rowLabel + separator + numbers + "%0D%0A"; // \t and \r\n
  }, '', this);
   
  if (Flotr.isIE && Flotr.isIE < 9) {
  csv = csv.replace(new RegExp(separator, 'g'), decodeURIComponent(separator)).replace(/%0A/g, '\n').replace(/%0D/g, '\r');
  window.open().document.write(csv);
  }
  else window.open('data:text/csv,' + csv);
  }
}); });
   
csv += "%0D%0A"; // \r\n  
   
// For each row  
csv += _.reduce(dg, function(memo, row){  
var rowLabel = getRowLabel.call(this, row[0]) || '';  
rowLabel = '"'+(rowLabel+'').replace(/\"/g, '\\"')+'"';  
var numbers = row.slice(1).join(separator);  
if (options.spreadsheet.decimalSeparator !== '.') {  
numbers = numbers.replace(/\./g, options.spreadsheet.decimalSeparator);  
}  
return memo + rowLabel+separator+numbers+"%0D%0A"; // \t and \r\n  
}, '', this);  
   
if (Flotr.isIE && Flotr.isIE < 9) {  
csv = csv.replace(new RegExp(separator, 'g'), decodeURIComponent(separator)).replace(/%0A/g, '\n').replace(/%0D/g, '\r');  
window.open().document.write(csv);  
}  
else window.open('data:text/csv,'+csv);  
}  
});  
})(); })();
   
(function () { (function () {
   
var D = Flotr.DOM; var D = Flotr.DOM;
   
Flotr.addPlugin('titles', { Flotr.addPlugin('titles', {
callbacks: { callbacks: {
'flotr:afterdraw': function() { 'flotr:afterdraw': function () {
this.titles.drawTitles(); this.titles.drawTitles();
} }
}, },
/** /**
* Draws the title and the subtitle * Draws the title and the subtitle
*/ */
drawTitles : function () { drawTitles: function () {
var html, var html,
options = this.options, options = this.options,
margin = options.grid.labelMargin, margin = options.grid.labelMargin,
ctx = this.ctx, ctx = this.ctx,
a = this.axes; a = this.axes;
   
if (!options.HtmlText && this.textEnabled) { if (!options.HtmlText && this.textEnabled) {
var style = { var style = {
size: options.fontSize, size: options.fontSize,
color: options.grid.color, color: options.grid.color,
textAlign: 'center' textAlign: 'center'
}; };
   
// Add subtitle // Add subtitle
if (options.subtitle){ if (options.subtitle) {
Flotr.drawText( Flotr.drawText(
ctx, options.subtitle, ctx, options.subtitle,
this.plotOffset.left + this.plotWidth/2, this.plotOffset.left + this.plotWidth / 2,
this.titleHeight + this.subtitleHeight - 2, this.titleHeight + this.subtitleHeight - 2,
style style
); );
} }
   
style.weight = 1.5; style.weight = 1.5;
style.size *= 1.5; style.size *= 1.5;
   
// Add title // Add title
if (options.title){ if (options.title) {
Flotr.drawText( Flotr.drawText(
ctx, options.title, ctx, options.title,
this.plotOffset.left + this.plotWidth/2, this.plotOffset.left + this.plotWidth / 2,
this.titleHeight - 2, this.titleHeight - 2,
style style
); );
} }
   
style.weight = 1.8; style.weight = 1.8;
style.size *= 0.8; style.size *= 0.8;
   
// Add x axis title // Add x axis title
if (a.x.options.title && a.x.used){ if (a.x.options.title && a.x.used) {
style.textAlign = a.x.options.titleAlign || 'center'; style.textAlign = a.x.options.titleAlign || 'center';
style.textBaseline = 'top'; style.textBaseline = 'top';
style.angle = Flotr.toRad(a.x.options.titleAngle); style.angle = Flotr.toRad(a.x.options.titleAngle);
style = Flotr.getBestTextAlign(style.angle, style); style = Flotr.getBestTextAlign(style.angle, style);
Flotr.drawText( Flotr.drawText(
ctx, a.x.options.title, ctx, a.x.options.title,
this.plotOffset.left + this.plotWidth/2, this.plotOffset.left + this.plotWidth / 2,
this.plotOffset.top + a.x.maxLabel.height + this.plotHeight + 2 * margin, this.plotOffset.top + a.x.maxLabel.height + this.plotHeight + 2 * margin,
style style
); );
} }
   
// Add x2 axis title // Add x2 axis title
if (a.x2.options.title && a.x2.used){ if (a.x2.options.title && a.x2.used) {
style.textAlign = a.x2.options.titleAlign || 'center'; style.textAlign = a.x2.options.titleAlign || 'center';
style.textBaseline = 'bottom'; style.textBaseline = 'bottom';
style.angle = Flotr.toRad(a.x2.options.titleAngle); style.angle = Flotr.toRad(a.x2.options.titleAngle);
style = Flotr.getBestTextAlign(style.angle, style); style = Flotr.getBestTextAlign(style.angle, style);
Flotr.drawText( Flotr.drawText(
ctx, a.x2.options.title, ctx, a.x2.options.title,
this.plotOffset.left + this.plotWidth/2, this.plotOffset.left + this.plotWidth / 2,
this.plotOffset.top - a.x2.maxLabel.height - 2 * margin, this.plotOffset.top - a.x2.maxLabel.height - 2 * margin,
style style
); );
} }
   
// Add y axis title // Add y axis title
if (a.y.options.title && a.y.used){ if (a.y.options.title && a.y.used) {
style.textAlign = a.y.options.titleAlign || 'right'; style.textAlign = a.y.options.titleAlign || 'right';
style.textBaseline = 'middle'; style.textBaseline = 'middle';
style.angle = Flotr.toRad(a.y.options.titleAngle); style.angle = Flotr.toRad(a.y.options.titleAngle);
style = Flotr.getBestTextAlign(style.angle, style); style = Flotr.getBestTextAlign(style.angle, style);
Flotr.drawText( Flotr.drawText(
ctx, a.y.options.title, ctx, a.y.options.title,
this.plotOffset.left - a.y.maxLabel.width - 2 * margin, this.plotOffset.left - a.y.maxLabel.width - 2 * margin,
this.plotOffset.top + this.plotHeight / 2, this.plotOffset.top + this.plotHeight / 2,
style style
); );
} }
   
// Add y2 axis title // Add y2 axis title
if (a.y2.options.title && a.y2.used){ if (a.y2.options.title && a.y2.used) {
style.textAlign = a.y2.options.titleAlign || 'left'; style.textAlign = a.y2.options.titleAlign || 'left';
style.textBaseline = 'middle'; style.textBaseline = 'middle';
style.angle = Flotr.toRad(a.y2.options.titleAngle); style.angle = Flotr.toRad(a.y2.options.titleAngle);
style = Flotr.getBestTextAlign(style.angle, style); style = Flotr.getBestTextAlign(style.angle, style);
Flotr.drawText( Flotr.drawText(
ctx, a.y2.options.title, ctx, a.y2.options.title,
this.plotOffset.left + this.plotWidth + a.y2.maxLabel.width + 2 * margin, this.plotOffset.left + this.plotWidth + a.y2.maxLabel.width + 2 * margin,
this.plotOffset.top + this.plotHeight / 2, this.plotOffset.top + this.plotHeight / 2,
style style
); );
} }
} }
else { else {
html = []; html = [];
   
// Add title // Add title
if (options.title) if (options.title)
html.push( html.push(
'<div style="position:absolute;top:0;left:', '<div style="position:absolute;top:0;left:',
this.plotOffset.left, 'px;font-size:1em;font-weight:bold;text-align:center;width:', this.plotOffset.left, 'px;font-size:1em;font-weight:bold;text-align:center;width:',
this.plotWidth,'px;" class="flotr-title">', options.title, '</div>' this.plotWidth, 'px;" class="flotr-title">', options.title, '</div>'
); );
   
// Add subtitle // Add subtitle
if (options.subtitle) if (options.subtitle)
html.push( html.push(
'<div style="position:absolute;top:', this.titleHeight, 'px;left:', '<div style="position:absolute;top:', this.titleHeight, 'px;left:',
this.plotOffset.left, 'px;font-size:smaller;text-align:center;width:', this.plotOffset.left, 'px;font-size:smaller;text-align:center;width:',
this.plotWidth, 'px;" class="flotr-subtitle">', options.subtitle, '</div>' this.plotWidth, 'px;" class="flotr-subtitle">', options.subtitle, '</div>'
); );
   
html.push('</div>'); html.push('</div>');
   
html.push('<div class="flotr-axis-title" style="font-weight:bold;">'); html.push('<div class="flotr-axis-title" style="font-weight:bold;">');
   
// Add x axis title // Add x axis title
if (a.x.options.title && a.x.used) if (a.x.options.title && a.x.used)
html.push( html.push(
'<div style="position:absolute;top:', '<div style="position:absolute;top:',
(this.plotOffset.top + this.plotHeight + options.grid.labelMargin + a.x.titleSize.height), (this.plotOffset.top + this.plotHeight + options.grid.labelMargin + a.x.titleSize.height),
'px;left:', this.plotOffset.left, 'px;width:', this.plotWidth, 'px;left:', this.plotOffset.left, 'px;width:', this.plotWidth,
'px;text-align:', a.x.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-x1">', a.x.options.title, '</div>' 'px;text-align:', a.x.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-x1">', a.x.options.title, '</div>'
); );
   
// Add x2 axis title // Add x2 axis title
if (a.x2.options.title && a.x2.used) if (a.x2.options.title && a.x2.used)
html.push( html.push(
'<div style="position:absolute;top:0;left:', this.plotOffset.left, 'px;width:', '<div style="position:absolute;top:0;left:', this.plotOffset.left, 'px;width:',
this.plotWidth, 'px;text-align:', a.x2.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-x2">', a.x2.options.title, '</div>' this.plotWidth, 'px;text-align:', a.x2.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-x2">', a.x2.options.title, '</div>'
); );
   
// Add y axis title // Add y axis title
if (a.y.options.title && a.y.used) if (a.y.options.title && a.y.used)
html.push( html.push(
'<div style="position:absolute;top:', '<div style="position:absolute;top:',
(this.plotOffset.top + this.plotHeight/2 - a.y.titleSize.height/2), (this.plotOffset.top + this.plotHeight / 2 - a.y.titleSize.height / 2),
'px;left:0;text-align:', a.y.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-y1">', a.y.options.title, '</div>' 'px;left:0;text-align:', a.y.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-y1">', a.y.options.title, '</div>'
); );
   
// Add y2 axis title // Add y2 axis title
if (a.y2.options.title && a.y2.used) if (a.y2.options.title && a.y2.used)
html.push( html.push(
'<div style="position:absolute;top:', '<div style="position:absolute;top:',
(this.plotOffset.top + this.plotHeight/2 - a.y.titleSize.height/2), (this.plotOffset.top + this.plotHeight / 2 - a.y.titleSize.height / 2),
'px;right:0;text-align:', a.y2.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-y2">', a.y2.options.title, '</div>' 'px;right:0;text-align:', a.y2.options.titleAlign, ';" class="flotr-axis-title flotr-axis-title-y2">', a.y2.options.title, '</div>'
); );
   
html = html.join(''); html = html.join('');
   
var div = D.create('div'); var div = D.create('div');
D.setStyles({ D.setStyles({
color: options.grid.color color: options.grid.color
}); });
div.className = 'flotr-titles'; div.className = 'flotr-titles';
D.insert(this.el, div); D.insert(this.el, div);
D.insert(div, html); D.insert(div, html);
} }
} }
}); });
})(); })();
   
(function () { (function () {
   
Flotr.ExampleList.add({ Flotr.ExampleList.add({
key : 'test-background', key: 'test-background',
name : 'Test Background', name: 'Test Background',
callback : test_background, callback: test_background,
timeout : 100, timeout: 100,
tolerance : 10 tolerance: 10
}); });
   
function test_background (container) { function test_background(container) {
   
var var
d1 = [], d1 = [],
d2 = [], d2 = [],
d3 = [], d3 = [],
d4 = [], d4 = [],
d5 = [], // Data d5 = [], // Data
ticks = [[ 0, "Lower"], 10, 20, 30, [40, "Upper"]], // Ticks for the Y-Axis ticks = [
graph; [ 0, "Lower"],
  10,
for(var i = 0; i <= 10; i += 0.1){ 20,
d1.push([i, 4 + Math.pow(i,1.5)]); 30,
d2.push([i, Math.pow(i,3)]); [40, "Upper"]
d3.push([i, i*5+3*Math.sin(i*4)]); ], // Ticks for the Y-Axis
d4.push([i, i]); graph;
if( i.toFixed(1)%1 == 0 ){  
d5.push([i, 2*i]); for (var i = 0; i <= 10; i += 0.1) {
  d1.push([i, 4 + Math.pow(i, 1.5)]);
  d2.push([i, Math.pow(i, 3)]);
  d3.push([i, i * 5 + 3 * Math.sin(i * 4)]);
  d4.push([i, i]);
  if (i.toFixed(1) % 1 == 0) {
  d5.push([i, 2 * i]);
  }
  }
   
  d3[30][1] = null;
  d3[31][1] = null;
   
  function ticksFn(n) {
  return '(' + n + ')';
  }
   
  graph = Flotr.draw(container, [
  { data: d1, label: 'y = 4 + x^(1.5)', lines: { fill: true } },
  { data: d2, label: 'y = x^3'},
  { data: d3, label: 'y = 5x + 3sin(4x)'},
  { data: d4, label: 'y = x'},
  { data: d5, label: 'y = 2x', lines: { show: true }, points: { show: true } }
  ], {
  xaxis: {
  noTicks: 7, // Display 7 ticks.
  tickFormatter: ticksFn, // Displays tick values between brackets.
  min: 1, // Part of the series is not displayed.
  max: 7.5 // Part of the series is not displayed.
  },
  yaxis: {
  ticks: ticks, // Set Y-Axis ticks
  max: 40 // Maximum value along Y-Axis
  },
  grid: {
  verticalLines: false,
  backgroundImage: {
  src: 'img/test-background.png?' + Math.random()
  }
  },
  legend: {
  position: 'nw'
  },
  title: 'Basic Axis example',
  subtitle: 'This is a subtitle'
  });
} }
}  
   
d3[30][1] = null;  
d3[31][1] = null;  
   
function ticksFn (n) { return '('+n+')'; }  
   
graph = Flotr.draw(container, [  
{ data : d1, label : 'y = 4 + x^(1.5)', lines : { fill : true } },  
{ data : d2, label : 'y = x^3'},  
{ data : d3, label : 'y = 5x + 3sin(4x)'},  
{ data : d4, label : 'y = x'},  
{ data : d5, label : 'y = 2x', lines : { show : true }, points : { show : true } }  
], {  
xaxis : {  
noTicks : 7, // Display 7 ticks.  
tickFormatter : ticksFn, // Displays tick values between brackets.  
min : 1, // Part of the series is not displayed.  
max : 7.5 // Part of the series is not displayed.  
},  
yaxis : {  
ticks : ticks, // Set Y-Axis ticks  
max : 40 // Maximum value along Y-Axis  
},  
grid : {  
verticalLines : false,  
backgroundImage : {  
src : 'img/test-background.png?' + Math.random()  
}  
},  
legend : {  
position : 'nw'  
},  
title : 'Basic Axis example',  
subtitle : 'This is a subtitle'  
});  
}  
   
})(); })();
   
(function () { (function () {
   
Flotr.ExampleList.add({ Flotr.ExampleList.add({
key : 'test-boundaries', key: 'test-boundaries',
name : 'Test Boundaries', name: 'Test Boundaries',
callback : test_boundaries callback: test_boundaries
}); });
   
function test_boundaries (container) { function test_boundaries(container) {
   
var var
d1 = [[0, 0], [5, 0], [6, 10], [9, 10]], // First data series d1 = [
i, graph; [0, 0],
  [5, 0],
  [6, 10],
  [9, 10]
  ], // First data series
  i, graph;
   
// Draw Graph // Draw Graph
graph = Flotr.draw(container, [ d1 ], { graph = Flotr.draw(container, [ d1 ], {
title : 'test', title: 'test',
xaxis: { xaxis: {
minorTickFreq: 4 minorTickFreq: 4
}, },
lines: { lines: {
lineWidth : 2 lineWidth: 2
}, },
grid: { grid: {
outlineWidth : 2, outlineWidth: 2,
minorVerticalLines: true minorVerticalLines: true
  }
  });
} }
});  
}  
   
})(); })();
   
(function () { (function () {
   
Flotr.ExampleList.add({ Flotr.ExampleList.add({
key : 'test-mountain-nulls', key: 'test-mountain-nulls',
name : 'Mountain Nulls', name: 'Mountain Nulls',
callback : function (container) { callback: function (container) {
var var
d1 = [[0, 3], [4, 8], [5, 6], [6, null], [7, 7], [8, 5]], // First data series d1 = [
d2 = [], // Second data series [0, 3],
i, graph; [4, 8],
  [5, 6],
  [6, null],
  [7, 7],
  [8, 5]
  ], // First data series
  d2 = [], // Second data series
  i, graph;
   
// Generate first data set // Generate first data set
for (i = 0; i < 14; i += 0.5) { for (i = 0; i < 14; i += 0.5) {
d2.push([i, Math.sin(i)]); d2.push([i, Math.sin(i)]);
} }
   
// Multiple nulls  
d2[9][1] = null;  
d2[10][1] = null;  
d2[11][1] = null;  
   
// Single not null surrounded by null  
d2[13][1] = null;  
   
// < 0 null  
d2[23][1] = null;  
   
// Draw Graph // Multiple nulls
graph = Flotr.draw(container, [ d1, d2 ], { d2[9][1] = null;
xaxis: { d2[10][1] = null;
minorTickFreq: 4 d2[11][1] = null;
},  
lines: { // Single not null surrounded by null
fill : true d2[13][1] = null;
},  
grid: { // < 0 null
minorVerticalLines: true d2[23][1] = null;
}  
  // Draw Graph
  graph = Flotr.draw(container, [ d1, d2 ], {
  xaxis: {
  minorTickFreq: 4
  },
  lines: {
  fill: true
  },
  grid: {
  minorVerticalLines: true
  }
  });
  },
  type: 'test'
}); });
},  
type : 'test'  
});  
   
})(); })();
   
/*! jQuery v1.8.2 jquery.com | jquery.org/license */ /*! jQuery v1.8.2 jquery.com | jquery.org/license */
(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); (function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
/*! jQuery v@1.8.0 jquery.com | jquery.org/license */ /*! jQuery v@1.8.0 jquery.com | jquery.org/license */
(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bX(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bV.length;while(e--){b=bV[e]+c;if(b in a)return b}return d}function bY(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function bZ(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bY(c)&&(e[f]=p._data(c,"olddisplay",cb(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b$(a,b,c){var d=bO.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function b_(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bU[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bU[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bU[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bU[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bU[e]+"Width"))||0));return f}function ca(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bP.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+b_(a,b,c||(f?"border":"content"),e)+"px"}function cb(a){if(bR[a])return bR[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bR[a]=c,c}function ch(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||cd.test(a)?d(a,e):ch(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ch(a+"["+e+"]",b[e],c,d);else d(a,b)}function cy(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cz(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cu;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cz(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cz(a,c,d,e,"*",g)),h}function cA(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cB(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cC(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cK(){try{return new a.XMLHttpRequest}catch(b){}}function cL(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cT(){return setTimeout(function(){cM=b},0),cM=p.now()}function cU(a,b){p.each(b,function(b,c){var d=(cS[b]||[]).concat(cS["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cV(a,b,c){var d,e=0,f=0,g=cR.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cM||cT(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cM||cT(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cW(k,j.opts.specialEasing);for(;e<g;e++){d=cR[e].call(j,a,k,j.opts);if(d)return d}return cU(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cW(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cX(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bY(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cb(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cO.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cY(a,b,c,d,e){return new cY.prototype.init(a,b,c,d,e)}function cZ(a,b){var c,d={height:a},e=0;for(;e<4;e+=2-b)c=bU[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function c_(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=r.test(" ")?/^[\s\xA0]+|[\s\xA0]+$/g:/^\s+|\s+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.0",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete"||e.readyState!=="loading"&&e.addEventListener)setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){p.isFunction(c)&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/^(?:\{.*\}|\[.*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.shift(),e=p._queueHooks(a,b),f=function(){p.dequeue(a,b)};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),delete e.stop,d.call(a,f,e)),!c.length&&e&&e.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)(d=p._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=[].slice.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click")){g=p(this),g.context=this;for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){i={},k=[],g[0]=f;for(d=0;d<q;d++)l=o[d],m=l.selector,i[m]===b&&(i[m]=g.is(m)),i[m]&&k.push(l);k.length&&u.push({elem:f,matches:k})}}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){j=u[d],c.currentTarget=j.elem;for(e=0;e<j.matches.length&&!c.isImmediatePropagationStopped();e++){l=j.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,h=((p.event.special[l.origType]||{}).handle||l.handler).apply(j.elem,r),h!==b&&(c.result=h,h===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{ready:{setup:p.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bd(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)Z(a,b[e],c,d)}function be(a,b,c,d,e,f){var g,h=$.setFilters[b.toLowerCase()];return h||Z.error(b),(a||!(g=e))&&bd(a||"*",d,g=[],e),g.length>0?h(g,c,f):[]}function bf(a,c,d,e,f){var g,h,i,j,k,l,m,n,p=0,q=f.length,s=L.POS,t=new RegExp("^"+s.source+"(?!"+r+")","i"),u=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(g[a]=b)};for(;p<q;p++){s.exec(""),a=f[p],j=[],i=0,k=e;while(g=s.exec(a)){n=s.lastIndex=g.index+g[0].length;if(n>i){m=a.slice(i,g.index),i=n,l=[c],B.test(m)&&(k&&(l=k),k=e);if(h=H.test(m))m=m.slice(0,-5).replace(B,"$&*");g.length>1&&g[0].replace(t,u),k=be(m,g[1],g[2],l,k,h)}}k?(j=j.concat(k),(m=a.slice(i))&&m!==")"?B.test(m)?bd(m,j,d,e):Z(m,c,d,e?e.concat(k):k):o.apply(d,j)):Z(a,c,d,e)}return q===1?d:Z.uniqueSort(d)}function bg(a,b,c){var d,e,f,g=[],i=0,j=D.exec(a),k=!j.pop()&&!j.pop(),l=k&&a.match(C)||[""],m=$.preFilter,n=$.filter,o=!c&&b!==h;for(;(e=l[i])!=null&&k;i++){g.push(d=[]),o&&(e=" "+e);while(e){k=!1;if(j=B.exec(e))e=e.slice(j[0].length),k=d.push({part:j.pop().replace(A," "),captures:j});for(f in n)(j=L[f].exec(e))&&(!m[f]||(j=m[f](j,b,c)))&&(e=e.slice(j.shift().length),k=d.push({part:f,captures:j}));if(!k)break}}return k||Z.error(a),g}function bh(a,b,e){var f=b.dir,g=m++;return a||(a=function(a){return a===e}),b.first?function(b,c){while(b=b[f])if(b.nodeType===1)return a(b,c)&&b}:function(b,e){var h,i=g+"."+d,j=i+"."+c;while(b=b[f])if(b.nodeType===1){if((h=b[q])===j)return b.sizset;if(typeof h=="string"&&h.indexOf(i)===0){if(b.sizset)return b}else{b[q]=j;if(a(b,e))return b.sizset=!0,b;b.sizset=!1}}}}function bi(a,b){return a?function(c,d){var e=b(c,d);return e&&a(e===!0?c:e,d)}:b}function bj(a,b,c){var d,e,f=0;for(;d=a[f];f++)$.relative[d.part]?e=bh(e,$.relative[d.part],b):(d.captures.push(b,c),e=bi(e,$.filter[d.part].apply(null,d.captures)));return e}function bk(a){return function(b,c){var d,e=0;for(;d=a[e];e++)if(d(b,c))return!0;return!1}}var c,d,e,f,g,h=a.document,i=h.documentElement,j="undefined",k=!1,l=!0,m=0,n=[].slice,o=[].push,q=("sizcache"+Math.random()).replace(".",""),r="[\\x20\\t\\r\\n\\f]",s="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",t=s.replace("w","w#"),u="([*^$|!~]?=)",v="\\["+r+"*("+s+")"+r+"*(?:"+u+r+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+t+")|)|)"+r+"*\\]",w=":("+s+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)",x=":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)",y=r+"*([\\x20\\t\\r\\n\\f>+~])"+r+"*",z="(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|"+v+"|"+w.replace(2,7)+"|[^\\\\(),])+",A=new RegExp("^"+r+"+|((?:^|[^\\\\])(?:\\\\.)*)"+r+"+$","g"),B=new RegExp("^"+y),C=new RegExp(z+"?(?="+r+"*,|$)","g"),D=new RegExp("^(?:(?!,)(?:(?:^|,)"+r+"*"+z+")*?|"+r+"*(.*?))(\\)|$)"),E=new RegExp(z.slice(19,-6)+"\\x20\\t\\r\\n\\f>+~])+|"+y,"g"),F=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,G=/[\x20\t\r\n\f]*[+~]/,H=/:not\($/,I=/h\d/i,J=/input|select|textarea|button/i,K=/\\(?!\\)/g,L={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),NAME:new RegExp("^\\[name=['\"]?("+s+")['\"]?\\]"),TAG:new RegExp("^("+s.replace("[-","[-\\*")+")"),ATTR:new RegExp("^"+v),PSEUDO:new RegExp("^"+w),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i"),POS:new RegExp(x,"ig"),needsContext:new RegExp("^"+r+"*[>+~]|"+x,"i")},M={},N=[],O={},P=[],Q=function(a){return a.sizzleFilter=!0,a},R=function(a){return function(b){return b.nodeName.toLowerCase()==="input"&&b.type===a}},S=function(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}},T=function(a){var b=!1,c=h.createElement("div");try{b=a(c)}catch(d){}return c=null,b},U=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),V=T(function(a){a.id=q+0,a.innerHTML="<a name='"+q+"'></a><div name='"+q+"'></div>",i.insertBefore(a,i.firstChild);var b=h.getElementsByName&&h.getElementsByName(q).length===2+h.getElementsByName(q+0).length;return g=!h.getElementById(q),i.removeChild(a),b}),W=T(function(a){return a.appendChild(h.createComment("")),a.getElementsByTagName("*").length===0}),X=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==j&&a.firstChild.getAttribute("href")==="#"}),Y=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||a.getElementsByClassName("e").length===0?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length!==1)}),Z=function(a,b,c,d){c=c||[],b=b||h;var e,f,g,i,j=b.nodeType;if(j!==1&&j!==9)return[];if(!a||typeof a!="string")return c;g=ba(b);if(!g&&!d)if(e=F.exec(a))if(i=e[1]){if(j===9){f=b.getElementById(i);if(!f||!f.parentNode)return c;if(f.id===i)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(i))&&bb(b,f)&&f.id===i)return c.push(f),c}else{if(e[2])return o.apply(c,n.call(b.getElementsByTagName(a),0)),c;if((i=e[3])&&Y&&b.getElementsByClassName)return o.apply(c,n.call(b.getElementsByClassName(i),0)),c}return bm(a,b,c,d,g)},$=Z.selectors={cacheLength:50,match:L,order:["ID","TAG"],attrHandle:{},createPseudo:Q,find:{ID:g?function(a,b,c){if(typeof b.getElementById!==j&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==j&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==j&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:W?function(a,b){if(typeof b.getElementsByTagName!==j)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(K,""),a[3]=(a[4]||a[5]||"").replace(K,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||Z.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&Z.error(a[0]),a},PSEUDO:function(a){var b,c=a[4];return L.CHILD.test(a[0])?null:(c&&(b=D.exec(c))&&b.pop()&&(a[0]=a[0].slice(0,b[0].length-c.length-1),c=b[0].slice(0,-1)),a.splice(2,3,c||a[3]),a)}},filter:{ID:g?function(a){return a=a.replace(K,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(K,""),function(b){var c=typeof b.getAttributeNode!==j&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(K,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=M[a];return b||(b=M[a]=new RegExp("(^|"+r+")"+a+"("+r+"|$)"),N.push(a),N.length>$.cacheLength&&delete M[N.shift()]),function(a){return b.test(a.className||typeof a.getAttribute!==j&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=Z.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return Z.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=m++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[q]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[q]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e=$.pseudos[a]||$.pseudos[a.toLowerCase()];return e||Z.error("unsupported pseudo: "+a),e.sizzleFilter?e(b,c,d):e}},pseudos:{not:Q(function(a,b,c){var d=bl(a.replace(A,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!$.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:Q(function(a){return function(b){return(b.textContent||b.innerText||bc(b)).indexOf(a)>-1}}),has:Q(function(a){return function(b){return Z(a,b).length>0}}),header:function(a){return I.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:R("radio"),checkbox:R("checkbox"),file:R("file"),password:R("password"),image:R("image"),submit:S("submit"),reset:S("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return J.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}};$.setFilters.nth=$.setFilters.eq,$.filters=$.pseudos,X||($.attrHandle={href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}}),V&&($.order.push("NAME"),$.find.NAME=function(a,b){if(typeof b.getElementsByName!==j)return b.getElementsByName(a)}),Y&&($.order.splice(1,0,"CLASS"),$.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!==j&&!c)return b.getElementsByClassName(a)});try{n.call(i.childNodes,0)[0].nodeType}catch(_){n=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}var ba=Z.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},bb=Z.contains=i.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:i.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc=Z.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=bc(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=bc(b);return c};Z.attr=function(a,b){var c,d=ba(a);return d||(b=b.toLowerCase()),$.attrHandle[b]?$.attrHandle[b](a):U||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},Z.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},[0,0].sort(function(){return l=0}),i.compareDocumentPosition?e=function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:(e=function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],g=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return f(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)g.unshift(j),j=j.parentNode;c=e.length,d=g.length;for(var l=0;l<c&&l<d;l++)if(e[l]!==g[l])return f(e[l],g[l]);return l===c?f(a,g[l],-1):f(e[l],b,1)},f=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),Z.uniqueSort=function(a){var b,c=1;if(e){k=l,a.sort(e);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1)}return a};var bl=Z.compile=function(a,b,c){var d,e,f,g=O[a];if(g&&g.context===b)return g;e=bg(a,b,c);for(f=0;d=e[f];f++)e[f]=bj(d,b,c);return g=O[a]=bk(e),g.context=b,g.runs=g.dirruns=0,P.push(a),P.length>$.cacheLength&&delete O[P.shift()],g};Z.matches=function(a,b){return Z(a,null,null,b)},Z.matchesSelector=function(a,b){return Z(b,null,null,[a]).length>0};var bm=function(a,b,e,f,g){a=a.replace(A,"$1");var h,i,j,k,l,m,p,q,r,s=a.match(C),t=a.match(E),u=b.nodeType;if(L.POS.test(a))return bf(a,b,e,f,s);if(f)h=n.call(f,0);else if(s&&s.length===1){if(t.length>1&&u===9&&!g&&(s=L.ID.exec(t[0]))){b=$.find.ID(s[1],b,g)[0];if(!b)return e;a=a.slice(t.shift().length)}q=(s=G.exec(t[0]))&&!s.index&&b.parentNode||b,r=t.pop(),m=r.split(":not")[0];for(j=0,k=$.order.length;j<k;j++){p=$.order[j];if(s=L[p].exec(m)){h=$.find[p]((s[1]||"").replace(K,""),q,g);if(h==null)continue;m===r&&(a=a.slice(0,a.length-r.length)+m.replace(L[p],""),a||o.apply(e,n.call(h,0)));break}}}if(a){i=bl(a,b,g),d=i.dirruns++,h==null&&(h=$.find.TAG("*",G.test(a)&&b.parentNode||b));for(j=0;l=h[j];j++)c=i.runs++,i(l,b)&&e.push(l)}return e};h.querySelectorAll&&function(){var a,b=bm,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=i.matchesSelector||i.mozMatchesSelector||i.webkitMatchesSelector||i.oMatchesSelector||i.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+r+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+r+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bm=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return o.apply(f,n.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j=d.getAttribute("id"),k=j||q,l=G.test(a)&&d.parentNode||d;j?k=k.replace(c,"\\$&"):d.setAttribute("id",k);try{return o.apply(f,n.call(l.querySelectorAll(a.replace(C,"[id='"+k+"'] $&")),0)),f}catch(i){}finally{j||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push($.match.PSEUDO)}catch(c){}}),f=new RegExp(f.join("|")),Z.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!ba(b)&&!f.test(c)&&(!e||!e.test(c)))try{var h=g.call(b,c);if(h||a||b.document&&b.document.nodeType!==11)return h}catch(i){}return Z(c,null,null,[b]).length>0})}(),Z.attr=p.attr,p.find=Z,p.expr=Z.selectors,p.expr[":"]=p.expr.pseudos,p.unique=Z.uniqueSort,p.text=Z.getText,p.isXMLDoc=Z.isXML,p.contains=Z.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=(c[0]||c).ownerDocument||c[0]||c,typeof c.createDocumentFragment=="undefined"&&(c=e),a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=0,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(g=b===e&&bA;(h=a[s])!=null;s++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{g=g||bk(b),l=l||g.appendChild(b.createElement("div")),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(f=n.length-1;f>=0;--f)p.nodeName(n[f],"tbody")&&!n[f].childNodes.length&&n[f].parentNode.removeChild(n[f])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l=g.lastChild}h.nodeType?t.push(h):t=p.merge(t,h)}l&&(g.removeChild(l),h=l=g=null);if(!p.support.appendChecked)for(s=0;(h=t[s])!=null;s++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(s=0;(h=t[s])!=null;s++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[s+1,0].concat(r)),s+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^margin/,bO=new RegExp("^("+q+")(.*)$","i"),bP=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bQ=new RegExp("^([-+])=("+q+")","i"),bR={},bS={position:"absolute",visibility:"hidden",display:"block"},bT={letterSpacing:0,fontWeight:400,lineHeight:1},bU=["Top","Right","Bottom","Left"],bV=["Webkit","O","Moz","ms"],bW=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return bZ(this,!0)},hide:function(){return bZ(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bW.apply(this,arguments):this.each(function(){(c?a:bY(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bX(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bQ.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bX(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bT&&(f=bT[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(a,b){var c,d,e,f,g=getComputedStyle(a,null),h=a.style;return g&&(c=g[b],c===""&&!p.contains(a.ownerDocument.documentElement,a)&&(c=p.style(a,b)),bP.test(c)&&bN.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=c,c=g.width,h.width=d,h.minWidth=e,h.maxWidth=f)),c}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bP.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0||bH(a,"display")!=="none"?ca(a,b,d):p.swap(a,bS,function(){return ca(a,b,d)})},set:function(a,c,d){return b$(a,c,d?b_(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bP.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bU[d]+b]=e[d]||e[d-2]||e[0];return f}},bN.test(a)||(p.cssHooks[a+b].set=b$)});var cc=/%20/g,cd=/\[\]$/,ce=/\r?\n/g,cf=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,cg=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||cg.test(this.nodeName)||cf.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(ce,"\r\n")}}):{name:b.name,value:c.replace(ce,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ch(d,a[d],c,f);return e.join("&").replace(cc,"+")};var ci,cj,ck=/#.*$/,cl=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cm=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,cn=/^(?:GET|HEAD)$/,co=/^\/\//,cp=/\?/,cq=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cr=/([?&])_=[^&]*/,cs=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,ct=p.fn.load,cu={},cv={},cw=["*/"]+["*"];try{ci=f.href}catch(cx){ci=e.createElement("a"),ci.href="",ci=ci.href}cj=cs.exec(ci.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&ct)return ct.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cq,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cA(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cA(a,b),a},ajaxSettings:{url:ci,isLocal:cm.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cw},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cy(cu),ajaxTransport:cy(cv),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cB(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cC(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cl.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(ck,"").replace(co,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=cs.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==cj[1]&&i[2]==cj[2]&&(i[3]||(i[1]==="http:"?80:443))==(cj[3]||(cj[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cz(cu,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!cn.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cp.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cr,"$1_="+z);l.url=A+(A===l.url?(cp.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cw+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cz(cv,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cD=[],cE=/\?/,cF=/(=)\?(?=&|$)|\?\?/,cG=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cD.pop()||p.expando+"_"+cG++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cF.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cF.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cF,"$1"+f):m?c.data=i.replace(cF,"$1"+f):k&&(c.url+=(cE.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cD.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cH,cI=a.ActiveXObject?function(){for(var a in cH)cH[a](0,1)}:!1,cJ=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cK()||cL()}:cK,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cI&&delete cH[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cJ,cI&&(cH||(cH={},p(a).unload(cI)),cH[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cM,cN,cO=/^(?:toggle|show|hide)$/,cP=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cQ=/queueHooks$/,cR=[cX],cS={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cP.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cV,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cS[c]=cS[c]||[],cS[c].unshift(b)},prefilter:function(a,b){b?cR.unshift(a):cR.push(a)}}),p.Tween=cY,cY.prototype={constructor:cY,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cY.propHooks[this.prop];return a&&a.get?a.get(this):cY.propHooks._default.get(this)},run:function(a){var b,c=cY.propHooks[this.prop];return this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration),this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cY.propHooks._default.set(this),this}},cY.prototype.init.prototype=cY.prototype,cY.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cY.propHooks.scrollTop=cY.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(cZ(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bY).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cV(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cQ.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:cZ("show"),slideUp:cZ("hide"),slideToggle:cZ("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cY.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cN&&(cN=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cN),cN=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c$=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=c_(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c$.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c$.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=c_(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); (function (a, b) {
  function G(a) {
  var b = F[a] = {};
  return p.each(a.split(s), function (a, c) {
  b[c] = !0
  }), b
  }
   
  function J(a, c, d) {
  if (d === b && a.nodeType === 1) {
  var e = "data-" + c.replace(I, "-$1").toLowerCase();
  d = a.getAttribute(e);
  if (typeof d == "string") {
  try {
  d = d === "true" ? !0 : d === "false" ? !1 : d === "null" ? null : +d + "" === d ? +d : H.test(d) ? p.parseJSON(d) : d
  } catch (f) {
  }
  p.data(a, c, d)
  } else d = b
  }
  return d
  }
   
  function K(a) {
  var b;
  for (b in a) {
  if (b === "data" && p.isEmptyObject(a[b]))continue;
  if (b !== "toJSON")return!1
  }
  return!0
  }
   
  function ba() {
  return!1
  }
   
  function bb() {
  return!0
  }
   
  function bh(a) {
  return!a || !a.parentNode || a.parentNode.nodeType === 11
  }
   
  function bi(a, b) {
  do a = a[b]; while (a && a.nodeType !== 1);
  return a
  }
   
  function bj(a, b, c) {
  b = b || 0;
  if (p.isFunction(b))return p.grep(a, function (a, d) {
  var e = !!b.call(a, d, a);
  return e === c
  });
  if (b.nodeType)return p.grep(a, function (a, d) {
  return a === b === c
  });
  if (typeof b == "string") {
  var d = p.grep(a, function (a) {
  return a.nodeType === 1
  });
  if (be.test(b))return p.filter(b, d, !c);
  b = p.filter(b, d)
  }
  return p.grep(a, function (a, d) {
  return p.inArray(a, b) >= 0 === c
  })
  }
   
  function bk(a) {
  var b = bl.split("|"), c = a.createDocumentFragment();
  if (c.createElement)while (b.length)c.createElement(b.pop());
  return c
  }
   
  function bC(a, b) {
  return a.getElementsByTagName(b)[0] || a.appendChild(a.ownerDocument.createElement(b))
  }
   
  function bD(a, b) {
  if (b.nodeType !== 1 || !p.hasData(a))return;
  var c, d, e, f = p._data(a), g = p._data(b, f), h = f.events;
  if (h) {
  delete g.handle, g.events = {};
  for (c in h)for (d = 0, e = h[c].length; d < e; d++)p.event.add(b, c, h[c][d])
  }
  g.data && (g.data = p.extend({}, g.data))
  }
   
  function bE(a, b) {
  var c;
  if (b.nodeType !== 1)return;
  b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase(), c === "object" ? (b.parentNode && (b.outerHTML = a.outerHTML), p.support.html5Clone && a.innerHTML && !p.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : c === "input" && bv.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : c === "option" ? b.selected = a.defaultSelected : c === "input" || c === "textarea" ? b.defaultValue = a.defaultValue : c === "script" && b.text !== a.text && (b.text = a.text), b.removeAttribute(p.expando)
  }
   
  function bF(a) {
  return typeof a.getElementsByTagName != "undefined" ? a.getElementsByTagName("*") : typeof a.querySelectorAll != "undefined" ? a.querySelectorAll("*") : []
  }
   
  function bG(a) {
  bv.test(a.type) && (a.defaultChecked = a.checked)
  }
   
  function bX(a, b) {
  if (b in a)return b;
  var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = bV.length;
  while (e--) {
  b = bV[e] + c;
  if (b in a)return b
  }
  return d
  }
   
  function bY(a, b) {
  return a = b || a, p.css(a, "display") === "none" || !p.contains(a.ownerDocument, a)
  }
   
  function bZ(a, b) {
  var c, d, e = [], f = 0, g = a.length;
  for (; f < g; f++) {
  c = a[f];
  if (!c.style)continue;
  e[f] = p._data(c, "olddisplay"), b ? (!e[f] && c.style.display === "none" && (c.style.display = ""), c.style.display === "" && bY(c) && (e[f] = p._data(c, "olddisplay", cb(c.nodeName)))) : (d = bH(c, "display"), !e[f] && d !== "none" && p._data(c, "olddisplay", d))
  }
  for (f = 0; f < g; f++) {
  c = a[f];
  if (!c.style)continue;
  if (!b || c.style.display === "none" || c.style.display === "")c.style.display = b ? e[f] || "" : "none"
  }
  return a
  }
   
  function b$(a, b, c) {
  var d = bO.exec(b);
  return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
  }
   
  function b_(a, b, c, d) {
  var e = c === (d ? "border" : "content") ? 4 : b === "width" ? 1 : 0, f = 0;
  for (; e < 4; e += 2)c === "margin" && (f += p.css(a, c + bU[e], !0)), d ? (c === "content" && (f -= parseFloat(bH(a, "padding" + bU[e])) || 0), c !== "margin" && (f -= parseFloat(bH(a, "border" + bU[e] + "Width")) || 0)) : (f += parseFloat(bH(a, "padding" + bU[e])) || 0, c !== "padding" && (f += parseFloat(bH(a, "border" + bU[e] + "Width")) || 0));
  return f
  }
   
  function ca(a, b, c) {
  var d = b === "width" ? a.offsetWidth : a.offsetHeight, e = !0, f = p.support.boxSizing && p.css(a, "boxSizing") === "border-box";
  if (d <= 0) {
  d = bH(a, b);
  if (d < 0 || d == null)d = a.style[b];
  if (bP.test(d))return d;
  e = f && (p.support.boxSizingReliable || d === a.style[b]), d = parseFloat(d) || 0
  }
  return d + b_(a, b, c || (f ? "border" : "content"), e) + "px"
  }
   
  function cb(a) {
  if (bR[a])return bR[a];
  var b = p("<" + a + ">").appendTo(e.body), c = b.css("display");
  b.remove();
  if (c === "none" || c === "") {
  bI = e.body.appendChild(bI || p.extend(e.createElement("iframe"), {frameBorder: 0, width: 0, height: 0}));
  if (!bJ || !bI.createElement)bJ = (bI.contentWindow || bI.contentDocument).document, bJ.write("<!doctype html><html><body>"), bJ.close();
  b = bJ.body.appendChild(bJ.createElement(a)), c = bH(b, "display"), e.body.removeChild(bI)
  }
  return bR[a] = c, c
  }
   
  function ch(a, b, c, d) {
  var e;
  if (p.isArray(b))p.each(b, function (b, e) {
  c || cd.test(a) ? d(a, e) : ch(a + "[" + (typeof e == "object" ? b : "") + "]", e, c, d)
  }); else if (!c && p.type(b) === "object")for (e in b)ch(a + "[" + e + "]", b[e], c, d); else d(a, b)
  }
   
  function cy(a) {
  return function (b, c) {
  typeof b != "string" && (c = b, b = "*");
  var d, e, f, g = b.toLowerCase().split(s), h = 0, i = g.length;
  if (p.isFunction(c))for (; h < i; h++)d = g[h], f = /^\+/.test(d), f && (d = d.substr(1) || "*"), e = a[d] = a[d] || [], e[f ? "unshift" : "push"](c)
  }
  }
   
  function cz(a, c, d, e, f, g) {
  f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
  var h, i = a[f], j = 0, k = i ? i.length : 0, l = a === cu;
  for (; j < k && (l || !h); j++)h = i[j](c, d, e), typeof h == "string" && (!l || g[h] ? h = b : (c.dataTypes.unshift(h), h = cz(a, c, d, e, h, g)));
  return(l || !h) && !g["*"] && (h = cz(a, c, d, e, "*", g)), h
  }
   
  function cA(a, c) {
  var d, e, f = p.ajaxSettings.flatOptions || {};
  for (d in c)c[d] !== b && ((f[d] ? a : e || (e = {}))[d] = c[d]);
  e && p.extend(!0, a, e)
  }
   
  function cB(a, c, d) {
  var e, f, g, h, i = a.contents, j = a.dataTypes, k = a.responseFields;
  for (f in k)f in d && (c[k[f]] = d[f]);
  while (j[0] === "*")j.shift(), e === b && (e = a.mimeType || c.getResponseHeader("content-type"));
  if (e)for (f in i)if (i[f] && i[f].test(e)) {
  j.unshift(f);
  break
  }
  if (j[0]in d)g = j[0]; else {
  for (f in d) {
  if (!j[0] || a.converters[f + " " + j[0]]) {
  g = f;
  break
  }
  h || (h = f)
  }
  g = g || h
  }
  if (g)return g !== j[0] && j.unshift(g), d[g]
  }
   
  function cC(a, b) {
  var c, d, e, f, g = a.dataTypes.slice(), h = g[0], i = {}, j = 0;
  a.dataFilter && (b = a.dataFilter(b, a.dataType));
  if (g[1])for (c in a.converters)i[c.toLowerCase()] = a.converters[c];
  for (; e = g[++j];)if (e !== "*") {
  if (h !== "*" && h !== e) {
  c = i[h + " " + e] || i["* " + e];
  if (!c)for (d in i) {
  f = d.split(" ");
  if (f[1] === e) {
  c = i[h + " " + f[0]] || i["* " + f[0]];
  if (c) {
  c === !0 ? c = i[d] : i[d] !== !0 && (e = f[0], g.splice(j--, 0, e));
  break
  }
  }
  }
  if (c !== !0)if (c && a["throws"])b = c(b); else try {
  b = c(b)
  } catch (k) {
  return{state: "parsererror", error: c ? k : "No conversion from " + h + " to " + e}
  }
  }
  h = e
  }
  return{state: "success", data: b}
  }
   
  function cK() {
  try {
  return new a.XMLHttpRequest
  } catch (b) {
  }
  }
   
  function cL() {
  try {
  return new a.ActiveXObject("Microsoft.XMLHTTP")
  } catch (b) {
  }
  }
   
  function cT() {
  return setTimeout(function () {
  cM = b
  }, 0), cM = p.now()
  }
   
  function cU(a, b) {
  p.each(b, function (b, c) {
  var d = (cS[b] || []).concat(cS["*"]), e = 0, f = d.length;
  for (; e < f; e++)if (d[e].call(a, b, c))return
  })
  }
   
  function cV(a, b, c) {
  var d, e = 0, f = 0, g = cR.length, h = p.Deferred().always(function () {
  delete i.elem
  }), i = function () {
  var b = cM || cT(), c = Math.max(0, j.startTime + j.duration - b), d = 1 - (c / j.duration || 0), e = 0, f = j.tweens.length;
  for (; e < f; e++)j.tweens[e].run(d);
  return h.notifyWith(a, [j, d, c]), d < 1 && f ? c : (h.resolveWith(a, [j]), !1)
  }, j = h.promise({elem: a, props: p.extend({}, b), opts: p.extend(!0, {specialEasing: {}}, c), originalProperties: b, originalOptions: c, startTime: cM || cT(), duration: c.duration, tweens: [], createTween: function (b, c, d) {
  var e = p.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
  return j.tweens.push(e), e
  }, stop: function (b) {
  var c = 0, d = b ? j.tweens.length : 0;
  for (; c < d; c++)j.tweens[c].run(1);
  return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
  }}), k = j.props;
  cW(k, j.opts.specialEasing);
  for (; e < g; e++) {
  d = cR[e].call(j, a, k, j.opts);
  if (d)return d
  }
  return cU(j, k), p.isFunction(j.opts.start) && j.opts.start.call(a, j), p.fx.timer(p.extend(i, {anim: j, queue: j.opts.queue, elem: a})), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
  }
   
  function cW(a, b) {
  var c, d, e, f, g;
  for (c in a) {
  d = p.camelCase(c), e = b[d], f = a[c], p.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = p.cssHooks[d];
  if (g && "expand"in g) {
  f = g.expand(f), delete a[d];
  for (c in f)c in a || (a[c] = f[c], b[c] = e)
  } else b[d] = e
  }
  }
   
  function cX(a, b, c) {
  var d, e, f, g, h, i, j, k, l = this, m = a.style, n = {}, o = [], q = a.nodeType && bY(a);
  c.queue || (j = p._queueHooks(a, "fx"), j.unqueued == null && (j.unqueued = 0, k = j.empty.fire, j.empty.fire = function () {
  j.unqueued || k()
  }), j.unqueued++, l.always(function () {
  l.always(function () {
  j.unqueued--, p.queue(a, "fx").length || j.empty.fire()
  })
  })), a.nodeType === 1 && ("height"in b || "width"in b) && (c.overflow = [m.overflow, m.overflowX, m.overflowY], p.css(a, "display") === "inline" && p.css(a, "float") === "none" && (!p.support.inlineBlockNeedsLayout || cb(a.nodeName) === "inline" ? m.display = "inline-block" : m.zoom = 1)), c.overflow && (m.overflow = "hidden", p.support.shrinkWrapBlocks || l.done(function () {
  m.overflow = c.overflow[0], m.overflowX = c.overflow[1], m.overflowY = c.overflow[2]
  }));
  for (d in b) {
  f = b[d];
  if (cO.exec(f)) {
  delete b[d];
  if (f === (q ? "hide" : "show"))continue;
  o.push(d)
  }
  }
  g = o.length;
  if (g) {
  h = p._data(a, "fxshow") || p._data(a, "fxshow", {}), q ? p(a).show() : l.done(function () {
  p(a).hide()
  }), l.done(function () {
  var b;
  p.removeData(a, "fxshow", !0);
  for (b in n)p.style(a, b, n[b])
  });
  for (d = 0; d < g; d++)e = o[d], i = l.createTween(e, q ? h[e] : 0), n[e] = h[e] || p.style(a, e), e in h || (h[e] = i.start, q && (i.end = i.start, i.start = e === "width" || e === "height" ? 1 : 0))
  }
  }
   
  function cY(a, b, c, d, e) {
  return new cY.prototype.init(a, b, c, d, e)
  }
   
  function cZ(a, b) {
  var c, d = {height: a}, e = 0;
  for (; e < 4; e += 2 - b)c = bU[e], d["margin" + c] = d["padding" + c] = a;
  return b && (d.opacity = d.width = a), d
  }
   
  function c_(a) {
  return p.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
  }
   
  var c, d, e = a.document, f = a.location, g = a.navigator, h = a.jQuery, i = a.$, j = Array.prototype.push, k = Array.prototype.slice, l = Array.prototype.indexOf, m = Object.prototype.toString, n = Object.prototype.hasOwnProperty, o = String.prototype.trim, p = function (a, b) {
  return new p.fn.init(a, b, c)
  }, q = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, r = /\S/, s = /\s+/, t = r.test(" ") ? /^[\s\xA0]+|[\s\xA0]+$/g : /^\s+|\s+$/g, u = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, v = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, w = /^[\],:{}\s]*$/, x = /(?:^|:|,)(?:\s*\[)+/g, y = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, z = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, A = /^-ms-/, B = /-([\da-z])/gi, C = function (a, b) {
  return(b + "").toUpperCase()
  }, D = function () {
  e.addEventListener ? (e.removeEventListener("DOMContentLoaded", D, !1), p.ready()) : e.readyState === "complete" && (e.detachEvent("onreadystatechange", D), p.ready())
  }, E = {};
  p.fn = p.prototype = {constructor: p, init: function (a, c, d) {
  var f, g, h, i;
  if (!a)return this;
  if (a.nodeType)return this.context = this[0] = a, this.length = 1, this;
  if (typeof a == "string") {
  a.charAt(0) === "<" && a.charAt(a.length - 1) === ">" && a.length >= 3 ? f = [null, a, null] : f = u.exec(a);
  if (f && (f[1] || !c)) {
  if (f[1])return c = c instanceof p ? c[0] : c, i = c && c.nodeType ? c.ownerDocument || c : e, a = p.parseHTML(f[1], i, !0), v.test(f[1]) && p.isPlainObject(c) && this.attr.call(a, c, !0), p.merge(this, a);
  g = e.getElementById(f[2]);
  if (g && g.parentNode) {
  if (g.id !== f[2])return d.find(a);
  this.length = 1, this[0] = g
  }
  return this.context = e, this.selector = a, this
  }
  return!c || c.jquery ? (c || d).find(a) : this.constructor(c).find(a)
  }
  return p.isFunction(a) ? d.ready(a) : (a.selector !== b && (this.selector = a.selector, this.context = a.context), p.makeArray(a, this))
  }, selector: "", jquery: "1.8.0", length: 0, size: function () {
  return this.length
  }, toArray: function () {
  return k.call(this)
  }, get: function (a) {
  return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a]
  }, pushStack: function (a, b, c) {
  var d = p.merge(this.constructor(), a);
  return d.prevObject = this, d.context = this.context, b === "find" ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")"), d
  }, each: function (a, b) {
  return p.each(this, a, b)
  }, ready: function (a) {
  return p.ready.promise().done(a), this
  }, eq: function (a) {
  return a = +a, a === -1 ? this.slice(a) : this.slice(a, a + 1)
  }, first: function () {
  return this.eq(0)
  }, last: function () {
  return this.eq(-1)
  }, slice: function () {
  return this.pushStack(k.apply(this, arguments), "slice", k.call(arguments).join(","))
  }, map: function (a) {
  return this.pushStack(p.map(this, function (b, c) {
  return a.call(b, c, b)
  }))
  }, end: function () {
  return this.prevObject || this.constructor(null)
  }, push: j, sort: [].sort, splice: [].splice}, p.fn.init.prototype = p.fn, p.extend = p.fn.extend = function () {
  var a, c, d, e, f, g, h = arguments[0] || {}, i = 1, j = arguments.length, k = !1;
  typeof h == "boolean" && (k = h, h = arguments[1] || {}, i = 2), typeof h != "object" && !p.isFunction(h) && (h = {}), j === i && (h = this, --i);
  for (; i < j; i++)if ((a = arguments[i]) != null)for (c in a) {
  d = h[c], e = a[c];
  if (h === e)continue;
  k && e && (p.isPlainObject(e) || (f = p.isArray(e))) ? (f ? (f = !1, g = d && p.isArray(d) ? d : []) : g = d && p.isPlainObject(d) ? d : {}, h[c] = p.extend(k, g, e)) : e !== b && (h[c] = e)
  }
  return h
  }, p.extend({noConflict: function (b) {
  return a.$ === p && (a.$ = i), b && a.jQuery === p && (a.jQuery = h), p
  }, isReady: !1, readyWait: 1, holdReady: function (a) {
  a ? p.readyWait++ : p.ready(!0)
  }, ready: function (a) {
  if (a === !0 ? --p.readyWait : p.isReady)return;
  if (!e.body)return setTimeout(p.ready, 1);
  p.isReady = !0;
  if (a !== !0 && --p.readyWait > 0)return;
  d.resolveWith(e, [p]), p.fn.trigger && p(e).trigger("ready").off("ready")
  }, isFunction: function (a) {
  return p.type(a) === "function"
  }, isArray: Array.isArray || function (a) {
  return p.type(a) === "array"
  }, isWindow: function (a) {
  return a != null && a == a.window
  }, isNumeric: function (a) {
  return!isNaN(parseFloat(a)) && isFinite(a)
  }, type: function (a) {
  return a == null ? String(a) : E[m.call(a)] || "object"
  }, isPlainObject: function (a) {
  if (!a || p.type(a) !== "object" || a.nodeType || p.isWindow(a))return!1;
  try {
  if (a.constructor && !n.call(a, "constructor") && !n.call(a.constructor.prototype, "isPrototypeOf"))return!1
  } catch (c) {
  return!1
  }
  var d;
  for (d in a);
  return d === b || n.call(a, d)
  }, isEmptyObject: function (a) {
  var b;
  for (b in a)return!1;
  return!0
  }, error: function (a) {
  throw new Error(a)
  }, parseHTML: function (a, b, c) {
  var d;
  return!a || typeof a != "string" ? null : (typeof b == "boolean" && (c = b, b = 0), b = b || e, (d = v.exec(a)) ? [b.createElement(d[1])] : (d = p.buildFragment([a], b, c ? null : []), p.merge([], (d.cacheable ? p.clone(d.fragment) : d.fragment).childNodes)))
  }, parseJSON: function (b) {
  if (!b || typeof b != "string")return null;
  b = p.trim(b);
  if (a.JSON && a.JSON.parse)return a.JSON.parse(b);
  if (w.test(b.replace(y, "@").replace(z, "]").replace(x, "")))return(new Function("return " + b))();
  p.error("Invalid JSON: " + b)
  }, parseXML: function (c) {
  var d, e;
  if (!c || typeof c != "string")return null;
  try {
  a.DOMParser ? (e = new DOMParser, d = e.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
  } catch (f) {
  d = b
  }
  return(!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && p.error("Invalid XML: " + c), d
  }, noop: function () {
  }, globalEval: function (b) {
  b && r.test(b) && (a.execScript || function (b) {
  a.eval.call(a, b)
  })(b)
  }, camelCase: function (a) {
  return a.replace(A, "ms-").replace(B, C)
  }, nodeName: function (a, b) {
  return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
  }, each: function (a, c, d) {
  var e, f = 0, g = a.length, h = g === b || p.isFunction(a);
  if (d) {
  if (h) {
  for (e in a)if (c.apply(a[e], d) === !1)break
  } else for (; f < g;)if (c.apply(a[f++], d) === !1)break
  } else if (h) {
  for (e in a)if (c.call(a[e], e, a[e]) === !1)break
  } else for (; f < g;)if (c.call(a[f], f, a[f++]) === !1)break;
  return a
  }, trim: o ? function (a) {
  return a == null ? "" : o.call(a)
  } : function (a) {
  return a == null ? "" : a.toString().replace(t, "")
  }, makeArray: function (a, b) {
  var c, d = b || [];
  return a != null && (c = p.type(a), a.length == null || c === "string" || c === "function" || c === "regexp" || p.isWindow(a) ? j.call(d, a) : p.merge(d, a)), d
  }, inArray: function (a, b, c) {
  var d;
  if (b) {
  if (l)return l.call(b, a, c);
  d = b.length, c = c ? c < 0 ? Math.max(0, d + c) : c : 0;
  for (; c < d; c++)if (c in b && b[c] === a)return c
  }
  return-1
  }, merge: function (a, c) {
  var d = c.length, e = a.length, f = 0;
  if (typeof d == "number")for (; f < d; f++)a[e++] = c[f]; else while (c[f] !== b)a[e++] = c[f++];
  return a.length = e, a
  }, grep: function (a, b, c) {
  var d, e = [], f = 0, g = a.length;
  c = !!c;
  for (; f < g; f++)d = !!b(a[f], f), c !== d && e.push(a[f]);
  return e
  }, map: function (a, c, d) {
  var e, f, g = [], h = 0, i = a.length, j = a instanceof p || i !== b && typeof i == "number" && (i > 0 && a[0] && a[i - 1] || i === 0 || p.isArray(a));
  if (j)for (; h < i; h++)e = c(a[h], h, d), e != null && (g[g.length] = e); else for (f in a)e = c(a[f], f, d), e != null && (g[g.length] = e);
  return g.concat.apply([], g)
  }, guid: 1, proxy: function (a, c) {
  var d, e, f;
  return typeof c == "string" && (d = a[c], c = a, a = d), p.isFunction(a) ? (e = k.call(arguments, 2), f = function () {
  return a.apply(c, e.concat(k.call(arguments)))
  }, f.guid = a.guid = a.guid || f.guid || p.guid++, f) : b
  }, access: function (a, c, d, e, f, g, h) {
  var i, j = d == null, k = 0, l = a.length;
  if (d && typeof d == "object") {
  for (k in d)p.access(a, c, k, d[k], 1, g, e);
  f = 1
  } else if (e !== b) {
  i = h === b && p.isFunction(e), j && (i ? (i = c, c = function (a, b, c) {
  return i.call(p(a), c)
  }) : (c.call(a, e), c = null));
  if (c)for (; k < l; k++)c(a[k], d, i ? e.call(a[k], k, c(a[k], d)) : e, h);
  f = 1
  }
  return f ? a : j ? c.call(a) : l ? c(a[0], d) : g
  }, now: function () {
  return(new Date).getTime()
  }}), p.ready.promise = function (b) {
  if (!d) {
  d = p.Deferred();
  if (e.readyState === "complete" || e.readyState !== "loading" && e.addEventListener)setTimeout(p.ready, 1); else if (e.addEventListener)e.addEventListener("DOMContentLoaded", D, !1), a.addEventListener("load", p.ready, !1); else {
  e.attachEvent("onreadystatechange", D), a.attachEvent("onload", p.ready);
  var c = !1;
  try {
  c = a.frameElement == null && e.documentElement
  } catch (f) {
  }
  c && c.doScroll && function g() {
  if (!p.isReady) {
  try {
  c.doScroll("left")
  } catch (a) {
  return setTimeout(g, 50)
  }
  p.ready()
  }
  }()
  }
  }
  return d.promise(b)
  }, p.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (a, b) {
  E["[object " + b + "]"] = b.toLowerCase()
  }), c = p(e);
  var F = {};
  p.Callbacks = function (a) {
  a = typeof a == "string" ? F[a] || G(a) : p.extend({}, a);
  var c, d, e, f, g, h, i = [], j = !a.once && [], k = function (b) {
  c = a.memory && b, d = !0, h = f || 0, f = 0, g = i.length, e = !0;
  for (; i && h < g; h++)if (i[h].apply(b[0], b[1]) === !1 && a.stopOnFalse) {
  c = !1;
  break
  }
  e = !1, i && (j ? j.length && k(j.shift()) : c ? i = [] : l.disable())
  }, l = {add: function () {
  if (i) {
  var b = i.length;
  (function d(b) {
  p.each(b, function (b, c) {
  p.isFunction(c) && (!a.unique || !l.has(c)) ? i.push(c) : c && c.length && d(c)
  })
  })(arguments), e ? g = i.length : c && (f = b, k(c))
  }
  return this
  }, remove: function () {
  return i && p.each(arguments, function (a, b) {
  var c;
  while ((c = p.inArray(b, i, c)) > -1)i.splice(c, 1), e && (c <= g && g--, c <= h && h--)
  }), this
  }, has: function (a) {
  return p.inArray(a, i) > -1
  }, empty: function () {
  return i = [], this
  }, disable: function () {
  return i = j = c = b, this
  }, disabled: function () {
  return!i
  }, lock: function () {
  return j = b, c || l.disable(), this
  }, locked: function () {
  return!j
  }, fireWith: function (a, b) {
  return b = b || [], b = [a, b.slice ? b.slice() : b], i && (!d || j) && (e ? j.push(b) : k(b)), this
  }, fire: function () {
  return l.fireWith(this, arguments), this
  }, fired: function () {
  return!!d
  }};
  return l
  }, p.extend({Deferred: function (a) {
  var b = [
  ["resolve", "done", p.Callbacks("once memory"), "resolved"],
  ["reject", "fail", p.Callbacks("once memory"), "rejected"],
  ["notify", "progress", p.Callbacks("memory")]
  ], c = "pending", d = {state: function () {
  return c
  }, always: function () {
  return e.done(arguments).fail(arguments), this
  }, then: function () {
  var a = arguments;
  return p.Deferred(function (c) {
  p.each(b, function (b, d) {
  var f = d[0], g = a[b];
  e[d[1]](p.isFunction(g) ? function () {
  var a = g.apply(this, arguments);
  a && p.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f + "With"](this === e ? c : this, [a])
  } : c[f])
  }), a = null
  }).promise()
  }, promise: function (a) {
  return typeof a == "object" ? p.extend(a, d) : d
  }}, e = {};
  return d.pipe = d.then, p.each(b, function (a, f) {
  var g = f[2], h = f[3];
  d[f[1]] = g.add, h && g.add(function () {
  c = h
  }, b[a ^ 1][2].disable, b[2][2].lock), e[f[0]] = g.fire, e[f[0] + "With"] = g.fireWith
  }), d.promise(e), a && a.call(e, e), e
  }, when: function (a) {
  var b = 0, c = k.call(arguments), d = c.length, e = d !== 1 || a && p.isFunction(a.promise) ? d : 0, f = e === 1 ? a : p.Deferred(), g = function (a, b, c) {
  return function (d) {
  b[a] = this, c[a] = arguments.length > 1 ? k.call(arguments) : d, c === h ? f.notifyWith(b, c) : --e || f.resolveWith(b, c)
  }
  }, h, i, j;
  if (d > 1) {
  h = new Array(d), i = new Array(d), j = new Array(d);
  for (; b < d; b++)c[b] && p.isFunction(c[b].promise) ? c[b].promise().done(g(b, j, c)).fail(f.reject).progress(g(b, i, h)) : --e
  }
  return e || f.resolveWith(j, c), f.promise()
  }}), p.support = function () {
  var b, c, d, f, g, h, i, j, k, l, m, n = e.createElement("div");
  n.setAttribute("className", "t"), n.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", c = n.getElementsByTagName("*"), d = n.getElementsByTagName("a")[0], d.style.cssText = "top:1px;float:left;opacity:.5";
  if (!c || !c.length || !d)return{};
  f = e.createElement("select"), g = f.appendChild(e.createElement("option")), h = n.getElementsByTagName("input")[0], b = {leadingWhitespace: n.firstChild.nodeType === 3, tbody: !n.getElementsByTagName("tbody").length, htmlSerialize: !!n.getElementsByTagName("link").length, style: /top/.test(d.getAttribute("style")), hrefNormalized: d.getAttribute("href") === "/a", opacity: /^0.5/.test(d.style.opacity), cssFloat: !!d.style.cssFloat, checkOn: h.value === "on", optSelected: g.selected, getSetAttribute: n.className !== "t", enctype: !!e.createElement("form").enctype, html5Clone: e.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>", boxModel: e.compatMode === "CSS1Compat", submitBubbles: !0, changeBubbles: !0, focusinBubbles: !1, deleteExpando: !0, noCloneEvent: !0, inlineBlockNeedsLayout: !1, shrinkWrapBlocks: !1, reliableMarginRight: !0, boxSizingReliable: !0, pixelPosition: !1}, h.checked = !0, b.noCloneChecked = h.cloneNode(!0).checked, f.disabled = !0, b.optDisabled = !g.disabled;
  try {
  delete n.test
  } catch (o) {
  b.deleteExpando = !1
  }
  !n.addEventListener && n.attachEvent && n.fireEvent && (n.attachEvent("onclick", m = function () {
  b.noCloneEvent = !1
  }), n.cloneNode(!0).fireEvent("onclick"), n.detachEvent("onclick", m)), h = e.createElement("input"), h.value = "t", h.setAttribute("type", "radio"), b.radioValue = h.value === "t", h.setAttribute("checked", "checked"), h.setAttribute("name", "t"), n.appendChild(h), i = e.createDocumentFragment(), i.appendChild(n.lastChild), b.checkClone = i.cloneNode(!0).cloneNode(!0).lastChild.checked, b.appendChecked = h.checked, i.removeChild(h), i.appendChild(n);
  if (n.attachEvent)for (k in{submit: !0, change: !0, focusin: !0})j = "on" + k, l = j in n, l || (n.setAttribute(j, "return;"), l = typeof n[j] == "function"), b[k + "Bubbles"] = l;
  return p(function () {
  var c, d, f, g, h = "padding:0;margin:0;border:0;display:block;overflow:hidden;", i = e.getElementsByTagName("body")[0];
  if (!i)return;
  c = e.createElement("div"), c.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", i.insertBefore(c, i.firstChild), d = e.createElement("div"), c.appendChild(d), d.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", f = d.getElementsByTagName("td"), f[0].style.cssText = "padding:0;margin:0;border:0;display:none", l = f[0].offsetHeight === 0, f[0].style.display = "", f[1].style.display = "none", b.reliableHiddenOffsets = l && f[0].offsetHeight === 0, d.innerHTML = "", d.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", b.boxSizing = d.offsetWidth === 4, b.doesNotIncludeMarginInBodyOffset = i.offsetTop !== 1, a.getComputedStyle && (b.pixelPosition = (a.getComputedStyle(d, null) || {}).top !== "1%", b.boxSizingReliable = (a.getComputedStyle(d, null) || {width: "4px"}).width === "4px", g = e.createElement("div"), g.style.cssText = d.style.cssText = h, g.style.marginRight = g.style.width = "0", d.style.width = "1px", d.appendChild(g), b.reliableMarginRight = !parseFloat((a.getComputedStyle(g, null) || {}).marginRight)), typeof d.style.zoom != "undefined" && (d.innerHTML = "", d.style.cssText = h + "width:1px;padding:1px;display:inline;zoom:1", b.inlineBlockNeedsLayout = d.offsetWidth === 3, d.style.display = "block", d.style.overflow = "visible", d.innerHTML = "<div></div>", d.firstChild.style.width = "5px", b.shrinkWrapBlocks = d.offsetWidth !== 3, c.style.zoom = 1), i.removeChild(c), c = d = f = g = null
  }), i.removeChild(n), c = d = f = g = h = i = n = null, b
  }();
  var H = /^(?:\{.*\}|\[.*\])$/, I = /([A-Z])/g;
  p.extend({cache: {}, deletedIds: [], uuid: 0, expando: "jQuery" + (p.fn.jquery + Math.random()).replace(/\D/g, ""), noData: {embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0}, hasData: function (a) {
  return a = a.nodeType ? p.cache[a[p.expando]] : a[p.expando], !!a && !K(a)
  }, data: function (a, c, d, e) {
  if (!p.acceptData(a))return;
  var f, g, h = p.expando, i = typeof c == "string", j = a.nodeType, k = j ? p.cache : a, l = j ? a[h] : a[h] && h;
  if ((!l || !k[l] || !e && !k[l].data) && i && d === b)return;
  l || (j ? a[h] = l = p.deletedIds.pop() || ++p.uuid : l = h), k[l] || (k[l] = {}, j || (k[l].toJSON = p.noop));
  if (typeof c == "object" || typeof c == "function")e ? k[l] = p.extend(k[l], c) : k[l].data = p.extend(k[l].data, c);
  return f = k[l], e || (f.data || (f.data = {}), f = f.data), d !== b && (f[p.camelCase(c)] = d), i ? (g = f[c], g == null && (g = f[p.camelCase(c)])) : g = f, g
  }, removeData: function (a, b, c) {
  if (!p.acceptData(a))return;
  var d, e, f, g = a.nodeType, h = g ? p.cache : a, i = g ? a[p.expando] : p.expando;
  if (!h[i])return;
  if (b) {
  d = c ? h[i] : h[i].data;
  if (d) {
  p.isArray(b) || (b in d ? b = [b] : (b = p.camelCase(b), b in d ? b = [b] : b = b.split(" ")));
  for (e = 0, f = b.length; e < f; e++)delete d[b[e]];
  if (!(c ? K : p.isEmptyObject)(d))return
  }
  }
  if (!c) {
  delete h[i].data;
  if (!K(h[i]))return
  }
  g ? p.cleanData([a], !0) : p.support.deleteExpando || h != h.window ? delete h[i] : h[i] = null
  }, _data: function (a, b, c) {
  return p.data(a, b, c, !0)
  }, acceptData: function (a) {
  var b = a.nodeName && p.noData[a.nodeName.toLowerCase()];
  return!b || b !== !0 && a.getAttribute("classid") === b
  }}), p.fn.extend({data: function (a, c) {
  var d, e, f, g, h, i = this[0], j = 0, k = null;
  if (a === b) {
  if (this.length) {
  k = p.data(i);
  if (i.nodeType === 1 && !p._data(i, "parsedAttrs")) {
  f = i.attributes;
  for (h = f.length; j < h; j++)g = f[j].name, g.indexOf("data-") === 0 && (g = p.camelCase(g.substring(5)), J(i, g, k[g]));
  p._data(i, "parsedAttrs", !0)
  }
  }
  return k
  }
  return typeof a == "object" ? this.each(function () {
  p.data(this, a)
  }) : (d = a.split(".", 2), d[1] = d[1] ? "." + d[1] : "", e = d[1] + "!", p.access(this, function (c) {
  if (c === b)return k = this.triggerHandler("getData" + e, [d[0]]), k === b && i && (k = p.data(i, a), k = J(i, a, k)), k === b && d[1] ? this.data(d[0]) : k;
  d[1] = c, this.each(function () {
  var b = p(this);
  b.triggerHandler("setData" + e, d), p.data(this, a, c), b.triggerHandler("changeData" + e, d)
  })
  }, null, c, arguments.length > 1, null, !1))
  }, removeData: function (a) {
  return this.each(function () {
  p.removeData(this, a)
  })
  }}), p.extend({queue: function (a, b, c) {
  var d;
  if (a)return b = (b || "fx") + "queue", d = p._data(a, b), c && (!d || p.isArray(c) ? d = p._data(a, b, p.makeArray(c)) : d.push(c)), d || []
  }, dequeue: function (a, b) {
  b = b || "fx";
  var c = p.queue(a, b), d = c.shift(), e = p._queueHooks(a, b), f = function () {
  p.dequeue(a, b)
  };
  d === "inprogress" && (d = c.shift()), d && (b === "fx" && c.unshift("inprogress"), delete e.stop, d.call(a, f, e)), !c.length && e && e.empty.fire()
  }, _queueHooks: function (a, b) {
  var c = b + "queueHooks";
  return p._data(a, c) || p._data(a, c, {empty: p.Callbacks("once memory").add(function () {
  p.removeData(a, b + "queue", !0), p.removeData(a, c, !0)
  })})
  }}), p.fn.extend({queue: function (a, c) {
  var d = 2;
  return typeof a != "string" && (c = a, a = "fx", d--), arguments.length < d ? p.queue(this[0], a) : c === b ? this : this.each(function () {
  var b = p.queue(this, a, c);
  p._queueHooks(this, a), a === "fx" && b[0] !== "inprogress" && p.dequeue(this, a)
  })
  }, dequeue: function (a) {
  return this.each(function () {
  p.dequeue(this, a)
  })
  }, delay: function (a, b) {
  return a = p.fx ? p.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
  var d = setTimeout(b, a);
  c.stop = function () {
  clearTimeout(d)
  }
  })
  }, clearQueue: function (a) {
  return this.queue(a || "fx", [])
  }, promise: function (a, c) {
  var d, e = 1, f = p.Deferred(), g = this, h = this.length, i = function () {
  --e || f.resolveWith(g, [g])
  };
  typeof a != "string" && (c = a, a = b), a = a || "fx";
  while (h--)(d = p._data(g[h], a + "queueHooks")) && d.empty && (e++, d.empty.add(i));
  return i(), f.promise(c)
  }});
  var L, M, N, O = /[\t\r\n]/g, P = /\r/g, Q = /^(?:button|input)$/i, R = /^(?:button|input|object|select|textarea)$/i, S = /^a(?:rea|)$/i, T = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, U = p.support.getSetAttribute;
  p.fn.extend({attr: function (a, b) {
  return p.access(this, p.attr, a, b, arguments.length > 1)
  }, removeAttr: function (a) {
  return this.each(function () {
  p.removeAttr(this, a)
  })
  }, prop: function (a, b) {
  return p.access(this, p.prop, a, b, arguments.length > 1)
  }, removeProp: function (a) {
  return a = p.propFix[a] || a, this.each(function () {
  try {
  this[a] = b, delete this[a]
  } catch (c) {
  }
  })
  }, addClass: function (a) {
  var b, c, d, e, f, g, h;
  if (p.isFunction(a))return this.each(function (b) {
  p(this).addClass(a.call(this, b, this.className))
  });
  if (a && typeof a == "string") {
  b = a.split(s);
  for (c = 0, d = this.length; c < d; c++) {
  e = this[c];
  if (e.nodeType === 1)if (!e.className && b.length === 1)e.className = a; else {
  f = " " + e.className + " ";
  for (g = 0, h = b.length; g < h; g++)~f.indexOf(" " + b[g] + " ") || (f += b[g] + " ");
  e.className = p.trim(f)
  }
  }
  }
  return this
  }, removeClass: function (a) {
  var c, d, e, f, g, h, i;
  if (p.isFunction(a))return this.each(function (b) {
  p(this).removeClass(a.call(this, b, this.className))
  });
  if (a && typeof a == "string" || a === b) {
  c = (a || "").split(s);
  for (h = 0, i = this.length; h < i; h++) {
  e = this[h];
  if (e.nodeType === 1 && e.className) {
  d = (" " + e.className + " ").replace(O, " ");
  for (f = 0, g = c.length; f < g; f++)while (d.indexOf(" " + c[f] + " ") > -1)d = d.replace(" " + c[f] + " ", " ");
  e.className = a ? p.trim(d) : ""
  }
  }
  }
  return this
  }, toggleClass: function (a, b) {
  var c = typeof a, d = typeof b == "boolean";
  return p.isFunction(a) ? this.each(function (c) {
  p(this).toggleClass(a.call(this, c, this.className, b), b)
  }) : this.each(function () {
  if (c === "string") {
  var e, f = 0, g = p(this), h = b, i = a.split(s);
  while (e = i[f++])h = d ? h : !g.hasClass(e), g[h ? "addClass" : "removeClass"](e)
  } else if (c === "undefined" || c === "boolean")this.className && p._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : p._data(this, "__className__") || ""
  })
  }, hasClass: function (a) {
  var b = " " + a + " ", c = 0, d = this.length;
  for (; c < d; c++)if (this[c].nodeType === 1 && (" " + this[c].className + " ").replace(O, " ").indexOf(b) > -1)return!0;
  return!1
  }, val: function (a) {
  var c, d, e, f = this[0];
  if (!arguments.length) {
  if (f)return c = p.valHooks[f.type] || p.valHooks[f.nodeName.toLowerCase()], c && "get"in c && (d = c.get(f, "value")) !== b ? d : (d = f.value, typeof d == "string" ? d.replace(P, "") : d == null ? "" : d);
  return
  }
  return e = p.isFunction(a), this.each(function (d) {
  var f, g = p(this);
  if (this.nodeType !== 1)return;
  e ? f = a.call(this, d, g.val()) : f = a, f == null ? f = "" : typeof f == "number" ? f += "" : p.isArray(f) && (f = p.map(f, function (a) {
  return a == null ? "" : a + ""
  })), c = p.valHooks[this.type] || p.valHooks[this.nodeName.toLowerCase()];
  if (!c || !("set"in c) || c.set(this, f, "value") === b)this.value = f
  })
  }}), p.extend({valHooks: {option: {get: function (a) {
  var b = a.attributes.value;
  return!b || b.specified ? a.value : a.text
  }}, select: {get: function (a) {
  var b, c, d, e, f = a.selectedIndex, g = [], h = a.options, i = a.type === "select-one";
  if (f < 0)return null;
  c = i ? f : 0, d = i ? f + 1 : h.length;
  for (; c < d; c++) {
  e = h[c];
  if (e.selected && (p.support.optDisabled ? !e.disabled : e.getAttribute("disabled") === null) && (!e.parentNode.disabled || !p.nodeName(e.parentNode, "optgroup"))) {
  b = p(e).val();
  if (i)return b;
  g.push(b)
  }
  }
  return i && !g.length && h.length ? p(h[f]).val() : g
  }, set: function (a, b) {
  var c = p.makeArray(b);
  return p(a).find("option").each(function () {
  this.selected = p.inArray(p(this).val(), c) >= 0
  }), c.length || (a.selectedIndex = -1), c
  }}}, attrFn: {}, attr: function (a, c, d, e) {
  var f, g, h, i = a.nodeType;
  if (!a || i === 3 || i === 8 || i === 2)return;
  if (e && p.isFunction(p.fn[c]))return p(a)[c](d);
  if (typeof a.getAttribute == "undefined")return p.prop(a, c, d);
  h = i !== 1 || !p.isXMLDoc(a), h && (c = c.toLowerCase(), g = p.attrHooks[c] || (T.test(c) ? M : L));
  if (d !== b) {
  if (d === null) {
  p.removeAttr(a, c);
  return
  }
  return g && "set"in g && h && (f = g.set(a, d, c)) !== b ? f : (a.setAttribute(c, "" + d), d)
  }
  return g && "get"in g && h && (f = g.get(a, c)) !== null ? f : (f = a.getAttribute(c), f === null ? b : f)
  }, removeAttr: function (a, b) {
  var c, d, e, f, g = 0;
  if (b && a.nodeType === 1) {
  d = b.split(s);
  for (; g < d.length; g++)e = d[g], e && (c = p.propFix[e] || e, f = T.test(e), f || p.attr(a, e, ""), a.removeAttribute(U ? e : c), f && c in a && (a[c] = !1))
  }
  }, attrHooks: {type: {set: function (a, b) {
  if (Q.test(a.nodeName) && a.parentNode)p.error("type property can't be changed"); else if (!p.support.radioValue && b === "radio" && p.nodeName(a, "input")) {
  var c = a.value;
  return a.setAttribute("type", b), c && (a.value = c), b
  }
  }}, value: {get: function (a, b) {
  return L && p.nodeName(a, "button") ? L.get(a, b) : b in a ? a.value : null
  }, set: function (a, b, c) {
  if (L && p.nodeName(a, "button"))return L.set(a, b, c);
  a.value = b
  }}}, propFix: {tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable"}, prop: function (a, c, d) {
  var e, f, g, h = a.nodeType;
  if (!a || h === 3 || h === 8 || h === 2)return;
  return g = h !== 1 || !p.isXMLDoc(a), g && (c = p.propFix[c] || c, f = p.propHooks[c]), d !== b ? f && "set"in f && (e = f.set(a, d, c)) !== b ? e : a[c] = d : f && "get"in f && (e = f.get(a, c)) !== null ? e : a[c]
  }, propHooks: {tabIndex: {get: function (a) {
  var c = a.getAttributeNode("tabindex");
  return c && c.specified ? parseInt(c.value, 10) : R.test(a.nodeName) || S.test(a.nodeName) && a.href ? 0 : b
  }}}}), M = {get: function (a, c) {
  var d, e = p.prop(a, c);
  return e === !0 || typeof e != "boolean" && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b
  }, set: function (a, b, c) {
  var d;
  return b === !1 ? p.removeAttr(a, c) : (d = p.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase())), c
  }}, U || (N = {name: !0, id: !0, coords: !0}, L = p.valHooks.button = {get: function (a, c) {
  var d;
  return d = a.getAttributeNode(c), d && (N[c] ? d.value !== "" : d.specified) ? d.value : b
  }, set: function (a, b, c) {
  var d = a.getAttributeNode(c);
  return d || (d = e.createAttribute(c), a.setAttributeNode(d)), d.value = b + ""
  }}, p.each(["width", "height"], function (a, b) {
  p.attrHooks[b] = p.extend(p.attrHooks[b], {set: function (a, c) {
  if (c === "")return a.setAttribute(b, "auto"), c
  }})
  }), p.attrHooks.contenteditable = {get: L.get, set: function (a, b, c) {
  b === "" && (b = "false"), L.set(a, b, c)
  }}), p.support.hrefNormalized || p.each(["href", "src", "width", "height"], function (a, c) {
  p.attrHooks[c] = p.extend(p.attrHooks[c], {get: function (a) {
  var d = a.getAttribute(c, 2);
  return d === null ? b : d
  }})
  }), p.support.style || (p.attrHooks.style = {get: function (a) {
  return a.style.cssText.toLowerCase() || b
  }, set: function (a, b) {
  return a.style.cssText = "" + b
  }}), p.support.optSelected || (p.propHooks.selected = p.extend(p.propHooks.selected, {get: function (a) {
  var b = a.parentNode;
  return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
  }})), p.support.enctype || (p.propFix.enctype = "encoding"), p.support.checkOn || p.each(["radio", "checkbox"], function () {
  p.valHooks[this] = {get: function (a) {
  return a.getAttribute("value") === null ? "on" : a.value
  }}
  }), p.each(["radio", "checkbox"], function () {
  p.valHooks[this] = p.extend(p.valHooks[this], {set: function (a, b) {
  if (p.isArray(b))return a.checked = p.inArray(p(a).val(), b) >= 0
  }})
  });
  var V = /^(?:textarea|input|select)$/i, W = /^([^\.]*|)(?:\.(.+)|)$/, X = /(?:^|\s)hover(\.\S+|)\b/, Y = /^key/, Z = /^(?:mouse|contextmenu)|click/, $ = /^(?:focusinfocus|focusoutblur)$/, _ = function (a) {
  return p.event.special.hover ? a : a.replace(X, "mouseenter$1 mouseleave$1")
  };
  p.event = {add: function (a, c, d, e, f) {
  var g, h, i, j, k, l, m, n, o, q, r;
  if (a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(g = p._data(a)))return;
  d.handler && (o = d, d = o.handler, f = o.selector), d.guid || (d.guid = p.guid++), i = g.events, i || (g.events = i = {}), h = g.handle, h || (g.handle = h = function (a) {
  return typeof p != "undefined" && (!a || p.event.triggered !== a.type) ? p.event.dispatch.apply(h.elem, arguments) : b
  }, h.elem = a), c = p.trim(_(c)).split(" ");
  for (j = 0; j < c.length; j++) {
  k = W.exec(c[j]) || [], l = k[1], m = (k[2] || "").split(".").sort(), r = p.event.special[l] || {}, l = (f ? r.delegateType : r.bindType) || l, r = p.event.special[l] || {}, n = p.extend({type: l, origType: k[1], data: e, handler: d, guid: d.guid, selector: f, namespace: m.join(".")}, o), q = i[l];
  if (!q) {
  q = i[l] = [], q.delegateCount = 0;
  if (!r.setup || r.setup.call(a, e, m, h) === !1)a.addEventListener ? a.addEventListener(l, h, !1) : a.attachEvent && a.attachEvent("on" + l, h)
  }
  r.add && (r.add.call(a, n), n.handler.guid || (n.handler.guid = d.guid)), f ? q.splice(q.delegateCount++, 0, n) : q.push(n), p.event.global[l] = !0
  }
  a = null
  }, global: {}, remove: function (a, b, c, d, e) {
  var f, g, h, i, j, k, l, m, n, o, q, r = p.hasData(a) && p._data(a);
  if (!r || !(m = r.events))return;
  b = p.trim(_(b || "")).split(" ");
  for (f = 0; f < b.length; f++) {
  g = W.exec(b[f]) || [], h = i = g[1], j = g[2];
  if (!h) {
  for (h in m)p.event.remove(a, h + b[f], c, d, !0);
  continue
  }
  n = p.event.special[h] || {}, h = (d ? n.delegateType : n.bindType) || h, o = m[h] || [], k = o.length, j = j ? new RegExp("(^|\\.)" + j.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
  for (l = 0; l < o.length; l++)q = o[l], (e || i === q.origType) && (!c || c.guid === q.guid) && (!j || j.test(q.namespace)) && (!d || d === q.selector || d === "**" && q.selector) && (o.splice(l--, 1), q.selector && o.delegateCount--, n.remove && n.remove.call(a, q));
  o.length === 0 && k !== o.length && ((!n.teardown || n.teardown.call(a, j, r.handle) === !1) && p.removeEvent(a, h, r.handle), delete m[h])
  }
  p.isEmptyObject(m) && (delete r.handle, p.removeData(a, "events", !0))
  }, customEvent: {getData: !0, setData: !0, changeData: !0}, trigger: function (c, d, f, g) {
  if (!f || f.nodeType !== 3 && f.nodeType !== 8) {
  var h, i, j, k, l, m, n, o, q, r, s = c.type || c, t = [];
  if ($.test(s + p.event.triggered))return;
  s.indexOf("!") >= 0 && (s = s.slice(0, -1), i = !0), s.indexOf(".") >= 0 && (t = s.split("."), s = t.shift(), t.sort());
  if ((!f || p.event.customEvent[s]) && !p.event.global[s])return;
  c = typeof c == "object" ? c[p.expando] ? c : new p.Event(s, c) : new p.Event(s), c.type = s, c.isTrigger = !0, c.exclusive = i, c.namespace = t.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + t.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, m = s.indexOf(":") < 0 ? "on" + s : "";
  if (!f) {
  h = p.cache;
  for (j in h)h[j].events && h[j].events[s] && p.event.trigger(c, d, h[j].handle.elem, !0);
  return
  }
  c.result = b, c.target || (c.target = f), d = d != null ? p.makeArray(d) : [], d.unshift(c), n = p.event.special[s] || {};
  if (n.trigger && n.trigger.apply(f, d) === !1)return;
  q = [
  [f, n.bindType || s]
  ];
  if (!g && !n.noBubble && !p.isWindow(f)) {
  r = n.delegateType || s, k = $.test(r + s) ? f : f.parentNode;
  for (l = f; k; k = k.parentNode)q.push([k, r]), l = k;
  l === (f.ownerDocument || e) && q.push([l.defaultView || l.parentWindow || a, r])
  }
  for (j = 0; j < q.length && !c.isPropagationStopped(); j++)k = q[j][0], c.type = q[j][1], o = (p._data(k, "events") || {})[c.type] && p._data(k, "handle"), o && o.apply(k, d), o = m && k[m], o && p.acceptData(k) && o.apply(k, d) === !1 && c.preventDefault();
  return c.type = s, !g && !c.isDefaultPrevented() && (!n._default || n._default.apply(f.ownerDocument, d) === !1) && (s !== "click" || !p.nodeName(f, "a")) && p.acceptData(f) && m && f[s] && (s !== "focus" && s !== "blur" || c.target.offsetWidth !== 0) && !p.isWindow(f) && (l = f[m], l && (f[m] = null), p.event.triggered = s, f[s](), p.event.triggered = b, l && (f[m] = l)), c.result
  }
  return
  }, dispatch: function (c) {
  c = p.event.fix(c || a.event);
  var d, e, f, g, h, i, j, k, l, m, n, o = (p._data(this, "events") || {})[c.type] || [], q = o.delegateCount, r = [].slice.call(arguments), s = !c.exclusive && !c.namespace, t = p.event.special[c.type] || {}, u = [];
  r[0] = c, c.delegateTarget = this;
  if (t.preDispatch && t.preDispatch.call(this, c) === !1)return;
  if (q && (!c.button || c.type !== "click")) {
  g = p(this), g.context = this;
  for (f = c.target; f != this; f = f.parentNode || this)if (f.disabled !== !0 || c.type !== "click") {
  i = {}, k = [], g[0] = f;
  for (d = 0; d < q; d++)l = o[d], m = l.selector, i[m] === b && (i[m] = g.is(m)), i[m] && k.push(l);
  k.length && u.push({elem: f, matches: k})
  }
  }
  o.length > q && u.push({elem: this, matches: o.slice(q)});
  for (d = 0; d < u.length && !c.isPropagationStopped(); d++) {
  j = u[d], c.currentTarget = j.elem;
  for (e = 0; e < j.matches.length && !c.isImmediatePropagationStopped(); e++) {
  l = j.matches[e];
  if (s || !c.namespace && !l.namespace || c.namespace_re && c.namespace_re.test(l.namespace))c.data = l.data, c.handleObj = l, h = ((p.event.special[l.origType] || {}).handle || l.handler).apply(j.elem, r), h !== b && (c.result = h, h === !1 && (c.preventDefault(), c.stopPropagation()))
  }
  }
  return t.postDispatch && t.postDispatch.call(this, c), c.result
  }, props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: {props: "char charCode key keyCode".split(" "), filter: function (a, b) {
  return a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode), a
  }}, mouseHooks: {props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function (a, c) {
  var d, f, g, h = c.button, i = c.fromElement;
  return a.pageX == null && c.clientX != null && (d = a.target.ownerDocument || e, f = d.documentElement, g = d.body, a.pageX = c.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = c.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)), !a.relatedTarget && i && (a.relatedTarget = i === a.target ? c.toElement : i), !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0), a
  }}, fix: function (a) {
  if (a[p.expando])return a;
  var b, c, d = a, f = p.event.fixHooks[a.type] || {}, g = f.props ? this.props.concat(f.props) : this.props;
  a = p.Event(d);
  for (b = g.length; b;)c = g[--b], a[c] = d[c];
  return a.target || (a.target = d.srcElement || e), a.target.nodeType === 3 && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, f.filter ? f.filter(a, d) : a
  }, special: {ready: {setup: p.bindReady}, load: {noBubble: !0}, focus: {delegateType: "focusin"}, blur: {delegateType: "focusout"}, beforeunload: {setup: function (a, b, c) {
  p.isWindow(this) && (this.onbeforeunload = c)
  }, teardown: function (a, b) {
  this.onbeforeunload === b && (this.onbeforeunload = null)
  }}}, simulate: function (a, b, c, d) {
  var e = p.extend(new p.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
  d ? p.event.trigger(e, null, b) : p.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
  }}, p.event.handle = p.event.dispatch, p.removeEvent = e.removeEventListener ? function (a, b, c) {
  a.removeEventListener && a.removeEventListener(b, c, !1)
  } : function (a, b, c) {
  var d = "on" + b;
  a.detachEvent && (typeof a[d] == "undefined" && (a[d] = null), a.detachEvent(d, c))
  }, p.Event = function (a, b) {
  if (this instanceof p.Event)a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? bb : ba) : this.type = a, b && p.extend(this, b), this.timeStamp = a && a.timeStamp || p.now(), this[p.expando] = !0; else return new p.Event(a, b)
  }, p.Event.prototype = {preventDefault: function () {
  this.isDefaultPrevented = bb;
  var a = this.originalEvent;
  if (!a)return;
  a.preventDefault ? a.preventDefault() : a.returnValue = !1
  }, stopPropagation: function () {
  this.isPropagationStopped = bb;
  var a = this.originalEvent;
  if (!a)return;
  a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0
  }, stopImmediatePropagation: function () {
  this.isImmediatePropagationStopped = bb, this.stopPropagation()
  }, isDefaultPrevented: ba, isPropagationStopped: ba, isImmediatePropagationStopped: ba}, p.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (a, b) {
  p.event.special[a] = {delegateType: b, bindType: b, handle: function (a) {
  var c, d = this, e = a.relatedTarget, f = a.handleObj, g = f.selector;
  if (!e || e !== d && !p.contains(d, e))a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b;
  return c
  }}
  }), p.support.submitBubbles || (p.event.special.submit = {setup: function () {
  if (p.nodeName(this, "form"))return!1;
  p.event.add(this, "click._submit keypress._submit", function (a) {
  var c = a.target, d = p.nodeName(c, "input") || p.nodeName(c, "button") ? c.form : b;
  d && !p._data(d, "_submit_attached") && (p.event.add(d, "submit._submit", function (a) {
  a._submit_bubble = !0
  }), p._data(d, "_submit_attached", !0))
  })
  }, postDispatch: function (a) {
  a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && p.event.simulate("submit", this.parentNode, a, !0))
  }, teardown: function () {
  if (p.nodeName(this, "form"))return!1;
  p.event.remove(this, "._submit")
  }}), p.support.changeBubbles || (p.event.special.change = {setup: function () {
  if (V.test(this.nodeName)) {
  if (this.type === "checkbox" || this.type === "radio")p.event.add(this, "propertychange._change", function (a) {
  a.originalEvent.propertyName === "checked" && (this._just_changed = !0)
  }), p.event.add(this, "click._change", function (a) {
  this._just_changed && !a.isTrigger && (this._just_changed = !1), p.event.simulate("change", this, a, !0)
  });
  return!1
  }
  p.event.add(this, "beforeactivate._change", function (a) {
  var b = a.target;
  V.test(b.nodeName) && !p._data(b, "_change_attached") && (p.event.add(b, "change._change", function (a) {
  this.parentNode && !a.isSimulated && !a.isTrigger && p.event.simulate("change", this.parentNode, a, !0)
  }), p._data(b, "_change_attached", !0))
  })
  }, handle: function (a) {
  var b = a.target;
  if (this !== b || a.isSimulated || a.isTrigger || b.type !== "radio" && b.type !== "checkbox")return a.handleObj.handler.apply(this, arguments)
  }, teardown: function () {
  return p.event.remove(this, "._change"), V.test(this.nodeName)
  }}), p.support.focusinBubbles || p.each({focus: "focusin", blur: "focusout"}, function (a, b) {
  var c = 0, d = function (a) {
  p.event.simulate(b, a.target, p.event.fix(a), !0)
  };
  p.event.special[b] = {setup: function () {
  c++ === 0 && e.addEventListener(a, d, !0)
  }, teardown: function () {
  --c === 0 && e.removeEventListener(a, d, !0)
  }}
  }), p.fn.extend({on: function (a, c, d, e, f) {
  var g, h;
  if (typeof a == "object") {
  typeof c != "string" && (d = d || c, c = b);
  for (h in a)this.on(h, c, d, a[h], f);
  return this
  }
  d == null && e == null ? (e = c, d = c = b) : e == null && (typeof c == "string" ? (e = d, d = b) : (e = d, d = c, c = b));
  if (e === !1)e = ba; else if (!e)return this;
  return f === 1 && (g = e, e = function (a) {
  return p().off(a), g.apply(this, arguments)
  }, e.guid = g.guid || (g.guid = p.guid++)), this.each(function () {
  p.event.add(this, a, e, d, c)
  })
  }, one: function (a, b, c, d) {
  return this.on(a, b, c, d, 1)
  }, off: function (a, c, d) {
  var e, f;
  if (a && a.preventDefault && a.handleObj)return e = a.handleObj, p(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler), this;
  if (typeof a == "object") {
  for (f in a)this.off(f, c, a[f]);
  return this
  }
  if (c === !1 || typeof c == "function")d = c, c = b;
  return d === !1 && (d = ba), this.each(function () {
  p.event.remove(this, a, d, c)
  })
  }, bind: function (a, b, c) {
  return this.on(a, null, b, c)
  }, unbind: function (a, b) {
  return this.off(a, null, b)
  }, live: function (a, b, c) {
  return p(this.context).on(a, this.selector, b, c), this
  }, die: function (a, b) {
  return p(this.context).off(a, this.selector || "**", b), this
  }, delegate: function (a, b, c, d) {
  return this.on(b, a, c, d)
  }, undelegate: function (a, b, c) {
  return arguments.length == 1 ? this.off(a, "**") : this.off(b, a || "**", c)
  }, trigger: function (a, b) {
  return this.each(function () {
  p.event.trigger(a, b, this)
  })
  }, triggerHandler: function (a, b) {
  if (this[0])return p.event.trigger(a, b, this[0], !0)
  }, toggle: function (a) {
  var b = arguments, c = a.guid || p.guid++, d = 0, e = function (c) {
  var e = (p._data(this, "lastToggle" + a.guid) || 0) % d;
  return p._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault(), b[e].apply(this, arguments) || !1
  };
  e.guid = c;
  while (d < b.length)b[d++].guid = c;
  return this.click(e)
  }, hover: function (a, b) {
  return this.mouseenter(a).mouseleave(b || a)
  }}), p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
  p.fn[b] = function (a, c) {
  return c == null && (c = a, a = null), arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
  }, Y.test(b) && (p.event.fixHooks[b] = p.event.keyHooks), Z.test(b) && (p.event.fixHooks[b] = p.event.mouseHooks)
  }), function (a, b) {
  function bd(a, b, c, d) {
  var e = 0, f = b.length;
  for (; e < f; e++)Z(a, b[e], c, d)
  }
   
  function be(a, b, c, d, e, f) {
  var g, h = $.setFilters[b.toLowerCase()];
  return h || Z.error(b), (a || !(g = e)) && bd(a || "*", d, g = [], e), g.length > 0 ? h(g, c, f) : []
  }
   
  function bf(a, c, d, e, f) {
  var g, h, i, j, k, l, m, n, p = 0, q = f.length, s = L.POS, t = new RegExp("^" + s.source + "(?!" + r + ")", "i"), u = function () {
  var a = 1, c = arguments.length - 2;
  for (; a < c; a++)arguments[a] === b && (g[a] = b)
  };
  for (; p < q; p++) {
  s.exec(""), a = f[p], j = [], i = 0, k = e;
  while (g = s.exec(a)) {
  n = s.lastIndex = g.index + g[0].length;
  if (n > i) {
  m = a.slice(i, g.index), i = n, l = [c], B.test(m) && (k && (l = k), k = e);
  if (h = H.test(m))m = m.slice(0, -5).replace(B, "$&*");
  g.length > 1 && g[0].replace(t, u), k = be(m, g[1], g[2], l, k, h)
  }
  }
  k ? (j = j.concat(k), (m = a.slice(i)) && m !== ")" ? B.test(m) ? bd(m, j, d, e) : Z(m, c, d, e ? e.concat(k) : k) : o.apply(d, j)) : Z(a, c, d, e)
  }
  return q === 1 ? d : Z.uniqueSort(d)
  }
   
  function bg(a, b, c) {
  var d, e, f, g = [], i = 0, j = D.exec(a), k = !j.pop() && !j.pop(), l = k && a.match(C) || [""], m = $.preFilter, n = $.filter, o = !c && b !== h;
  for (; (e = l[i]) != null && k; i++) {
  g.push(d = []), o && (e = " " + e);
  while (e) {
  k = !1;
  if (j = B.exec(e))e = e.slice(j[0].length), k = d.push({part: j.pop().replace(A, " "), captures: j});
  for (f in n)(j = L[f].exec(e)) && (!m[f] || (j = m[f](j, b, c))) && (e = e.slice(j.shift().length), k = d.push({part: f, captures: j}));
  if (!k)break
  }
  }
  return k || Z.error(a), g
  }
   
  function bh(a, b, e) {
  var f = b.dir, g = m++;
  return a || (a = function (a) {
  return a === e
  }), b.first ? function (b, c) {
  while (b = b[f])if (b.nodeType === 1)return a(b, c) && b
  } : function (b, e) {
  var h, i = g + "." + d, j = i + "." + c;
  while (b = b[f])if (b.nodeType === 1) {
  if ((h = b[q]) === j)return b.sizset;
  if (typeof h == "string" && h.indexOf(i) === 0) {
  if (b.sizset)return b
  } else {
  b[q] = j;
  if (a(b, e))return b.sizset = !0, b;
  b.sizset = !1
  }
  }
  }
  }
   
  function bi(a, b) {
  return a ? function (c, d) {
  var e = b(c, d);
  return e && a(e === !0 ? c : e, d)
  } : b
  }
   
  function bj(a, b, c) {
  var d, e, f = 0;
  for (; d = a[f]; f++)$.relative[d.part] ? e = bh(e, $.relative[d.part], b) : (d.captures.push(b, c), e = bi(e, $.filter[d.part].apply(null, d.captures)));
  return e
  }
   
  function bk(a) {
  return function (b, c) {
  var d, e = 0;
  for (; d = a[e]; e++)if (d(b, c))return!0;
  return!1
  }
  }
   
  var c, d, e, f, g, h = a.document, i = h.documentElement, j = "undefined", k = !1, l = !0, m = 0, n = [].slice, o = [].push, q = ("sizcache" + Math.random()).replace(".", ""), r = "[\\x20\\t\\r\\n\\f]", s = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", t = s.replace("w", "w#"), u = "([*^$|!~]?=)", v = "\\[" + r + "*(" + s + ")" + r + "*(?:" + u + r + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + t + ")|)|)" + r + "*\\]", w = ":(" + s + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)", x = ":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)", y = r + "*([\\x20\\t\\r\\n\\f>+~])" + r + "*", z = "(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|" + v + "|" + w.replace(2, 7) + "|[^\\\\(),])+", A = new RegExp("^" + r + "+|((?:^|[^\\\\])(?:\\\\.)*)" + r + "+$", "g"), B = new RegExp("^" + y), C = new RegExp(z + "?(?=" + r + "*,|$)", "g"), D = new RegExp("^(?:(?!,)(?:(?:^|,)" + r + "*" + z + ")*?|" + r + "*(.*?))(\\)|$)"), E = new RegExp(z.slice(19, -6) + "\\x20\\t\\r\\n\\f>+~])+|" + y, "g"), F = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, G = /[\x20\t\r\n\f]*[+~]/, H = /:not\($/, I = /h\d/i, J = /input|select|textarea|button/i, K = /\\(?!\\)/g, L = {ID: new RegExp("^#(" + s + ")"), CLASS: new RegExp("^\\.(" + s + ")"), NAME: new RegExp("^\\[name=['\"]?(" + s + ")['\"]?\\]"), TAG: new RegExp("^(" + s.replace("[-", "[-\\*") + ")"), ATTR: new RegExp("^" + v), PSEUDO: new RegExp("^" + w), CHILD: new RegExp("^:(only|nth|last|first)-child(?:\\(" + r + "*(even|odd|(([+-]|)(\\d*)n|)" + r + "*(?:([+-]|)" + r + "*(\\d+)|))" + r + "*\\)|)", "i"), POS: new RegExp(x, "ig"), needsContext: new RegExp("^" + r + "*[>+~]|" + x, "i")}, M = {}, N = [], O = {}, P = [], Q = function (a) {
  return a.sizzleFilter = !0, a
  }, R = function (a) {
  return function (b) {
  return b.nodeName.toLowerCase() === "input" && b.type === a
  }
  }, S = function (a) {
  return function (b) {
  var c = b.nodeName.toLowerCase();
  return(c === "input" || c === "button") && b.type === a
  }
  }, T = function (a) {
  var b = !1, c = h.createElement("div");
  try {
  b = a(c)
  } catch (d) {
  }
  return c = null, b
  }, U = T(function (a) {
  a.innerHTML = "<select></select>";
  var b = typeof a.lastChild.getAttribute("multiple");
  return b !== "boolean" && b !== "string"
  }), V = T(function (a) {
  a.id = q + 0, a.innerHTML = "<a name='" + q + "'></a><div name='" + q + "'></div>", i.insertBefore(a, i.firstChild);
  var b = h.getElementsByName && h.getElementsByName(q).length === 2 + h.getElementsByName(q + 0).length;
  return g = !h.getElementById(q), i.removeChild(a), b
  }), W = T(function (a) {
  return a.appendChild(h.createComment("")), a.getElementsByTagName("*").length === 0
  }), X = T(function (a) {
  return a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute !== j && a.firstChild.getAttribute("href") === "#"
  }), Y = T(function (a) {
  return a.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", !a.getElementsByClassName || a.getElementsByClassName("e").length === 0 ? !1 : (a.lastChild.className = "e", a.getElementsByClassName("e").length !== 1)
  }), Z = function (a, b, c, d) {
  c = c || [], b = b || h;
  var e, f, g, i, j = b.nodeType;
  if (j !== 1 && j !== 9)return[];
  if (!a || typeof a != "string")return c;
  g = ba(b);
  if (!g && !d)if (e = F.exec(a))if (i = e[1]) {
  if (j === 9) {
  f = b.getElementById(i);
  if (!f || !f.parentNode)return c;
  if (f.id === i)return c.push(f), c
  } else if (b.ownerDocument && (f = b.ownerDocument.getElementById(i)) && bb(b, f) && f.id === i)return c.push(f), c
  } else {
  if (e[2])return o.apply(c, n.call(b.getElementsByTagName(a), 0)), c;
  if ((i = e[3]) && Y && b.getElementsByClassName)return o.apply(c, n.call(b.getElementsByClassName(i), 0)), c
  }
  return bm(a, b, c, d, g)
  }, $ = Z.selectors = {cacheLength: 50, match: L, order: ["ID", "TAG"], attrHandle: {}, createPseudo: Q, find: {ID: g ? function (a, b, c) {
  if (typeof b.getElementById !== j && !c) {
  var d = b.getElementById(a);
  return d && d.parentNode ? [d] : []
  }
  } : function (a, c, d) {
  if (typeof c.getElementById !== j && !d) {
  var e = c.getElementById(a);
  return e ? e.id === a || typeof e.getAttributeNode !== j && e.getAttributeNode("id").value === a ? [e] : b : []
  }
  }, TAG: W ? function (a, b) {
  if (typeof b.getElementsByTagName !== j)return b.getElementsByTagName(a)
  } : function (a, b) {
  var c = b.getElementsByTagName(a);
  if (a === "*") {
  var d, e = [], f = 0;
  for (; d = c[f]; f++)d.nodeType === 1 && e.push(d);
  return e
  }
  return c
  }}, relative: {">": {dir: "parentNode", first: !0}, " ": {dir: "parentNode"}, "+": {dir: "previousSibling", first: !0}, "~": {dir: "previousSibling"}}, preFilter: {ATTR: function (a) {
  return a[1] = a[1].replace(K, ""), a[3] = (a[4] || a[5] || "").replace(K, ""), a[2] === "~=" && (a[3] = " " + a[3] + " "), a.slice(0, 4)
  }, CHILD: function (a) {
  return a[1] = a[1].toLowerCase(), a[1] === "nth" ? (a[2] || Z.error(a[0]), a[3] = +(a[3] ? a[4] + (a[5] || 1) : 2 * (a[2] === "even" || a[2] === "odd")), a[4] = +(a[6] + a[7] || a[2] === "odd")) : a[2] && Z.error(a[0]), a
  }, PSEUDO: function (a) {
  var b, c = a[4];
  return L.CHILD.test(a[0]) ? null : (c && (b = D.exec(c)) && b.pop() && (a[0] = a[0].slice(0, b[0].length - c.length - 1), c = b[0].slice(0, -1)), a.splice(2, 3, c || a[3]), a)
  }}, filter: {ID: g ? function (a) {
  return a = a.replace(K, ""), function (b) {
  return b.getAttribute("id") === a
  }
  } : function (a) {
  return a = a.replace(K, ""), function (b) {
  var c = typeof b.getAttributeNode !== j && b.getAttributeNode("id");
  return c && c.value === a
  }
  }, TAG: function (a) {
  return a === "*" ? function () {
  return!0
  } : (a = a.replace(K, "").toLowerCase(), function (b) {
  return b.nodeName && b.nodeName.toLowerCase() === a
  })
  }, CLASS: function (a) {
  var b = M[a];
  return b || (b = M[a] = new RegExp("(^|" + r + ")" + a + "(" + r + "|$)"), N.push(a), N.length > $.cacheLength && delete M[N.shift()]), function (a) {
  return b.test(a.className || typeof a.getAttribute !== j && a.getAttribute("class") || "")
  }
  }, ATTR: function (a, b, c) {
  return b ? function (d) {
  var e = Z.attr(d, a), f = e + "";
  if (e == null)return b === "!=";
  switch (b) {
  case"=":
  return f === c;
  case"!=":
  return f !== c;
  case"^=":
  return c && f.indexOf(c) === 0;
  case"*=":
  return c && f.indexOf(c) > -1;
  case"$=":
  return c && f.substr(f.length - c.length) === c;
  case"~=":
  return(" " + f + " ").indexOf(c) > -1;
  case"|=":
  return f === c || f.substr(0, c.length + 1) === c + "-"
  }
  } : function (b) {
  return Z.attr(b, a) != null
  }
  }, CHILD: function (a, b, c, d) {
  if (a === "nth") {
  var e = m++;
  return function (a) {
  var b, f, g = 0, h = a;
  if (c === 1 && d === 0)return!0;
  b = a.parentNode;
  if (b && (b[q] !== e || !a.sizset)) {
  for (h = b.firstChild; h; h = h.nextSibling)if (h.nodeType === 1) {
  h.sizset = ++g;
  if (h === a)break
  }
  b[q] = e
  }
  return f = a.sizset - d, c === 0 ? f === 0 : f % c === 0 && f / c >= 0
  }
  }
  return function (b) {
  var c = b;
  switch (a) {
  case"only":
  case"first":
  while (c = c.previousSibling)if (c.nodeType === 1)return!1;
  if (a === "first")return!0;
  c = b;
  case"last":
  while (c = c.nextSibling)if (c.nodeType === 1)return!1;
  return!0
  }
  }
  }, PSEUDO: function (a, b, c, d) {
  var e = $.pseudos[a] || $.pseudos[a.toLowerCase()];
  return e || Z.error("unsupported pseudo: " + a), e.sizzleFilter ? e(b, c, d) : e
  }}, pseudos: {not: Q(function (a, b, c) {
  var d = bl(a.replace(A, "$1"), b, c);
  return function (a) {
  return!d(a)
  }
  }), enabled: function (a) {
  return a.disabled === !1
  }, disabled: function (a) {
  return a.disabled === !0
  }, checked: function (a) {
  var b = a.nodeName.toLowerCase();
  return b === "input" && !!a.checked || b === "option" && !!a.selected
  }, selected: function (a) {
  return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
  }, parent: function (a) {
  return!$.pseudos.empty(a)
  }, empty: function (a) {
  var b;
  a = a.firstChild;
  while (a) {
  if (a.nodeName > "@" || (b = a.nodeType) === 3 || b === 4)return!1;
  a = a.nextSibling
  }
  return!0
  }, contains: Q(function (a) {
  return function (b) {
  return(b.textContent || b.innerText || bc(b)).indexOf(a) > -1
  }
  }), has: Q(function (a) {
  return function (b) {
  return Z(a, b).length > 0
  }
  }), header: function (a) {
  return I.test(a.nodeName)
  }, text: function (a) {
  var b, c;
  return a.nodeName.toLowerCase() === "input" && (b = a.type) === "text" && ((c = a.getAttribute("type")) == null || c.toLowerCase() === b)
  }, radio: R("radio"), checkbox: R("checkbox"), file: R("file"), password: R("password"), image: R("image"), submit: S("submit"), reset: S("reset"), button: function (a) {
  var b = a.nodeName.toLowerCase();
  return b === "input" && a.type === "button" || b === "button"
  }, input: function (a) {
  return J.test(a.nodeName)
  }, focus: function (a) {
  var b = a.ownerDocument;
  return a === b.activeElement && (!b.hasFocus || b.hasFocus()) && (!!a.type || !!a.href)
  }, active: function (a) {
  return a === a.ownerDocument.activeElement
  }}, setFilters: {first: function (a, b, c) {
  return c ? a.slice(1) : [a[0]]
  }, last: function (a, b, c) {
  var d = a.pop();
  return c ? a : [d]
  }, even: function (a, b, c) {
  var d = [], e = c ? 1 : 0, f = a.length;
  for (; e < f; e = e + 2)d.push(a[e]);
  return d
  }, odd: function (a, b, c) {
  var d = [], e = c ? 0 : 1, f = a.length;
  for (; e < f; e = e + 2)d.push(a[e]);
  return d
  }, lt: function (a, b, c) {
  return c ? a.slice(+b) : a.slice(0, +b)
  }, gt: function (a, b, c) {
  return c ? a.slice(0, +b + 1) : a.slice(+b + 1)
  }, eq: function (a, b, c) {
  var d = a.splice(+b, 1);
  return c ? a : d
  }}};
  $.setFilters.nth = $.setFilters.eq, $.filters = $.pseudos, X || ($.attrHandle = {href: function (a) {
  return a.getAttribute("href", 2)
  }, type: function (a) {
  return a.getAttribute("type")
  }}), V && ($.order.push("NAME"), $.find.NAME = function (a, b) {
  if (typeof b.getElementsByName !== j)return b.getElementsByName(a)
  }), Y && ($.order.splice(1, 0, "CLASS"), $.find.CLASS = function (a, b, c) {
  if (typeof b.getElementsByClassName !== j && !c)return b.getElementsByClassName(a)
  });
  try {
  n.call(i.childNodes, 0)[0].nodeType
  } catch (_) {
  n = function (a) {
  var b, c = [];
  for (; b = this[a]; a++)c.push(b);
  return c
  }
  }
  var ba = Z.isXML = function (a) {
  var b = a && (a.ownerDocument || a).documentElement;
  return b ? b.nodeName !== "HTML" : !1
  }, bb = Z.contains = i.compareDocumentPosition ? function (a, b) {
  return!!(a.compareDocumentPosition(b) & 16)
  } : i.contains ? function (a, b) {
  var c = a.nodeType === 9 ? a.documentElement : a, d = b.parentNode;
  return a === d || !!(d && d.nodeType === 1 && c.contains && c.contains(d))
  } : function (a, b) {
  while (b = b.parentNode)if (b === a)return!0;
  return!1
  }, bc = Z.getText = function (a) {
  var b, c = "", d = 0, e = a.nodeType;
  if (e) {
  if (e === 1 || e === 9 || e === 11) {
  if (typeof a.textContent == "string")return a.textContent;
  for (a = a.firstChild; a; a = a.nextSibling)c += bc(a)
  } else if (e === 3 || e === 4)return a.nodeValue
  } else for (; b = a[d]; d++)c += bc(b);
  return c
  };
  Z.attr = function (a, b) {
  var c, d = ba(a);
  return d || (b = b.toLowerCase()), $.attrHandle[b] ? $.attrHandle[b](a) : U || d ? a.getAttribute(b) : (c = a.getAttributeNode(b), c ? typeof a[b] == "boolean" ? a[b] ? b : null : c.specified ? c.value : null : null)
  }, Z.error = function (a) {
  throw new Error("Syntax error, unrecognized expression: " + a)
  }, [0, 0].sort(function () {
  return l = 0
  }), i.compareDocumentPosition ? e = function (a, b) {
  return a === b ? (k = !0, 0) : (!a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition : a.compareDocumentPosition(b) & 4) ? -1 : 1
  } : (e = function (a, b) {
  if (a === b)return k = !0, 0;
  if (a.sourceIndex && b.sourceIndex)return a.sourceIndex - b.sourceIndex;
  var c, d, e = [], g = [], h = a.parentNode, i = b.parentNode, j = h;
  if (h === i)return f(a, b);
  if (!h)return-1;
  if (!i)return 1;
  while (j)e.unshift(j), j = j.parentNode;
  j = i;
  while (j)g.unshift(j), j = j.parentNode;
  c = e.length, d = g.length;
  for (var l = 0; l < c && l < d; l++)if (e[l] !== g[l])return f(e[l], g[l]);
  return l === c ? f(a, g[l], -1) : f(e[l], b, 1)
  }, f = function (a, b, c) {
  if (a === b)return c;
  var d = a.nextSibling;
  while (d) {
  if (d === b)return-1;
  d = d.nextSibling
  }
  return 1
  }), Z.uniqueSort = function (a) {
  var b, c = 1;
  if (e) {
  k = l, a.sort(e);
  if (k)for (; b = a[c]; c++)b === a[c - 1] && a.splice(c--, 1)
  }
  return a
  };
  var bl = Z.compile = function (a, b, c) {
  var d, e, f, g = O[a];
  if (g && g.context === b)return g;
  e = bg(a, b, c);
  for (f = 0; d = e[f]; f++)e[f] = bj(d, b, c);
  return g = O[a] = bk(e), g.context = b, g.runs = g.dirruns = 0, P.push(a), P.length > $.cacheLength && delete O[P.shift()], g
  };
  Z.matches = function (a, b) {
  return Z(a, null, null, b)
  }, Z.matchesSelector = function (a, b) {
  return Z(b, null, null, [a]).length > 0
  };
  var bm = function (a, b, e, f, g) {
  a = a.replace(A, "$1");
  var h, i, j, k, l, m, p, q, r, s = a.match(C), t = a.match(E), u = b.nodeType;
  if (L.POS.test(a))return bf(a, b, e, f, s);
  if (f)h = n.call(f, 0); else if (s && s.length === 1) {
  if (t.length > 1 && u === 9 && !g && (s = L.ID.exec(t[0]))) {
  b = $.find.ID(s[1], b, g)[0];
  if (!b)return e;
  a = a.slice(t.shift().length)
  }
  q = (s = G.exec(t[0])) && !s.index && b.parentNode || b, r = t.pop(), m = r.split(":not")[0];
  for (j = 0, k = $.order.length; j < k; j++) {
  p = $.order[j];
  if (s = L[p].exec(m)) {
  h = $.find[p]((s[1] || "").replace(K, ""), q, g);
  if (h == null)continue;
  m === r && (a = a.slice(0, a.length - r.length) + m.replace(L[p], ""), a || o.apply(e, n.call(h, 0)));
  break
  }
  }
  }
  if (a) {
  i = bl(a, b, g), d = i.dirruns++, h == null && (h = $.find.TAG("*", G.test(a) && b.parentNode || b));
  for (j = 0; l = h[j]; j++)c = i.runs++, i(l, b) && e.push(l)
  }
  return e
  };
  h.querySelectorAll && function () {
  var a, b = bm, c = /'|\\/g, d = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, e = [], f = [":active"], g = i.matchesSelector || i.mozMatchesSelector || i.webkitMatchesSelector || i.oMatchesSelector || i.msMatchesSelector;
  T(function (a) {
  a.innerHTML = "<select><option selected></option></select>", a.querySelectorAll("[selected]").length || e.push("\\[" + r + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), a.querySelectorAll(":checked").length || e.push(":checked")
  }), T(function (a) {
  a.innerHTML = "<p test=''></p>", a.querySelectorAll("[test^='']").length && e.push("[*^$]=" + r + "*(?:\"\"|'')"), a.innerHTML = "<input type='hidden'>", a.querySelectorAll(":enabled").length || e.push(":enabled", ":disabled")
  }), e = e.length && new RegExp(e.join("|")), bm = function (a, d, f, g, h) {
  if (!g && !h && (!e || !e.test(a)))if (d.nodeType === 9)try {
  return o.apply(f, n.call(d.querySelectorAll(a), 0)), f
  } catch (i) {
  } else if (d.nodeType === 1 && d.nodeName.toLowerCase() !== "object") {
  var j = d.getAttribute("id"), k = j || q, l = G.test(a) && d.parentNode || d;
  j ? k = k.replace(c, "\\$&") : d.setAttribute("id", k);
  try {
  return o.apply(f, n.call(l.querySelectorAll(a.replace(C, "[id='" + k + "'] $&")), 0)), f
  } catch (i) {
  } finally {
  j || d.removeAttribute("id")
  }
  }
  return b(a, d, f, g, h)
  }, g && (T(function (b) {
  a = g.call(b, "div");
  try {
  g.call(b, "[test!='']:sizzle"), f.push($.match.PSEUDO)
  } catch (c) {
  }
  }), f = new RegExp(f.join("|")), Z.matchesSelector = function (b, c) {
  c = c.replace(d, "='$1']");
  if (!ba(b) && !f.test(c) && (!e || !e.test(c)))try {
  var h = g.call(b, c);
  if (h || a || b.document && b.document.nodeType !== 11)return h
  } catch (i) {
  }
  return Z(c, null, null, [b]).length > 0
  })
  }(), Z.attr = p.attr, p.find = Z, p.expr = Z.selectors, p.expr[":"] = p.expr.pseudos, p.unique = Z.uniqueSort, p.text = Z.getText, p.isXMLDoc = Z.isXML, p.contains = Z.contains
  }(a);
  var bc = /Until$/, bd = /^(?:parents|prev(?:Until|All))/, be = /^.[^:#\[\.,]*$/, bf = p.expr.match.needsContext, bg = {children: !0, contents: !0, next: !0, prev: !0};
  p.fn.extend({find: function (a) {
  var b, c, d, e, f, g, h = this;
  if (typeof a != "string")return p(a).filter(function () {
  for (b = 0, c = h.length; b < c; b++)if (p.contains(h[b], this))return!0
  });
  g = this.pushStack("", "find", a);
  for (b = 0, c = this.length; b < c; b++) {
  d = g.length, p.find(a, this[b], g);
  if (b > 0)for (e = d; e < g.length; e++)for (f = 0; f < d; f++)if (g[f] === g[e]) {
  g.splice(e--, 1);
  break
  }
  }
  return g
  }, has: function (a) {
  var b, c = p(a, this), d = c.length;
  return this.filter(function () {
  for (b = 0; b < d; b++)if (p.contains(this, c[b]))return!0
  })
  }, not: function (a) {
  return this.pushStack(bj(this, a, !1), "not", a)
  }, filter: function (a) {
  return this.pushStack(bj(this, a, !0), "filter", a)
  }, is: function (a) {
  return!!a && (typeof a == "string" ? bf.test(a) ? p(a, this.context).index(this[0]) >= 0 : p.filter(a, this).length > 0 : this.filter(a).length > 0)
  }, closest: function (a, b) {
  var c, d = 0, e = this.length, f = [], g = bf.test(a) || typeof a != "string" ? p(a, b || this.context) : 0;
  for (; d < e; d++) {
  c = this[d];
  while (c && c.ownerDocument && c !== b && c.nodeType !== 11) {
  if (g ? g.index(c) > -1 : p.find.matchesSelector(c, a)) {
  f.push(c);
  break
  }
  c = c.parentNode
  }
  }
  return f = f.length > 1 ? p.unique(f) : f, this.pushStack(f, "closest", a)
  }, index: function (a) {
  return a ? typeof a == "string" ? p.inArray(this[0], p(a)) : p.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
  }, add: function (a, b) {
  var c = typeof a == "string" ? p(a, b) : p.makeArray(a && a.nodeType ? [a] : a), d = p.merge(this.get(), c);
  return this.pushStack(bh(c[0]) || bh(d[0]) ? d : p.unique(d))
  }, addBack: function (a) {
  return this.add(a == null ? this.prevObject : this.prevObject.filter(a))
  }}), p.fn.andSelf = p.fn.addBack, p.each({parent: function (a) {
  var b = a.parentNode;
  return b && b.nodeType !== 11 ? b : null
  }, parents: function (a) {
  return p.dir(a, "parentNode")
  }, parentsUntil: function (a, b, c) {
  return p.dir(a, "parentNode", c)
  }, next: function (a) {
  return bi(a, "nextSibling")
  }, prev: function (a) {
  return bi(a, "previousSibling")
  }, nextAll: function (a) {
  return p.dir(a, "nextSibling")
  }, prevAll: function (a) {
  return p.dir(a, "previousSibling")
  }, nextUntil: function (a, b, c) {
  return p.dir(a, "nextSibling", c)
  }, prevUntil: function (a, b, c) {
  return p.dir(a, "previousSibling", c)
  }, siblings: function (a) {
  return p.sibling((a.parentNode || {}).firstChild, a)
  }, children: function (a) {
  return p.sibling(a.firstChild)
  }, contents: function (a) {
  return p.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : p.merge([], a.childNodes)
  }}, function (a, b) {
  p.fn[a] = function (c, d) {
  var e = p.map(this, b, c);
  return bc.test(a) || (d = c), d && typeof d == "string" && (e = p.filter(d, e)), e = this.length > 1 && !bg[a] ? p.unique(e) : e, this.length > 1 && bd.test(a) && (e = e.reverse()), this.pushStack(e, a, k.call(arguments).join(","))
  }
  }), p.extend({filter: function (a, b, c) {
  return c && (a = ":not(" + a + ")"), b.length === 1 ? p.find.matchesSelector(b[0], a) ? [b[0]] : [] : p.find.matches(a, b)
  }, dir: function (a, c, d) {
  var e = [], f = a[c];
  while (f && f.nodeType !== 9 && (d === b || f.nodeType !== 1 || !p(f).is(d)))f.nodeType === 1 && e.push(f), f = f[c];
  return e
  }, sibling: function (a, b) {
  var c = [];
  for (; a; a = a.nextSibling)a.nodeType === 1 && a !== b && c.push(a);
  return c
  }});
  var bl = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", bm = / jQuery\d+="(?:null|\d+)"/g, bn = /^\s+/, bo = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, bp = /<([\w:]+)/, bq = /<tbody/i, br = /<|&#?\w+;/, bs = /<(?:script|style|link)/i, bt = /<(?:script|object|embed|option|style)/i, bu = new RegExp("<(?:" + bl + ")[\\s/>]", "i"), bv = /^(?:checkbox|radio)$/, bw = /checked\s*(?:[^=]|=\s*.checked.)/i, bx = /\/(java|ecma)script/i, by = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, bz = {option: [1, "<select multiple='multiple'>", "</select>"], legend: [1, "<fieldset>", "</fieldset>"], thead: [1, "<table>", "</table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], area: [1, "<map>", "</map>"], _default: [0, "", ""]}, bA = bk(e), bB = bA.appendChild(e.createElement("div"));
  bz.optgroup = bz.option, bz.tbody = bz.tfoot = bz.colgroup = bz.caption = bz.thead, bz.th = bz.td, p.support.htmlSerialize || (bz._default = [1, "X<div>", "</div>"]), p.fn.extend({text: function (a) {
  return p.access(this, function (a) {
  return a === b ? p.text(this) : this.empty().append((this[0] && this[0].ownerDocument || e).createTextNode(a))
  }, null, a, arguments.length)
  }, wrapAll: function (a) {
  if (p.isFunction(a))return this.each(function (b) {
  p(this).wrapAll(a.call(this, b))
  });
  if (this[0]) {
  var b = p(a, this[0].ownerDocument).eq(0).clone(!0);
  this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
  var a = this;
  while (a.firstChild && a.firstChild.nodeType === 1)a = a.firstChild;
  return a
  }).append(this)
  }
  return this
  }, wrapInner: function (a) {
  return p.isFunction(a) ? this.each(function (b) {
  p(this).wrapInner(a.call(this, b))
  }) : this.each(function () {
  var b = p(this), c = b.contents();
  c.length ? c.wrapAll(a) : b.append(a)
  })
  }, wrap: function (a) {
  var b = p.isFunction(a);
  return this.each(function (c) {
  p(this).wrapAll(b ? a.call(this, c) : a)
  })
  }, unwrap: function () {
  return this.parent().each(function () {
  p.nodeName(this, "body") || p(this).replaceWith(this.childNodes)
  }).end()
  }, append: function () {
  return this.domManip(arguments, !0, function (a) {
  (this.nodeType === 1 || this.nodeType === 11) && this.appendChild(a)
  })
  }, prepend: function () {
  return this.domManip(arguments, !0, function (a) {
  (this.nodeType === 1 || this.nodeType === 11) && this.insertBefore(a, this.firstChild)
  })
  }, before: function () {
  if (!bh(this[0]))return this.domManip(arguments, !1, function (a) {
  this.parentNode.insertBefore(a, this)
  });
  if (arguments.length) {
  var a = p.clean(arguments);
  return this.pushStack(p.merge(a, this), "before", this.selector)
  }
  }, after: function () {
  if (!bh(this[0]))return this.domManip(arguments, !1, function (a) {
  this.parentNode.insertBefore(a, this.nextSibling)
  });
  if (arguments.length) {
  var a = p.clean(arguments);
  return this.pushStack(p.merge(this, a), "after", this.selector)
  }
  }, remove: function (a, b) {
  var c, d = 0;
  for (; (c = this[d]) != null; d++)if (!a || p.filter(a, [c]).length)!b && c.nodeType === 1 && (p.cleanData(c.getElementsByTagName("*")), p.cleanData([c])), c.parentNode && c.parentNode.removeChild(c);
  return this
  }, empty: function () {
  var a, b = 0;
  for (; (a = this[b]) != null; b++) {
  a.nodeType === 1 && p.cleanData(a.getElementsByTagName("*"));
  while (a.firstChild)a.removeChild(a.firstChild)
  }
  return this
  }, clone: function (a, b) {
  return a = a == null ? !1 : a, b = b == null ? a : b, this.map(function () {
  return p.clone(this, a, b)
  })
  }, html: function (a) {
  return p.access(this, function (a) {
  var c = this[0] || {}, d = 0, e = this.length;
  if (a === b)return c.nodeType === 1 ? c.innerHTML.replace(bm, "") : b;
  if (typeof a == "string" && !bs.test(a) && (p.support.htmlSerialize || !bu.test(a)) && (p.support.leadingWhitespace || !bn.test(a)) && !bz[(bp.exec(a) || ["", ""])[1].toLowerCase()]) {
  a = a.replace(bo, "<$1></$2>");
  try {
  for (; d < e; d++)c = this[d] || {}, c.nodeType === 1 && (p.cleanData(c.getElementsByTagName("*")), c.innerHTML = a);
  c = 0
  } catch (f) {
  }
  }
  c && this.empty().append(a)
  }, null, a, arguments.length)
  }, replaceWith: function (a) {
  return bh(this[0]) ? this.length ? this.pushStack(p(p.isFunction(a) ? a() : a), "replaceWith", a) : this : p.isFunction(a) ? this.each(function (b) {
  var c = p(this), d = c.html();
  c.replaceWith(a.call(this, b, d))
  }) : (typeof a != "string" && (a = p(a).detach()), this.each(function () {
  var b = this.nextSibling, c = this.parentNode;
  p(this).remove(), b ? p(b).before(a) : p(c).append(a)
  }))
  }, detach: function (a) {
  return this.remove(a, !0)
  }, domManip: function (a, c, d) {
  a = [].concat.apply([], a);
  var e, f, g, h, i = 0, j = a[0], k = [], l = this.length;
  if (!p.support.checkClone && l > 1 && typeof j == "string" && bw.test(j))return this.each(function () {
  p(this).domManip(a, c, d)
  });
  if (p.isFunction(j))return this.each(function (e) {
  var f = p(this);
  a[0] = j.call(this, e, c ? f.html() : b), f.domManip(a, c, d)
  });
  if (this[0]) {
  e = p.buildFragment(a, this, k), g = e.fragment, f = g.firstChild, g.childNodes.length === 1 && (g = f);
  if (f) {
  c = c && p.nodeName(f, "tr");
  for (h = e.cacheable || l - 1; i < l; i++)d.call(c && p.nodeName(this[i], "table") ? bC(this[i], "tbody") : this[i], i === h ? g : p.clone(g, !0, !0))
  }
  g = f = null, k.length && p.each(k, function (a, b) {
  b.src ? p.ajax ? p.ajax({url: b.src, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0}) : p.error("no ajax") : p.globalEval((b.text || b.textContent || b.innerHTML || "").replace(by, "")), b.parentNode && b.parentNode.removeChild(b)
  })
  }
  return this
  }}), p.buildFragment = function (a, c, d) {
  var f, g, h, i = a[0];
  return c = c || e, c = (c[0] || c).ownerDocument || c[0] || c, typeof c.createDocumentFragment == "undefined" && (c = e), a.length === 1 && typeof i == "string" && i.length < 512 && c === e && i.charAt(0) === "<" && !bt.test(i) && (p.support.checkClone || !bw.test(i)) && (p.support.html5Clone || !bu.test(i)) && (g = !0, f = p.fragments[i], h = f !== b), f || (f = c.createDocumentFragment(), p.clean(a, c, f, d), g && (p.fragments[i] = h && f)), {fragment: f, cacheable: g}
  }, p.fragments = {}, p.each({appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith"}, function (a, b) {
  p.fn[a] = function (c) {
  var d, e = 0, f = [], g = p(c), h = g.length, i = this.length === 1 && this[0].parentNode;
  if ((i == null || i && i.nodeType === 11 && i.childNodes.length === 1) && h === 1)return g[b](this[0]), this;
  for (; e < h; e++)d = (e > 0 ? this.clone(!0) : this).get(), p(g[e])[b](d), f = f.concat(d);
  return this.pushStack(f, a, g.selector)
  }
  }), p.extend({clone: function (a, b, c) {
  var d, e, f, g;
  p.support.html5Clone || p.isXMLDoc(a) || !bu.test("<" + a.nodeName + ">") ? g = a.cloneNode(!0) : (bB.innerHTML = a.outerHTML, bB.removeChild(g = bB.firstChild));
  if ((!p.support.noCloneEvent || !p.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !p.isXMLDoc(a)) {
  bE(a, g), d = bF(a), e = bF(g);
  for (f = 0; d[f]; ++f)e[f] && bE(d[f], e[f])
  }
  if (b) {
  bD(a, g);
  if (c) {
  d = bF(a), e = bF(g);
  for (f = 0; d[f]; ++f)bD(d[f], e[f])
  }
  }
  return d = e = null, g
  }, clean: function (a, b, c, d) {
  var f, g, h, i, j, k, l, m, n, o, q, r, s = 0, t = [];
  if (!b || typeof b.createDocumentFragment == "undefined")b = e;
  for (g = b === e && bA; (h = a[s]) != null; s++) {
  typeof h == "number" && (h += "");
  if (!h)continue;
  if (typeof h == "string")if (!br.test(h))h = b.createTextNode(h); else {
  g = g || bk(b), l = l || g.appendChild(b.createElement("div")), h = h.replace(bo, "<$1></$2>"), i = (bp.exec(h) || ["", ""])[1].toLowerCase(), j = bz[i] || bz._default, k = j[0], l.innerHTML = j[1] + h + j[2];
  while (k--)l = l.lastChild;
  if (!p.support.tbody) {
  m = bq.test(h), n = i === "table" && !m ? l.firstChild && l.firstChild.childNodes : j[1] === "<table>" && !m ? l.childNodes : [];
  for (f = n.length - 1; f >= 0; --f)p.nodeName(n[f], "tbody") && !n[f].childNodes.length && n[f].parentNode.removeChild(n[f])
  }
  !p.support.leadingWhitespace && bn.test(h) && l.insertBefore(b.createTextNode(bn.exec(h)[0]), l.firstChild), h = l.childNodes, l = g.lastChild
  }
  h.nodeType ? t.push(h) : t = p.merge(t, h)
  }
  l && (g.removeChild(l), h = l = g = null);
  if (!p.support.appendChecked)for (s = 0; (h = t[s]) != null; s++)p.nodeName(h, "input") ? bG(h) : typeof h.getElementsByTagName != "undefined" && p.grep(h.getElementsByTagName("input"), bG);
  if (c) {
  q = function (a) {
  if (!a.type || bx.test(a.type))return d ? d.push(a.parentNode ? a.parentNode.removeChild(a) : a) : c.appendChild(a)
  };
  for (s = 0; (h = t[s]) != null; s++)if (!p.nodeName(h, "script") || !q(h))c.appendChild(h), typeof h.getElementsByTagName != "undefined" && (r = p.grep(p.merge([], h.getElementsByTagName("script")), q), t.splice.apply(t, [s + 1, 0].concat(r)), s += r.length)
  }
  return t
  }, cleanData: function (a, b) {
  var c, d, e, f, g = 0, h = p.expando, i = p.cache, j = p.support.deleteExpando, k = p.event.special;
  for (; (e = a[g]) != null; g++)if (b || p.acceptData(e)) {
  d = e[h], c = d && i[d];
  if (c) {
  if (c.events)for (f in c.events)k[f] ? p.event.remove(e, f) : p.removeEvent(e, f, c.handle);
  i[d] && (delete i[d], j ? delete e[h] : e.removeAttribute ? e.removeAttribute(h) : e[h] = null, p.deletedIds.push(d))
  }
  }
  }}), function () {
  var a, b;
  p.uaMatch = function (a) {
  a = a.toLowerCase();
  var b = /(chrome)[ \/]([\w.]+)/.exec(a) || /(webkit)[ \/]([\w.]+)/.exec(a) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a) || /(msie) ([\w.]+)/.exec(a) || a.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a) || [];
  return{browser: b[1] || "", version: b[2] || "0"}
  }, a = p.uaMatch(g.userAgent), b = {}, a.browser && (b[a.browser] = !0, b.version = a.version), b.webkit && (b.safari = !0), p.browser = b, p.sub = function () {
  function a(b, c) {
  return new a.fn.init(b, c)
  }
   
  p.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function c(c, d) {
  return d && d instanceof p && !(d instanceof a) && (d = a(d)), p.fn.init.call(this, c, d, b)
  }, a.fn.init.prototype = a.fn;
  var b = a(e);
  return a
  }
  }();
  var bH, bI, bJ, bK = /alpha\([^)]*\)/i, bL = /opacity=([^)]*)/, bM = /^(top|right|bottom|left)$/, bN = /^margin/, bO = new RegExp("^(" + q + ")(.*)$", "i"), bP = new RegExp("^(" + q + ")(?!px)[a-z%]+$", "i"), bQ = new RegExp("^([-+])=(" + q + ")", "i"), bR = {}, bS = {position: "absolute", visibility: "hidden", display: "block"}, bT = {letterSpacing: 0, fontWeight: 400, lineHeight: 1}, bU = ["Top", "Right", "Bottom", "Left"], bV = ["Webkit", "O", "Moz", "ms"], bW = p.fn.toggle;
  p.fn.extend({css: function (a, c) {
  return p.access(this, function (a, c, d) {
  return d !== b ? p.style(a, c, d) : p.css(a, c)
  }, a, c, arguments.length > 1)
  }, show: function () {
  return bZ(this, !0)
  }, hide: function () {
  return bZ(this)
  }, toggle: function (a, b) {
  var c = typeof a == "boolean";
  return p.isFunction(a) && p.isFunction(b) ? bW.apply(this, arguments) : this.each(function () {
  (c ? a : bY(this)) ? p(this).show() : p(this).hide()
  })
  }}), p.extend({cssHooks: {opacity: {get: function (a, b) {
  if (b) {
  var c = bH(a, "opacity");
  return c === "" ? "1" : c
  }
  }}}, cssNumber: {fillOpacity: !0, fontWeight: !0, lineHeight: !0, opacity: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0}, cssProps: {"float": p.support.cssFloat ? "cssFloat" : "styleFloat"}, style: function (a, c, d, e) {
  if (!a || a.nodeType === 3 || a.nodeType === 8 || !a.style)return;
  var f, g, h, i = p.camelCase(c), j = a.style;
  c = p.cssProps[i] || (p.cssProps[i] = bX(j, i)), h = p.cssHooks[c] || p.cssHooks[i];
  if (d === b)return h && "get"in h && (f = h.get(a, !1, e)) !== b ? f : j[c];
  g = typeof d, g === "string" && (f = bQ.exec(d)) && (d = (f[1] + 1) * f[2] + parseFloat(p.css(a, c)), g = "number");
  if (d == null || g === "number" && isNaN(d))return;
  g === "number" && !p.cssNumber[i] && (d += "px");
  if (!h || !("set"in h) || (d = h.set(a, d, e)) !== b)try {
  j[c] = d
  } catch (k) {
  }
  }, css: function (a, c, d, e) {
  var f, g, h, i = p.camelCase(c);
  return c = p.cssProps[i] || (p.cssProps[i] = bX(a.style, i)), h = p.cssHooks[c] || p.cssHooks[i], h && "get"in h && (f = h.get(a, !0, e)), f === b && (f = bH(a, c)), f === "normal" && c in bT && (f = bT[c]), d || e !== b ? (g = parseFloat(f), d || p.isNumeric(g) ? g || 0 : f) : f
  }, swap: function (a, b, c) {
  var d, e, f = {};
  for (e in b)f[e] = a.style[e], a.style[e] = b[e];
  d = c.call(a);
  for (e in b)a.style[e] = f[e];
  return d
  }}), a.getComputedStyle ? bH = function (a, b) {
  var c, d, e, f, g = getComputedStyle(a, null), h = a.style;
  return g && (c = g[b], c === "" && !p.contains(a.ownerDocument.documentElement, a) && (c = p.style(a, b)), bP.test(c) && bN.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = c, c = g.width, h.width = d, h.minWidth = e, h.maxWidth = f)), c
  } : e.documentElement.currentStyle && (bH = function (a, b) {
  var c, d, e = a.currentStyle && a.currentStyle[b], f = a.style;
  return e == null && f && f[b] && (e = f[b]), bP.test(e) && !bM.test(b) && (c = f.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), f.left = b === "fontSize" ? "1em" : e, e = f.pixelLeft + "px", f.left = c, d && (a.runtimeStyle.left = d)), e === "" ? "auto" : e
  }), p.each(["height", "width"], function (a, b) {
  p.cssHooks[b] = {get: function (a, c, d) {
  if (c)return a.offsetWidth !== 0 || bH(a, "display") !== "none" ? ca(a, b, d) : p.swap(a, bS, function () {
  return ca(a, b, d)
  })
  }, set: function (a, c, d) {
  return b$(a, c, d ? b_(a, b, d, p.support.boxSizing && p.css(a, "boxSizing") === "border-box") : 0)
  }}
  }), p.support.opacity || (p.cssHooks.opacity = {get: function (a, b) {
  return bL.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
  }, set: function (a, b) {
  var c = a.style, d = a.currentStyle, e = p.isNumeric(b) ? "alpha(opacity=" + b * 100 + ")" : "", f = d && d.filter || c.filter || "";
  c.zoom = 1;
  if (b >= 1 && p.trim(f.replace(bK, "")) === "" && c.removeAttribute) {
  c.removeAttribute("filter");
  if (d && !d.filter)return
  }
  c.filter = bK.test(f) ? f.replace(bK, e) : f + " " + e
  }}), p(function () {
  p.support.reliableMarginRight || (p.cssHooks.marginRight = {get: function (a, b) {
  return p.swap(a, {display: "inline-block"}, function () {
  if (b)return bH(a, "marginRight")
  })
  }}), !p.support.pixelPosition && p.fn.position && p.each(["top", "left"], function (a, b) {
  p.cssHooks[b] = {get: function (a, c) {
  if (c) {
  var d = bH(a, b);
  return bP.test(d) ? p(a).position()[b] + "px" : d
  }
  }}
  })
  }), p.expr && p.expr.filters && (p.expr.filters.hidden = function (a) {
  return a.offsetWidth === 0 && a.offsetHeight === 0 || !p.support.reliableHiddenOffsets && (a.style && a.style.display || bH(a, "display")) === "none"
  }, p.expr.filters.visible = function (a) {
  return!p.expr.filters.hidden(a)
  }), p.each({margin: "", padding: "", border: "Width"}, function (a, b) {
  p.cssHooks[a + b] = {expand: function (c) {
  var d, e = typeof c == "string" ? c.split(" ") : [c], f = {};
  for (d = 0; d < 4; d++)f[a + bU[d] + b] = e[d] || e[d - 2] || e[0];
  return f
  }}, bN.test(a) || (p.cssHooks[a + b].set = b$)
  });
  var cc = /%20/g, cd = /\[\]$/, ce = /\r?\n/g, cf = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, cg = /^(?:select|textarea)/i;
  p.fn.extend({serialize: function () {
  return p.param(this.serializeArray())
  }, serializeArray: function () {
  return this.map(function () {
  return this.elements ? p.makeArray(this.elements) : this
  }).filter(function () {
  return this.name && !this.disabled && (this.checked || cg.test(this.nodeName) || cf.test(this.type))
  }).map(function (a, b) {
  var c = p(this).val();
  return c == null ? null : p.isArray(c) ? p.map(c, function (a, c) {
  return{name: b.name, value: a.replace(ce, "\r\n")}
  }) : {name: b.name, value: c.replace(ce, "\r\n")}
  }).get()
  }}), p.param = function (a, c) {
  var d, e = [], f = function (a, b) {
  b = p.isFunction(b) ? b() : b == null ? "" : b, e[e.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
  };
  c === b && (c = p.ajaxSettings && p.ajaxSettings.traditional);
  if (p.isArray(a) || a.jquery && !p.isPlainObject(a))p.each(a, function () {
  f(this.name, this.value)
  }); else for (d in a)ch(d, a[d], c, f);
  return e.join("&").replace(cc, "+")
  };
  var ci, cj, ck = /#.*$/, cl = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, cm = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, cn = /^(?:GET|HEAD)$/, co = /^\/\//, cp = /\?/, cq = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, cr = /([?&])_=[^&]*/, cs = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, ct = p.fn.load, cu = {}, cv = {}, cw = ["*/"] + ["*"];
  try {
  ci = f.href
  } catch (cx) {
  ci = e.createElement("a"), ci.href = "", ci = ci.href
  }
  cj = cs.exec(ci.toLowerCase()) || [], p.fn.load = function (a, c, d) {
  if (typeof a != "string" && ct)return ct.apply(this, arguments);
  if (!this.length)return this;
  var e, f, g, h = this, i = a.indexOf(" ");
  return i >= 0 && (e = a.slice(i, a.length), a = a.slice(0, i)), p.isFunction(c) ? (d = c, c = b) : typeof c == "object" && (f = "POST"), p.ajax({url: a, type: f, dataType: "html", data: c, complete: function (a, b) {
  d && h.each(d, g || [a.responseText, b, a])
  }}).done(function (a) {
  g = arguments, h.html(e ? p("<div>").append(a.replace(cq, "")).find(e) : a)
  }), this
  }, p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function (a, b) {
  p.fn[b] = function (a) {
  return this.on(b, a)
  }
  }), p.each(["get", "post"], function (a, c) {
  p[c] = function (a, d, e, f) {
  return p.isFunction(d) && (f = f || e, e = d, d = b), p.ajax({type: c, url: a, data: d, success: e, dataType: f})
  }
  }), p.extend({getScript: function (a, c) {
  return p.get(a, b, c, "script")
  }, getJSON: function (a, b, c) {
  return p.get(a, b, c, "json")
  }, ajaxSetup: function (a, b) {
  return b ? cA(a, p.ajaxSettings) : (b = a, a = p.ajaxSettings), cA(a, b), a
  }, ajaxSettings: {url: ci, isLocal: cm.test(cj[1]), global: !0, type: "GET", contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: !0, async: !0, accepts: {xml: "application/xml, text/xml", html: "text/html", text: "text/plain", json: "application/json, text/javascript", "*": cw}, contents: {xml: /xml/, html: /html/, json: /json/}, responseFields: {xml: "responseXML", text: "responseText"}, converters: {"* text": a.String, "text html": !0, "text json": p.parseJSON, "text xml": p.parseXML}, flatOptions: {context: !0, url: !0}}, ajaxPrefilter: cy(cu), ajaxTransport: cy(cv), ajax: function (a, c) {
  function y(a, c, f, i) {
  var k, s, t, u, w, y = c;
  if (v === 2)return;
  v = 2, h && clearTimeout(h), g = b, e = i || "", x.readyState = a > 0 ? 4 : 0, f && (u = cB(l, x, f));
  if (a >= 200 && a < 300 || a === 304)l.ifModified && (w = x.getResponseHeader("Last-Modified"), w && (p.lastModified[d] = w), w = x.getResponseHeader("Etag"), w && (p.etag[d] = w)), a === 304 ? (y = "notmodified", k = !0) : (k = cC(l, u), y = k.state, s = k.data, t = k.error, k = !t); else {
  t = y;
  if (!y || a)y = "error", a < 0 && (a = 0)
  }
  x.status = a, x.statusText = "" + (c || y), k ? o.resolveWith(m, [s, y, x]) : o.rejectWith(m, [x, y, t]), x.statusCode(r), r = b, j && n.trigger("ajax" + (k ? "Success" : "Error"), [x, l, k ? s : t]), q.fireWith(m, [x, y]), j && (n.trigger("ajaxComplete", [x, l]), --p.active || p.event.trigger("ajaxStop"))
  }
   
  typeof a == "object" && (c = a, a = b), c = c || {};
  var d, e, f, g, h, i, j, k, l = p.ajaxSetup({}, c), m = l.context || l, n = m !== l && (m.nodeType || m instanceof p) ? p(m) : p.event, o = p.Deferred(), q = p.Callbacks("once memory"), r = l.statusCode || {}, t = {}, u = {}, v = 0, w = "canceled", x = {readyState: 0, setRequestHeader: function (a, b) {
  if (!v) {
  var c = a.toLowerCase();
  a = u[c] = u[c] || a, t[a] = b
  }
  return this
  }, getAllResponseHeaders: function () {
  return v === 2 ? e : null
  }, getResponseHeader: function (a) {
  var c;
  if (v === 2) {
  if (!f) {
  f = {};
  while (c = cl.exec(e))f[c[1].toLowerCase()] = c[2]
  }
  c = f[a.toLowerCase()]
  }
  return c === b ? null : c
  }, overrideMimeType: function (a) {
  return v || (l.mimeType = a), this
  }, abort: function (a) {
  return a = a || w, g && g.abort(a), y(0, a), this
  }};
  o.promise(x), x.success = x.done, x.error = x.fail, x.complete = q.add, x.statusCode = function (a) {
  if (a) {
  var b;
  if (v < 2)for (b in a)r[b] = [r[b], a[b]]; else b = a[x.status], x.always(b)
  }
  return this
  }, l.url = ((a || l.url) + "").replace(ck, "").replace(co, cj[1] + "//"), l.dataTypes = p.trim(l.dataType || "*").toLowerCase().split(s), l.crossDomain == null && (i = cs.exec(l.url.toLowerCase()), l.crossDomain = !(!i || i[1] == cj[1] && i[2] == cj[2] && (i[3] || (i[1] === "http:" ? 80 : 443)) == (cj[3] || (cj[1] === "http:" ? 80 : 443)))), l.data && l.processData && typeof l.data != "string" && (l.data = p.param(l.data, l.traditional)), cz(cu, l, c, x);
  if (v === 2)return x;
  j = l.global, l.type = l.type.toUpperCase(), l.hasContent = !cn.test(l.type), j && p.active++ === 0 && p.event.trigger("ajaxStart");
  if (!l.hasContent) {
  l.data && (l.url += (cp.test(l.url) ? "&" : "?") + l.data, delete l.data), d = l.url;
  if (l.cache === !1) {
  var z = p.now(), A = l.url.replace(cr, "$1_=" + z);
  l.url = A + (A === l.url ? (cp.test(l.url) ? "&" : "?") + "_=" + z : "")
  }
  }
  (l.data && l.hasContent && l.contentType !== !1 || c.contentType) && x.setRequestHeader("Content-Type", l.contentType), l.ifModified && (d = d || l.url, p.lastModified[d] && x.setRequestHeader("If-Modified-Since", p.lastModified[d]), p.etag[d] && x.setRequestHeader("If-None-Match", p.etag[d])), x.setRequestHeader("Accept", l.dataTypes[0] && l.accepts[l.dataTypes[0]] ? l.accepts[l.dataTypes[0]] + (l.dataTypes[0] !== "*" ? ", " + cw + "; q=0.01" : "") : l.accepts["*"]);
  for (k in l.headers)x.setRequestHeader(k, l.headers[k]);
  if (!l.beforeSend || l.beforeSend.call(m, x, l) !== !1 && v !== 2) {
  w = "abort";
  for (k in{success: 1, error: 1, complete: 1})x[k](l[k]);
  g = cz(cv, l, c, x);
  if (!g)y(-1, "No Transport"); else {
  x.readyState = 1, j && n.trigger("ajaxSend", [x, l]), l.async && l.timeout > 0 && (h = setTimeout(function () {
  x.abort("timeout")
  }, l.timeout));
  try {
  v = 1, g.send(t, y)
  } catch (B) {
  if (v < 2)y(-1, B); else throw B
  }
  }
  return x
  }
  return x.abort()
  }, active: 0, lastModified: {}, etag: {}});
  var cD = [], cE = /\?/, cF = /(=)\?(?=&|$)|\?\?/, cG = p.now();
  p.ajaxSetup({jsonp: "callback", jsonpCallback: function () {
  var a = cD.pop() || p.expando + "_" + cG++;
  return this[a] = !0, a
  }}), p.ajaxPrefilter("json jsonp", function (c, d, e) {
  var f, g, h, i = c.data, j = c.url, k = c.jsonp !== !1, l = k && cF.test(j), m = k && !l && typeof i == "string" && !(c.contentType || "").indexOf("application/x-www-form-urlencoded") && cF.test(i);
  if (c.dataTypes[0] === "jsonp" || l || m)return f = c.jsonpCallback = p.isFunction(c.jsonpCallback) ? c.jsonpCallback() : c.jsonpCallback, g = a[f], l ? c.url = j.replace(cF, "$1" + f) : m ? c.data = i.replace(cF, "$1" + f) : k && (c.url += (cE.test(j) ? "&" : "?") + c.jsonp + "=" + f), c.converters["script json"] = function () {
  return h || p.error(f + " was not called"), h[0]
  }, c.dataTypes[0] = "json", a[f] = function () {
  h = arguments
  }, e.always(function () {
  a[f] = g, c[f] && (c.jsonpCallback = d.jsonpCallback, cD.push(f)), h && p.isFunction(g) && g(h[0]), h = g = b
  }), "script"
  }), p.ajaxSetup({accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"}, contents: {script: /javascript|ecmascript/}, converters: {"text script": function (a) {
  return p.globalEval(a), a
  }}}), p.ajaxPrefilter("script", function (a) {
  a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
  }), p.ajaxTransport("script", function (a) {
  if (a.crossDomain) {
  var c, d = e.head || e.getElementsByTagName("head")[0] || e.documentElement;
  return{send: function (f, g) {
  c = e.createElement("script"), c.async = "async", a.scriptCharset && (c.charset = a.scriptCharset), c.src = a.url, c.onload = c.onreadystatechange = function (a, e) {
  if (e || !c.readyState || /loaded|complete/.test(c.readyState))c.onload = c.onreadystatechange = null, d && c.parentNode && d.removeChild(c), c = b, e || g(200, "success")
  }, d.insertBefore(c, d.firstChild)
  }, abort: function () {
  c && c.onload(0, 1)
  }}
  }
  });
  var cH, cI = a.ActiveXObject ? function () {
  for (var a in cH)cH[a](0, 1)
  } : !1, cJ = 0;
  p.ajaxSettings.xhr = a.ActiveXObject ? function () {
  return!this.isLocal && cK() || cL()
  } : cK, function (a) {
  p.extend(p.support, {ajax: !!a, cors: !!a && "withCredentials"in a})
  }(p.ajaxSettings.xhr()), p.support.ajax && p.ajaxTransport(function (c) {
  if (!c.crossDomain || p.support.cors) {
  var d;
  return{send: function (e, f) {
  var g, h, i = c.xhr();
  c.username ? i.open(c.type, c.url, c.async, c.username, c.password) : i.open(c.type, c.url, c.async);
  if (c.xhrFields)for (h in c.xhrFields)i[h] = c.xhrFields[h];
  c.mimeType && i.overrideMimeType && i.overrideMimeType(c.mimeType), !c.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest");
  try {
  for (h in e)i.setRequestHeader(h, e[h])
  } catch (j) {
  }
  i.send(c.hasContent && c.data || null), d = function (a, e) {
  var h, j, k, l, m;
  try {
  if (d && (e || i.readyState === 4)) {
  d = b, g && (i.onreadystatechange = p.noop, cI && delete cH[g]);
  if (e)i.readyState !== 4 && i.abort(); else {
  h = i.status, k = i.getAllResponseHeaders(), l = {}, m = i.responseXML, m && m.documentElement && (l.xml = m);
  try {
  l.text = i.responseText
  } catch (a) {
  }
  try {
  j = i.statusText
  } catch (n) {
  j = ""
  }
  !h && c.isLocal && !c.crossDomain ? h = l.text ? 200 : 404 : h === 1223 && (h = 204)
  }
  }
  } catch (o) {
  e || f(-1, o)
  }
  l && f(h, j, l, k)
  }, c.async ? i.readyState === 4 ? setTimeout(d, 0) : (g = ++cJ, cI && (cH || (cH = {}, p(a).unload(cI)), cH[g] = d), i.onreadystatechange = d) : d()
  }, abort: function () {
  d && d(0, 1)
  }}
  }
  });
  var cM, cN, cO = /^(?:toggle|show|hide)$/, cP = new RegExp("^(?:([-+])=|)(" + q + ")([a-z%]*)$", "i"), cQ = /queueHooks$/, cR = [cX], cS = {"*": [function (a, b) {
  var c, d, e, f = this.createTween(a, b), g = cP.exec(b), h = f.cur(), i = +h || 0, j = 1;
  if (g) {
  c = +g[2], d = g[3] || (p.cssNumber[a] ? "" : "px");
  if (d !== "px" && i) {
  i = p.css(f.elem, a, !0) || c || 1;
  do e = j = j || ".5", i = i / j, p.style(f.elem, a, i + d), j = f.cur() / h; while (j !== 1 && j !== e)
  }
  f.unit = d, f.start = i, f.end = g[1] ? i + (g[1] + 1) * c : c
  }
  return f
  }]};
  p.Animation = p.extend(cV, {tweener: function (a, b) {
  p.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
  var c, d = 0, e = a.length;
  for (; d < e; d++)c = a[d], cS[c] = cS[c] || [], cS[c].unshift(b)
  }, prefilter: function (a, b) {
  b ? cR.unshift(a) : cR.push(a)
  }}), p.Tween = cY, cY.prototype = {constructor: cY, init: function (a, b, c, d, e, f) {
  this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (p.cssNumber[c] ? "" : "px")
  }, cur: function () {
  var a = cY.propHooks[this.prop];
  return a && a.get ? a.get(this) : cY.propHooks._default.get(this)
  }, run: function (a) {
  var b, c = cY.propHooks[this.prop];
  return this.pos = b = p.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration), this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : cY.propHooks._default.set(this), this
  }}, cY.prototype.init.prototype = cY.prototype, cY.propHooks = {_default: {get: function (a) {
  var b;
  return a.elem[a.prop] == null || !!a.elem.style && a.elem.style[a.prop] != null ? (b = p.css(a.elem, a.prop, !1, ""), !b || b === "auto" ? 0 : b) : a.elem[a.prop]
  }, set: function (a) {
  p.fx.step[a.prop] ? p.fx.step[a.prop](a) : a.elem.style && (a.elem.style[p.cssProps[a.prop]] != null || p.cssHooks[a.prop]) ? p.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
  }}}, cY.propHooks.scrollTop = cY.propHooks.scrollLeft = {set: function (a) {
  a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
  }}, p.each(["toggle", "show", "hide"], function (a, b) {
  var c = p.fn[b];
  p.fn[b] = function (d, e, f) {
  return d == null || typeof d == "boolean" || !a && p.isFunction(d) && p.isFunction(e) ? c.apply(this, arguments) : this.animate(cZ(b, !0), d, e, f)
  }
  }), p.fn.extend({fadeTo: function (a, b, c, d) {
  return this.filter(bY).css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
  }, animate: function (a, b, c, d) {
  var e = p.isEmptyObject(a), f = p.speed(b, c, d), g = function () {
  var b = cV(this, p.extend({}, a), f);
  e && b.stop(!0)
  };
  return e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
  }, stop: function (a, c, d) {
  var e = function (a) {
  var b = a.stop;
  delete a.stop, b(d)
  };
  return typeof a != "string" && (d = c, c = a, a = b), c && a !== !1 && this.queue(a || "fx", []), this.each(function () {
  var b = !0, c = a != null && a + "queueHooks", f = p.timers, g = p._data(this);
  if (c)g[c] && g[c].stop && e(g[c]); else for (c in g)g[c] && g[c].stop && cQ.test(c) && e(g[c]);
  for (c = f.length; c--;)f[c].elem === this && (a == null || f[c].queue === a) && (f[c].anim.stop(d), b = !1, f.splice(c, 1));
  (b || !d) && p.dequeue(this, a)
  })
  }}), p.each({slideDown: cZ("show"), slideUp: cZ("hide"), slideToggle: cZ("toggle"), fadeIn: {opacity: "show"}, fadeOut: {opacity: "hide"}, fadeToggle: {opacity: "toggle"}}, function (a, b) {
  p.fn[a] = function (a, c, d) {
  return this.animate(b, a, c, d)
  }
  }), p.speed = function (a, b, c) {
  var d = a && typeof a == "object" ? p.extend({}, a) : {complete: c || !c && b || p.isFunction(a) && a, duration: a, easing: c && b || b && !p.isFunction(b) && b};
  d.duration = p.fx.off ? 0 : typeof d.duration == "number" ? d.duration : d.duration in p.fx.speeds ? p.fx.speeds[d.duration] : p.fx.speeds._default;
  if (d.queue == null || d.queue === !0)d.queue = "fx";
  return d.old = d.complete, d.complete = function () {
  p.isFunction(d.old) && d.old.call(this), d.queue && p.dequeue(this, d.queue)
  }, d
  }, p.easing = {linear: function (a) {
  return a
  }, swing: function (a) {
  return.5 - Math.cos(a * Math.PI) / 2
  }}, p.timers = [], p.fx = cY.prototype.init, p.fx.tick = function () {
  var a, b = p.timers, c = 0;
  for (; c < b.length; c++)a = b[c], !a() && b[c] === a && b.splice(c--, 1);
  b.length || p.fx.stop()
  }, p.fx.timer = function (a) {
  a() && p.timers.push(a) && !cN && (cN = setInterval(p.fx.tick, p.fx.interval))
  }, p.fx.interval = 13, p.fx.stop = function () {
  clearInterval(cN), cN = null
  }, p.fx.speeds = {slow: 600, fast: 200, _default: 400}, p.fx.step = {}, p.expr && p.expr.filters && (p.expr.filters.animated = function (a) {
  return p.grep(p.timers,function (b) {
  return a === b.elem
  }).length
  });
  var c$ = /^(?:body|html)$/i;
  p.fn.offset = function (a) {
  if (arguments.length)return a === b ? this : this.each(function (b) {
  p.offset.setOffset(this, a, b)
  });
  var c, d, e, f, g, h, i, j, k, l, m = this[0], n = m && m.ownerDocument;
  if (!n)return;
  return(e = n.body) === m ? p.offset.bodyOffset(m) : (d = n.documentElement, p.contains(d, m) ? (c = m.getBoundingClientRect(), f = c_(n), g = d.clientTop || e.clientTop || 0, h = d.clientLeft || e.clientLeft || 0, i = f.pageYOffset || d.scrollTop, j = f.pageXOffset || d.scrollLeft, k = c.top + i - g, l = c.left + j - h, {top: k, left: l}) : {top: 0, left: 0})
  }, p.offset = {bodyOffset: function (a) {
  var b = a.offsetTop, c = a.offsetLeft;
  return p.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat(p.css(a, "marginTop")) || 0, c += parseFloat(p.css(a, "marginLeft")) || 0), {top: b, left: c}
  }, setOffset: function (a, b, c) {
  var d = p.css(a, "position");
  d === "static" && (a.style.position = "relative");
  var e = p(a), f = e.offset(), g = p.css(a, "top"), h = p.css(a, "left"), i = (d === "absolute" || d === "fixed") && p.inArray("auto", [g, h]) > -1, j = {}, k = {}, l, m;
  i ? (k = e.position(), l = k.top, m = k.left) : (l = parseFloat(g) || 0, m = parseFloat(h) || 0), p.isFunction(b) && (b = b.call(a, c, f)), b.top != null && (j.top = b.top - f.top + l), b.left != null && (j.left = b.left - f.left + m), "using"in b ? b.using.call(a, j) : e.css(j)
  }}, p.fn.extend({position: function () {
  if (!this[0])return;
  var a = this[0], b = this.offsetParent(), c = this.offset(), d = c$.test(b[0].nodeName) ? {top: 0, left: 0} : b.offset();
  return c.top -= parseFloat(p.css(a, "marginTop")) || 0, c.left -= parseFloat(p.css(a, "marginLeft")) || 0, d.top += parseFloat(p.css(b[0], "borderTopWidth")) || 0, d.left += parseFloat(p.css(b[0], "borderLeftWidth")) || 0, {top: c.top - d.top, left: c.left - d.left}
  }, offsetParent: function () {
  return this.map(function () {
  var a = this.offsetParent || e.body;
  while (a && !c$.test(a.nodeName) && p.css(a, "position") === "static")a = a.offsetParent;
  return a || e.body
  })
  }}), p.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (a, c) {
  var d = /Y/.test(c);
  p.fn[a] = function (e) {
  return p.access(this, function (a, e, f) {
  var g = c_(a);
  if (f === b)return g ? c in g ? g[c] : g.document.documentElement[e] : a[e];
  g ? g.scrollTo(d ? p(g).scrollLeft() : f, d ? f : p(g).scrollTop()) : a[e] = f
  }, a, e, arguments.length, null)
  }
  }), p.each({Height: "height", Width: "width"}, function (a, c) {
  p.each({padding: "inner" + a, content: c, "": "outer" + a}, function (d, e) {
  p.fn[e] = function (e, f) {
  var g = arguments.length && (d || typeof e != "boolean"), h = d || (e === !0 || f === !0 ? "margin" : "border");
  return p.access(this, function (c, d, e) {
  var f;
  return p.isWindow(c) ? c.document.documentElement["client" + a] : c.nodeType === 9 ? (f = c.documentElement, Math.max(c.body["scroll" + a], f["scroll" + a], c.body["offset" + a], f["offset" + a], f["client" + a])) : e === b ? p.css(c, d, e, h) : p.style(c, d, e, h)
  }, c, g ? e : b, g)
  }
  })
  }), a.jQuery = a.$ = p, typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function () {
  return p
  })
  })(window);
   
/* Modernizr 2.6.1 (Custom Build) | MIT & BSD /* Modernizr 2.6.1 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
*/ */
;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k=b.createElement("div"),l=b.body,m=l?l:b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),k.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),k.id=h,(l?k:m).innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(['#modernizr:after{content:"',l,'";visibility:hidden}'].join(""),function(b){a=b.offsetHeight>=1}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,i){var j=b(a),l=j.autoCallback;j.url.split(".").pop().split("?").shift(),j.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]||h),j.instead?j.instead(a,e,f,g,i):(y[j.url]?j.noexec=!0:y[j.url]=1,f.load(j.url,j.forceCSS||!j.forceJS&&"css"==j.url.split(".").pop().split("?").shift()?"c":c,j.noexec,j.attrs,j.timeout),(d(e)||d(l))&&f.load(function(){k(),e&&e(j.origUrl,i,g),l&&l(j.origUrl,i,g),y[j.url]=2})))}function i(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var j,l,m=this.yepnope.loader;if(e(a))g(a,0,m,0);else if(w(a))for(j=0;j<a.length;j++)l=a[j],e(l)?g(l,0,m,0):w(l)?B(l):Object(l)===l&&i(l,m);else Object(a)===a&&i(a,m)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; ;
  window.Modernizr = function (a, b, c) {
  function D(a) {
  j.cssText = a
  }
   
  function E(a, b) {
  return D(n.join(a + ";") + (b || ""))
  }
   
  function F(a, b) {
  return typeof a === b
  }
   
  function G(a, b) {
  return!!~("" + a).indexOf(b)
  }
   
  function H(a, b) {
  for (var d in a) {
  var e = a[d];
  if (!G(e, "-") && j[e] !== c)return b == "pfx" ? e : !0
  }
  return!1
  }
   
  function I(a, b, d) {
  for (var e in a) {
  var f = b[a[e]];
  if (f !== c)return d === !1 ? a[e] : F(f, "function") ? f.bind(d || b) : f
  }
  return!1
  }
   
  function J(a, b, c) {
  var d = a.charAt(0).toUpperCase() + a.slice(1), e = (a + " " + p.join(d + " ") + d).split(" ");
  return F(b, "string") || F(b, "undefined") ? H(e, b) : (e = (a + " " + q.join(d + " ") + d).split(" "), I(e, b, c))
  }
   
  function K() {
  e.input = function (c) {
  for (var d = 0, e = c.length; d < e; d++)u[c[d]] = c[d]in k;
  return u.list && (u.list = !!b.createElement("datalist") && !!a.HTMLDataListElement), u
  }("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")), e.inputtypes = function (a) {
  for (var d = 0, e, f, h, i = a.length; d < i; d++)k.setAttribute("type", f = a[d]), e = k.type !== "text", e && (k.value = l, k.style.cssText = "position:absolute;visibility:hidden;", /^range$/.test(f) && k.style.WebkitAppearance !== c ? (g.appendChild(k), h = b.defaultView, e = h.getComputedStyle && h.getComputedStyle(k, null).WebkitAppearance !== "textfield" && k.offsetHeight !== 0, g.removeChild(k)) : /^(search|tel)$/.test(f) || (/^(url|email)$/.test(f) ? e = k.checkValidity && k.checkValidity() === !1 : e = k.value != l)), t[a[d]] = !!e;
  return t
  }("search tel url email datetime date month week time datetime-local number range color".split(" "))
  }
   
  var d = "2.6.1", e = {}, f = !0, g = b.documentElement, h = "modernizr", i = b.createElement(h), j = i.style, k = b.createElement("input"), l = ":)", m = {}.toString, n = " -webkit- -moz- -o- -ms- ".split(" "), o = "Webkit Moz O ms", p = o.split(" "), q = o.toLowerCase().split(" "), r = {svg: "http://www.w3.org/2000/svg"}, s = {}, t = {}, u = {}, v = [], w = v.slice, x, y = function (a, c, d, e) {
  var f, i, j, k = b.createElement("div"), l = b.body, m = l ? l : b.createElement("body");
  if (parseInt(d, 10))while (d--)j = b.createElement("div"), j.id = e ? e[d] : h + (d + 1), k.appendChild(j);
  return f = ["&#173;", '<style id="s', h, '">', a, "</style>"].join(""), k.id = h, (l ? k : m).innerHTML += f, m.appendChild(k), l || (m.style.background = "", g.appendChild(m)), i = c(k, a), l ? k.parentNode.removeChild(k) : m.parentNode.removeChild(m), !!i
  }, z = function (b) {
  var c = a.matchMedia || a.msMatchMedia;
  if (c)return c(b).matches;
  var d;
  return y("@media " + b + " { #" + h + " { position: absolute; } }", function (b) {
  d = (a.getComputedStyle ? getComputedStyle(b, null) : b.currentStyle)["position"] == "absolute"
  }), d
  }, A = function () {
  function d(d, e) {
  e = e || b.createElement(a[d] || "div"), d = "on" + d;
  var f = d in e;
  return f || (e.setAttribute || (e = b.createElement("div")), e.setAttribute && e.removeAttribute && (e.setAttribute(d, ""), f = F(e[d], "function"), F(e[d], "undefined") || (e[d] = c), e.removeAttribute(d))), e = null, f
  }
   
  var a = {select: "input", change: "input", submit: "form", reset: "form", error: "img", load: "img", abort: "img"};
  return d
  }(), B = {}.hasOwnProperty, C;
  !F(B, "undefined") && !F(B.call, "undefined") ? C = function (a, b) {
  return B.call(a, b)
  } : C = function (a, b) {
  return b in a && F(a.constructor.prototype[b], "undefined")
  }, Function.prototype.bind || (Function.prototype.bind = function (b) {
  var c = this;
  if (typeof c != "function")throw new TypeError;
  var d = w.call(arguments, 1), e = function () {
  if (this instanceof e) {
  var a = function () {
  };
  a.prototype = c.prototype;
  var f = new a, g = c.apply(f, d.concat(w.call(arguments)));
  return Object(g) === g ? g : f
  }
  return c.apply(b, d.concat(w.call(arguments)))
  };
  return e
  }), s.flexbox = function () {
  return J("flexWrap")
  }, s.canvas = function () {
  var a = b.createElement("canvas");
  return!!a.getContext && !!a.getContext("2d")
  }, s.canvastext = function () {
  return!!e.canvas && !!F(b.createElement("canvas").getContext("2d").fillText, "function")
  }, s.webgl = function () {
  return!!a.WebGLRenderingContext
  }, s.touch = function () {
  var c;
  return"ontouchstart"in a || a.DocumentTouch && b instanceof DocumentTouch ? c = !0 : y(["@media (", n.join("touch-enabled),("), h, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function (a) {
  c = a.offsetTop === 9
  }), c
  }, s.geolocation = function () {
  return"geolocation"in navigator
  }, s.postmessage = function () {
  return!!a.postMessage
  }, s.websqldatabase = function () {
  return!!a.openDatabase
  }, s.indexedDB = function () {
  return!!J("indexedDB", a)
  }, s.hashchange = function () {
  return A("hashchange", a) && (b.documentMode === c || b.documentMode > 7)
  }, s.history = function () {
  return!!a.history && !!history.pushState
  }, s.draganddrop = function () {
  var a = b.createElement("div");
  return"draggable"in a || "ondragstart"in a && "ondrop"in a
  }, s.websockets = function () {
  return"WebSocket"in a || "MozWebSocket"in a
  }, s.rgba = function () {
  return D("background-color:rgba(150,255,150,.5)"), G(j.backgroundColor, "rgba")
  }, s.hsla = function () {
  return D("background-color:hsla(120,40%,100%,.5)"), G(j.backgroundColor, "rgba") || G(j.backgroundColor, "hsla")
  }, s.multiplebgs = function () {
  return D("background:url(https://),url(https://),red url(https://)"), /(url\s*\(.*?){3}/.test(j.background)
  }, s.backgroundsize = function () {
  return J("backgroundSize")
  }, s.borderimage = function () {
  return J("borderImage")
  }, s.borderradius = function () {
  return J("borderRadius")
  }, s.boxshadow = function () {
  return J("boxShadow")
  }, s.textshadow = function () {
  return b.createElement("div").style.textShadow === ""
  }, s.opacity = function () {
  return E("opacity:.55"), /^0.55$/.test(j.opacity)
  }, s.cssanimations = function () {
  return J("animationName")
  }, s.csscolumns = function () {
  return J("columnCount")
  }, s.cssgradients = function () {
  var a = "background-image:", b = "gradient(linear,left top,right bottom,from(#9f9),to(white));", c = "linear-gradient(left top,#9f9, white);";
  return D((a + "-webkit- ".split(" ").join(b + a) + n.join(c + a)).slice(0, -a.length)), G(j.backgroundImage, "gradient")
  }, s.cssreflections = function () {
  return J("boxReflect")
  }, s.csstransforms = function () {
  return!!J("transform")
  }, s.csstransforms3d = function () {
  var a = !!J("perspective");
  return a && "webkitPerspective"in g.style && y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}", function (b, c) {
  a = b.offsetLeft === 9 && b.offsetHeight === 3
  }), a
  }, s.csstransitions = function () {
  return J("transition")
  }, s.fontface = function () {
  var a;
  return y('@font-face {font-family:"font";src:url("https://")}', function (c, d) {
  var e = b.getElementById("smodernizr"), f = e.sheet || e.styleSheet, g = f ? f.cssRules && f.cssRules[0] ? f.cssRules[0].cssText : f.cssText || "" : "";
  a = /src/i.test(g) && g.indexOf(d.split(" ")[0]) === 0
  }), a
  }, s.generatedcontent = function () {
  var a;
  return y(['#modernizr:after{content:"', l, '";visibility:hidden}'].join(""), function (b) {
  a = b.offsetHeight >= 1
  }), a
  }, s.video = function () {
  var a = b.createElement("video"), c = !1;
  try {
  if (c = !!a.canPlayType)c = new Boolean(c), c.ogg = a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, ""), c.h264 = a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, ""), c.webm = a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, "")
  } catch (d) {
  }
  return c
  }, s.audio = function () {
  var a = b.createElement("audio"), c = !1;
  try {
  if (c = !!a.canPlayType)c = new Boolean(c), c.ogg = a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), c.mp3 = a.canPlayType("audio/mpeg;").replace(/^no$/, ""), c.wav = a.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), c.m4a = (a.canPlayType("audio/x-m4a;") || a.canPlayType("audio/aac;")).replace(/^no$/, "")
  } catch (d) {
  }
  return c
  }, s.localstorage = function () {
  try {
  return localStorage.setItem(h, h), localStorage.removeItem(h), !0
  } catch (a) {
  return!1
  }
  }, s.sessionstorage = function () {
  try {
  return sessionStorage.setItem(h, h), sessionStorage.removeItem(h), !0
  } catch (a) {
  return!1
  }
  }, s.webworkers = function () {
  return!!a.Worker
  }, s.applicationcache = function () {
  return!!a.applicationCache
  }, s.svg = function () {
  return!!b.createElementNS && !!b.createElementNS(r.svg, "svg").createSVGRect
  }, s.inlinesvg = function () {
  var a = b.createElement("div");
  return a.innerHTML = "<svg/>", (a.firstChild && a.firstChild.namespaceURI) == r.svg
  }, s.smil = function () {
  return!!b.createElementNS && /SVGAnimate/.test(m.call(b.createElementNS(r.svg, "animate")))
  }, s.svgclippaths = function () {
  return!!b.createElementNS && /SVGClipPath/.test(m.call(b.createElementNS(r.svg, "clipPath")))
  };
  for (var L in s)C(s, L) && (x = L.toLowerCase(), e[x] = s[L](), v.push((e[x] ? "" : "no-") + x));
  return e.input || K(), e.addTest = function (a, b) {
  if (typeof a == "object")for (var d in a)C(a, d) && e.addTest(d, a[d]); else {
  a = a.toLowerCase();
  if (e[a] !== c)return e;
  b = typeof b == "function" ? b() : b, f && (g.className += " " + (b ? "" : "no-") + a), e[a] = b
  }
  return e
  }, D(""), i = k = null, function (a, b) {
  function k(a, b) {
  var c = a.createElement("p"), d = a.getElementsByTagName("head")[0] || a.documentElement;
  return c.innerHTML = "x<style>" + b + "</style>", d.insertBefore(c.lastChild, d.firstChild)
  }
   
  function l() {
  var a = r.elements;
  return typeof a == "string" ? a.split(" ") : a
  }
   
  function m(a) {
  var b = i[a[g]];
  return b || (b = {}, h++, a[g] = h, i[h] = b), b
  }
   
  function n(a, c, f) {
  c || (c = b);
  if (j)return c.createElement(a);
  f || (f = m(c));
  var g;
  return f.cache[a] ? g = f.cache[a].cloneNode() : e.test(a) ? g = (f.cache[a] = f.createElem(a)).cloneNode() : g = f.createElem(a), g.canHaveChildren && !d.test(a) ? f.frag.appendChild(g) : g
  }
   
  function o(a, c) {
  a || (a = b);
  if (j)return a.createDocumentFragment();
  c = c || m(a);
  var d = c.frag.cloneNode(), e = 0, f = l(), g = f.length;
  for (; e < g; e++)d.createElement(f[e]);
  return d
  }
   
  function p(a, b) {
  b.cache || (b.cache = {}, b.createElem = a.createElement, b.createFrag = a.createDocumentFragment, b.frag = b.createFrag()), a.createElement = function (c) {
  return r.shivMethods ? n(c, a, b) : b.createElem(c)
  }, a.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + l().join().replace(/\w+/g, function (a) {
  return b.createElem(a), b.frag.createElement(a), 'c("' + a + '")'
  }) + ");return n}")(r, b.frag)
  }
   
  function q(a) {
  a || (a = b);
  var c = m(a);
  return r.shivCSS && !f && !c.hasCSS && (c.hasCSS = !!k(a, "article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")), j || p(a, c), a
  }
   
  var c = a.html5 || {}, d = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i, e = /^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i, f, g = "_html5shiv", h = 0, i = {}, j;
  (function () {
  try {
  var a = b.createElement("a");
  a.innerHTML = "<xyz></xyz>", f = "hidden"in a, j = a.childNodes.length == 1 || function () {
  b.createElement("a");
  var a = b.createDocumentFragment();
  return typeof a.cloneNode == "undefined" || typeof a.createDocumentFragment == "undefined" || typeof a.createElement == "undefined"
  }()
  } catch (c) {
  f = !0, j = !0
  }
  })();
  var r = {elements: c.elements || "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video", shivCSS: c.shivCSS !== !1, supportsUnknownElements: j, shivMethods: c.shivMethods !== !1, type: "default", shivDocument: q, createElement: n, createDocumentFragment: o};
  a.html5 = r, q(b)
  }(this, b), e._version = d, e._prefixes = n, e._domPrefixes = q, e._cssomPrefixes = p, e.mq = z, e.hasEvent = A, e.testProp = function (a) {
  return H([a])
  }, e.testAllProps = J, e.testStyles = y, e.prefixed = function (a, b, c) {
  return b ? J(a, b, c) : J(a, "pfx")
  }, g.className = g.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (f ? " js " + v.join(" ") : ""), e
  }(this, this.document), function (a, b, c) {
  function d(a) {
  return o.call(a) == "[object Function]"
  }
   
  function e(a) {
  return typeof a == "string"
  }
   
  function f() {
  }
   
  function g(a) {
  return!a || a == "loaded" || a == "complete" || a == "uninitialized"
  }
   
  function h() {
  var a = p.shift();
  q = 1, a ? a.t ? m(function () {
  (a.t == "c" ? B.injectCss : B.injectJs)(a.s, 0, a.a, a.x, a.e, 1)
  }, 0) : (a(), h()) : q = 0
  }
   
  function i(a, c, d, e, f, i, j) {
  function k(b) {
  if (!o && g(l.readyState) && (u.r = o = 1, !q && h(), l.onload = l.onreadystatechange = null, b)) {
  a != "img" && m(function () {
  t.removeChild(l)
  }, 50);
  for (var d in y[c])y[c].hasOwnProperty(d) && y[c][d].onload()
  }
  }
   
  var j = j || B.errorTimeout, l = {}, o = 0, r = 0, u = {t: d, s: c, e: f, a: i, x: j};
  y[c] === 1 && (r = 1, y[c] = [], l = b.createElement(a)), a == "object" ? l.data = c : (l.src = c, l.type = a), l.width = l.height = "0", l.onerror = l.onload = l.onreadystatechange = function () {
  k.call(this, r)
  }, p.splice(e, 0, u), a != "img" && (r || y[c] === 2 ? (t.insertBefore(l, s ? null : n), m(k, j)) : y[c].push(l))
  }
   
  function j(a, b, c, d, f) {
  return q = 0, b = b || "j", e(a) ? i(b == "c" ? v : u, a, b, this.i++, c, d, f) : (p.splice(this.i++, 0, a), p.length == 1 && h()), this
  }
   
  function k() {
  var a = B;
  return a.loader = {load: j, i: 0}, a
  }
   
  var l = b.documentElement, m = a.setTimeout, n = b.getElementsByTagName("script")[0], o = {}.toString, p = [], q = 0, r = "MozAppearance"in l.style, s = r && !!b.createRange().compareNode, t = s ? l : n.parentNode, l = a.opera && o.call(a.opera) == "[object Opera]", l = !!b.attachEvent && !l, u = r ? "object" : l ? "script" : "img", v = l ? "script" : u, w = Array.isArray || function (a) {
  return o.call(a) == "[object Array]"
  }, x = [], y = {}, z = {timeout: function (a, b) {
  return b.length && (a.timeout = b[0]), a
  }}, A, B;
  B = function (a) {
  function b(a) {
  var a = a.split("!"), b = x.length, c = a.pop(), d = a.length, c = {url: c, origUrl: c, prefixes: a}, e, f, g;
  for (f = 0; f < d; f++)g = a[f].split("="), (e = z[g.shift()]) && (c = e(c, g));
  for (f = 0; f < b; f++)c = x[f](c);
  return c
  }
   
  function g(a, e, f, g, i) {
  var j = b(a), l = j.autoCallback;
  j.url.split(".").pop().split("?").shift(), j.bypass || (e && (e = d(e) ? e : e[a] || e[g] || e[a.split("/").pop().split("?")[0]] || h), j.instead ? j.instead(a, e, f, g, i) : (y[j.url] ? j.noexec = !0 : y[j.url] = 1, f.load(j.url, j.forceCSS || !j.forceJS && "css" == j.url.split(".").pop().split("?").shift() ? "c" : c, j.noexec, j.attrs, j.timeout), (d(e) || d(l)) && f.load(function () {
  k(), e && e(j.origUrl, i, g), l && l(j.origUrl, i, g), y[j.url] = 2
  })))
  }
   
  function i(a, b) {
  function c(a, c) {
  if (a) {
  if (e(a))c || (j = function () {
  var a = [].slice.call(arguments);
  k.apply(this, a), l()
  }), g(a, j, b, 0, h); else if (Object(a) === a)for (n in m = function () {
  var b = 0, c;
  for (c in a)a.hasOwnProperty(c) && b++;
  return b
  }(), a)a.hasOwnProperty(n) && (!c && !--m && (d(j) ? j = function () {
  var a = [].slice.call(arguments);
  k.apply(this, a), l()
  } : j[n] = function (a) {
  return function () {
  var b = [].slice.call(arguments);
  a && a.apply(this, b), l()
  }
  }(k[n])), g(a[n], j, b, n, h))
  } else!c && l()
  }
   
  var h = !!a.test, i = a.load || a.both, j = a.callback || f, k = j, l = a.complete || f, m, n;
  c(h ? a.yep : a.nope, !!i), i && c(i)
  }
   
  var j, l, m = this.yepnope.loader;
  if (e(a))g(a, 0, m, 0); else if (w(a))for (j = 0; j < a.length; j++)l = a[j], e(l) ? g(l, 0, m, 0) : w(l) ? B(l) : Object(l) === l && i(l, m); else Object(a) === a && i(a, m)
  }, B.addPrefix = function (a, b) {
  z[a] = b
  }, B.addFilter = function (a) {
  x.push(a)
  }, B.errorTimeout = 1e4, b.readyState == null && b.addEventListener && (b.readyState = "loading", b.addEventListener("DOMContentLoaded", A = function () {
  b.removeEventListener("DOMContentLoaded", A, 0), b.readyState = "complete"
  }, 0)), a.yepnope = k(), a.yepnope.executeStack = h, a.yepnope.injectJs = function (a, c, d, e, i, j) {
  var k = b.createElement("script"), l, o, e = e || B.errorTimeout;
  k.src = a;
  for (o in d)k.setAttribute(o, d[o]);
  c = j ? h : c || f, k.onreadystatechange = k.onload = function () {
  !l && g(k.readyState) && (l = 1, c(), k.onload = k.onreadystatechange = null)
  }, m(function () {
  l || (l = 1, c(1))
  }, e), i ? k.onload() : n.parentNode.insertBefore(k, n)
  }, a.yepnope.injectCss = function (a, c, d, e, g, i) {
  var e = b.createElement("link"), j, c = i ? h : c || f;
  e.href = a, e.rel = "stylesheet", e.type = "text/css";
  for (j in d)e.setAttribute(j, d[j]);
  g || (n.parentNode.insertBefore(e, n), m(c, 0))
  }
  }(this, document), Modernizr.load = function () {
  yepnope.apply(window, [].slice.call(arguments, 0))
  };
   
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://www.netbeans.org/ns/project/1"> <?xml version="1.0" encoding="UTF-8"?>
  <project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.php.project</type> <type>org.netbeans.modules.php.project</type>
<configuration> <configuration>
<data xmlns="http://www.netbeans.org/ns/php-project/1"> <data xmlns="http://www.netbeans.org/ns/php-project/1">
<name>scannr</name> <name>scannr</name>
</data> </data>
</configuration> </configuration>
</project> </project>
file:a/output.txt (deleted)
Opening serial port...  
Loading notifymyandroid...  
Connecting database...  
Scannr started.  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104431  
Worker for 2012-10-12-1350001603.48-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 208862 frames written to 2012-10-12-1350001603.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
539716  
Worker for 2012-10-12-1350001607.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001607.25-demo.wav has no TGID  
done - result 1079432 frames written to 2012-10-12-1350001607.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350001620.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001620.32-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350001620.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104922  
Worker for 2012-10-12-1350001629.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 209844 frames written to 2012-10-12-1350001629.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146619  
Worker for 2012-10-12-1350001633.44-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 293238 frames written to 2012-10-12-1350001633.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249924  
Worker for 2012-10-12-1350001637.17-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 499848 frames written to 2012-10-12-1350001637.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1676614  
Worker for 2012-10-12-1350001643.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001643.71-demo.wav has no TGID  
done - result 3353228 frames written to 2012-10-12-1350001643.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103409  
Worker for 2012-10-12-1350001687.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001687.19-demo.wav has no TGID  
done - result 206818 frames written to 2012-10-12-1350001687.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350001690.07-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001690.07-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350001690.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75976  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
124189  
Worker for 2012-10-12-1350001790.54-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 248378 frames written to 2012-10-12-1350001790.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
585796  
Worker for 2012-10-12-1350001795.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001795.16-demo.wav has no TGID  
done - result 1171592 frames written to 2012-10-12-1350001795.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350001809.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001809.26-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350001809.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350001811.92-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001811.92-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350001811.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104600  
Worker for 2012-10-12-1350001858.18-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 209200 frames written to 2012-10-12-1350001858.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75423  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
634948  
Worker for 2012-10-12-1350001864.05-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001864.05-demo.wav has no TGID  
done - result 1269896 frames written to 2012-10-12-1350001864.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350001879.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001879.27-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350001879.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
119601  
Worker for 2012-10-12-1350001941.43-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 239202 frames written to 2012-10-12-1350001941.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
125808  
Worker for 2012-10-12-1350001945.62-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 251616 frames written to 2012-10-12-1350001945.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1544360  
Worker for 2012-10-12-1350001948.95-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001948.95-demo.wav has no TGID  
done - result 3088720 frames written to 2012-10-12-1350001948.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350001990.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350001990.55-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350001990.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
129707  
Worker for 2012-10-12-1350002030.02-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 259414 frames written to 2012-10-12-1350002030.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141380  
Worker for 2012-10-12-1350002033.49-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 282760 frames written to 2012-10-12-1350002033.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
943172  
Worker for 2012-10-12-1350002037.23-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1886344 frames written to 2012-10-12-1350002037.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
787524  
Worker for 2012-10-12-1350002060.63-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002060.63-demo.wav has no TGID  
done - result 1575048 frames written to 2012-10-12-1350002060.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350002079.66-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002079.66-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350002079.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
186054  
Worker for 2012-10-12-1350002102.47-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 372108 frames written to 2012-10-12-1350002102.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74889  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
640068  
Worker for 2012-10-12-1350002108.8-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002108.8-demo.wav has no TGID  
done - result 1280136 frames written to 2012-10-12-1350002108.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350002124.31-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002124.31-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350002124.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350002126.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002126.91-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350002126.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
164504  
Worker for 2012-10-12-1350002133.88-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 329008 frames written to 2012-10-12-1350002133.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75598  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
334916  
Worker for 2012-10-12-1350002139.31-demo.wav  
GLG,40068,NFM,0,0,CanberraMtAinsli,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 669832 frames written to 2012-10-12-1350002139.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
685124  
Worker for 2012-10-12-1350002148.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002148.33-demo.wav has no TGID  
done - result 1370248 frames written to 2012-10-12-1350002148.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350002164.92-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002164.92-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350002164.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350002167.48-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002167.48-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350002167.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97750  
Worker for 2012-10-12-1350002176.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002176.08-demo.wav has no TGID  
done - result 195500 frames written to 2012-10-12-1350002176.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350002178.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002178.72-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350002178.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350002181.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002181.35-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350002181.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350002183.84-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 209032 frames written to 2012-10-12-1350002183.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
210368  
Worker for 2012-10-12-1350002187.39-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 420736 frames written to 2012-10-12-1350002187.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2772036  
Worker for 2012-10-12-1350002192.83-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 5544072 frames written to 2012-10-12-1350002192.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350002259.17-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 188552 frames written to 2012-10-12-1350002259.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
751684  
Worker for 2012-10-12-1350002262.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002262.3-demo.wav has no TGID  
done - result 1503368 frames written to 2012-10-12-1350002262.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350002280.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002280.47-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350002280.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105189  
Worker for 2012-10-12-1350002314.42-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 210378 frames written to 2012-10-12-1350002314.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
532548  
Worker for 2012-10-12-1350002318.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002318.25-demo.wav has no TGID  
done - result 1065096 frames written to 2012-10-12-1350002318.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350002331.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002331.2-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350002331.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350002333.8-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002333.8-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350002333.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
161666  
Worker for 2012-10-12-1350002377.18-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 323332 frames written to 2012-10-12-1350002377.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
659524  
Worker for 2012-10-12-1350002382.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002382.98-demo.wav has no TGID  
done - result 1319048 frames written to 2012-10-12-1350002382.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350002399.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002399.17-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350002399.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
277168  
Worker for 2012-10-12-1350002471.86-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 554336 frames written to 2012-10-12-1350002471.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
703556  
Worker for 2012-10-12-1350002479.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002479.47-demo.wav has no TGID  
done - result 1407112 frames written to 2012-10-12-1350002479.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350002496.48-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002496.48-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350002496.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350002499.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002499.01-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350002499.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104391  
Worker for 2012-10-12-1350002606.55-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 208782 frames written to 2012-10-12-1350002606.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
596036  
Worker for 2012-10-12-1350002611.05-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002611.05-demo.wav has no TGID  
done - result 1192072 frames written to 2012-10-12-1350002611.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350002625.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002625.39-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350002625.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112989  
Worker for 2012-10-12-1350002813.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 225978 frames written to 2012-10-12-1350002813.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
474382  
Worker for 2012-10-12-1350002817.13-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 948764 frames written to 2012-10-12-1350002817.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
713544  
Worker for 2012-10-12-1350002829.48-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1427088 frames written to 2012-10-12-1350002829.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
220927  
Worker for 2012-10-12-1350002847.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 441854 frames written to 2012-10-12-1350002847.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
256911  
Worker for 2012-10-12-1350002854.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 513822 frames written to 2012-10-12-1350002854.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
382787  
Worker for 2012-10-12-1350002861.19-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 765574 frames written to 2012-10-12-1350002861.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
156699  
Worker for 2012-10-12-1350002870.78-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 313398 frames written to 2012-10-12-1350002870.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
603315  
Worker for 2012-10-12-1350002874.82-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002874.82-demo.wav has no TGID  
done - result 1206630 frames written to 2012-10-12-1350002874.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350002894.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002894.1-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350002894.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350002896.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002896.75-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350002896.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
118975  
Worker for 2012-10-12-1350002901.2-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 237950 frames written to 2012-10-12-1350002901.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
160836  
Worker for 2012-10-12-1350002904.27-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 321672 frames written to 2012-10-12-1350002904.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
189508  
Worker for 2012-10-12-1350002910.45-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 379016 frames written to 2012-10-12-1350002910.45-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1001540  
Worker for 2012-10-12-1350002915.23-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 2003080 frames written to 2012-10-12-1350002915.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
222273  
Worker for 2012-10-12-1350002939.38-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,1,NONE,NONE,NONE  
done - result 444546 frames written to 2012-10-12-1350002939.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
714684  
Worker for 2012-10-12-1350002945.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002945.47-demo.wav has no TGID  
done - result 1429368 frames written to 2012-10-12-1350002945.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350002962.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002962.75-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350002962.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350002965.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350002965.7-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350002965.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
181887  
Worker for 2012-10-12-1350002985.98-demo.wav  
GLG,40078,NFM,0,0,CanberraMtAinsli,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 363774 frames written to 2012-10-12-1350002985.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
228145  
Worker for 2012-10-12-1350002992.23-demo.wav  
GLG,40078,NFM,0,0,CanberraMtAinsli,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 456290 frames written to 2012-10-12-1350002992.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
212036  
Worker for 2012-10-12-1350002998.49-demo.wav  
GLG,40078,NFM,0,0,CanberraMtAinsli,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 424072 frames written to 2012-10-12-1350002998.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
215090  
Worker for 2012-10-12-1350003004.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003004.47-demo.wav has no TGID  
done - result 430180 frames written to 2012-10-12-1350003004.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
702526  
Worker for 2012-10-12-1350003009.83-demo.wav  
GLG,40083,NFM,0,0,CanberraMtAinsli,AustralianCapita,SES Ops 6,1,0,NONE,NONE,NONE  
done - result 1405052 frames written to 2012-10-12-1350003009.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1322052  
Worker for 2012-10-12-1350003027.34-demo.wav  
GLG,40083,NFM,0,0,CanberraMtAinsli,AustralianCapita,SES Ops 6,1,0,NONE,NONE,NONE  
done - result 2644104 frames written to 2012-10-12-1350003027.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
530794  
Worker for 2012-10-12-1350003059.62-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003059.62-demo.wav has no TGID  
done - result 1061588 frames written to 2012-10-12-1350003059.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
470084  
Worker for 2012-10-12-1350003073.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003073.39-demo.wav has no TGID  
done - result 940168 frames written to 2012-10-12-1350003073.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350003084.74-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003084.74-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350003084.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
203860  
Worker for 2012-10-12-1350003311.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 407720 frames written to 2012-10-12-1350003311.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155716  
Worker for 2012-10-12-1350003316.69-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 311432 frames written to 2012-10-12-1350003316.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1326148  
Worker for 2012-10-12-1350003320.67-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 2652296 frames written to 2012-10-12-1350003320.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
267313  
Worker for 2012-10-12-1350003353.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 534626 frames written to 2012-10-12-1350003353.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
184388  
Worker for 2012-10-12-1350003361.2-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 368776 frames written to 2012-10-12-1350003361.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
331844  
Worker for 2012-10-12-1350003366.53-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 663688 frames written to 2012-10-12-1350003366.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
199748  
Worker for 2012-10-12-1350003376.05-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 399496 frames written to 2012-10-12-1350003376.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127983  
Worker for 2012-10-12-1350003381.63-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 255966 frames written to 2012-10-12-1350003381.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1385536  
Worker for 2012-10-12-1350003385.26-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2771072 frames written to 2012-10-12-1350003385.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110269  
Worker for 2012-10-12-1350003419.17-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 220538 frames written to 2012-10-12-1350003419.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
304882  
Worker for 2012-10-12-1350003422.64-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 609764 frames written to 2012-10-12-1350003422.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
979868  
Worker for 2012-10-12-1350003430.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003430.26-demo.wav has no TGID  
done - result 1959736 frames written to 2012-10-12-1350003430.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350003457.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003457.26-demo.wav has no TGID  
done - result 215176 frames written to 2012-10-12-1350003457.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350003459.92-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003459.92-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350003459.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350003462.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003462.19-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350003462.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
81988  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
61141  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
124822  
Worker for 2012-10-12-1350003884.8-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 249644 frames written to 2012-10-12-1350003884.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76644  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
576580  
Worker for 2012-10-12-1350003889.22-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003889.22-demo.wav has no TGID  
done - result 1153160 frames written to 2012-10-12-1350003889.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350003903.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003903.24-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350003903.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173321  
Worker for 2012-10-12-1350003950.57-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 346642 frames written to 2012-10-12-1350003950.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
237636  
Worker for 2012-10-12-1350003955.31-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 475272 frames written to 2012-10-12-1350003955.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
137284  
Worker for 2012-10-12-1350003963.39-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 274568 frames written to 2012-10-12-1350003963.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
260164  
Worker for 2012-10-12-1350003967.09-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 520328 frames written to 2012-10-12-1350003967.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
294517  
Worker for 2012-10-12-1350003974.21-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 589034 frames written to 2012-10-12-1350003974.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
305220  
Worker for 2012-10-12-1350003981.71-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 610440 frames written to 2012-10-12-1350003981.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108612  
Worker for 2012-10-12-1350003989.26-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 217224 frames written to 2012-10-12-1350003989.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141373  
Worker for 2012-10-12-1350003992.46-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 282746 frames written to 2012-10-12-1350003992.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
763670  
Worker for 2012-10-12-1350003999.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350003999.38-demo.wav has no TGID  
done - result 1527340 frames written to 2012-10-12-1350003999.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350004017.85-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004017.85-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350004017.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155785  
Worker for 2012-10-12-1350004056.08-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 311570 frames written to 2012-10-12-1350004056.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
487073  
Worker for 2012-10-12-1350004061.42-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 974146 frames written to 2012-10-12-1350004061.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
194628  
Worker for 2012-10-12-1350004073.32-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 389256 frames written to 2012-10-12-1350004073.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
409668  
Worker for 2012-10-12-1350004078.29-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004078.29-demo.wav has no TGID  
done - result 819336 frames written to 2012-10-12-1350004078.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
234564  
Worker for 2012-10-12-1350004088.31-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 469128 frames written to 2012-10-12-1350004088.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
603094  
Worker for 2012-10-12-1350004094.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004094.33-demo.wav has no TGID  
done - result 1206188 frames written to 2012-10-12-1350004094.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350004112.57-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004112.57-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350004112.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350004115.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004115.5-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350004115.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112814  
Worker for 2012-10-12-1350004175.23-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 225628 frames written to 2012-10-12-1350004175.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350004178.33-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 211080 frames written to 2012-10-12-1350004178.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
419646  
Worker for 2012-10-12-1350004181.13-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 839292 frames written to 2012-10-12-1350004181.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1174171  
Worker for 2012-10-12-1350004191.51-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004191.51-demo.wav has no TGID  
done - result 2348342 frames written to 2012-10-12-1350004191.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350004224.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004224.08-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350004224.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350004226.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004226.72-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350004226.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
172049  
Worker for 2012-10-12-1350004247.0-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 344098 frames written to 2012-10-12-1350004247.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75288  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
592919  
Worker for 2012-10-12-1350004253.28-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1185838 frames written to 2012-10-12-1350004253.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1015458  
Worker for 2012-10-12-1350004267.74-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004267.74-demo.wav has no TGID  
done - result 2030916 frames written to 2012-10-12-1350004267.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
117828  
Worker for 2012-10-12-1350004292.19-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 235656 frames written to 2012-10-12-1350004292.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
203907  
Worker for 2012-10-12-1350004295.95-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 407814 frames written to 2012-10-12-1350004295.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
683003  
Worker for 2012-10-12-1350004301.78-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1366006 frames written to 2012-10-12-1350004301.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350004318.32-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 209032 frames written to 2012-10-12-1350004318.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
641092  
Worker for 2012-10-12-1350004321.76-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004321.76-demo.wav has no TGID  
done - result 1282184 frames written to 2012-10-12-1350004321.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350004337.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004337.33-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350004337.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350004339.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004339.94-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350004339.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
205636  
Worker for 2012-10-12-1350004343.77-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 411272 frames written to 2012-10-12-1350004343.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350004348.83-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 198792 frames written to 2012-10-12-1350004348.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
522308  
Worker for 2012-10-12-1350004354.52-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004354.52-demo.wav has no TGID  
done - result 1044616 frames written to 2012-10-12-1350004354.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
528474  
Worker for 2012-10-12-1350004367.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004367.24-demo.wav has no TGID  
done - result 1056948 frames written to 2012-10-12-1350004367.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350004385.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004385.35-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350004385.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
289385  
Worker for 2012-10-12-1350004428.28-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 578770 frames written to 2012-10-12-1350004428.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
220216  
Worker for 2012-10-12-1350004435.33-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 440432 frames written to 2012-10-12-1350004435.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
515436  
Worker for 2012-10-12-1350004442.38-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1030872 frames written to 2012-10-12-1350004442.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
131140  
Worker for 2012-10-12-1350004454.96-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 262280 frames written to 2012-10-12-1350004454.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
309316  
Worker for 2012-10-12-1350004458.74-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 618632 frames written to 2012-10-12-1350004458.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
115780  
Worker for 2012-10-12-1350004467.58-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 231560 frames written to 2012-10-12-1350004467.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
232516  
Worker for 2012-10-12-1350004472.07-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 465032 frames written to 2012-10-12-1350004472.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123972  
Worker for 2012-10-12-1350004478.68-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 247944 frames written to 2012-10-12-1350004478.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1652804  
Worker for 2012-10-12-1350004482.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004482.16-demo.wav has no TGID  
done - result 3305608 frames written to 2012-10-12-1350004482.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123972  
Worker for 2012-10-12-1350004521.92-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 247944 frames written to 2012-10-12-1350004521.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
664644  
Worker for 2012-10-12-1350004526.31-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1329288 frames written to 2012-10-12-1350004526.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
241702  
Worker for 2012-10-12-1350004542.36-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 483404 frames written to 2012-10-12-1350004542.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
200707  
Worker for 2012-10-12-1350004549.76-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 401414 frames written to 2012-10-12-1350004549.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2696911  
Worker for 2012-10-12-1350004554.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004554.81-demo.wav has no TGID  
done - result 5393822 frames written to 2012-10-12-1350004554.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103285  
Worker for 2012-10-12-1350004622.62-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004622.62-demo.wav has no TGID  
done - result 206570 frames written to 2012-10-12-1350004622.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350004625.49-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004625.49-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350004625.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132700  
Worker for 2012-10-12-1350004684.22-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 265400 frames written to 2012-10-12-1350004684.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76375  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
384068  
Worker for 2012-10-12-1350004689.16-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 768136 frames written to 2012-10-12-1350004689.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
236612  
Worker for 2012-10-12-1350004699.36-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 473224 frames written to 2012-10-12-1350004699.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1338436  
Worker for 2012-10-12-1350004705.59-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004705.59-demo.wav has no TGID  
done - result 2676872 frames written to 2012-10-12-1350004705.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
489862  
Worker for 2012-10-12-1350004737.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004737.71-demo.wav has no TGID  
done - result 979724 frames written to 2012-10-12-1350004737.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153668  
Worker for 2012-10-12-1350004755.17-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 307336 frames written to 2012-10-12-1350004755.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
384562  
Worker for 2012-10-12-1350004760.18-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 769124 frames written to 2012-10-12-1350004760.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350004769.62-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 211080 frames written to 2012-10-12-1350004769.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1716116  
Worker for 2012-10-12-1350004773.18-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 3432232 frames written to 2012-10-12-1350004773.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1743170  
Worker for 2012-10-12-1350004814.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004814.7-demo.wav has no TGID  
done - result 3486340 frames written to 2012-10-12-1350004814.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102349  
Worker for 2012-10-12-1350004861.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004861.25-demo.wav has no TGID  
done - result 204698 frames written to 2012-10-12-1350004861.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107229  
Worker for 2012-10-12-1350004922.22-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 214458 frames written to 2012-10-12-1350004922.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350004928.13-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 229512 frames written to 2012-10-12-1350004928.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
270404  
Worker for 2012-10-12-1350004931.17-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 540808 frames written to 2012-10-12-1350004931.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
806620  
Worker for 2012-10-12-1350004938.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004938.55-demo.wav has no TGID  
done - result 1613240 frames written to 2012-10-12-1350004938.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350004957.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004957.93-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350004957.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106662  
Worker for 2012-10-12-1350004964.82-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 213324 frames written to 2012-10-12-1350004964.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75154  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
640068  
Worker for 2012-10-12-1350004970.82-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004970.82-demo.wav has no TGID  
done - result 1280136 frames written to 2012-10-12-1350004970.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350004986.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004986.3-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350004986.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350004988.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350004988.9-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350004988.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105946  
Worker for 2012-10-12-1350005001.05-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 211892 frames written to 2012-10-12-1350005001.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
170052  
Worker for 2012-10-12-1350005003.96-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 340104 frames written to 2012-10-12-1350005003.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350005012.37-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 213128 frames written to 2012-10-12-1350005012.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1860570  
Worker for 2012-10-12-1350005015.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005015.27-demo.wav has no TGID  
done - result 3721140 frames written to 2012-10-12-1350005015.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105539  
Worker for 2012-10-12-1350005064.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005064.54-demo.wav has no TGID  
done - result 211078 frames written to 2012-10-12-1350005064.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
194025  
Worker for 2012-10-12-1350005118.04-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 388050 frames written to 2012-10-12-1350005118.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
355396  
Worker for 2012-10-12-1350005124.06-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 710792 frames written to 2012-10-12-1350005124.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
470084  
Worker for 2012-10-12-1350005132.8-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 940168 frames written to 2012-10-12-1350005132.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
352312  
Worker for 2012-10-12-1350005144.79-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 704624 frames written to 2012-10-12-1350005144.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139331  
Worker for 2012-10-12-1350005154.87-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 278662 frames written to 2012-10-12-1350005154.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
149429  
Worker for 2012-10-12-1350005160.19-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 298858 frames written to 2012-10-12-1350005160.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109634  
Worker for 2012-10-12-1350005163.87-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 219268 frames written to 2012-10-12-1350005163.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1417281  
Worker for 2012-10-12-1350005168.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005168.89-demo.wav has no TGID  
done - result 2834562 frames written to 2012-10-12-1350005168.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
727108  
Worker for 2012-10-12-1350005202.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005202.89-demo.wav has no TGID  
done - result 1454216 frames written to 2012-10-12-1350005202.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350005220.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005220.5-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350005220.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350005223.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005223.08-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350005223.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106338  
Worker for 2012-10-12-1350005268.48-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 212676 frames written to 2012-10-12-1350005268.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76291  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
424004  
Worker for 2012-10-12-1350005273.18-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 848008 frames written to 2012-10-12-1350005273.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
320580  
Worker for 2012-10-12-1350005283.75-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 641160 frames written to 2012-10-12-1350005283.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
588868  
Worker for 2012-10-12-1350005291.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005291.93-demo.wav has no TGID  
done - result 1177736 frames written to 2012-10-12-1350005291.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
534506  
Worker for 2012-10-12-1350005306.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005306.16-demo.wav has no TGID  
done - result 1069012 frames written to 2012-10-12-1350005306.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350005324.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005324.03-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350005324.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350005326.63-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005326.63-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350005326.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151256  
Worker for 2012-10-12-1350005337.27-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 302512 frames written to 2012-10-12-1350005337.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
685937  
Worker for 2012-10-12-1350005344.35-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1371874 frames written to 2012-10-12-1350005344.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173124  
Worker for 2012-10-12-1350005360.99-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 346248 frames written to 2012-10-12-1350005360.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
267332  
Worker for 2012-10-12-1350005365.3-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 534664 frames written to 2012-10-12-1350005365.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
869444  
Worker for 2012-10-12-1350005371.9-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1738888 frames written to 2012-10-12-1350005371.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
776260  
Worker for 2012-10-12-1350005393.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005393.55-demo.wav has no TGID  
done - result 1552520 frames written to 2012-10-12-1350005393.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350005412.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005412.3-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350005412.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
302423  
Worker for 2012-10-12-1350005461.61-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 604846 frames written to 2012-10-12-1350005461.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
708676  
Worker for 2012-10-12-1350005469.95-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005469.95-demo.wav has no TGID  
done - result 1417352 frames written to 2012-10-12-1350005469.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350005487.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005487.08-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350005487.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350005489.66-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005489.66-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350005489.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
228761  
Worker for 2012-10-12-1350005591.37-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 457522 frames written to 2012-10-12-1350005591.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74644  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
326724  
Worker for 2012-10-12-1350005598.31-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 653448 frames written to 2012-10-12-1350005598.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
202820  
Worker for 2012-10-12-1350005606.57-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 405640 frames written to 2012-10-12-1350005606.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
231492  
Worker for 2012-10-12-1350005612.06-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 462984 frames written to 2012-10-12-1350005612.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
254013  
Worker for 2012-10-12-1350005618.25-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 508026 frames written to 2012-10-12-1350005618.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
144452  
Worker for 2012-10-12-1350005624.72-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 288904 frames written to 2012-10-12-1350005624.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
225581  
Worker for 2012-10-12-1350005629.32-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 451162 frames written to 2012-10-12-1350005629.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96321  
Worker for 2012-10-12-1350005634.92-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 192642 frames written to 2012-10-12-1350005634.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
342084  
Worker for 2012-10-12-1350005637.69-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 684168 frames written to 2012-10-12-1350005637.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
170052  
Worker for 2012-10-12-1350005647.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 340104 frames written to 2012-10-12-1350005647.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
207940  
Worker for 2012-10-12-1350005652.13-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 415880 frames written to 2012-10-12-1350005652.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
185412  
Worker for 2012-10-12-1350005658.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 370824 frames written to 2012-10-12-1350005658.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
608324  
Worker for 2012-10-12-1350005663.88-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1216648 frames written to 2012-10-12-1350005663.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108612  
Worker for 2012-10-12-1350005678.58-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 217224 frames written to 2012-10-12-1350005678.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
218180  
Worker for 2012-10-12-1350005681.36-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 436360 frames written to 2012-10-12-1350005681.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
244462  
Worker for 2012-10-12-1350005686.71-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 488924 frames written to 2012-10-12-1350005686.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
691254  
Worker for 2012-10-12-1350005692.82-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1382508 frames written to 2012-10-12-1350005692.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350005709.58-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 204936 frames written to 2012-10-12-1350005709.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147524  
Worker for 2012-10-12-1350005713.04-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 295048 frames written to 2012-10-12-1350005713.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
129061  
Worker for 2012-10-12-1350005717.44-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 258122 frames written to 2012-10-12-1350005717.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
361540  
Worker for 2012-10-12-1350005720.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005720.84-demo.wav has no TGID  
done - result 723080 frames written to 2012-10-12-1350005720.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
699460  
Worker for 2012-10-12-1350005729.68-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1398920 frames written to 2012-10-12-1350005729.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
115780  
Worker for 2012-10-12-1350005746.54-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 231560 frames written to 2012-10-12-1350005746.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
115780  
Worker for 2012-10-12-1350005751.33-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 231560 frames written to 2012-10-12-1350005751.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
473156  
Worker for 2012-10-12-1350005754.95-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005754.95-demo.wav has no TGID  
done - result 946312 frames written to 2012-10-12-1350005754.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
772164  
Worker for 2012-10-12-1350005766.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005766.46-demo.wav has no TGID  
done - result 1544328 frames written to 2012-10-12-1350005766.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350005785.0-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005785.0-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350005785.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350005787.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005787.56-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350005787.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
82903  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155380  
Worker for 2012-10-12-1350005799.66-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 310760 frames written to 2012-10-12-1350005799.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
117828  
Worker for 2012-10-12-1350005803.74-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 235656 frames written to 2012-10-12-1350005803.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
676932  
Worker for 2012-10-12-1350005806.77-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005806.77-demo.wav has no TGID  
done - result 1353864 frames written to 2012-10-12-1350005806.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
509400  
Worker for 2012-10-12-1350005823.15-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005823.15-demo.wav has no TGID  
done - result 1018800 frames written to 2012-10-12-1350005823.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350005841.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005841.47-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350005841.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
174902  
Worker for 2012-10-12-1350005910.5-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 349804 frames written to 2012-10-12-1350005910.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
277474  
Worker for 2012-10-12-1350005916.83-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 554948 frames written to 2012-10-12-1350005916.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
760900  
Worker for 2012-10-12-1350005927.48-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1521800 frames written to 2012-10-12-1350005927.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75830  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
419908  
Worker for 2012-10-12-1350005948.06-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 839816 frames written to 2012-10-12-1350005948.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
247876  
Worker for 2012-10-12-1350005959.37-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 495752 frames written to 2012-10-12-1350005959.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
794692  
Worker for 2012-10-12-1350005965.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350005965.91-demo.wav has no TGID  
done - result 1589384 frames written to 2012-10-12-1350005965.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
119876  
Worker for 2012-10-12-1350005985.1-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 239752 frames written to 2012-10-12-1350005985.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
137205  
Worker for 2012-10-12-1350005988.25-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 274410 frames written to 2012-10-12-1350005988.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
363564  
Worker for 2012-10-12-1350005992.18-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 727128 frames written to 2012-10-12-1350005992.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1370180  
Worker for 2012-10-12-1350006002.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006002.96-demo.wav has no TGID  
done - result 2740360 frames written to 2012-10-12-1350006002.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
718742  
Worker for 2012-10-12-1350006036.36-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006036.36-demo.wav has no TGID  
done - result 1437484 frames written to 2012-10-12-1350006036.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350006053.97-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006053.97-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350006053.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350006056.57-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006056.57-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350006056.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
83012  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105739  
Worker for 2012-10-12-1350006069.79-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 211478 frames written to 2012-10-12-1350006069.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
277572  
Worker for 2012-10-12-1350006075.58-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 555144 frames written to 2012-10-12-1350006075.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188484  
Worker for 2012-10-12-1350006082.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 376968 frames written to 2012-10-12-1350006082.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
195652  
Worker for 2012-10-12-1350006088.72-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 391304 frames written to 2012-10-12-1350006088.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
78916  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175171  
Worker for 2012-10-12-1350006094.64-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 350342 frames written to 2012-10-12-1350006094.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1023519  
Worker for 2012-10-12-1350006099.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006099.24-demo.wav has no TGID  
done - result 2047038 frames written to 2012-10-12-1350006099.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350006127.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006127.98-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350006127.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173124  
Worker for 2012-10-12-1350006130.67-demo.wav  
GLG,40091,NFM,0,0,CanberraMtAinsli,AustralianCapita,Fire Mgt,1,0,NONE,NONE,NONE  
done - result 346248 frames written to 2012-10-12-1350006130.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74606  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
145476  
Worker for 2012-10-12-1350006136.33-demo.wav  
GLG,40091,NFM,0,0,CanberraMtAinsli,AustralianCapita,Fire Mgt,1,0,NONE,NONE,NONE  
done - result 290952 frames written to 2012-10-12-1350006136.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
639044  
Worker for 2012-10-12-1350006140.0-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006140.0-demo.wav has no TGID  
done - result 1278088 frames written to 2012-10-12-1350006140.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
713796  
Worker for 2012-10-12-1350006155.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006155.89-demo.wav has no TGID  
done - result 1427592 frames written to 2012-10-12-1350006155.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350006173.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006173.17-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350006173.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
228941  
Worker for 2012-10-12-1350006240.76-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 457882 frames written to 2012-10-12-1350006240.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
680004  
Worker for 2012-10-12-1350006247.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006247.86-demo.wav has no TGID  
done - result 1360008 frames written to 2012-10-12-1350006247.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350006264.41-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006264.41-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350006264.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350006266.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006266.93-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350006266.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105244  
Worker for 2012-10-12-1350006496.45-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 210488 frames written to 2012-10-12-1350006496.45-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
529476  
Worker for 2012-10-12-1350006500.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006500.39-demo.wav has no TGID  
done - result 1058952 frames written to 2012-10-12-1350006500.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350006513.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006513.23-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350006513.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
210173  
Worker for 2012-10-12-1350006535.4-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 420346 frames written to 2012-10-12-1350006535.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74947  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
796738  
Worker for 2012-10-12-1350006542.33-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1593476 frames written to 2012-10-12-1350006542.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
477252  
Worker for 2012-10-12-1350006561.62-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 954504 frames written to 2012-10-12-1350006561.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
140356  
Worker for 2012-10-12-1350006573.3-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 280712 frames written to 2012-10-12-1350006573.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112672  
Worker for 2012-10-12-1350006578.24-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 225344 frames written to 2012-10-12-1350006578.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
457796  
Worker for 2012-10-12-1350006581.06-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 915592 frames written to 2012-10-12-1350006581.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
130116  
Worker for 2012-10-12-1350006592.2-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 260232 frames written to 2012-10-12-1350006592.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
286788  
Worker for 2012-10-12-1350006595.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 573576 frames written to 2012-10-12-1350006595.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
192533  
Worker for 2012-10-12-1350006604.87-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 385066 frames written to 2012-10-12-1350006604.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93224  
Worker for 2012-10-12-1350006609.93-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 186448 frames written to 2012-10-12-1350006609.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
822340  
Worker for 2012-10-12-1350006612.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006612.38-demo.wav has no TGID  
done - result 1644680 frames written to 2012-10-12-1350006612.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
769092  
Worker for 2012-10-12-1350006632.07-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1538184 frames written to 2012-10-12-1350006632.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141330  
Worker for 2012-10-12-1350006651.39-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 282660 frames written to 2012-10-12-1350006651.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127044  
Worker for 2012-10-12-1350006655.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 254088 frames written to 2012-10-12-1350006655.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
324676  
Worker for 2012-10-12-1350006658.7-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 649352 frames written to 2012-10-12-1350006658.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
273446  
Worker for 2012-10-12-1350006667.81-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 546892 frames written to 2012-10-12-1350006667.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
154691  
Worker for 2012-10-12-1350006674.74-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 309382 frames written to 2012-10-12-1350006674.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1934404  
Worker for 2012-10-12-1350006678.97-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 3868808 frames written to 2012-10-12-1350006678.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
298052  
Worker for 2012-10-12-1350006726.92-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 596104 frames written to 2012-10-12-1350006726.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
640068  
Worker for 2012-10-12-1350006737.09-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1280136 frames written to 2012-10-12-1350006737.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
542512  
Worker for 2012-10-12-1350006754.59-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1085024 frames written to 2012-10-12-1350006754.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350006767.78-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 206984 frames written to 2012-10-12-1350006767.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
473156  
Worker for 2012-10-12-1350006771.93-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 946312 frames written to 2012-10-12-1350006771.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1155140  
Worker for 2012-10-12-1350006784.49-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006784.49-demo.wav has no TGID  
done - result 2310280 frames written to 2012-10-12-1350006784.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
209988  
Worker for 2012-10-12-1350006812.17-demo.wav  
GLG,40091,NFM,0,0,CanberraMtAinsli,AustralianCapita,Fire Mgt,1,0,NONE,NONE,NONE  
done - result 419976 frames written to 2012-10-12-1350006812.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
122948  
Worker for 2012-10-12-1350006817.6-demo.wav  
GLG,40091,NFM,0,0,CanberraMtAinsli,AustralianCapita,Fire Mgt,1,0,NONE,NONE,NONE  
done - result 245896 frames written to 2012-10-12-1350006817.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
602534  
Worker for 2012-10-12-1350006821.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006821.03-demo.wav has no TGID  
done - result 1205068 frames written to 2012-10-12-1350006821.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350006838.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006838.73-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350006838.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350006841.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006841.34-demo.wav has no TGID  
done - result 188552 frames written to 2012-10-12-1350006841.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139452  
Worker for 2012-10-12-1350006889.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 278904 frames written to 2012-10-12-1350006889.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
260164  
Worker for 2012-10-12-1350006894.8-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 520328 frames written to 2012-10-12-1350006894.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173123  
Worker for 2012-10-12-1350006901.3-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 346246 frames written to 2012-10-12-1350006901.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
717235  
Worker for 2012-10-12-1350006906.27-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1434470 frames written to 2012-10-12-1350006906.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1595460  
Worker for 2012-10-12-1350006923.5-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 3190920 frames written to 2012-10-12-1350006923.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
741444  
Worker for 2012-10-12-1350006962.68-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006962.68-demo.wav has no TGID  
done - result 1482888 frames written to 2012-10-12-1350006962.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350006980.63-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350006980.63-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350006980.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151392  
Worker for 2012-10-12-1350006986.7-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 302784 frames written to 2012-10-12-1350006986.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75257  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
130116  
Worker for 2012-10-12-1350006992.48-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 260232 frames written to 2012-10-12-1350006992.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
142398  
Worker for 2012-10-12-1350006997.31-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 284796 frames written to 2012-10-12-1350006997.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188427  
Worker for 2012-10-12-1350007002.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 376854 frames written to 2012-10-12-1350007002.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
206916  
Worker for 2012-10-12-1350007007.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 413832 frames written to 2012-10-12-1350007007.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350007013.34-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 186504 frames written to 2012-10-12-1350007013.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
976964  
Worker for 2012-10-12-1350007016.41-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007016.41-demo.wav has no TGID  
done - result 1953928 frames written to 2012-10-12-1350007016.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
257092  
Worker for 2012-10-12-1350007039.84-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 514184 frames written to 2012-10-12-1350007039.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350007046.21-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 215176 frames written to 2012-10-12-1350007046.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
192557  
Worker for 2012-10-12-1350007049.32-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 385114 frames written to 2012-10-12-1350007049.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1728580  
Worker for 2012-10-12-1350007054.07-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 3457160 frames written to 2012-10-12-1350007054.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
340690  
Worker for 2012-10-12-1350007095.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007095.72-demo.wav has no TGID  
done - result 681380 frames written to 2012-10-12-1350007095.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
389188  
Worker for 2012-10-12-1350007104.13-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 778376 frames written to 2012-10-12-1350007104.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1120324  
Worker for 2012-10-12-1350007113.66-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 2240648 frames written to 2012-10-12-1350007113.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
252099  
Worker for 2012-10-12-1350007141.29-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 504198 frames written to 2012-10-12-1350007141.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
241732  
Worker for 2012-10-12-1350007149.29-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 483464 frames written to 2012-10-12-1350007149.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
195652  
Worker for 2012-10-12-1350007156.12-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 391304 frames written to 2012-10-12-1350007156.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
229441  
Worker for 2012-10-12-1350007161.02-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 458882 frames written to 2012-10-12-1350007161.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
177220  
Worker for 2012-10-12-1350007166.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007166.75-demo.wav has no TGID  
done - result 354440 frames written to 2012-10-12-1350007166.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
389669  
Worker for 2012-10-12-1350007171.19-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 779338 frames written to 2012-10-12-1350007171.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350007181.17-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 202888 frames written to 2012-10-12-1350007181.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138308  
Worker for 2012-10-12-1350007183.83-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 276616 frames written to 2012-10-12-1350007183.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
592221  
Worker for 2012-10-12-1350007187.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007187.93-demo.wav has no TGID  
done - result 1184442 frames written to 2012-10-12-1350007187.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350007206.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007206.32-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350007206.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350007208.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007208.96-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350007208.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350007211.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007211.35-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350007211.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188325  
Worker for 2012-10-12-1350007266.07-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 376650 frames written to 2012-10-12-1350007266.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123972  
Worker for 2012-10-12-1350007271.44-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 247944 frames written to 2012-10-12-1350007271.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
335940  
Worker for 2012-10-12-1350007275.04-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 671880 frames written to 2012-10-12-1350007275.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
479207  
Worker for 2012-10-12-1350007285.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007285.4-demo.wav has no TGID  
done - result 958414 frames written to 2012-10-12-1350007285.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350007301.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007301.38-demo.wav has no TGID  
done - result 213128 frames written to 2012-10-12-1350007301.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350007304.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007304.06-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350007304.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
118852  
Worker for 2012-10-12-1350007306.58-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 237704 frames written to 2012-10-12-1350007306.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
116804  
Worker for 2012-10-12-1350007309.77-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 233608 frames written to 2012-10-12-1350007309.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
543812  
Worker for 2012-10-12-1350007312.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007312.81-demo.wav has no TGID  
done - result 1087624 frames written to 2012-10-12-1350007312.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1365925  
Worker for 2012-10-12-1350007326.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007326.03-demo.wav has no TGID  
done - result 2731850 frames written to 2012-10-12-1350007326.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
481989  
Worker for 2012-10-12-1350007359.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007359.1-demo.wav has no TGID  
done - result 963978 frames written to 2012-10-12-1350007359.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350007375.29-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007375.29-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350007375.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350007377.87-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007377.87-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350007377.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
162581  
Worker for 2012-10-12-1350007424.39-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 325162 frames written to 2012-10-12-1350007424.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1275972  
Worker for 2012-10-12-1350007430.39-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 2551944 frames written to 2012-10-12-1350007430.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
300907  
Worker for 2012-10-12-1350007461.78-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 601814 frames written to 2012-10-12-1350007461.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350007469.45-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 204936 frames written to 2012-10-12-1350007469.45-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
609348  
Worker for 2012-10-12-1350007472.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007472.1-demo.wav has no TGID  
done - result 1218696 frames written to 2012-10-12-1350007472.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
183364  
Worker for 2012-10-12-1350007486.88-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 366728 frames written to 2012-10-12-1350007486.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1292325  
Worker for 2012-10-12-1350007492.26-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2584650 frames written to 2012-10-12-1350007492.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75045  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
369732  
Worker for 2012-10-12-1350007524.69-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 739464 frames written to 2012-10-12-1350007524.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
293956  
Worker for 2012-10-12-1350007534.22-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 587912 frames written to 2012-10-12-1350007534.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
219023  
Worker for 2012-10-12-1350007541.52-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007541.52-demo.wav has no TGID  
done - result 438046 frames written to 2012-10-12-1350007541.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
517940  
Worker for 2012-10-12-1350007547.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007547.09-demo.wav has no TGID  
done - result 1035880 frames written to 2012-10-12-1350007547.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350007564.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007564.98-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350007564.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
44109  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
220546  
Worker for 2012-10-12-1350007611.42-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 441092 frames written to 2012-10-12-1350007611.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
149572  
Worker for 2012-10-12-1350007617.06-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 299144 frames written to 2012-10-12-1350007617.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2512666  
Worker for 2012-10-12-1350007621.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007621.4-demo.wav has no TGID  
done - result 5025332 frames written to 2012-10-12-1350007621.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
521284  
Worker for 2012-10-12-1350007681.79-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1042568 frames written to 2012-10-12-1350007681.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350007696.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 202888 frames written to 2012-10-12-1350007696.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1494084  
Worker for 2012-10-12-1350007699.01-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2988168 frames written to 2012-10-12-1350007699.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
177066  
Worker for 2012-10-12-1350007734.76-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 354132 frames written to 2012-10-12-1350007734.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1182031  
Worker for 2012-10-12-1350007739.44-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007739.44-demo.wav has no TGID  
done - result 2364062 frames written to 2012-10-12-1350007739.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350007771.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007771.89-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350007771.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350007774.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007774.47-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350007774.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107891  
Worker for 2012-10-12-1350007778.74-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 215782 frames written to 2012-10-12-1350007778.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75645  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
605252  
Worker for 2012-10-12-1350007783.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007783.93-demo.wav has no TGID  
done - result 1210504 frames written to 2012-10-12-1350007783.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350007798.57-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007798.57-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350007798.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
130072  
Worker for 2012-10-12-1350007879.76-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 260144 frames written to 2012-10-12-1350007879.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
168004  
Worker for 2012-10-12-1350007883.4-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 336008 frames written to 2012-10-12-1350007883.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1062980  
Worker for 2012-10-12-1350007887.69-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007887.69-demo.wav has no TGID  
done - result 2125960 frames written to 2012-10-12-1350007887.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
316484  
Worker for 2012-10-12-1350007913.25-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 632968 frames written to 2012-10-12-1350007913.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
290840  
Worker for 2012-10-12-1350007921.5-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 581680 frames written to 2012-10-12-1350007921.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
597060  
Worker for 2012-10-12-1350007928.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1194120 frames written to 2012-10-12-1350007928.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1114178  
Worker for 2012-10-12-1350007944.41-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350007944.41-demo.wav has no TGID  
done - result 2228356 frames written to 2012-10-12-1350007944.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1082415  
Worker for 2012-10-12-1350007971.23-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2164830 frames written to 2012-10-12-1350007971.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
283129  
Worker for 2012-10-12-1350007997.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 566258 frames written to 2012-10-12-1350007997.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153668  
Worker for 2012-10-12-1350008004.9-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 307336 frames written to 2012-10-12-1350008004.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175172  
Worker for 2012-10-12-1350008008.76-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 350344 frames written to 2012-10-12-1350008008.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
329447  
Worker for 2012-10-12-1350008013.86-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 658894 frames written to 2012-10-12-1350008013.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
538608  
Worker for 2012-10-12-1350008022.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008022.37-demo.wav has no TGID  
done - result 1077216 frames written to 2012-10-12-1350008022.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350008038.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008038.93-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350008038.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350008041.59-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008041.59-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350008041.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108339  
Worker for 2012-10-12-1350008064.25-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 216678 frames written to 2012-10-12-1350008064.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
182340  
Worker for 2012-10-12-1350008067.86-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 364680 frames written to 2012-10-12-1350008067.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
174148  
Worker for 2012-10-12-1350008072.58-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 348296 frames written to 2012-10-12-1350008072.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
777284  
Worker for 2012-10-12-1350008077.66-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008077.66-demo.wav has no TGID  
done - result 1554568 frames written to 2012-10-12-1350008077.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350008096.42-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008096.42-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350008096.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350008099.21-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008099.21-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350008099.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105548  
Worker for 2012-10-12-1350008106.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 211096 frames written to 2012-10-12-1350008106.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76474  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
286788  
Worker for 2012-10-12-1350008111.72-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 573576 frames written to 2012-10-12-1350008111.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75013  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
547908  
Worker for 2012-10-12-1350008120.08-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1095816 frames written to 2012-10-12-1350008120.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350008133.67-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 209032 frames written to 2012-10-12-1350008133.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
425028  
Worker for 2012-10-12-1350008136.93-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 850056 frames written to 2012-10-12-1350008136.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
133188  
Worker for 2012-10-12-1350008147.23-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 266376 frames written to 2012-10-12-1350008147.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
160836  
Worker for 2012-10-12-1350008150.6-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 321672 frames written to 2012-10-12-1350008150.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
409629  
Worker for 2012-10-12-1350008155.15-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 819258 frames written to 2012-10-12-1350008155.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
161860  
Worker for 2012-10-12-1350008166.12-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 323720 frames written to 2012-10-12-1350008166.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
754756  
Worker for 2012-10-12-1350008171.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008171.12-demo.wav has no TGID  
done - result 1509512 frames written to 2012-10-12-1350008171.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350008189.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008189.26-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350008189.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175344  
Worker for 2012-10-12-1350008197.9-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 350688 frames written to 2012-10-12-1350008197.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
776260  
Worker for 2012-10-12-1350008202.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008202.9-demo.wav has no TGID  
done - result 1552520 frames written to 2012-10-12-1350008202.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
315460  
Worker for 2012-10-12-1350008221.61-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 630920 frames written to 2012-10-12-1350008221.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
78916  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
701425  
Worker for 2012-10-12-1350008232.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008232.27-demo.wav has no TGID  
done - result 1402850 frames written to 2012-10-12-1350008232.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350008249.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008249.17-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350008249.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350008251.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008251.7-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350008251.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113336  
Worker for 2012-10-12-1350008263.67-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 226672 frames written to 2012-10-12-1350008263.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188484  
Worker for 2012-10-12-1350008268.87-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 376968 frames written to 2012-10-12-1350008268.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
163871  
Worker for 2012-10-12-1350008273.57-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 327742 frames written to 2012-10-12-1350008273.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
597127  
Worker for 2012-10-12-1350008278.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008278.24-demo.wav has no TGID  
done - result 1194254 frames written to 2012-10-12-1350008278.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350008296.65-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008296.65-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350008296.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350008299.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008299.32-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350008299.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
265067  
Worker for 2012-10-12-1350008355.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 530134 frames written to 2012-10-12-1350008355.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
187425  
Worker for 2012-10-12-1350008362.95-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 374850 frames written to 2012-10-12-1350008362.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
587257  
Worker for 2012-10-12-1350008368.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008368.55-demo.wav has no TGID  
done - result 1174514 frames written to 2012-10-12-1350008368.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350008386.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008386.88-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350008386.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
228033  
Worker for 2012-10-12-1350008396.34-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 456066 frames written to 2012-10-12-1350008396.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350008402.09-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 192648 frames written to 2012-10-12-1350008402.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151620  
Worker for 2012-10-12-1350008404.59-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 303240 frames written to 2012-10-12-1350008404.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77882  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1679428  
Worker for 2012-10-12-1350008410.08-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 3358856 frames written to 2012-10-12-1350008410.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
240850  
Worker for 2012-10-12-1350008451.13-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 481700 frames written to 2012-10-12-1350008451.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
283716  
Worker for 2012-10-12-1350008457.26-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 567432 frames written to 2012-10-12-1350008457.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
280627  
Worker for 2012-10-12-1350008464.27-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 561254 frames written to 2012-10-12-1350008464.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
432178  
Worker for 2012-10-12-1350008471.44-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 864356 frames written to 2012-10-12-1350008471.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1291667  
Worker for 2012-10-12-1350008482.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008482.01-demo.wav has no TGID  
done - result 2583334 frames written to 2012-10-12-1350008482.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350008516.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008516.37-demo.wav has no TGID  
done - result 213128 frames written to 2012-10-12-1350008516.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350008519.07-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008519.07-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350008519.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105889  
Worker for 2012-10-12-1350008583.0-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 211778 frames written to 2012-10-12-1350008583.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
644164  
Worker for 2012-10-12-1350008589.07-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008589.07-demo.wav has no TGID  
done - result 1288328 frames written to 2012-10-12-1350008589.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350008604.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008604.7-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350008604.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114488  
Worker for 2012-10-12-1350008678.61-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 228976 frames written to 2012-10-12-1350008678.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350008681.95-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350008681.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
133188  
Worker for 2012-10-12-1350008684.85-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 266376 frames written to 2012-10-12-1350008684.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
168004  
Worker for 2012-10-12-1350008688.32-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 336008 frames written to 2012-10-12-1350008688.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
592964  
Worker for 2012-10-12-1350008692.6-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1185928 frames written to 2012-10-12-1350008692.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
240708  
Worker for 2012-10-12-1350008707.59-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008707.59-demo.wav has no TGID  
done - result 481416 frames written to 2012-10-12-1350008707.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
721988  
Worker for 2012-10-12-1350008713.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008713.78-demo.wav has no TGID  
done - result 1443976 frames written to 2012-10-12-1350008713.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350008731.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008731.16-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350008731.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
130980  
Worker for 2012-10-12-1350008746.58-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 261960 frames written to 2012-10-12-1350008746.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151248  
Worker for 2012-10-12-1350008750.99-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 302496 frames written to 2012-10-12-1350008750.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
365622  
Worker for 2012-10-12-1350008755.64-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 731244 frames written to 2012-10-12-1350008755.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147491  
Worker for 2012-10-12-1350008764.85-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 294982 frames written to 2012-10-12-1350008764.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
568956  
Worker for 2012-10-12-1350008769.66-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008769.66-demo.wav has no TGID  
done - result 1137912 frames written to 2012-10-12-1350008769.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106035  
Worker for 2012-10-12-1350008787.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008787.25-demo.wav has no TGID  
done - result 212070 frames written to 2012-10-12-1350008787.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350008790.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008790.09-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350008790.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
213161  
Worker for 2012-10-12-1350008809.01-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 426322 frames written to 2012-10-12-1350008809.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
286782  
Worker for 2012-10-12-1350008816.47-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 573564 frames written to 2012-10-12-1350008816.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
783428  
Worker for 2012-10-12-1350008824.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008824.25-demo.wav has no TGID  
done - result 1566856 frames written to 2012-10-12-1350008824.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350008843.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008843.35-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350008843.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
190296  
Worker for 2012-10-12-1350008933.78-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 380592 frames written to 2012-10-12-1350008933.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
480425  
Worker for 2012-10-12-1350008940.5-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 960850 frames written to 2012-10-12-1350008940.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
124996  
Worker for 2012-10-12-1350008956.35-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 249992 frames written to 2012-10-12-1350008956.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
131140  
Worker for 2012-10-12-1350008959.9-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 262280 frames written to 2012-10-12-1350008959.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
424004  
Worker for 2012-10-12-1350008963.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350008963.38-demo.wav has no TGID  
done - result 848008 frames written to 2012-10-12-1350008963.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
181316  
Worker for 2012-10-12-1350008973.75-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 362632 frames written to 2012-10-12-1350008973.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
290884  
Worker for 2012-10-12-1350008981.34-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 581768 frames written to 2012-10-12-1350008981.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350008988.62-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 194696 frames written to 2012-10-12-1350008988.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146451  
Worker for 2012-10-12-1350008991.84-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 292902 frames written to 2012-10-12-1350008991.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1150020  
Worker for 2012-10-12-1350008996.11-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 2300040 frames written to 2012-10-12-1350008996.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
685880  
Worker for 2012-10-12-1350009024.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009024.39-demo.wav has no TGID  
done - result 1371760 frames written to 2012-10-12-1350009024.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350009040.99-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009040.99-demo.wav has no TGID  
done - result 215176 frames written to 2012-10-12-1350009040.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350009043.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009043.84-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350009043.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
116065  
Worker for 2012-10-12-1350009048.42-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 232130 frames written to 2012-10-12-1350009048.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
564292  
Worker for 2012-10-12-1350009052.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009052.7-demo.wav has no TGID  
done - result 1128584 frames written to 2012-10-12-1350009052.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350009066.65-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009066.65-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350009066.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350009069.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009069.24-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350009069.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108612  
Worker for 2012-10-12-1350009071.65-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 217224 frames written to 2012-10-12-1350009071.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
527068  
Worker for 2012-10-12-1350009075.37-demo.wav  
GLG,44036,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1054136 frames written to 2012-10-12-1350009075.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350009089.76-demo.wav  
GLG,44036,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350009089.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
263072  
Worker for 2012-10-12-1350009093.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009093.94-demo.wav has no TGID  
done - result 526144 frames written to 2012-10-12-1350009093.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
245828  
Worker for 2012-10-12-1350009100.32-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 491656 frames written to 2012-10-12-1350009100.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
255044  
Worker for 2012-10-12-1350009108.36-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 510088 frames written to 2012-10-12-1350009108.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
591940  
Worker for 2012-10-12-1350009115.76-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1183880 frames written to 2012-10-12-1350009115.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
462916  
Worker for 2012-10-12-1350009130.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009130.93-demo.wav has no TGID  
done - result 925832 frames written to 2012-10-12-1350009130.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350009142.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009142.14-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350009142.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105241  
Worker for 2012-10-12-1350009148.27-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 210482 frames written to 2012-10-12-1350009148.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74970  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
636996  
Worker for 2012-10-12-1350009154.13-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009154.13-demo.wav has no TGID  
done - result 1273992 frames written to 2012-10-12-1350009154.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350009169.43-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009169.43-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350009169.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350009171.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009171.91-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350009171.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
81988  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105689  
Worker for 2012-10-12-1350009304.87-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 211378 frames written to 2012-10-12-1350009304.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
490564  
Worker for 2012-10-12-1350009308.52-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009308.52-demo.wav has no TGID  
done - result 981128 frames written to 2012-10-12-1350009308.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350009320.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009320.38-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350009320.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
122948  
Worker for 2012-10-12-1350009322.88-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 245896 frames written to 2012-10-12-1350009322.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
216132  
Worker for 2012-10-12-1350009326.09-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 432264 frames written to 2012-10-12-1350009326.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
143428  
Worker for 2012-10-12-1350009331.57-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 286856 frames written to 2012-10-12-1350009331.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1027140  
Worker for 2012-10-12-1350009335.66-demo.wav  
GLG,40068,NFM,0,0,CanberraMtAinsli,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 2054280 frames written to 2012-10-12-1350009335.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350009360.31-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009360.31-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350009360.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
232841  
Worker for 2012-10-12-1350009363.47-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 465682 frames written to 2012-10-12-1350009363.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1822788  
Worker for 2012-10-12-1350009369.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009369.37-demo.wav has no TGID  
done - result 3645576 frames written to 2012-10-12-1350009369.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
654404  
Worker for 2012-10-12-1350009413.02-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1308808 frames written to 2012-10-12-1350009413.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
707652  
Worker for 2012-10-12-1350009429.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009429.54-demo.wav has no TGID  
done - result 1415304 frames written to 2012-10-12-1350009429.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350009446.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009446.55-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350009446.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350009449.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009449.09-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350009449.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112294  
Worker for 2012-10-12-1350009453.37-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 224588 frames written to 2012-10-12-1350009453.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350009456.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 196744 frames written to 2012-10-12-1350009456.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
142404  
Worker for 2012-10-12-1350009458.84-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 284808 frames written to 2012-10-12-1350009458.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173198  
Worker for 2012-10-12-1350009463.3-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 346396 frames written to 2012-10-12-1350009463.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
728132  
Worker for 2012-10-12-1350009469.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009469.34-demo.wav has no TGID  
done - result 1456264 frames written to 2012-10-12-1350009469.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350009487.13-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009487.13-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350009487.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
61648  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
199619  
Worker for 2012-10-12-1350009620.62-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 399238 frames written to 2012-10-12-1350009620.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
581034  
Worker for 2012-10-12-1350009626.83-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1162068 frames written to 2012-10-12-1350009626.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350009640.97-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 184456 frames written to 2012-10-12-1350009640.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350009643.34-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 192648 frames written to 2012-10-12-1350009643.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
176196  
Worker for 2012-10-12-1350009645.88-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 352392 frames written to 2012-10-12-1350009645.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
812653  
Worker for 2012-10-12-1350009650.33-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1625306 frames written to 2012-10-12-1350009650.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350009673.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009673.5-demo.wav has no TGID  
done - result 215176 frames written to 2012-10-12-1350009673.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350009676.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009676.27-demo.wav has no TGID  
done - result 188552 frames written to 2012-10-12-1350009676.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
117828  
Worker for 2012-10-12-1350009678.66-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 235656 frames written to 2012-10-12-1350009678.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
120900  
Worker for 2012-10-12-1350009681.75-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 241800 frames written to 2012-10-12-1350009681.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
200772  
Worker for 2012-10-12-1350009685.49-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 401544 frames written to 2012-10-12-1350009685.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350009690.75-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 188552 frames written to 2012-10-12-1350009690.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1042660  
Worker for 2012-10-12-1350009693.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009693.19-demo.wav has no TGID  
done - result 2085320 frames written to 2012-10-12-1350009693.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109636  
Worker for 2012-10-12-1350009721.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009721.4-demo.wav has no TGID  
done - result 219272 frames written to 2012-10-12-1350009721.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350009724.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009724.37-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350009724.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
295118  
Worker for 2012-10-12-1350009777.33-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 590236 frames written to 2012-10-12-1350009777.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
335940  
Worker for 2012-10-12-1350009785.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 671880 frames written to 2012-10-12-1350009785.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
635972  
Worker for 2012-10-12-1350009795.23-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1271944 frames written to 2012-10-12-1350009795.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
156740  
Worker for 2012-10-12-1350009811.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 313480 frames written to 2012-10-12-1350009811.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
218180  
Worker for 2012-10-12-1350009815.75-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 436360 frames written to 2012-10-12-1350009815.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
775236  
Worker for 2012-10-12-1350009821.41-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1550472 frames written to 2012-10-12-1350009821.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1937476  
Worker for 2012-10-12-1350009841.62-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 3874952 frames written to 2012-10-12-1350009841.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
156740  
Worker for 2012-10-12-1350009887.98-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 313480 frames written to 2012-10-12-1350009887.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
283716  
Worker for 2012-10-12-1350009892.01-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 567432 frames written to 2012-10-12-1350009892.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
306244  
Worker for 2012-10-12-1350009898.97-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009898.97-demo.wav has no TGID  
done - result 612488 frames written to 2012-10-12-1350009898.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
168004  
Worker for 2012-10-12-1350009906.54-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 336008 frames written to 2012-10-12-1350009906.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132108  
Worker for 2012-10-12-1350009913.3-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 264216 frames written to 2012-10-12-1350009913.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84631  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
484755  
Worker for 2012-10-12-1350009918.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009918.09-demo.wav has no TGID  
done - result 969510 frames written to 2012-10-12-1350009918.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
506214  
Worker for 2012-10-12-1350009929.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009929.93-demo.wav has no TGID  
done - result 1012428 frames written to 2012-10-12-1350009929.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350009947.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009947.84-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350009947.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350009950.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350009950.32-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350009950.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
176598  
Worker for 2012-10-12-1350010124.15-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 353196 frames written to 2012-10-12-1350010124.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75279  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
451652  
Worker for 2012-10-12-1350010130.44-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 903304 frames written to 2012-10-12-1350010130.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
343864  
Worker for 2012-10-12-1350010142.33-demo.wav  
GLG,40068,NFM,0,0,CanberraMtAinsli,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 687728 frames written to 2012-10-12-1350010142.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
405572  
Worker for 2012-10-12-1350010150.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010150.75-demo.wav has no TGID  
done - result 811144 frames written to 2012-10-12-1350010150.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
379051  
Worker for 2012-10-12-1350010161.06-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 758102 frames written to 2012-10-12-1350010161.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
489315  
Worker for 2012-10-12-1350010171.16-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 978630 frames written to 2012-10-12-1350010171.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
220199  
Worker for 2012-10-12-1350010185.29-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 440398 frames written to 2012-10-12-1350010185.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
82920  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
374020  
Worker for 2012-10-12-1350010192.77-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 748040 frames written to 2012-10-12-1350010192.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
743131  
Worker for 2012-10-12-1350010202.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010202.89-demo.wav has no TGID  
done - result 1486262 frames written to 2012-10-12-1350010202.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350010220.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010220.86-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350010220.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
120485  
Worker for 2012-10-12-1350010242.42-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 240970 frames written to 2012-10-12-1350010242.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75643  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
441412  
Worker for 2012-10-12-1350010247.31-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 882824 frames written to 2012-10-12-1350010247.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1685572  
Worker for 2012-10-12-1350010258.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010258.39-demo.wav has no TGID  
done - result 3371144 frames written to 2012-10-12-1350010258.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
221252  
Worker for 2012-10-12-1350010298.71-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 442504 frames written to 2012-10-12-1350010298.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350010305.06-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 202888 frames written to 2012-10-12-1350010305.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
115730  
Worker for 2012-10-12-1350010307.96-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 231460 frames written to 2012-10-12-1350010307.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
343776  
Worker for 2012-10-12-1350010311.62-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 687552 frames written to 2012-10-12-1350010311.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
582724  
Worker for 2012-10-12-1350010321.16-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 1165448 frames written to 2012-10-12-1350010321.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
149572  
Worker for 2012-10-12-1350010336.58-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 299144 frames written to 2012-10-12-1350010336.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1968542  
Worker for 2012-10-12-1350010340.42-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010340.42-demo.wav has no TGID  
done - result 3937084 frames written to 2012-10-12-1350010340.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101310  
Worker for 2012-10-12-1350010392.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010392.72-demo.wav has no TGID  
done - result 202620 frames written to 2012-10-12-1350010392.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152235  
Worker for 2012-10-12-1350010468.9-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 304470 frames written to 2012-10-12-1350010468.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
355197  
Worker for 2012-10-12-1350010473.8-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 710394 frames written to 2012-10-12-1350010473.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74830  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
396356  
Worker for 2012-10-12-1350010483.92-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 792712 frames written to 2012-10-12-1350010483.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112708  
Worker for 2012-10-12-1350010494.11-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 225416 frames written to 2012-10-12-1350010494.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147524  
Worker for 2012-10-12-1350010497.06-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 295048 frames written to 2012-10-12-1350010497.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
3864644  
Worker for 2012-10-12-1350010500.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010500.79-demo.wav has no TGID  
done - result 7729288 frames written to 2012-10-12-1350010500.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
762948  
Worker for 2012-10-12-1350010593.4-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 1525896 frames written to 2012-10-12-1350010593.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
527428  
Worker for 2012-10-12-1350010611.83-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010611.83-demo.wav has no TGID  
done - result 1054856 frames written to 2012-10-12-1350010611.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
496433  
Worker for 2012-10-12-1350010624.49-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010624.49-demo.wav has no TGID  
done - result 992866 frames written to 2012-10-12-1350010624.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350010642.22-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010642.22-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350010642.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
160128  
Worker for 2012-10-12-1350010660.35-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 320256 frames written to 2012-10-12-1350010660.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350010665.63-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 190600 frames written to 2012-10-12-1350010665.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
286768  
Worker for 2012-10-12-1350010668.76-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,1,NONE,NONE,NONE  
done - result 573536 frames written to 2012-10-12-1350010668.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1068182  
Worker for 2012-10-12-1350010675.85-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010675.85-demo.wav has no TGID  
done - result 2136364 frames written to 2012-10-12-1350010675.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350010705.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010705.4-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350010705.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
122782  
Worker for 2012-10-12-1350010787.04-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 245564 frames written to 2012-10-12-1350010787.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113732  
Worker for 2012-10-12-1350010790.85-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 227464 frames written to 2012-10-12-1350010790.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249924  
Worker for 2012-10-12-1350010794.23-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 499848 frames written to 2012-10-12-1350010794.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1051024  
Worker for 2012-10-12-1350010800.53-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010800.53-demo.wav has no TGID  
done - result 2102048 frames written to 2012-10-12-1350010800.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350010829.67-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010829.67-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350010829.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350010832.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010832.33-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350010832.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151232  
Worker for 2012-10-12-1350010942.63-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 302464 frames written to 2012-10-12-1350010942.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350010947.04-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 209032 frames written to 2012-10-12-1350010947.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2061380  
Worker for 2012-10-12-1350010950.2-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 4122760 frames written to 2012-10-12-1350010950.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
649627  
Worker for 2012-10-12-1350010999.58-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350010999.58-demo.wav has no TGID  
done - result 1299254 frames written to 2012-10-12-1350010999.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350011019.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011019.94-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350011019.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350011022.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011022.56-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350011022.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107818  
Worker for 2012-10-12-1350011028.18-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 215636 frames written to 2012-10-12-1350011028.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110660  
Worker for 2012-10-12-1350011031.16-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 221320 frames written to 2012-10-12-1350011031.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
216132  
Worker for 2012-10-12-1350011034.06-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 432264 frames written to 2012-10-12-1350011034.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
187460  
Worker for 2012-10-12-1350011039.61-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 374920 frames written to 2012-10-12-1350011039.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
825412  
Worker for 2012-10-12-1350011044.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011044.26-demo.wav has no TGID  
done - result 1650824 frames written to 2012-10-12-1350011044.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
329796  
Worker for 2012-10-12-1350011064.07-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 659592 frames written to 2012-10-12-1350011064.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
169015  
Worker for 2012-10-12-1350011072.2-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 338030 frames written to 2012-10-12-1350011072.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
156367  
Worker for 2012-10-12-1350011076.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 312734 frames written to 2012-10-12-1350011076.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
772162  
Worker for 2012-10-12-1350011081.0-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011081.0-demo.wav has no TGID  
done - result 1544324 frames written to 2012-10-12-1350011081.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350011099.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011099.75-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350011099.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350011102.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011102.3-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350011102.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350011104.58-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 215176 frames written to 2012-10-12-1350011104.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249061  
Worker for 2012-10-12-1350011110.59-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 498122 frames written to 2012-10-12-1350011110.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
217115  
Worker for 2012-10-12-1350011119.42-demo.wav  
GLG,44010,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 434230 frames written to 2012-10-12-1350011119.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
209250  
Worker for 2012-10-12-1350011125.47-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 418500 frames written to 2012-10-12-1350011125.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
691268  
Worker for 2012-10-12-1350011131.49-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011131.49-demo.wav has no TGID  
done - result 1382536 frames written to 2012-10-12-1350011131.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350011148.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011148.23-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350011148.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127259  
Worker for 2012-10-12-1350011162.09-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 254518 frames written to 2012-10-12-1350011162.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
485432  
Worker for 2012-10-12-1350011166.77-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 970864 frames written to 2012-10-12-1350011166.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
198669  
Worker for 2012-10-12-1350011178.62-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 397338 frames written to 2012-10-12-1350011178.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
767044  
Worker for 2012-10-12-1350011187.22-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011187.22-demo.wav has no TGID  
done - result 1534088 frames written to 2012-10-12-1350011187.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350011205.68-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011205.68-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350011205.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
241284  
Worker for 2012-10-12-1350011225.79-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 482568 frames written to 2012-10-12-1350011225.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350011231.86-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 188552 frames written to 2012-10-12-1350011231.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
195652  
Worker for 2012-10-12-1350011234.29-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 391304 frames written to 2012-10-12-1350011234.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
308292  
Worker for 2012-10-12-1350011239.55-demo.wav  
GLG,44010,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 616584 frames written to 2012-10-12-1350011239.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93251  
Worker for 2012-10-12-1350011247.21-demo.wav  
GLG,44010,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 186502 frames written to 2012-10-12-1350011247.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
131128  
Worker for 2012-10-12-1350011249.69-demo.wav  
GLG,44010,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 262256 frames written to 2012-10-12-1350011249.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
799812  
Worker for 2012-10-12-1350011253.04-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1599624 frames written to 2012-10-12-1350011253.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350011272.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 215176 frames written to 2012-10-12-1350011272.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
747586  
Worker for 2012-10-12-1350011275.65-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 1495172 frames written to 2012-10-12-1350011275.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
297975  
Worker for 2012-10-12-1350011294.37-demo.wav  
GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
done - result 595950 frames written to 2012-10-12-1350011294.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
434951  
Worker for 2012-10-12-1350011301.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011301.88-demo.wav has no TGID  
done - result 869902 frames written to 2012-10-12-1350011301.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
522248  
Worker for 2012-10-12-1350011312.41-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011312.41-demo.wav has no TGID  
done - result 1044496 frames written to 2012-10-12-1350011312.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350011330.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011330.78-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350011330.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
220765  
Worker for 2012-10-12-1350011358.28-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 441530 frames written to 2012-10-12-1350011358.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
498034  
Worker for 2012-10-12-1350011365.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011365.37-demo.wav has no TGID  
done - result 996068 frames written to 2012-10-12-1350011365.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109636  
Worker for 2012-10-12-1350011380.85-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011380.85-demo.wav has no TGID  
done - result 219272 frames written to 2012-10-12-1350011380.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350011383.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011383.73-demo.wav has no TGID  
done - result 188552 frames written to 2012-10-12-1350011383.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112970  
Worker for 2012-10-12-1350011402.9-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 225940 frames written to 2012-10-12-1350011402.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
144452  
Worker for 2012-10-12-1350011406.78-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 288904 frames written to 2012-10-12-1350011406.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
144452  
Worker for 2012-10-12-1350011412.68-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 288904 frames written to 2012-10-12-1350011412.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138308  
Worker for 2012-10-12-1350011416.43-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 276616 frames written to 2012-10-12-1350011416.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
723012  
Worker for 2012-10-12-1350011419.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011419.96-demo.wav has no TGID  
done - result 1446024 frames written to 2012-10-12-1350011419.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
266308  
Worker for 2012-10-12-1350011437.46-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 532616 frames written to 2012-10-12-1350011437.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
766020  
Worker for 2012-10-12-1350011445.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011445.09-demo.wav has no TGID  
done - result 1532040 frames written to 2012-10-12-1350011445.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350011463.63-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011463.63-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350011463.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
44106  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105734  
Worker for 2012-10-12-1350011512.91-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 211468 frames written to 2012-10-12-1350011512.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
514116  
Worker for 2012-10-12-1350011516.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011516.73-demo.wav has no TGID  
done - result 1028232 frames written to 2012-10-12-1350011516.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350011529.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011529.38-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350011529.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106128  
Worker for 2012-10-12-1350011542.49-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 212256 frames written to 2012-10-12-1350011542.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132164  
Worker for 2012-10-12-1350011545.47-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 264328 frames written to 2012-10-12-1350011545.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
358468  
Worker for 2012-10-12-1350011548.91-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 716936 frames written to 2012-10-12-1350011548.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
434244  
Worker for 2012-10-12-1350011558.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 868488 frames written to 2012-10-12-1350011558.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74661  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
678980  
Worker for 2012-10-12-1350011570.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011570.19-demo.wav has no TGID  
done - result 1357960 frames written to 2012-10-12-1350011570.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350011586.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011586.75-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350011586.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350011589.31-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011589.31-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350011589.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
81988  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
187357  
Worker for 2012-10-12-1350011707.77-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 374714 frames written to 2012-10-12-1350011707.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1121563  
Worker for 2012-10-12-1350011713.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2243126 frames written to 2012-10-12-1350011713.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
740359  
Worker for 2012-10-12-1350011741.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011741.33-demo.wav has no TGID  
done - result 1480718 frames written to 2012-10-12-1350011741.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
238660  
Worker for 2012-10-12-1350011759.23-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 477320 frames written to 2012-10-12-1350011759.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113716  
Worker for 2012-10-12-1350011765.65-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 227432 frames written to 2012-10-12-1350011765.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
547908  
Worker for 2012-10-12-1350011768.62-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011768.62-demo.wav has no TGID  
done - result 1095816 frames written to 2012-10-12-1350011768.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
515799  
Worker for 2012-10-12-1350011781.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011781.88-demo.wav has no TGID  
done - result 1031598 frames written to 2012-10-12-1350011781.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350011799.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011799.89-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350011799.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350011802.51-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011802.51-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350011802.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108315  
Worker for 2012-10-12-1350011822.87-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 216630 frames written to 2012-10-12-1350011822.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138110  
Worker for 2012-10-12-1350011827.01-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 276220 frames written to 2012-10-12-1350011827.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1620036  
Worker for 2012-10-12-1350011831.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011831.4-demo.wav has no TGID  
done - result 3240072 frames written to 2012-10-12-1350011831.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
625732  
Worker for 2012-10-12-1350011870.29-demo.wav  
GLG,44027,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1251464 frames written to 2012-10-12-1350011870.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
300855  
Worker for 2012-10-12-1350011886.49-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 601710 frames written to 2012-10-12-1350011886.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
579996  
Worker for 2012-10-12-1350011894.65-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1159992 frames written to 2012-10-12-1350011894.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
136985  
Worker for 2012-10-12-1350011909.66-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 273970 frames written to 2012-10-12-1350011909.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
176196  
Worker for 2012-10-12-1350011913.55-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 352392 frames written to 2012-10-12-1350011913.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
555978  
Worker for 2012-10-12-1350011918.03-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1111956 frames written to 2012-10-12-1350011918.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
166980  
Worker for 2012-10-12-1350011931.55-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,1,NONE,NONE,NONE  
done - result 333960 frames written to 2012-10-12-1350011931.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
281503  
Worker for 2012-10-12-1350011936.17-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 563006 frames written to 2012-10-12-1350011936.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
545860  
Worker for 2012-10-12-1350011943.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011943.2-demo.wav has no TGID  
done - result 1091720 frames written to 2012-10-12-1350011943.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
512874  
Worker for 2012-10-12-1350011956.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011956.38-demo.wav has no TGID  
done - result 1025748 frames written to 2012-10-12-1350011956.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350011974.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011974.1-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350011974.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350011976.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350011976.75-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350011976.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153169  
Worker for 2012-10-12-1350012034.92-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 306338 frames written to 2012-10-12-1350012034.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141380  
Worker for 2012-10-12-1350012038.82-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 282760 frames written to 2012-10-12-1350012038.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
178244  
Worker for 2012-10-12-1350012042.73-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 356488 frames written to 2012-10-12-1350012042.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
370756  
Worker for 2012-10-12-1350012047.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012047.26-demo.wav has no TGID  
done - result 741512 frames written to 2012-10-12-1350012047.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
516952  
Worker for 2012-10-12-1350012056.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012056.27-demo.wav has no TGID  
done - result 1033904 frames written to 2012-10-12-1350012056.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350012074.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012074.06-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350012074.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
56855  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155563  
Worker for 2012-10-12-1350012103.47-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 311126 frames written to 2012-10-12-1350012103.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113732  
Worker for 2012-10-12-1350012107.54-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 227464 frames written to 2012-10-12-1350012107.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
394308  
Worker for 2012-10-12-1350012110.43-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 788616 frames written to 2012-10-12-1350012110.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2791460  
Worker for 2012-10-12-1350012120.17-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 5582920 frames written to 2012-10-12-1350012120.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
320580  
Worker for 2012-10-12-1350012186.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012186.81-demo.wav has no TGID  
done - result 641160 frames written to 2012-10-12-1350012186.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
535119  
Worker for 2012-10-12-1350012194.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012194.56-demo.wav has no TGID  
done - result 1070238 frames written to 2012-10-12-1350012194.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350012212.41-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012212.41-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350012212.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350012215.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012215.12-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350012215.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86077  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
120070  
Worker for 2012-10-12-1350012223.39-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 240140 frames written to 2012-10-12-1350012223.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
284146  
Worker for 2012-10-12-1350012227.52-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 568292 frames written to 2012-10-12-1350012227.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
227396  
Worker for 2012-10-12-1350012234.73-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 454792 frames written to 2012-10-12-1350012234.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
193597  
Worker for 2012-10-12-1350012240.38-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 387194 frames written to 2012-10-12-1350012240.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
758490  
Worker for 2012-10-12-1350012245.18-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012245.18-demo.wav has no TGID  
done - result 1516980 frames written to 2012-10-12-1350012245.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350012267.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012267.81-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350012267.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350012270.44-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012270.44-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350012270.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
297538  
Worker for 2012-10-12-1350012359.48-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 595076 frames written to 2012-10-12-1350012359.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
516031  
Worker for 2012-10-12-1350012367.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012367.26-demo.wav has no TGID  
done - result 1032062 frames written to 2012-10-12-1350012367.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350012383.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012383.75-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350012383.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350012386.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012386.46-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350012386.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
291736  
Worker for 2012-10-12-1350012392.15-demo.wav  
GLG,44010,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44010,1,0,NONE,NONE,NONE  
done - result 583472 frames written to 2012-10-12-1350012392.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
723550  
Worker for 2012-10-12-1350012400.22-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1447100 frames written to 2012-10-12-1350012400.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
246852  
Worker for 2012-10-12-1350012419.89-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 493704 frames written to 2012-10-12-1350012419.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1066457  
Worker for 2012-10-12-1350012426.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012426.09-demo.wav has no TGID  
done - result 2132914 frames written to 2012-10-12-1350012426.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350012456.18-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012456.18-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350012456.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
163841  
Worker for 2012-10-12-1350012468.6-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 327682 frames written to 2012-10-12-1350012468.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152644  
Worker for 2012-10-12-1350012472.8-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 305288 frames written to 2012-10-12-1350012472.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
197700  
Worker for 2012-10-12-1350012476.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 395400 frames written to 2012-10-12-1350012476.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
229444  
Worker for 2012-10-12-1350012482.04-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012482.04-demo.wav has no TGID  
done - result 458888 frames written to 2012-10-12-1350012482.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
593782  
Worker for 2012-10-12-1350012487.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012487.71-demo.wav has no TGID  
done - result 1187564 frames written to 2012-10-12-1350012487.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350012506.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012506.16-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350012506.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
178244  
Worker for 2012-10-12-1350012508.67-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 356488 frames written to 2012-10-12-1350012508.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350012513.39-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350012513.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
855108  
Worker for 2012-10-12-1350012516.87-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012516.87-demo.wav has no TGID  
done - result 1710216 frames written to 2012-10-12-1350012516.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
747588  
Worker for 2012-10-12-1350012537.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012537.47-demo.wav has no TGID  
done - result 1495176 frames written to 2012-10-12-1350012537.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350012555.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012555.5-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350012555.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173837  
Worker for 2012-10-12-1350012591.15-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 347674 frames written to 2012-10-12-1350012591.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139332  
Worker for 2012-10-12-1350012595.59-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 278664 frames written to 2012-10-12-1350012595.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
324611  
Worker for 2012-10-12-1350012599.55-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 649222 frames written to 2012-10-12-1350012599.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
602129  
Worker for 2012-10-12-1350012607.61-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012607.61-demo.wav has no TGID  
done - result 1204258 frames written to 2012-10-12-1350012607.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350012625.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012625.25-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350012625.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350012628.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012628.03-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350012628.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113839  
Worker for 2012-10-12-1350012682.36-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 227678 frames written to 2012-10-12-1350012682.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152644  
Worker for 2012-10-12-1350012685.53-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 305288 frames written to 2012-10-12-1350012685.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
207940  
Worker for 2012-10-12-1350012689.33-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 415880 frames written to 2012-10-12-1350012689.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
163902  
Worker for 2012-10-12-1350012694.67-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 327804 frames written to 2012-10-12-1350012694.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
291782  
Worker for 2012-10-12-1350012699.48-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 583564 frames written to 2012-10-12-1350012699.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
255044  
Worker for 2012-10-12-1350012706.99-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 510088 frames written to 2012-10-12-1350012706.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
507959  
Worker for 2012-10-12-1350012713.3-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1015918 frames written to 2012-10-12-1350012713.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
819268  
Worker for 2012-10-12-1350012725.63-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1638536 frames written to 2012-10-12-1350012725.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
3579972  
Worker for 2012-10-12-1350012745.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012745.55-demo.wav has no TGID  
done - result 7159944 frames written to 2012-10-12-1350012745.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
639098  
Worker for 2012-10-12-1350012831.44-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1278196 frames written to 2012-10-12-1350012831.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
400682  
Worker for 2012-10-12-1350012847.72-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 801364 frames written to 2012-10-12-1350012847.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
393284  
Worker for 2012-10-12-1350012857.92-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 786568 frames written to 2012-10-12-1350012857.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1334930  
Worker for 2012-10-12-1350012867.99-demo.wav  
GLG,44027,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2669860 frames written to 2012-10-12-1350012867.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175172  
Worker for 2012-10-12-1350012904.11-demo.wav  
GLG,44027,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 350344 frames written to 2012-10-12-1350012904.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
513836  
Worker for 2012-10-12-1350012910.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012910.01-demo.wav has no TGID  
done - result 1027672 frames written to 2012-10-12-1350012910.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350012926.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012926.81-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350012926.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350012929.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350012929.37-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350012929.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76852  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
117399  
Worker for 2012-10-12-1350013068.56-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 234798 frames written to 2012-10-12-1350013068.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
131140  
Worker for 2012-10-12-1350013071.72-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 262280 frames written to 2012-10-12-1350013071.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
136260  
Worker for 2012-10-12-1350013075.17-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 272520 frames written to 2012-10-12-1350013075.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141380  
Worker for 2012-10-12-1350013078.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 282760 frames written to 2012-10-12-1350013078.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
594468  
Worker for 2012-10-12-1350013082.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1188936 frames written to 2012-10-12-1350013082.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151620  
Worker for 2012-10-12-1350013097.4-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 303240 frames written to 2012-10-12-1350013097.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
659481  
Worker for 2012-10-12-1350013101.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013101.23-demo.wav has no TGID  
done - result 1318962 frames written to 2012-10-12-1350013101.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
508460  
Worker for 2012-10-12-1350013117.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013117.2-demo.wav has no TGID  
done - result 1016920 frames written to 2012-10-12-1350013117.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350013135.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013135.19-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350013135.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155196  
Worker for 2012-10-12-1350013144.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 310392 frames written to 2012-10-12-1350013144.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350013148.64-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 196744 frames written to 2012-10-12-1350013148.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
189508  
Worker for 2012-10-12-1350013151.24-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 379016 frames written to 2012-10-12-1350013151.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
150596  
Worker for 2012-10-12-1350013156.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 301192 frames written to 2012-10-12-1350013156.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
789572  
Worker for 2012-10-12-1350013160.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013160.47-demo.wav has no TGID  
done - result 1579144 frames written to 2012-10-12-1350013160.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350013179.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013179.71-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350013179.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141884  
Worker for 2012-10-12-1350013304.59-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 283768 frames written to 2012-10-12-1350013304.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
128068  
Worker for 2012-10-12-1350013308.21-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 256136 frames written to 2012-10-12-1350013308.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
272293  
Worker for 2012-10-12-1350013311.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 544586 frames written to 2012-10-12-1350013311.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
764411  
Worker for 2012-10-12-1350013318.47-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013318.47-demo.wav has no TGID  
done - result 1528822 frames written to 2012-10-12-1350013318.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350013341.8-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013341.8-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350013341.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350013344.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013344.4-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350013344.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
251678  
Worker for 2012-10-12-1350013412.03-demo.wav  
GLG,30234,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 503356 frames written to 2012-10-12-1350013412.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
675908  
Worker for 2012-10-12-1350013419.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013419.14-demo.wav has no TGID  
done - result 1351816 frames written to 2012-10-12-1350013419.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350013435.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013435.73-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350013435.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350013438.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013438.3-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350013438.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104680  
Worker for 2012-10-12-1350013454.22-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 209360 frames written to 2012-10-12-1350013454.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76031  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
548932  
Worker for 2012-10-12-1350013458.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013458.81-demo.wav has no TGID  
done - result 1097864 frames written to 2012-10-12-1350013458.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350013472.15-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013472.15-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350013472.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
363633  
Worker for 2012-10-12-1350013522.62-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 727266 frames written to 2012-10-12-1350013522.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
145476  
Worker for 2012-10-12-1350013531.55-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 290952 frames written to 2012-10-12-1350013531.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
412949  
Worker for 2012-10-12-1350013535.88-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 825898 frames written to 2012-10-12-1350013535.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350013548.18-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350013548.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1177668  
Worker for 2012-10-12-1350013551.12-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2355336 frames written to 2012-10-12-1350013551.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
848964  
Worker for 2012-10-12-1350013579.69-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1697928 frames written to 2012-10-12-1350013579.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1113156  
Worker for 2012-10-12-1350013600.4-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2226312 frames written to 2012-10-12-1350013600.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
694664  
Worker for 2012-10-12-1350013629.81-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1389328 frames written to 2012-10-12-1350013629.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350013646.58-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 184456 frames written to 2012-10-12-1350013646.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350013650.72-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 215176 frames written to 2012-10-12-1350013650.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2034756  
Worker for 2012-10-12-1350013653.66-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 4069512 frames written to 2012-10-12-1350013653.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
434244  
Worker for 2012-10-12-1350013702.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013702.35-demo.wav has no TGID  
done - result 868488 frames written to 2012-10-12-1350013702.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1166238  
Worker for 2012-10-12-1350013713.04-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2332476 frames written to 2012-10-12-1350013713.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
761924  
Worker for 2012-10-12-1350013741.77-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013741.77-demo.wav has no TGID  
done - result 1523848 frames written to 2012-10-12-1350013741.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350013760.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013760.12-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350013760.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139757  
Worker for 2012-10-12-1350013769.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 279514 frames written to 2012-10-12-1350013769.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
135236  
Worker for 2012-10-12-1350013773.73-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 270472 frames written to 2012-10-12-1350013773.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188395  
Worker for 2012-10-12-1350013777.41-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 376790 frames written to 2012-10-12-1350013777.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
449604  
Worker for 2012-10-12-1350013782.39-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 899208 frames written to 2012-10-12-1350013782.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
142401  
Worker for 2012-10-12-1350013793.37-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 284802 frames written to 2012-10-12-1350013793.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1541188  
Worker for 2012-10-12-1350013797.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013797.1-demo.wav has no TGID  
done - result 3082376 frames written to 2012-10-12-1350013797.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
466576  
Worker for 2012-10-12-1350013834.0-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013834.0-demo.wav has no TGID  
done - result 933152 frames written to 2012-10-12-1350013834.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350013851.36-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013851.36-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350013851.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110483  
Worker for 2012-10-12-1350013857.65-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 220966 frames written to 2012-10-12-1350013857.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
231204  
Worker for 2012-10-12-1350013861.59-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 462408 frames written to 2012-10-12-1350013861.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350013867.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 196744 frames written to 2012-10-12-1350013867.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
183364  
Worker for 2012-10-12-1350013870.07-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 366728 frames written to 2012-10-12-1350013870.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1107467  
Worker for 2012-10-12-1350013874.69-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013874.69-demo.wav has no TGID  
done - result 2214934 frames written to 2012-10-12-1350013874.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350013905.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013905.71-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350013905.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147810  
Worker for 2012-10-12-1350013920.56-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 295620 frames written to 2012-10-12-1350013920.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138308  
Worker for 2012-10-12-1350013924.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 276616 frames written to 2012-10-12-1350013924.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
126016  
Worker for 2012-10-12-1350013928.23-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 252032 frames written to 2012-10-12-1350013928.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
164932  
Worker for 2012-10-12-1350013931.75-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 329864 frames written to 2012-10-12-1350013931.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98331  
Worker for 2012-10-12-1350013935.98-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 196662 frames written to 2012-10-12-1350013935.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
383905  
Worker for 2012-10-12-1350013939.42-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 767810 frames written to 2012-10-12-1350013939.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
160597  
Worker for 2012-10-12-1350013949.51-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 321194 frames written to 2012-10-12-1350013949.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
456750  
Worker for 2012-10-12-1350013954.47-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 913500 frames written to 2012-10-12-1350013954.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
277405  
Worker for 2012-10-12-1350013968.33-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 554810 frames written to 2012-10-12-1350013968.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
157764  
Worker for 2012-10-12-1350013975.25-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 315528 frames written to 2012-10-12-1350013975.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
182340  
Worker for 2012-10-12-1350013979.34-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 364680 frames written to 2012-10-12-1350013979.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127352  
Worker for 2012-10-12-1350013984.76-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350013984.76-demo.wav has no TGID  
done - result 254704 frames written to 2012-10-12-1350013984.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
376900  
Worker for 2012-10-12-1350013988.1-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 753800 frames written to 2012-10-12-1350013988.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
134212  
Worker for 2012-10-12-1350013997.34-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 268424 frames written to 2012-10-12-1350013997.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
198703  
Worker for 2012-10-12-1350014001.93-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 397406 frames written to 2012-10-12-1350014001.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1136708  
Worker for 2012-10-12-1350014007.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2273416 frames written to 2012-10-12-1350014007.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113732  
Worker for 2012-10-12-1350014036.29-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 227464 frames written to 2012-10-12-1350014036.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1913924  
Worker for 2012-10-12-1350014039.75-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 3827848 frames written to 2012-10-12-1350014039.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
170780  
Worker for 2012-10-12-1350014085.61-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 341560 frames written to 2012-10-12-1350014085.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2132036  
Worker for 2012-10-12-1350014089.97-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 4264072 frames written to 2012-10-12-1350014089.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1104964  
Worker for 2012-10-12-1350014141.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014141.06-demo.wav has no TGID  
done - result 2209928 frames written to 2012-10-12-1350014141.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132164  
Worker for 2012-10-12-1350014167.67-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 264328 frames written to 2012-10-12-1350014167.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151737  
Worker for 2012-10-12-1350014171.66-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 303474 frames written to 2012-10-12-1350014171.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110660  
Worker for 2012-10-12-1350014175.54-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 221320 frames written to 2012-10-12-1350014175.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
267328  
Worker for 2012-10-12-1350014178.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014178.84-demo.wav has no TGID  
done - result 534656 frames written to 2012-10-12-1350014178.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
247876  
Worker for 2012-10-12-1350014185.44-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 495752 frames written to 2012-10-12-1350014185.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350014191.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350014191.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1243204  
Worker for 2012-10-12-1350014194.54-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2486408 frames written to 2012-10-12-1350014194.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1208262  
Worker for 2012-10-12-1350014225.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014225.26-demo.wav has no TGID  
done - result 2416524 frames written to 2012-10-12-1350014225.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147413  
Worker for 2012-10-12-1350014254.33-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 294826 frames written to 2012-10-12-1350014254.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
559172  
Worker for 2012-10-12-1350014258.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014258.06-demo.wav has no TGID  
done - result 1118344 frames written to 2012-10-12-1350014258.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
227396  
Worker for 2012-10-12-1350014271.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 454792 frames written to 2012-10-12-1350014271.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
215796  
Worker for 2012-10-12-1350014277.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 431592 frames written to 2012-10-12-1350014277.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
187460  
Worker for 2012-10-12-1350014283.36-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014283.36-demo.wav has no TGID  
done - result 374920 frames written to 2012-10-12-1350014283.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
172712  
Worker for 2012-10-12-1350014288.52-demo.wav  
GLG,i1045420,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 345424 frames written to 2012-10-12-1350014288.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
495684  
Worker for 2012-10-12-1350014293.39-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 991368 frames written to 2012-10-12-1350014293.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
172100  
Worker for 2012-10-12-1350014306.16-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 344200 frames written to 2012-10-12-1350014306.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
198724  
Worker for 2012-10-12-1350014310.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 397448 frames written to 2012-10-12-1350014310.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
280601  
Worker for 2012-10-12-1350014315.7-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 561202 frames written to 2012-10-12-1350014315.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
793484  
Worker for 2012-10-12-1350014322.68-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014322.68-demo.wav has no TGID  
done - result 1586968 frames written to 2012-10-12-1350014322.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108612  
Worker for 2012-10-12-1350014345.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014345.14-demo.wav has no TGID  
done - result 217224 frames written to 2012-10-12-1350014345.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350014348.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014348.1-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350014348.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350014350.57-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 209032 frames written to 2012-10-12-1350014350.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74410  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
659524  
Worker for 2012-10-12-1350014356.63-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014356.63-demo.wav has no TGID  
done - result 1319048 frames written to 2012-10-12-1350014356.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350014372.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014372.56-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350014372.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106164  
Worker for 2012-10-12-1350014392.82-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 212328 frames written to 2012-10-12-1350014392.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76064  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
588868  
Worker for 2012-10-12-1350014398.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014398.03-demo.wav has no TGID  
done - result 1177736 frames written to 2012-10-12-1350014398.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350014412.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014412.24-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350014412.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
148616  
Worker for 2012-10-12-1350014468.04-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 297232 frames written to 2012-10-12-1350014468.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
171076  
Worker for 2012-10-12-1350014472.39-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 342152 frames written to 2012-10-12-1350014472.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
197616  
Worker for 2012-10-12-1350014476.77-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 395232 frames written to 2012-10-12-1350014476.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
799961  
Worker for 2012-10-12-1350014482.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014482.03-demo.wav has no TGID  
done - result 1599922 frames written to 2012-10-12-1350014482.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350014505.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014505.32-demo.wav has no TGID  
done - result 213128 frames written to 2012-10-12-1350014505.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350014508.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014508.12-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350014508.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350014518.52-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 211080 frames written to 2012-10-12-1350014518.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
150596  
Worker for 2012-10-12-1350014522.14-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 301192 frames written to 2012-10-12-1350014522.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350014526.27-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 213128 frames written to 2012-10-12-1350014526.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1091652  
Worker for 2012-10-12-1350014529.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014529.17-demo.wav has no TGID  
done - result 2183304 frames written to 2012-10-12-1350014529.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
284735  
Worker for 2012-10-12-1350014555.41-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 569470 frames written to 2012-10-12-1350014555.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2217028  
Worker for 2012-10-12-1350014562.82-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014562.82-demo.wav has no TGID  
done - result 4434056 frames written to 2012-10-12-1350014562.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
393284  
Worker for 2012-10-12-1350014616.25-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 786568 frames written to 2012-10-12-1350014616.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
284698  
Worker for 2012-10-12-1350014625.93-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 569396 frames written to 2012-10-12-1350014625.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1132589  
Worker for 2012-10-12-1350014633.26-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2265178 frames written to 2012-10-12-1350014633.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1168183  
Worker for 2012-10-12-1350014662.8-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014662.8-demo.wav has no TGID  
done - result 2336366 frames written to 2012-10-12-1350014662.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
515140  
Worker for 2012-10-12-1350014690.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1030280 frames written to 2012-10-12-1350014690.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
126002  
Worker for 2012-10-12-1350014703.32-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 252004 frames written to 2012-10-12-1350014703.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
938052  
Worker for 2012-10-12-1350014706.61-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1876104 frames written to 2012-10-12-1350014706.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175172  
Worker for 2012-10-12-1350014729.41-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 350344 frames written to 2012-10-12-1350014729.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
590916  
Worker for 2012-10-12-1350014734.09-demo.wav  
GLG,30234,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1181832 frames written to 2012-10-12-1350014734.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
770116  
Worker for 2012-10-12-1350014748.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014748.39-demo.wav has no TGID  
done - result 1540232 frames written to 2012-10-12-1350014748.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
200772  
Worker for 2012-10-12-1350014766.93-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 401544 frames written to 2012-10-12-1350014766.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
148484  
Worker for 2012-10-12-1350014772.04-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 296968 frames written to 2012-10-12-1350014772.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
420932  
Worker for 2012-10-12-1350014776.46-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 841864 frames written to 2012-10-12-1350014776.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
265618  
Worker for 2012-10-12-1350014789.16-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 531236 frames written to 2012-10-12-1350014789.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175172  
Worker for 2012-10-12-1350014795.79-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 350344 frames written to 2012-10-12-1350014795.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76846  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
288763  
Worker for 2012-10-12-1350014802.8-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 577526 frames written to 2012-10-12-1350014802.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
144452  
Worker for 2012-10-12-1350014809.98-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 288904 frames written to 2012-10-12-1350014809.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350014814.83-demo.wav  
GLG,44039,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 192648 frames written to 2012-10-12-1350014814.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1015525  
Worker for 2012-10-12-1350014817.43-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014817.43-demo.wav has no TGID  
done - result 2031050 frames written to 2012-10-12-1350014817.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350014845.82-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014845.82-demo.wav has no TGID  
done - result 229512 frames written to 2012-10-12-1350014845.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350014848.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350014848.78-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350014848.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
170347  
Worker for 2012-10-12-1350014979.59-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 340694 frames written to 2012-10-12-1350014979.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
656311  
Worker for 2012-10-12-1350014984.93-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1312622 frames written to 2012-10-12-1350014984.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
262212  
Worker for 2012-10-12-1350015000.78-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 524424 frames written to 2012-10-12-1350015000.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
721988  
Worker for 2012-10-12-1350015007.18-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015007.18-demo.wav has no TGID  
done - result 1443976 frames written to 2012-10-12-1350015007.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
453700  
Worker for 2012-10-12-1350015024.57-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015024.57-demo.wav has no TGID  
done - result 907400 frames written to 2012-10-12-1350015024.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
749636  
Worker for 2012-10-12-1350015035.48-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015035.48-demo.wav has no TGID  
done - result 1499272 frames written to 2012-10-12-1350015035.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350015053.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015053.5-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350015053.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
181981  
Worker for 2012-10-12-1350015187.71-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 363962 frames written to 2012-10-12-1350015187.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74829  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
644164  
Worker for 2012-10-12-1350015193.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015193.7-demo.wav has no TGID  
done - result 1288328 frames written to 2012-10-12-1350015193.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350015209.22-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015209.22-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350015209.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75610  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
150868  
Worker for 2012-10-12-1350015355.49-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 301736 frames written to 2012-10-12-1350015355.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
255854  
Worker for 2012-10-12-1350015360.46-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 511708 frames written to 2012-10-12-1350015360.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
203844  
Worker for 2012-10-12-1350015366.9-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 407688 frames written to 2012-10-12-1350015366.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
663620  
Worker for 2012-10-12-1350015371.98-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1327240 frames written to 2012-10-12-1350015371.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350015388.04-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 184456 frames written to 2012-10-12-1350015388.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114680  
Worker for 2012-10-12-1350015390.5-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 229360 frames written to 2012-10-12-1350015390.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
796740  
Worker for 2012-10-12-1350015394.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015394.55-demo.wav has no TGID  
done - result 1593480 frames written to 2012-10-12-1350015394.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350015413.69-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015413.69-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350015413.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350015416.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015416.23-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350015416.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
44106  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
121318  
Worker for 2012-10-12-1350015622.79-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 242636 frames written to 2012-10-12-1350015622.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
631405  
Worker for 2012-10-12-1350015627.21-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1262810 frames written to 2012-10-12-1350015627.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
852036  
Worker for 2012-10-12-1350015642.45-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1704072 frames written to 2012-10-12-1350015642.45-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2851908  
Worker for 2012-10-12-1350015662.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015662.88-demo.wav has no TGID  
done - result 5703816 frames written to 2012-10-12-1350015662.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
625732  
Worker for 2012-10-12-1350015731.63-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015731.63-demo.wav has no TGID  
done - result 1251464 frames written to 2012-10-12-1350015731.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350015746.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015746.71-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350015746.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350015749.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015749.25-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350015749.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153089  
Worker for 2012-10-12-1350015754.75-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 306178 frames written to 2012-10-12-1350015754.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
612467  
Worker for 2012-10-12-1350015759.72-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1224934 frames written to 2012-10-12-1350015759.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
250918  
Worker for 2012-10-12-1350015774.76-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 501836 frames written to 2012-10-12-1350015774.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
713974  
Worker for 2012-10-12-1350015781.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015781.94-demo.wav has no TGID  
done - result 1427948 frames written to 2012-10-12-1350015781.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
458820  
Worker for 2012-10-12-1350015799.22-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 917640 frames written to 2012-10-12-1350015799.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
842944  
Worker for 2012-10-12-1350015810.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015810.79-demo.wav has no TGID  
done - result 1685888 frames written to 2012-10-12-1350015810.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350015835.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015835.09-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350015835.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350015837.69-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015837.69-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350015837.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173742  
Worker for 2012-10-12-1350015852.64-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 347484 frames written to 2012-10-12-1350015852.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141380  
Worker for 2012-10-12-1350015856.89-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 282760 frames written to 2012-10-12-1350015856.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
172656  
Worker for 2012-10-12-1350015861.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 345312 frames written to 2012-10-12-1350015861.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
131119  
Worker for 2012-10-12-1350015865.74-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 262238 frames written to 2012-10-12-1350015865.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
429235  
Worker for 2012-10-12-1350015869.84-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 858470 frames written to 2012-10-12-1350015869.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
185412  
Worker for 2012-10-12-1350015883.15-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 370824 frames written to 2012-10-12-1350015883.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
594815  
Worker for 2012-10-12-1350015887.74-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015887.74-demo.wav has no TGID  
done - result 1189630 frames written to 2012-10-12-1350015887.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350015905.77-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015905.77-demo.wav has no TGID  
done - result 215176 frames written to 2012-10-12-1350015905.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350015908.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015908.75-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350015908.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
115652  
Worker for 2012-10-12-1350015968.61-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 231304 frames written to 2012-10-12-1350015968.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
545860  
Worker for 2012-10-12-1350015972.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015972.72-demo.wav has no TGID  
done - result 1091720 frames written to 2012-10-12-1350015972.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350015985.85-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350015985.85-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350015985.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105481  
Worker for 2012-10-12-1350016000.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 210962 frames written to 2012-10-12-1350016000.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
118852  
Worker for 2012-10-12-1350016003.21-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 237704 frames written to 2012-10-12-1350016003.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
259140  
Worker for 2012-10-12-1350016006.48-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 518280 frames written to 2012-10-12-1350016006.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
270404  
Worker for 2012-10-12-1350016013.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016013.23-demo.wav has no TGID  
done - result 540808 frames written to 2012-10-12-1350016013.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
511457  
Worker for 2012-10-12-1350016019.92-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016019.92-demo.wav has no TGID  
done - result 1022914 frames written to 2012-10-12-1350016019.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350016038.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016038.06-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350016038.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
119650  
Worker for 2012-10-12-1350016046.51-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 239300 frames written to 2012-10-12-1350016046.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
560196  
Worker for 2012-10-12-1350016050.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016050.86-demo.wav has no TGID  
done - result 1120392 frames written to 2012-10-12-1350016050.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350016064.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016064.72-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350016064.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350016067.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016067.33-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350016067.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146326  
Worker for 2012-10-12-1350016078.28-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 292652 frames written to 2012-10-12-1350016078.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75408  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
197700  
Worker for 2012-10-12-1350016083.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 395400 frames written to 2012-10-12-1350016083.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
229198  
Worker for 2012-10-12-1350016089.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 458396 frames written to 2012-10-12-1350016089.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
370867  
Worker for 2012-10-12-1350016096.11-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 741734 frames written to 2012-10-12-1350016096.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138308  
Worker for 2012-10-12-1350016105.31-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 276616 frames written to 2012-10-12-1350016105.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1189537  
Worker for 2012-10-12-1350016108.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2379074 frames written to 2012-10-12-1350016108.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152644  
Worker for 2012-10-12-1350016140.95-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 305288 frames written to 2012-10-12-1350016140.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
257585  
Worker for 2012-10-12-1350016145.74-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 515170 frames written to 2012-10-12-1350016145.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
337987  
Worker for 2012-10-12-1350016152.44-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 675974 frames written to 2012-10-12-1350016152.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74708  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
122948  
Worker for 2012-10-12-1350016162.92-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 245896 frames written to 2012-10-12-1350016162.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
376900  
Worker for 2012-10-12-1350016166.31-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 753800 frames written to 2012-10-12-1350016166.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
136229  
Worker for 2012-10-12-1350016177.23-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 272458 frames written to 2012-10-12-1350016177.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
365636  
Worker for 2012-10-12-1350016181.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016181.14-demo.wav has no TGID  
done - result 731272 frames written to 2012-10-12-1350016181.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
747588  
Worker for 2012-10-12-1350016190.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016190.16-demo.wav has no TGID  
done - result 1495176 frames written to 2012-10-12-1350016190.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139332  
Worker for 2012-10-12-1350016208.39-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 278664 frames written to 2012-10-12-1350016208.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350016212.49-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 198792 frames written to 2012-10-12-1350016212.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
128068  
Worker for 2012-10-12-1350016215.11-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 256136 frames written to 2012-10-12-1350016215.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77880  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
897092  
Worker for 2012-10-12-1350016221.42-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1794184 frames written to 2012-10-12-1350016221.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1007684  
Worker for 2012-10-12-1350016243.05-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016243.05-demo.wav has no TGID  
done - result 2015368 frames written to 2012-10-12-1350016243.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
485872  
Worker for 2012-10-12-1350016267.71-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 971744 frames written to 2012-10-12-1350016267.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
237215  
Worker for 2012-10-12-1350016280.29-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 474430 frames written to 2012-10-12-1350016280.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
245828  
Worker for 2012-10-12-1350016286.15-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 491656 frames written to 2012-10-12-1350016286.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1419329  
Worker for 2012-10-12-1350016292.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016292.81-demo.wav has no TGID  
done - result 2838658 frames written to 2012-10-12-1350016292.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
488892  
Worker for 2012-10-12-1350016326.82-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016326.82-demo.wav has no TGID  
done - result 977784 frames written to 2012-10-12-1350016326.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350016343.61-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016343.61-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350016343.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350016346.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016346.12-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350016346.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
162624  
Worker for 2012-10-12-1350016376.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 325248 frames written to 2012-10-12-1350016376.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
236612  
Worker for 2012-10-12-1350016380.7-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 473224 frames written to 2012-10-12-1350016380.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
202584  
Worker for 2012-10-12-1350016386.99-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 405168 frames written to 2012-10-12-1350016386.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
777321  
Worker for 2012-10-12-1350016392.67-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1554642 frames written to 2012-10-12-1350016392.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350016411.4-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 198792 frames written to 2012-10-12-1350016411.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
509990  
Worker for 2012-10-12-1350016414.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016414.72-demo.wav has no TGID  
done - result 1019980 frames written to 2012-10-12-1350016414.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350016431.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016431.02-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350016431.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350016433.64-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016433.64-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350016433.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105484  
Worker for 2012-10-12-1350016466.06-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 210968 frames written to 2012-10-12-1350016466.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138308  
Worker for 2012-10-12-1350016468.9-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 276616 frames written to 2012-10-12-1350016468.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
248856  
Worker for 2012-10-12-1350016472.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 497712 frames written to 2012-10-12-1350016472.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1492036  
Worker for 2012-10-12-1350016478.9-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2984072 frames written to 2012-10-12-1350016478.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109636  
Worker for 2012-10-12-1350016514.91-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 219272 frames written to 2012-10-12-1350016514.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1263684  
Worker for 2012-10-12-1350016518.44-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2527368 frames written to 2012-10-12-1350016518.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
169028  
Worker for 2012-10-12-1350016548.91-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 338056 frames written to 2012-10-12-1350016548.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111662  
Worker for 2012-10-12-1350016553.96-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 223324 frames written to 2012-10-12-1350016553.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1271866  
Worker for 2012-10-12-1350016557.29-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2543732 frames written to 2012-10-12-1350016557.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
525380  
Worker for 2012-10-12-1350016589.87-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1050760 frames written to 2012-10-12-1350016589.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
390491  
Worker for 2012-10-12-1350016603.47-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 780982 frames written to 2012-10-12-1350016603.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
142360  
Worker for 2012-10-12-1350016613.06-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 284720 frames written to 2012-10-12-1350016613.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
780356  
Worker for 2012-10-12-1350016617.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016617.32-demo.wav has no TGID  
done - result 1560712 frames written to 2012-10-12-1350016617.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
170052  
Worker for 2012-10-12-1350016636.22-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 340104 frames written to 2012-10-12-1350016636.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
222276  
Worker for 2012-10-12-1350016641.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 444552 frames written to 2012-10-12-1350016641.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
665622  
Worker for 2012-10-12-1350016647.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016647.2-demo.wav has no TGID  
done - result 1331244 frames written to 2012-10-12-1350016647.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
510895  
Worker for 2012-10-12-1350016663.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016663.2-demo.wav has no TGID  
done - result 1021790 frames written to 2012-10-12-1350016663.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350016681.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016681.37-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350016681.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350016683.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016683.88-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350016683.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249924  
Worker for 2012-10-12-1350016687.16-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 499848 frames written to 2012-10-12-1350016687.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
286544  
Worker for 2012-10-12-1350016694.64-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 573088 frames written to 2012-10-12-1350016694.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
759779  
Worker for 2012-10-12-1350016702.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016702.56-demo.wav has no TGID  
done - result 1519558 frames written to 2012-10-12-1350016702.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350016720.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016720.88-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350016720.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350016723.74-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016723.74-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350016723.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105491  
Worker for 2012-10-12-1350016738.53-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 210982 frames written to 2012-10-12-1350016738.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
491588  
Worker for 2012-10-12-1350016742.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016742.3-demo.wav has no TGID  
done - result 983176 frames written to 2012-10-12-1350016742.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350016754.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016754.25-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350016754.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350016756.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016756.81-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350016756.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
248110  
Worker for 2012-10-12-1350016774.5-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 496220 frames written to 2012-10-12-1350016774.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249924  
Worker for 2012-10-12-1350016783.58-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 499848 frames written to 2012-10-12-1350016783.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1088580  
Worker for 2012-10-12-1350016791.31-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 2177160 frames written to 2012-10-12-1350016791.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
160794  
Worker for 2012-10-12-1350016819.8-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016819.8-demo.wav has no TGID  
done - result 321588 frames written to 2012-10-12-1350016819.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
294980  
Worker for 2012-10-12-1350016823.81-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 589960 frames written to 2012-10-12-1350016823.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
180054  
Worker for 2012-10-12-1350016831.84-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 360108 frames written to 2012-10-12-1350016831.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
767044  
Worker for 2012-10-12-1350016837.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016837.37-demo.wav has no TGID  
done - result 1534088 frames written to 2012-10-12-1350016837.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350016855.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016855.78-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350016855.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114613  
Worker for 2012-10-12-1350016928.19-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 229226 frames written to 2012-10-12-1350016928.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
528452  
Worker for 2012-10-12-1350016932.26-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016932.26-demo.wav has no TGID  
done - result 1056904 frames written to 2012-10-12-1350016932.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350016945.0-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350016945.0-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350016945.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
189227  
Worker for 2012-10-12-1350016959.54-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 378454 frames written to 2012-10-12-1350016959.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
227335  
Worker for 2012-10-12-1350016964.71-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 454670 frames written to 2012-10-12-1350016964.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
363131  
Worker for 2012-10-12-1350016971.26-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 726262 frames written to 2012-10-12-1350016971.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2970692  
Worker for 2012-10-12-1350016980.62-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 5941384 frames written to 2012-10-12-1350016980.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
390917  
Worker for 2012-10-12-1350017051.58-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 781834 frames written to 2012-10-12-1350017051.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
194478  
Worker for 2012-10-12-1350017061.49-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 388956 frames written to 2012-10-12-1350017061.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
161845  
Worker for 2012-10-12-1350017069.21-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 323690 frames written to 2012-10-12-1350017069.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
876612  
Worker for 2012-10-12-1350017073.3-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1753224 frames written to 2012-10-12-1350017073.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
191917  
Worker for 2012-10-12-1350017096.84-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 383834 frames written to 2012-10-12-1350017096.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139332  
Worker for 2012-10-12-1350017101.73-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 278664 frames written to 2012-10-12-1350017101.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
516164  
Worker for 2012-10-12-1350017105.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017105.33-demo.wav has no TGID  
done - result 1032328 frames written to 2012-10-12-1350017105.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
420932  
Worker for 2012-10-12-1350017117.84-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 841864 frames written to 2012-10-12-1350017117.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
675845  
Worker for 2012-10-12-1350017128.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017128.78-demo.wav has no TGID  
done - result 1351690 frames written to 2012-10-12-1350017128.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350017145.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017145.01-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350017145.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
140486  
Worker for 2012-10-12-1350017149.54-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 280972 frames written to 2012-10-12-1350017149.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
582724  
Worker for 2012-10-12-1350017154.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017154.17-demo.wav has no TGID  
done - result 1165448 frames written to 2012-10-12-1350017154.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350017168.24-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017168.24-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350017168.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350017170.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017170.79-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350017170.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
257092  
Worker for 2012-10-12-1350017173.08-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 514184 frames written to 2012-10-12-1350017173.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
148548  
Worker for 2012-10-12-1350017179.36-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 297096 frames written to 2012-10-12-1350017179.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109570  
Worker for 2012-10-12-1350017183.14-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 219140 frames written to 2012-10-12-1350017183.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
203844  
Worker for 2012-10-12-1350017185.99-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017185.99-demo.wav has no TGID  
done - result 407688 frames written to 2012-10-12-1350017185.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152644  
Worker for 2012-10-12-1350017191.08-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 305288 frames written to 2012-10-12-1350017191.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
168894  
Worker for 2012-10-12-1350017195.89-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 337788 frames written to 2012-10-12-1350017195.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
833604  
Worker for 2012-10-12-1350017200.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017200.3-demo.wav has no TGID  
done - result 1667208 frames written to 2012-10-12-1350017200.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
547325  
Worker for 2012-10-12-1350017220.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017220.39-demo.wav has no TGID  
done - result 1094650 frames written to 2012-10-12-1350017220.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350017238.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017238.09-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350017238.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350017240.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017240.5-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350017240.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105115  
Worker for 2012-10-12-1350017246.0-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 210230 frames written to 2012-10-12-1350017246.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350017248.64-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 200840 frames written to 2012-10-12-1350017248.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350017251.48-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 204936 frames written to 2012-10-12-1350017251.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
116804  
Worker for 2012-10-12-1350017254.18-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 233608 frames written to 2012-10-12-1350017254.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
208848  
Worker for 2012-10-12-1350017257.46-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 417696 frames written to 2012-10-12-1350017257.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
759876  
Worker for 2012-10-12-1350017263.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017263.34-demo.wav has no TGID  
done - result 1519752 frames written to 2012-10-12-1350017263.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350017281.64-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017281.64-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350017281.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350017284.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017284.3-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350017284.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
130634  
Worker for 2012-10-12-1350017336.62-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 261268 frames written to 2012-10-12-1350017336.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
118852  
Worker for 2012-10-12-1350017339.93-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 237704 frames written to 2012-10-12-1350017339.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1154116  
Worker for 2012-10-12-1350017343.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017343.96-demo.wav has no TGID  
done - result 2308232 frames written to 2012-10-12-1350017343.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
513756  
Worker for 2012-10-12-1350017371.67-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017371.67-demo.wav has no TGID  
done - result 1027512 frames written to 2012-10-12-1350017371.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350017389.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017389.35-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350017389.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350017391.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017391.96-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350017391.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105059  
Worker for 2012-10-12-1350017509.26-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 210118 frames written to 2012-10-12-1350017509.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
237090  
Worker for 2012-10-12-1350017515.29-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 474180 frames written to 2012-10-12-1350017515.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
648260  
Worker for 2012-10-12-1350017521.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017521.86-demo.wav has no TGID  
done - result 1296520 frames written to 2012-10-12-1350017521.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350017537.51-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017537.51-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350017537.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350017540.0-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017540.0-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350017540.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153340  
Worker for 2012-10-12-1350017559.36-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 306680 frames written to 2012-10-12-1350017559.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108612  
Worker for 2012-10-12-1350017563.68-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 217224 frames written to 2012-10-12-1350017563.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
162884  
Worker for 2012-10-12-1350017566.6-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 325768 frames written to 2012-10-12-1350017566.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2126912  
Worker for 2012-10-12-1350017571.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017571.84-demo.wav has no TGID  
done - result 4253824 frames written to 2012-10-12-1350017571.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
202820  
Worker for 2012-10-12-1350017622.74-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 405640 frames written to 2012-10-12-1350017622.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
141349  
Worker for 2012-10-12-1350017627.73-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 282698 frames written to 2012-10-12-1350017627.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1042500  
Worker for 2012-10-12-1350017631.44-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017631.44-demo.wav has no TGID  
done - result 2085000 frames written to 2012-10-12-1350017631.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
491616  
Worker for 2012-10-12-1350017656.51-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017656.51-demo.wav has no TGID  
done - result 983232 frames written to 2012-10-12-1350017656.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350017673.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017673.84-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350017673.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
182783  
Worker for 2012-10-12-1350017724.84-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 365566 frames written to 2012-10-12-1350017724.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
133188  
Worker for 2012-10-12-1350017729.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 266376 frames written to 2012-10-12-1350017729.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
150596  
Worker for 2012-10-12-1350017732.75-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 301192 frames written to 2012-10-12-1350017732.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
572465  
Worker for 2012-10-12-1350017736.95-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017736.95-demo.wav has no TGID  
done - result 1144930 frames written to 2012-10-12-1350017736.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350017754.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017754.78-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350017754.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350017757.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017757.4-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350017757.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109212  
Worker for 2012-10-12-1350017765.11-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 218424 frames written to 2012-10-12-1350017765.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
397658  
Worker for 2012-10-12-1350017768.93-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 795316 frames written to 2012-10-12-1350017768.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
133188  
Worker for 2012-10-12-1350017778.72-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 266376 frames written to 2012-10-12-1350017778.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
724860  
Worker for 2012-10-12-1350017783.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017783.38-demo.wav has no TGID  
done - result 1449720 frames written to 2012-10-12-1350017783.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350017801.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017801.08-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350017801.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
134433  
Worker for 2012-10-12-1350017856.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 268866 frames written to 2012-10-12-1350017856.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151620  
Worker for 2012-10-12-1350017859.48-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 303240 frames written to 2012-10-12-1350017859.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
120900  
Worker for 2012-10-12-1350017863.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 241800 frames written to 2012-10-12-1350017863.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77812  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93250  
Worker for 2012-10-12-1350017869.98-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 186500 frames written to 2012-10-12-1350017869.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
347204  
Worker for 2012-10-12-1350017872.93-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 694408 frames written to 2012-10-12-1350017872.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
228416  
Worker for 2012-10-12-1350017881.43-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 456832 frames written to 2012-10-12-1350017881.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
920644  
Worker for 2012-10-12-1350017887.35-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1841288 frames written to 2012-10-12-1350017887.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
753603  
Worker for 2012-10-12-1350017910.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017910.3-demo.wav has no TGID  
done - result 1507206 frames written to 2012-10-12-1350017910.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98262  
Worker for 2012-10-12-1350017928.41-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017928.41-demo.wav has no TGID  
done - result 196524 frames written to 2012-10-12-1350017928.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350017930.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017930.88-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350017930.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
124061  
Worker for 2012-10-12-1350017944.47-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 248122 frames written to 2012-10-12-1350017944.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
145553  
Worker for 2012-10-12-1350017948.79-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 291106 frames written to 2012-10-12-1350017948.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
512124  
Worker for 2012-10-12-1350017953.42-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017953.42-demo.wav has no TGID  
done - result 1024248 frames written to 2012-10-12-1350017953.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350017969.52-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017969.52-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350017969.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350017972.22-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 180360 frames written to 2012-10-12-1350017972.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
119751  
Worker for 2012-10-12-1350017987.45-demo.wav  
GLG,10301,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 239502 frames written to 2012-10-12-1350017987.45-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
627780  
Worker for 2012-10-12-1350017992.99-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350017992.99-demo.wav has no TGID  
done - result 1255560 frames written to 2012-10-12-1350017992.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
144452  
Worker for 2012-10-12-1350018008.1-demo.wav  
GLG,10301,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 288904 frames written to 2012-10-12-1350018008.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
367676  
Worker for 2012-10-12-1350018013.88-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 735352 frames written to 2012-10-12-1350018013.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
386550  
Worker for 2012-10-12-1350018023.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 773100 frames written to 2012-10-12-1350018023.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350018033.17-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 194696 frames written to 2012-10-12-1350018033.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
522410  
Worker for 2012-10-12-1350018036.71-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018036.71-demo.wav has no TGID  
done - result 1044820 frames written to 2012-10-12-1350018036.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350018052.95-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018052.95-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350018052.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350018055.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018055.55-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350018055.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
200365  
Worker for 2012-10-12-1350018097.35-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 400730 frames written to 2012-10-12-1350018097.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
680004  
Worker for 2012-10-12-1350018104.57-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018104.57-demo.wav has no TGID  
done - result 1360008 frames written to 2012-10-12-1350018104.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350018121.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018121.06-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350018121.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105245  
Worker for 2012-10-12-1350018139.8-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 210490 frames written to 2012-10-12-1350018139.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75679  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
602180  
Worker for 2012-10-12-1350018144.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018144.91-demo.wav has no TGID  
done - result 1204360 frames written to 2012-10-12-1350018144.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350018159.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018159.37-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350018159.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105976  
Worker for 2012-10-12-1350018226.56-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 211952 frames written to 2012-10-12-1350018226.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350018229.53-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 184456 frames written to 2012-10-12-1350018229.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
365636  
Worker for 2012-10-12-1350018232.22-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 731272 frames written to 2012-10-12-1350018232.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1171792  
Worker for 2012-10-12-1350018241.49-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018241.49-demo.wav has no TGID  
done - result 2343584 frames written to 2012-10-12-1350018241.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350018273.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018273.14-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350018273.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350018275.76-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018275.76-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350018275.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
134840  
Worker for 2012-10-12-1350018284.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 269680 frames written to 2012-10-12-1350018284.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350018287.69-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 200840 frames written to 2012-10-12-1350018287.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
119876  
Worker for 2012-10-12-1350018290.33-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 239752 frames written to 2012-10-12-1350018290.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
531712  
Worker for 2012-10-12-1350018294.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018294.27-demo.wav has no TGID  
done - result 1063424 frames written to 2012-10-12-1350018294.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350018311.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018311.91-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350018311.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350018314.55-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018314.55-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350018314.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
195571  
Worker for 2012-10-12-1350018366.82-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 391142 frames written to 2012-10-12-1350018366.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
140356  
Worker for 2012-10-12-1350018372.25-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 280712 frames written to 2012-10-12-1350018372.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
575544  
Worker for 2012-10-12-1350018376.65-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018376.65-demo.wav has no TGID  
done - result 1151088 frames written to 2012-10-12-1350018376.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
230468  
Worker for 2012-10-12-1350018390.54-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 460936 frames written to 2012-10-12-1350018390.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1457220  
Worker for 2012-10-12-1350018396.29-demo.wav  
GLG,i1045200,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2914440 frames written to 2012-10-12-1350018396.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
583747  
Worker for 2012-10-12-1350018431.71-demo.wav  
GLG,i1045200,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1167494 frames written to 2012-10-12-1350018431.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
134212  
Worker for 2012-10-12-1350018445.82-demo.wav  
GLG,i1045200,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 268424 frames written to 2012-10-12-1350018445.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
770115  
Worker for 2012-10-12-1350018450.62-demo.wav  
GLG,i1045200,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1540230 frames written to 2012-10-12-1350018450.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
465016  
Worker for 2012-10-12-1350018471.64-demo.wav  
GLG,i1045200,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 930032 frames written to 2012-10-12-1350018471.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
503876  
Worker for 2012-10-12-1350018484.11-demo.wav  
GLG,44036,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 1007752 frames written to 2012-10-12-1350018484.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75360  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
655428  
Worker for 2012-10-12-1350018498.3-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1310856 frames written to 2012-10-12-1350018498.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
231492  
Worker for 2012-10-12-1350018515.57-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 462984 frames written to 2012-10-12-1350018515.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153668  
Worker for 2012-10-12-1350018521.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018521.56-demo.wav has no TGID  
done - result 307336 frames written to 2012-10-12-1350018521.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
361540  
Worker for 2012-10-12-1350018525.44-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 723080 frames written to 2012-10-12-1350018525.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1249348  
Worker for 2012-10-12-1350018534.21-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018534.21-demo.wav has no TGID  
done - result 2498696 frames written to 2012-10-12-1350018534.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
199748  
Worker for 2012-10-12-1350018564.17-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 399496 frames written to 2012-10-12-1350018564.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113732  
Worker for 2012-10-12-1350018569.12-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 227464 frames written to 2012-10-12-1350018569.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
578297  
Worker for 2012-10-12-1350018572.42-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018572.42-demo.wav has no TGID  
done - result 1156594 frames written to 2012-10-12-1350018572.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109636  
Worker for 2012-10-12-1350018590.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018590.46-demo.wav has no TGID  
done - result 219272 frames written to 2012-10-12-1350018590.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350018593.51-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018593.51-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350018593.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
159158  
Worker for 2012-10-12-1350018634.21-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 318316 frames written to 2012-10-12-1350018634.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
154692  
Worker for 2012-10-12-1350018639.07-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 309384 frames written to 2012-10-12-1350018639.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1439812  
Worker for 2012-10-12-1350018643.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018643.02-demo.wav has no TGID  
done - result 2879624 frames written to 2012-10-12-1350018643.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127358  
Worker for 2012-10-12-1350018677.92-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 254716 frames written to 2012-10-12-1350018677.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
237392  
Worker for 2012-10-12-1350018682.07-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 474784 frames written to 2012-10-12-1350018682.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
286816  
Worker for 2012-10-12-1350018688.75-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 573632 frames written to 2012-10-12-1350018688.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
723012  
Worker for 2012-10-12-1350018695.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018695.88-demo.wav has no TGID  
done - result 1446024 frames written to 2012-10-12-1350018695.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
258116  
Worker for 2012-10-12-1350018713.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018713.34-demo.wav has no TGID  
done - result 516232 frames written to 2012-10-12-1350018713.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
404666  
Worker for 2012-10-12-1350018720.19-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 809332 frames written to 2012-10-12-1350018720.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1021931  
Worker for 2012-10-12-1350018730.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018730.79-demo.wav has no TGID  
done - result 2043862 frames written to 2012-10-12-1350018730.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350018759.03-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018759.03-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350018759.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350018761.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018761.73-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350018761.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
149631  
Worker for 2012-10-12-1350018830.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 299262 frames written to 2012-10-12-1350018830.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138308  
Worker for 2012-10-12-1350018835.41-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 276616 frames written to 2012-10-12-1350018835.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1530948  
Worker for 2012-10-12-1350018838.97-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 3061896 frames written to 2012-10-12-1350018838.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1694000  
Worker for 2012-10-12-1350018875.69-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018875.69-demo.wav has no TGID  
done - result 3388000 frames written to 2012-10-12-1350018875.69-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350018920.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018920.33-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350018920.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350018922.99-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018922.99-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350018922.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123141  
Worker for 2012-10-12-1350018935.97-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 246282 frames written to 2012-10-12-1350018935.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
159960  
Worker for 2012-10-12-1350018940.27-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 319920 frames written to 2012-10-12-1350018940.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1816644  
Worker for 2012-10-12-1350018944.49-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018944.49-demo.wav has no TGID  
done - result 3633288 frames written to 2012-10-12-1350018944.49-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
669650  
Worker for 2012-10-12-1350018988.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350018988.37-demo.wav has no TGID  
done - result 1339300 frames written to 2012-10-12-1350018988.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
185412  
Worker for 2012-10-12-1350019004.55-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 370824 frames written to 2012-10-12-1350019004.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
638999  
Worker for 2012-10-12-1350019010.42-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019010.42-demo.wav has no TGID  
done - result 1277998 frames written to 2012-10-12-1350019010.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350019025.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019025.84-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350019025.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350019028.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019028.75-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350019028.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
128531  
Worker for 2012-10-12-1350019041.98-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 257062 frames written to 2012-10-12-1350019041.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146500  
Worker for 2012-10-12-1350019045.23-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 293000 frames written to 2012-10-12-1350019045.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
199748  
Worker for 2012-10-12-1350019048.98-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 399496 frames written to 2012-10-12-1350019048.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
164932  
Worker for 2012-10-12-1350019053.98-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 329864 frames written to 2012-10-12-1350019053.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2840627  
Worker for 2012-10-12-1350019058.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 5681254 frames written to 2012-10-12-1350019058.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
221252  
Worker for 2012-10-12-1350019125.95-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 442504 frames written to 2012-10-12-1350019125.95-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111326  
Worker for 2012-10-12-1350019132.51-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 222652 frames written to 2012-10-12-1350019132.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
595143  
Worker for 2012-10-12-1350019135.67-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019135.67-demo.wav has no TGID  
done - result 1190286 frames written to 2012-10-12-1350019135.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
119876  
Worker for 2012-10-12-1350019153.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019153.4-demo.wav has no TGID  
done - result 239752 frames written to 2012-10-12-1350019153.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350019156.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019156.46-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350019156.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350019158.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019158.94-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350019158.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
81988  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106128  
Worker for 2012-10-12-1350019166.07-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 212256 frames written to 2012-10-12-1350019166.07-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75451  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
313412  
Worker for 2012-10-12-1350019171.55-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 626824 frames written to 2012-10-12-1350019171.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350019179.89-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 213128 frames written to 2012-10-12-1350019179.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
181316  
Worker for 2012-10-12-1350019183.96-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 362632 frames written to 2012-10-12-1350019183.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
116684  
Worker for 2012-10-12-1350019188.51-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 233368 frames written to 2012-10-12-1350019188.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
968739  
Worker for 2012-10-12-1350019192.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019192.02-demo.wav has no TGID  
done - result 1937478 frames written to 2012-10-12-1350019192.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
485444  
Worker for 2012-10-12-1350019215.33-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 970888 frames written to 2012-10-12-1350019215.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
211012  
Worker for 2012-10-12-1350019227.26-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 422024 frames written to 2012-10-12-1350019227.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
269308  
Worker for 2012-10-12-1350019232.54-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 538616 frames written to 2012-10-12-1350019232.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
593972  
Worker for 2012-10-12-1350019239.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019239.54-demo.wav has no TGID  
done - result 1187944 frames written to 2012-10-12-1350019239.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350019258.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019258.9-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350019258.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
158431  
Worker for 2012-10-12-1350019290.22-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 316862 frames written to 2012-10-12-1350019290.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173124  
Worker for 2012-10-12-1350019295.02-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 346248 frames written to 2012-10-12-1350019295.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
406596  
Worker for 2012-10-12-1350019299.75-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 813192 frames written to 2012-10-12-1350019299.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
210998  
Worker for 2012-10-12-1350019312.39-demo.wav  
GLG,44036,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 421996 frames written to 2012-10-12-1350019312.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
244804  
Worker for 2012-10-12-1350019317.68-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019317.68-demo.wav has no TGID  
done - result 489608 frames written to 2012-10-12-1350019317.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
371780  
Worker for 2012-10-12-1350019323.75-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 743560 frames written to 2012-10-12-1350019323.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1280068  
Worker for 2012-10-12-1350019332.83-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019332.83-demo.wav has no TGID  
done - result 2560136 frames written to 2012-10-12-1350019332.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
713796  
Worker for 2012-10-12-1350019363.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019363.88-demo.wav has no TGID  
done - result 1427592 frames written to 2012-10-12-1350019363.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350019381.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019381.33-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350019381.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
166785  
Worker for 2012-10-12-1350019388.72-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 333570 frames written to 2012-10-12-1350019388.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75440  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
601156  
Worker for 2012-10-12-1350019394.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019394.12-demo.wav has no TGID  
done - result 1202312 frames written to 2012-10-12-1350019394.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350019408.64-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019408.64-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350019408.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106037  
Worker for 2012-10-12-1350019428.35-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 212074 frames written to 2012-10-12-1350019428.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
109636  
Worker for 2012-10-12-1350019431.05-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 219272 frames written to 2012-10-12-1350019431.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
581662  
Worker for 2012-10-12-1350019435.1-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1163324 frames written to 2012-10-12-1350019435.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1766468  
Worker for 2012-10-12-1350019449.13-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019449.13-demo.wav has no TGID  
done - result 3532936 frames written to 2012-10-12-1350019449.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
210805  
Worker for 2012-10-12-1350019492.12-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 421610 frames written to 2012-10-12-1350019492.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
231808  
Worker for 2012-10-12-1350019498.22-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 463616 frames written to 2012-10-12-1350019498.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
235588  
Worker for 2012-10-12-1350019504.47-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 471176 frames written to 2012-10-12-1350019504.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
498714  
Worker for 2012-10-12-1350019510.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 997428 frames written to 2012-10-12-1350019510.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
776053  
Worker for 2012-10-12-1350019523.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019523.12-demo.wav has no TGID  
done - result 1552106 frames written to 2012-10-12-1350019523.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350019541.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019541.84-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350019541.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350019544.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019544.3-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350019544.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
125707  
Worker for 2012-10-12-1350019568.88-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 251414 frames written to 2012-10-12-1350019568.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
115780  
Worker for 2012-10-12-1350019572.16-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 231560 frames written to 2012-10-12-1350019572.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1042467  
Worker for 2012-10-12-1350019575.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2084934 frames written to 2012-10-12-1350019575.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1457220  
Worker for 2012-10-12-1350019600.22-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 2914440 frames written to 2012-10-12-1350019600.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
117828  
Worker for 2012-10-12-1350019635.09-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 235656 frames written to 2012-10-12-1350019635.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110660  
Worker for 2012-10-12-1350019638.15-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 221320 frames written to 2012-10-12-1350019638.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1654852  
Worker for 2012-10-12-1350019641.67-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 3309704 frames written to 2012-10-12-1350019641.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
607300  
Worker for 2012-10-12-1350019682.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019682.01-demo.wav has no TGID  
done - result 1214600 frames written to 2012-10-12-1350019682.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350019696.83-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019696.83-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350019696.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173119  
Worker for 2012-10-12-1350019747.47-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 346238 frames written to 2012-10-12-1350019747.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
612654  
Worker for 2012-10-12-1350019753.14-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1225308 frames written to 2012-10-12-1350019753.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
308963  
Worker for 2012-10-12-1350019768.76-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 617926 frames written to 2012-10-12-1350019768.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
216132  
Worker for 2012-10-12-1350019776.33-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 432264 frames written to 2012-10-12-1350019776.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
529476  
Worker for 2012-10-12-1350019781.68-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019781.68-demo.wav has no TGID  
done - result 1058952 frames written to 2012-10-12-1350019781.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
217156  
Worker for 2012-10-12-1350019794.48-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,1,NONE,NONE,NONE  
done - result 434312 frames written to 2012-10-12-1350019794.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1112056  
Worker for 2012-10-12-1350019800.18-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019800.18-demo.wav has no TGID  
done - result 2224112 frames written to 2012-10-12-1350019800.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
550700  
Worker for 2012-10-12-1350019827.35-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 1101400 frames written to 2012-10-12-1350019827.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
873540  
Worker for 2012-10-12-1350019840.74-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019840.74-demo.wav has no TGID  
done - result 1747080 frames written to 2012-10-12-1350019840.74-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
776260  
Worker for 2012-10-12-1350019861.75-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,1,NONE,NONE,NONE  
done - result 1552520 frames written to 2012-10-12-1350019861.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
271428  
Worker for 2012-10-12-1350019880.42-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019880.42-demo.wav has no TGID  
done - result 542856 frames written to 2012-10-12-1350019880.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
463928  
Worker for 2012-10-12-1350019887.01-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 927856 frames written to 2012-10-12-1350019887.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
203832  
Worker for 2012-10-12-1350019898.16-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,0,NONE,NONE,NONE  
done - result 407664 frames written to 2012-10-12-1350019898.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
302133  
Worker for 2012-10-12-1350019903.17-demo.wav  
GLG,40068,NFM,0,0,CanberraBlackMnt,AustralianCapita,RFS Ops 1,1,1,NONE,NONE,NONE  
done - result 604266 frames written to 2012-10-12-1350019903.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
612621  
Worker for 2012-10-12-1350019910.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019910.54-demo.wav has no TGID  
done - result 1225242 frames written to 2012-10-12-1350019910.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350019928.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019928.23-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350019928.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350019931.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350019931.01-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350019931.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86072  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
150351  
Worker for 2012-10-12-1350020000.1-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 300702 frames written to 2012-10-12-1350020000.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
212036  
Worker for 2012-10-12-1350020003.94-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 424072 frames written to 2012-10-12-1350020003.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
662596  
Worker for 2012-10-12-1350020009.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020009.39-demo.wav has no TGID  
done - result 1325192 frames written to 2012-10-12-1350020009.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1432397  
Worker for 2012-10-12-1350020025.71-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 2864794 frames written to 2012-10-12-1350020025.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
142404  
Worker for 2012-10-12-1350020060.14-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 284808 frames written to 2012-10-12-1350020060.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
402500  
Worker for 2012-10-12-1350020064.24-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 805000 frames written to 2012-10-12-1350020064.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
745310  
Worker for 2012-10-12-1350020075.32-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020075.32-demo.wav has no TGID  
done - result 1490620 frames written to 2012-10-12-1350020075.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350020093.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020093.27-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350020093.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350020095.81-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020095.81-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350020095.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
143122  
Worker for 2012-10-12-1350020178.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 286244 frames written to 2012-10-12-1350020178.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
285025  
Worker for 2012-10-12-1350020183.25-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 570050 frames written to 2012-10-12-1350020183.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
281982  
Worker for 2012-10-12-1350020191.31-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 563964 frames written to 2012-10-12-1350020191.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
81988  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350020200.52-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350020200.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
161860  
Worker for 2012-10-12-1350020203.84-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 323720 frames written to 2012-10-12-1350020203.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
848964  
Worker for 2012-10-12-1350020208.18-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1697928 frames written to 2012-10-12-1350020208.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
791620  
Worker for 2012-10-12-1350020229.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020229.79-demo.wav has no TGID  
done - result 1583240 frames written to 2012-10-12-1350020229.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
529922  
Worker for 2012-10-12-1350020248.77-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1059844 frames written to 2012-10-12-1350020248.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
140356  
Worker for 2012-10-12-1350020266.58-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 280712 frames written to 2012-10-12-1350020266.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350020270.09-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 206984 frames written to 2012-10-12-1350020270.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1989700  
Worker for 2012-10-12-1350020272.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 3979400 frames written to 2012-10-12-1350020272.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
137268  
Worker for 2012-10-12-1350020320.97-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 274536 frames written to 2012-10-12-1350020320.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
566313  
Worker for 2012-10-12-1350020324.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020324.73-demo.wav has no TGID  
done - result 1132626 frames written to 2012-10-12-1350020324.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350020342.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020342.91-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350020342.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350020345.48-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020345.48-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350020345.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350020347.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020347.96-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350020347.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85196  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105887  
Worker for 2012-10-12-1350020382.79-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 211774 frames written to 2012-10-12-1350020382.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
337988  
Worker for 2012-10-12-1350020386.0-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 675976 frames written to 2012-10-12-1350020386.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
463914  
Worker for 2012-10-12-1350020394.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 927828 frames written to 2012-10-12-1350020394.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
527956  
Worker for 2012-10-12-1350020407.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020407.25-demo.wav has no TGID  
done - result 1055912 frames written to 2012-10-12-1350020407.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350020425.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020425.02-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350020425.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350020427.58-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020427.58-demo.wav has no TGID  
done - result 188552 frames written to 2012-10-12-1350020427.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104980  
Worker for 2012-10-12-1350020450.42-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 209960 frames written to 2012-10-12-1350020450.42-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
553028  
Worker for 2012-10-12-1350020454.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020454.56-demo.wav has no TGID  
done - result 1106056 frames written to 2012-10-12-1350020454.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350020467.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020467.98-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350020467.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
151894  
Worker for 2012-10-12-1350020543.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 303788 frames written to 2012-10-12-1350020543.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
154692  
Worker for 2012-10-12-1350020547.59-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 309384 frames written to 2012-10-12-1350020547.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
193604  
Worker for 2012-10-12-1350020551.54-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 387208 frames written to 2012-10-12-1350020551.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
785476  
Worker for 2012-10-12-1350020557.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020557.12-demo.wav has no TGID  
done - result 1570952 frames written to 2012-10-12-1350020557.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350020576.3-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020576.3-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350020576.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110348  
Worker for 2012-10-12-1350020628.64-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 220696 frames written to 2012-10-12-1350020628.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350020632.27-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 229512 frames written to 2012-10-12-1350020632.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
713796  
Worker for 2012-10-12-1350020635.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020635.7-demo.wav has no TGID  
done - result 1427592 frames written to 2012-10-12-1350020635.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
163675  
Worker for 2012-10-12-1350020653.08-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 327350 frames written to 2012-10-12-1350020653.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
741116  
Worker for 2012-10-12-1350020658.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020658.37-demo.wav has no TGID  
done - result 1482232 frames written to 2012-10-12-1350020658.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
94276  
Worker for 2012-10-12-1350020676.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020676.25-demo.wav has no TGID  
done - result 188552 frames written to 2012-10-12-1350020676.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
315460  
Worker for 2012-10-12-1350020678.6-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 630920 frames written to 2012-10-12-1350020678.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
921668  
Worker for 2012-10-12-1350020686.37-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020686.37-demo.wav has no TGID  
done - result 1843336 frames written to 2012-10-12-1350020686.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
477252  
Worker for 2012-10-12-1350020708.5-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 954504 frames written to 2012-10-12-1350020708.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
546884  
Worker for 2012-10-12-1350020720.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020720.93-demo.wav has no TGID  
done - result 1093768 frames written to 2012-10-12-1350020720.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350020734.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020734.19-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350020734.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
110660  
Worker for 2012-10-12-1350020736.7-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 221320 frames written to 2012-10-12-1350020736.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
263236  
Worker for 2012-10-12-1350020739.43-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 526472 frames written to 2012-10-12-1350020739.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91184  
Worker for 2012-10-12-1350020745.96-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 182368 frames written to 2012-10-12-1350020745.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
576222  
Worker for 2012-10-12-1350020748.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020748.86-demo.wav has no TGID  
done - result 1152444 frames written to 2012-10-12-1350020748.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350020766.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020766.73-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350020766.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350020769.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020769.35-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350020769.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
173223  
Worker for 2012-10-12-1350020830.91-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 346446 frames written to 2012-10-12-1350020830.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
219712  
Worker for 2012-10-12-1350020836.27-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 439424 frames written to 2012-10-12-1350020836.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
305220  
Worker for 2012-10-12-1350020842.06-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 610440 frames written to 2012-10-12-1350020842.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1365060  
Worker for 2012-10-12-1350020849.44-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020849.44-demo.wav has no TGID  
done - result 2730120 frames written to 2012-10-12-1350020849.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
522767  
Worker for 2012-10-12-1350020882.21-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020882.21-demo.wav has no TGID  
done - result 1045534 frames written to 2012-10-12-1350020882.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
305219  
Worker for 2012-10-12-1350020899.16-demo.wav  
GLG,44011,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 610438 frames written to 2012-10-12-1350020899.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
153668  
Worker for 2012-10-12-1350020906.73-demo.wav  
GLG,44011,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 307336 frames written to 2012-10-12-1350020906.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
806980  
Worker for 2012-10-12-1350020910.92-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020910.92-demo.wav has no TGID  
done - result 1613960 frames written to 2012-10-12-1350020910.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
503928  
Worker for 2012-10-12-1350020930.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020930.34-demo.wav has no TGID  
done - result 1007856 frames written to 2012-10-12-1350020930.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
134212  
Worker for 2012-10-12-1350020947.81-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 268424 frames written to 2012-10-12-1350020947.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
140356  
Worker for 2012-10-12-1350020952.1-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 280712 frames written to 2012-10-12-1350020952.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
300100  
Worker for 2012-10-12-1350020955.97-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 600200 frames written to 2012-10-12-1350020955.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
74452  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
688196  
Worker for 2012-10-12-1350020965.61-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020965.61-demo.wav has no TGID  
done - result 1376392 frames written to 2012-10-12-1350020965.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350020982.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020982.17-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350020982.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350020984.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350020984.73-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350020984.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
83012  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
318895  
Worker for 2012-10-12-1350021064.24-demo.wav  
GLG,44011,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 637790 frames written to 2012-10-12-1350021064.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1211912  
Worker for 2012-10-12-1350021072.04-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021072.04-demo.wav has no TGID  
done - result 2423824 frames written to 2012-10-12-1350021072.04-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350021104.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021104.96-demo.wav has no TGID  
done - result 211080 frames written to 2012-10-12-1350021104.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350021107.58-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021107.58-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350021107.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
279322  
Worker for 2012-10-12-1350021224.54-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 558644 frames written to 2012-10-12-1350021224.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
129092  
Worker for 2012-10-12-1350021231.39-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 258184 frames written to 2012-10-12-1350021231.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
553028  
Worker for 2012-10-12-1350021234.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021234.7-demo.wav has no TGID  
done - result 1106056 frames written to 2012-10-12-1350021234.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
748612  
Worker for 2012-10-12-1350021248.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021248.46-demo.wav has no TGID  
done - result 1497224 frames written to 2012-10-12-1350021248.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350021266.53-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021266.53-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350021266.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
68751  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
44106  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105283  
Worker for 2012-10-12-1350021329.91-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 210566 frames written to 2012-10-12-1350021329.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
646212  
Worker for 2012-10-12-1350021335.72-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021335.72-demo.wav has no TGID  
done - result 1292424 frames written to 2012-10-12-1350021335.72-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350021351.35-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021351.35-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350021351.35-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350021353.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021353.79-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350021353.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114321  
Worker for 2012-10-12-1350021406.83-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 228642 frames written to 2012-10-12-1350021406.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
443128  
Worker for 2012-10-12-1350021411.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 886256 frames written to 2012-10-12-1350021411.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
643140  
Worker for 2012-10-12-1350021422.83-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021422.83-demo.wav has no TGID  
done - result 1286280 frames written to 2012-10-12-1350021422.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350021438.45-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021438.45-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350021438.45-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350021440.99-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021440.99-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350021440.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
83012  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
579910  
Worker for 2012-10-12-1350021467.24-demo.wav  
GLG,30004,NFM,0,0,CanberraBlackMnt,RuralFireSvc-RFS,L GEORG,1,0,NONE,NONE,NONE  
done - result 1159820 frames written to 2012-10-12-1350021467.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
460868  
Worker for 2012-10-12-1350021481.29-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 921736 frames written to 2012-10-12-1350021481.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123972  
Worker for 2012-10-12-1350021492.51-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 247944 frames written to 2012-10-12-1350021492.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
529476  
Worker for 2012-10-12-1350021495.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021495.9-demo.wav has no TGID  
done - result 1058952 frames written to 2012-10-12-1350021495.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
505057  
Worker for 2012-10-12-1350021508.76-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021508.76-demo.wav has no TGID  
done - result 1010114 frames written to 2012-10-12-1350021508.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350021526.28-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021526.28-demo.wav has no TGID  
done - result 190600 frames written to 2012-10-12-1350021526.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350021528.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021528.75-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350021528.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
215019  
Worker for 2012-10-12-1350021534.81-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 430038 frames written to 2012-10-12-1350021534.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350021540.18-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 204936 frames written to 2012-10-12-1350021540.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
518212  
Worker for 2012-10-12-1350021542.8-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,1,NONE,NONE,NONE  
done - result 1036424 frames written to 2012-10-12-1350021542.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
735534  
Worker for 2012-10-12-1350021555.4-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021555.4-demo.wav has no TGID  
done - result 1471068 frames written to 2012-10-12-1350021555.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350021573.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021573.06-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350021573.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350021575.66-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021575.66-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350021575.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113041  
Worker for 2012-10-12-1350021651.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 226082 frames written to 2012-10-12-1350021651.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155716  
Worker for 2012-10-12-1350021655.14-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 311432 frames written to 2012-10-12-1350021655.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
154692  
Worker for 2012-10-12-1350021659.06-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 309384 frames written to 2012-10-12-1350021659.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
169019  
Worker for 2012-10-12-1350021662.93-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 338038 frames written to 2012-10-12-1350021662.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
761924  
Worker for 2012-10-12-1350021667.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021667.84-demo.wav has no TGID  
done - result 1523848 frames written to 2012-10-12-1350021667.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350021686.21-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021686.21-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350021686.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
116091  
Worker for 2012-10-12-1350021810.7-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 232182 frames written to 2012-10-12-1350021810.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146500  
Worker for 2012-10-12-1350021813.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 293000 frames written to 2012-10-12-1350021813.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108612  
Worker for 2012-10-12-1350021817.4-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 217224 frames written to 2012-10-12-1350021817.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
143364  
Worker for 2012-10-12-1350021820.23-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 286728 frames written to 2012-10-12-1350021820.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
722609  
Worker for 2012-10-12-1350021825.05-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1445218 frames written to 2012-10-12-1350021825.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
248900  
Worker for 2012-10-12-1350021842.87-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 497800 frames written to 2012-10-12-1350021842.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
364612  
Worker for 2012-10-12-1350021849.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021849.12-demo.wav has no TGID  
done - result 729224 frames written to 2012-10-12-1350021849.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
511866  
Worker for 2012-10-12-1350021857.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021857.98-demo.wav has no TGID  
done - result 1023732 frames written to 2012-10-12-1350021857.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350021875.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021875.7-demo.wav has no TGID  
done - result 198792 frames written to 2012-10-12-1350021875.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350021878.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350021878.23-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350021878.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
121969  
Worker for 2012-10-12-1350022064.33-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 243938 frames written to 2012-10-12-1350022064.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127044  
Worker for 2012-10-12-1350022067.51-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 254088 frames written to 2012-10-12-1350022067.51-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
325583  
Worker for 2012-10-12-1350022072.14-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 651166 frames written to 2012-10-12-1350022072.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
918596  
Worker for 2012-10-12-1350022080.14-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1837192 frames written to 2012-10-12-1350022080.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188292  
Worker for 2012-10-12-1350022102.23-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 376584 frames written to 2012-10-12-1350022102.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
756786  
Worker for 2012-10-12-1350022107.24-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 1513572 frames written to 2012-10-12-1350022107.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
401760  
Worker for 2012-10-12-1350022126.26-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 803520 frames written to 2012-10-12-1350022126.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
293956  
Worker for 2012-10-12-1350022136.6-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022136.6-demo.wav has no TGID  
done - result 587912 frames written to 2012-10-12-1350022136.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
739077  
Worker for 2012-10-12-1350022144.22-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022144.22-demo.wav has no TGID  
done - result 1478154 frames written to 2012-10-12-1350022144.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350022162.09-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022162.09-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350022162.09-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112770  
Worker for 2012-10-12-1350022243.05-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 225540 frames written to 2012-10-12-1350022243.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
122948  
Worker for 2012-10-12-1350022247.68-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 245896 frames written to 2012-10-12-1350022247.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2245700  
Worker for 2012-10-12-1350022251.43-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022251.43-demo.wav has no TGID  
done - result 4491400 frames written to 2012-10-12-1350022251.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
503544  
Worker for 2012-10-12-1350022305.11-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022305.11-demo.wav has no TGID  
done - result 1007088 frames written to 2012-10-12-1350022305.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350022321.44-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022321.44-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350022321.44-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112652  
Worker for 2012-10-12-1350022348.06-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 225304 frames written to 2012-10-12-1350022348.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
263236  
Worker for 2012-10-12-1350022352.22-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 526472 frames written to 2012-10-12-1350022352.22-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
137284  
Worker for 2012-10-12-1350022358.73-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 274568 frames written to 2012-10-12-1350022358.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
171076  
Worker for 2012-10-12-1350022362.47-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 342152 frames written to 2012-10-12-1350022362.47-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
354122  
Worker for 2012-10-12-1350022366.83-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022366.83-demo.wav has no TGID  
done - result 708244 frames written to 2012-10-12-1350022366.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249924  
Worker for 2012-10-12-1350022375.53-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 499848 frames written to 2012-10-12-1350022375.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
428100  
Worker for 2012-10-12-1350022381.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022381.88-demo.wav has no TGID  
done - result 856200 frames written to 2012-10-12-1350022381.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
547901  
Worker for 2012-10-12-1350022392.31-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022392.31-demo.wav has no TGID  
done - result 1095802 frames written to 2012-10-12-1350022392.31-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350022410.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022410.1-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350022410.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350022412.62-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022412.62-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350022412.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104715  
Worker for 2012-10-12-1350022459.41-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 209430 frames written to 2012-10-12-1350022459.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
163908  
Worker for 2012-10-12-1350022462.5-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 327816 frames written to 2012-10-12-1350022462.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
247876  
Worker for 2012-10-12-1350022466.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 495752 frames written to 2012-10-12-1350022466.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
293894  
Worker for 2012-10-12-1350022473.53-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 587788 frames written to 2012-10-12-1350022473.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
538701  
Worker for 2012-10-12-1350022483.6-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022483.6-demo.wav has no TGID  
done - result 1077402 frames written to 2012-10-12-1350022483.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350022500.28-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022500.28-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350022500.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350022502.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022502.89-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350022502.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350022505.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022505.2-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350022505.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
83012  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
271807  
Worker for 2012-10-12-1350022591.16-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 543614 frames written to 2012-10-12-1350022591.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
298052  
Worker for 2012-10-12-1350022598.11-demo.wav  
GLG,10301,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 596104 frames written to 2012-10-12-1350022598.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
669764  
Worker for 2012-10-12-1350022607.2-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022607.2-demo.wav has no TGID  
done - result 1339528 frames written to 2012-10-12-1350022607.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350022623.36-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022623.36-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350022623.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147524  
Worker for 2012-10-12-1350022625.94-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 295048 frames written to 2012-10-12-1350022625.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
137414  
Worker for 2012-10-12-1350022631.16-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 274828 frames written to 2012-10-12-1350022631.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
246851  
Worker for 2012-10-12-1350022634.65-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 493702 frames written to 2012-10-12-1350022634.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
683076  
Worker for 2012-10-12-1350022640.77-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022640.77-demo.wav has no TGID  
done - result 1366152 frames written to 2012-10-12-1350022640.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
520075  
Worker for 2012-10-12-1350022657.25-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022657.25-demo.wav has no TGID  
done - result 1040150 frames written to 2012-10-12-1350022657.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350022674.66-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022674.66-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350022674.66-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350022677.27-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022677.27-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350022677.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
171114  
Worker for 2012-10-12-1350022779.43-demo.wav  
GLG,40093,NFM,0,0,CanberraMtAinsli,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 342228 frames written to 2012-10-12-1350022779.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75024  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
370756  
Worker for 2012-10-12-1350022785.06-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 741512 frames written to 2012-10-12-1350022785.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
331822  
Worker for 2012-10-12-1350022794.17-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 663644 frames written to 2012-10-12-1350022794.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
200768  
Worker for 2012-10-12-1350022802.58-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 401536 frames written to 2012-10-12-1350022802.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
767044  
Worker for 2012-10-12-1350022807.6-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022807.6-demo.wav has no TGID  
done - result 1534088 frames written to 2012-10-12-1350022807.6-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
447556  
Worker for 2012-10-12-1350022826.1-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 895112 frames written to 2012-10-12-1350022826.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249103  
Worker for 2012-10-12-1350022837.62-demo.wav  
GLG,40093,NFM,0,0,CanberraBlackMnt,AustralianCapita,PCL Rural,1,0,NONE,NONE,NONE  
done - result 498206 frames written to 2012-10-12-1350022837.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1975364  
Worker for 2012-10-12-1350022844.28-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022844.28-demo.wav has no TGID  
done - result 3950728 frames written to 2012-10-12-1350022844.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
649284  
Worker for 2012-10-12-1350022891.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022891.98-demo.wav has no TGID  
done - result 1298568 frames written to 2012-10-12-1350022891.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350022907.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022907.54-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350022907.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350022910.18-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350022910.18-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350022910.18-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
85060  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249058  
Worker for 2012-10-12-1350023085.91-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 498116 frames written to 2012-10-12-1350023085.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
138290  
Worker for 2012-10-12-1350023092.55-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 276580 frames written to 2012-10-12-1350023092.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
686148  
Worker for 2012-10-12-1350023096.79-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023096.79-demo.wav has no TGID  
done - result 1372296 frames written to 2012-10-12-1350023096.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350023113.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023113.5-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350023113.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123284  
Worker for 2012-10-12-1350023155.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 246568 frames written to 2012-10-12-1350023155.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
224324  
Worker for 2012-10-12-1350023159.01-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 448648 frames written to 2012-10-12-1350023159.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
164932  
Worker for 2012-10-12-1350023164.55-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 329864 frames written to 2012-10-12-1350023164.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
584292  
Worker for 2012-10-12-1350023168.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023168.94-demo.wav has no TGID  
done - result 1168584 frames written to 2012-10-12-1350023168.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350023186.75-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023186.75-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350023186.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
96324  
Worker for 2012-10-12-1350023189.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023189.38-demo.wav has no TGID  
done - result 192648 frames written to 2012-10-12-1350023189.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105601  
Worker for 2012-10-12-1350023195.32-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 211202 frames written to 2012-10-12-1350023195.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139332  
Worker for 2012-10-12-1350023198.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 278664 frames written to 2012-10-12-1350023198.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
136260  
Worker for 2012-10-12-1350023202.0-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 272520 frames written to 2012-10-12-1350023202.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
473134  
Worker for 2012-10-12-1350023206.28-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023206.28-demo.wav has no TGID  
done - result 946268 frames written to 2012-10-12-1350023206.28-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
745540  
Worker for 2012-10-12-1350023217.76-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1491080 frames written to 2012-10-12-1350023217.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
164932  
Worker for 2012-10-12-1350023236.02-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 329864 frames written to 2012-10-12-1350023236.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
607964  
Worker for 2012-10-12-1350023240.29-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023240.29-demo.wav has no TGID  
done - result 1215928 frames written to 2012-10-12-1350023240.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
323652  
Worker for 2012-10-12-1350023255.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 647304 frames written to 2012-10-12-1350023255.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350023263.03-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 223368 frames written to 2012-10-12-1350023263.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
584233  
Worker for 2012-10-12-1350023266.19-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023266.19-demo.wav has no TGID  
done - result 1168466 frames written to 2012-10-12-1350023266.19-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
106564  
Worker for 2012-10-12-1350023284.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023284.06-demo.wav has no TGID  
done - result 213128 frames written to 2012-10-12-1350023284.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350023286.77-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023286.77-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350023286.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
66561  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
166014  
Worker for 2012-10-12-1350023343.99-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 332028 frames written to 2012-10-12-1350023343.99-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
190233  
Worker for 2012-10-12-1350023349.32-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 380466 frames written to 2012-10-12-1350023349.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
230468  
Worker for 2012-10-12-1350023354.25-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 460936 frames written to 2012-10-12-1350023354.25-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1071722  
Worker for 2012-10-12-1350023360.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023360.08-demo.wav has no TGID  
done - result 2143444 frames written to 2012-10-12-1350023360.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350023389.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023389.46-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350023389.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350023392.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023392.01-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350023392.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104928  
Worker for 2012-10-12-1350023644.34-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 209856 frames written to 2012-10-12-1350023644.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
184750  
Worker for 2012-10-12-1350023647.98-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 369500 frames written to 2012-10-12-1350023647.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1329216  
Worker for 2012-10-12-1350023653.11-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2658432 frames written to 2012-10-12-1350023653.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
178244  
Worker for 2012-10-12-1350023687.53-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 356488 frames written to 2012-10-12-1350023687.53-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
575556  
Worker for 2012-10-12-1350023691.98-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023691.98-demo.wav has no TGID  
done - result 1151112 frames written to 2012-10-12-1350023691.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
175777  
Worker for 2012-10-12-1350023706.37-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 351554 frames written to 2012-10-12-1350023706.37-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
180291  
Worker for 2012-10-12-1350023710.93-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 360582 frames written to 2012-10-12-1350023710.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
196676  
Worker for 2012-10-12-1350023715.98-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 393352 frames written to 2012-10-12-1350023715.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
673760  
Worker for 2012-10-12-1350023721.23-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023721.23-demo.wav has no TGID  
done - result 1347520 frames written to 2012-10-12-1350023721.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
500492  
Worker for 2012-10-12-1350023737.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023737.56-demo.wav has no TGID  
done - result 1000984 frames written to 2012-10-12-1350023737.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350023755.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023755.12-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350023755.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
249315  
Worker for 2012-10-12-1350023873.4-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 498630 frames written to 2012-10-12-1350023873.4-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132157  
Worker for 2012-10-12-1350023880.86-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 264314 frames written to 2012-10-12-1350023880.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
464961  
Worker for 2012-10-12-1350023885.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023885.14-demo.wav has no TGID  
done - result 929922 frames written to 2012-10-12-1350023885.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
489198  
Worker for 2012-10-12-1350023896.41-demo.wav  
GLG,44029,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 978396 frames written to 2012-10-12-1350023896.41-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350023908.32-demo.wav  
GLG,44029,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 229512 frames written to 2012-10-12-1350023908.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127033  
Worker for 2012-10-12-1350023911.21-demo.wav  
GLG,44029,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 254066 frames written to 2012-10-12-1350023911.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2950212  
Worker for 2012-10-12-1350023914.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023914.38-demo.wav has no TGID  
done - result 5900424 frames written to 2012-10-12-1350023914.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152644  
Worker for 2012-10-12-1350023984.85-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 305288 frames written to 2012-10-12-1350023984.85-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
147524  
Worker for 2012-10-12-1350023989.34-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 295048 frames written to 2012-10-12-1350023989.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
607037  
Worker for 2012-10-12-1350023993.61-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350023993.61-demo.wav has no TGID  
done - result 1214074 frames written to 2012-10-12-1350023993.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
329796  
Worker for 2012-10-12-1350024008.23-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 659592 frames written to 2012-10-12-1350024008.23-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
472994  
Worker for 2012-10-12-1350024017.48-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 945988 frames written to 2012-10-12-1350024017.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
324676  
Worker for 2012-10-12-1350024029.29-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 649352 frames written to 2012-10-12-1350024029.29-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2394606  
Worker for 2012-10-12-1350024037.2-demo.wav  
GLG,44011,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 4789212 frames written to 2012-10-12-1350024037.2-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
2442395  
Worker for 2012-10-12-1350024094.58-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024094.58-demo.wav has no TGID  
done - result 4884790 frames written to 2012-10-12-1350024094.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104072  
Worker for 2012-10-12-1350024157.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024157.02-demo.wav has no TGID  
done - result 208144 frames written to 2012-10-12-1350024157.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
155729  
Worker for 2012-10-12-1350024161.43-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 311458 frames written to 2012-10-12-1350024161.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
75139  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
606276  
Worker for 2012-10-12-1350024166.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024166.94-demo.wav has no TGID  
done - result 1212552 frames written to 2012-10-12-1350024166.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350024181.59-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024181.59-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350024181.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350024184.12-demo.wav  
GLG,44029,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 211080 frames written to 2012-10-12-1350024184.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
308878  
Worker for 2012-10-12-1350024187.79-demo.wav  
GLG,44011,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 617756 frames written to 2012-10-12-1350024187.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
159810  
Worker for 2012-10-12-1350024195.64-demo.wav  
GLG,44011,NFM,0,0,CanberraMtAinsli,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 319620 frames written to 2012-10-12-1350024195.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
673860  
Worker for 2012-10-12-1350024199.78-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024199.78-demo.wav has no TGID  
done - result 1347720 frames written to 2012-10-12-1350024199.78-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
472132  
Worker for 2012-10-12-1350024216.03-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 944264 frames written to 2012-10-12-1350024216.03-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350024227.48-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 202888 frames written to 2012-10-12-1350024227.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111664  
Worker for 2012-10-12-1350024230.89-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 223328 frames written to 2012-10-12-1350024230.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
657476  
Worker for 2012-10-12-1350024234.08-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024234.08-demo.wav has no TGID  
done - result 1314952 frames written to 2012-10-12-1350024234.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
189508  
Worker for 2012-10-12-1350024249.89-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 379016 frames written to 2012-10-12-1350024249.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
705379  
Worker for 2012-10-12-1350024255.33-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024255.33-demo.wav has no TGID  
done - result 1410758 frames written to 2012-10-12-1350024255.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102467  
Worker for 2012-10-12-1350024274.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024274.56-demo.wav has no TGID  
done - result 204934 frames written to 2012-10-12-1350024274.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
83012  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
203122  
Worker for 2012-10-12-1350024333.11-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 406244 frames written to 2012-10-12-1350024333.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
233540  
Worker for 2012-10-12-1350024338.12-demo.wav  
GLG,44011,NFM,0,0,CanberraBlackMnt,AustralianCapita,ACTION 44011,1,0,NONE,NONE,NONE  
done - result 467080 frames written to 2012-10-12-1350024338.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
779377  
Worker for 2012-10-12-1350024343.82-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024343.82-demo.wav has no TGID  
done - result 1558754 frames written to 2012-10-12-1350024343.82-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
502030  
Worker for 2012-10-12-1350024362.65-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024362.65-demo.wav has no TGID  
done - result 1004060 frames written to 2012-10-12-1350024362.65-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350024379.64-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024379.64-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350024379.64-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
88132  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
120798  
Worker for 2012-10-12-1350024455.56-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 241596 frames written to 2012-10-12-1350024455.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350024459.8-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 215176 frames written to 2012-10-12-1350024459.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1049668  
Worker for 2012-10-12-1350024463.16-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 2099336 frames written to 2012-10-12-1350024463.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
582346  
Worker for 2012-10-12-1350024489.89-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024489.89-demo.wav has no TGID  
done - result 1164692 frames written to 2012-10-12-1350024489.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
128068  
Worker for 2012-10-12-1350024506.59-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024506.59-demo.wav has no TGID  
done - result 256136 frames written to 2012-10-12-1350024506.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350024509.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024509.91-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350024509.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
130391  
Worker for 2012-10-12-1350024547.63-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 260782 frames written to 2012-10-12-1350024547.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
148509  
Worker for 2012-10-12-1350024552.27-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 297018 frames written to 2012-10-12-1350024552.27-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
271399  
Worker for 2012-10-12-1350024556.0-demo.wav  
GLG,44028,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 542798 frames written to 2012-10-12-1350024556.0-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
77892  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350024564.01-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024564.01-demo.wav has no TGID  
done - result 229512 frames written to 2012-10-12-1350024564.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
501638  
Worker for 2012-10-12-1350024566.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024566.9-demo.wav has no TGID  
done - result 1003276 frames written to 2012-10-12-1350024566.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350024584.46-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024584.46-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350024584.46-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
112708  
Worker for 2012-10-12-1350024586.91-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 225416 frames written to 2012-10-12-1350024586.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
335940  
Worker for 2012-10-12-1350024590.93-demo.wav  
GLG,44028,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 671880 frames written to 2012-10-12-1350024590.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
276548  
Worker for 2012-10-12-1350024599.13-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024599.13-demo.wav has no TGID  
done - result 553096 frames written to 2012-10-12-1350024599.13-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
562381  
Worker for 2012-10-12-1350024605.89-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1124762 frames written to 2012-10-12-1350024605.89-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350024623.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 211080 frames written to 2012-10-12-1350024623.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
149572  
Worker for 2012-10-12-1350024627.01-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 299144 frames written to 2012-10-12-1350024627.01-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
164932  
Worker for 2012-10-12-1350024630.94-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 329864 frames written to 2012-10-12-1350024630.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
168004  
Worker for 2012-10-12-1350024635.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 336008 frames written to 2012-10-12-1350024635.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
750660  
Worker for 2012-10-12-1350024639.93-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024639.93-demo.wav has no TGID  
done - result 1501320 frames written to 2012-10-12-1350024639.93-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
107588  
Worker for 2012-10-12-1350024658.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024658.02-demo.wav has no TGID  
done - result 215176 frames written to 2012-10-12-1350024658.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
121622  
Worker for 2012-10-12-1350024735.97-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 243244 frames written to 2012-10-12-1350024735.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
267401  
Worker for 2012-10-12-1350024740.26-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 534802 frames written to 2012-10-12-1350024740.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
143428  
Worker for 2012-10-12-1350024746.88-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 286856 frames written to 2012-10-12-1350024746.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
482372  
Worker for 2012-10-12-1350024751.56-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024751.56-demo.wav has no TGID  
done - result 964744 frames written to 2012-10-12-1350024751.56-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
529960  
Worker for 2012-10-12-1350024763.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024763.17-demo.wav has no TGID  
done - result 1059920 frames written to 2012-10-12-1350024763.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
161860  
Worker for 2012-10-12-1350024780.67-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 323720 frames written to 2012-10-12-1350024780.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139332  
Worker for 2012-10-12-1350024785.58-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 278664 frames written to 2012-10-12-1350024785.58-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
160836  
Worker for 2012-10-12-1350024789.17-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 321672 frames written to 2012-10-12-1350024789.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1014918  
Worker for 2012-10-12-1350024793.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024793.9-demo.wav has no TGID  
done - result 2029836 frames written to 2012-10-12-1350024793.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
103492  
Worker for 2012-10-12-1350024822.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024822.84-demo.wav has no TGID  
done - result 206984 frames written to 2012-10-12-1350024822.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350024825.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350024825.54-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350024825.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
176558  
Worker for 2012-10-12-1350024992.87-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 353116 frames written to 2012-10-12-1350024992.87-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123972  
Worker for 2012-10-12-1350024997.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 247944 frames written to 2012-10-12-1350024997.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
582724  
Worker for 2012-10-12-1350025000.9-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025000.9-demo.wav has no TGID  
done - result 1165448 frames written to 2012-10-12-1350025000.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
731204  
Worker for 2012-10-12-1350025015.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025015.34-demo.wav has no TGID  
done - result 1462408 frames written to 2012-10-12-1350025015.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
101444  
Worker for 2012-10-12-1350025032.97-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025032.97-demo.wav has no TGID  
done - result 202888 frames written to 2012-10-12-1350025032.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350025035.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025035.5-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350025035.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
163694  
Worker for 2012-10-12-1350025112.57-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 327388 frames written to 2012-10-12-1350025112.57-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
129092  
Worker for 2012-10-12-1350025116.67-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 258184 frames written to 2012-10-12-1350025116.67-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
469600  
Worker for 2012-10-12-1350025119.88-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025119.88-demo.wav has no TGID  
done - result 939200 frames written to 2012-10-12-1350025119.88-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
182340  
Worker for 2012-10-12-1350025131.21-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 364680 frames written to 2012-10-12-1350025131.21-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
571922  
Worker for 2012-10-12-1350025136.14-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025136.14-demo.wav has no TGID  
done - result 1143844 frames written to 2012-10-12-1350025136.14-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
104516  
Worker for 2012-10-12-1350025152.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025152.5-demo.wav has no TGID  
done - result 209032 frames written to 2012-10-12-1350025152.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350025155.11-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025155.11-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350025155.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90150  
Worker for 2012-10-12-1350025157.59-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025157.59-demo.wav has no TGID  
done - result 180300 frames written to 2012-10-12-1350025157.59-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
83012  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76868  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
44111  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132647  
Worker for 2012-10-12-1350025290.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 265294 frames written to 2012-10-12-1350025290.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
99396  
Worker for 2012-10-12-1350025294.84-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 198792 frames written to 2012-10-12-1350025294.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146500  
Worker for 2012-10-12-1350025297.71-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 293000 frames written to 2012-10-12-1350025297.71-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
188484  
Worker for 2012-10-12-1350025301.81-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 376968 frames written to 2012-10-12-1350025301.81-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
595077  
Worker for 2012-10-12-1350025306.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025306.96-demo.wav has no TGID  
done - result 1190154 frames written to 2012-10-12-1350025306.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350025325.43-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025325.43-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350025325.43-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350025327.94-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025327.94-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350025327.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127396  
Worker for 2012-10-12-1350025604.34-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 254792 frames written to 2012-10-12-1350025604.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350025607.55-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 229512 frames written to 2012-10-12-1350025607.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
168986  
Worker for 2012-10-12-1350025611.68-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 337972 frames written to 2012-10-12-1350025611.68-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
158788  
Worker for 2012-10-12-1350025615.92-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 317576 frames written to 2012-10-12-1350025615.92-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
716868  
Worker for 2012-10-12-1350025620.02-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025620.02-demo.wav has no TGID  
done - result 1433736 frames written to 2012-10-12-1350025620.02-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
150486  
Worker for 2012-10-12-1350025637.32-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 300972 frames written to 2012-10-12-1350025637.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
773436  
Worker for 2012-10-12-1350025641.8-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 1546872 frames written to 2012-10-12-1350025641.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152140  
Worker for 2012-10-12-1350025661.7-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 304280 frames written to 2012-10-12-1350025661.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
113732  
Worker for 2012-10-12-1350025665.83-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 227464 frames written to 2012-10-12-1350025665.83-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1734724  
Worker for 2012-10-12-1350025668.7-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025668.7-demo.wav has no TGID  
done - result 3469448 frames written to 2012-10-12-1350025668.7-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
686148  
Worker for 2012-10-12-1350025710.38-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025710.38-demo.wav has no TGID  
done - result 1372296 frames written to 2012-10-12-1350025710.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
100420  
Worker for 2012-10-12-1350025726.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025726.91-demo.wav has no TGID  
done - result 200840 frames written to 2012-10-12-1350025726.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
139334  
Worker for 2012-10-12-1350025736.12-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 278668 frames written to 2012-10-12-1350025736.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
379380  
Worker for 2012-10-12-1350025740.8-demo.wav  
GLG,40067,NFM,0,0,CanberraBlackMnt,,,1,0,NONE,NONE,NONE  
done - result 758760 frames written to 2012-10-12-1350025740.8-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
79940  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
662596  
Worker for 2012-10-12-1350025751.77-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025751.77-demo.wav has no TGID  
done - result 1325192 frames written to 2012-10-12-1350025751.77-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
524356  
Worker for 2012-10-12-1350025767.73-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 1048712 frames written to 2012-10-12-1350025767.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
120900  
Worker for 2012-10-12-1350025780.97-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 241800 frames written to 2012-10-12-1350025780.97-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
268288  
Worker for 2012-10-12-1350025784.32-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 536576 frames written to 2012-10-12-1350025784.32-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
350275  
Worker for 2012-10-12-1350025790.84-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025790.84-demo.wav has no TGID  
done - result 700550 frames written to 2012-10-12-1350025790.84-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
527090  
Worker for 2012-10-12-1350025799.36-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025799.36-demo.wav has no TGID  
done - result 1054180 frames written to 2012-10-12-1350025799.36-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350025817.5-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025817.5-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350025817.5-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350025819.91-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025819.91-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350025819.91-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
84036  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
276421  
Worker for 2012-10-12-1350025844.79-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 552842 frames written to 2012-10-12-1350025844.79-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
505812  
Worker for 2012-10-12-1350025852.11-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025852.11-demo.wav has no TGID  
done - result 1011624 frames written to 2012-10-12-1350025852.11-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
114756  
Worker for 2012-10-12-1350025868.1-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025868.1-demo.wav has no TGID  
done - result 229512 frames written to 2012-10-12-1350025868.1-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350025871.05-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025871.05-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350025871.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
152904  
Worker for 2012-10-12-1350025913.61-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 305808 frames written to 2012-10-12-1350025913.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
241732  
Worker for 2012-10-12-1350025918.33-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 483464 frames written to 2012-10-12-1350025918.33-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127941  
Worker for 2012-10-12-1350025924.75-demo.wav  
GLG,40067,NFM,0,0,CanberraMtAinsli,,,1,0,NONE,NONE,NONE  
done - result 255882 frames written to 2012-10-12-1350025924.75-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
202820  
Worker for 2012-10-12-1350025928.06-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025928.06-demo.wav has no TGID  
done - result 405640 frames written to 2012-10-12-1350025928.06-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
522970  
Worker for 2012-10-12-1350025933.12-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025933.12-demo.wav has no TGID  
done - result 1045940 frames written to 2012-10-12-1350025933.12-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350025950.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025950.86-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350025950.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
92228  
Worker for 2012-10-12-1350025953.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350025953.54-demo.wav has no TGID  
done - result 184456 frames written to 2012-10-12-1350025953.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
135842  
Worker for 2012-10-12-1350025988.3-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 271684 frames written to 2012-10-12-1350025988.3-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350025991.63-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 186504 frames written to 2012-10-12-1350025991.63-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
366642  
Worker for 2012-10-12-1350025993.94-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 733284 frames written to 2012-10-12-1350025993.94-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
321245  
Worker for 2012-10-12-1350026003.62-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 642490 frames written to 2012-10-12-1350026003.62-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
704580  
Worker for 2012-10-12-1350026012.17-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026012.17-demo.wav has no TGID  
done - result 1409160 frames written to 2012-10-12-1350026012.17-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
98372  
Worker for 2012-10-12-1350026029.05-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026029.05-demo.wav has no TGID  
done - result 196744 frames written to 2012-10-12-1350026029.05-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
91204  
Worker for 2012-10-12-1350026031.48-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026031.48-demo.wav has no TGID  
done - result 182408 frames written to 2012-10-12-1350026031.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
87108  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
127460  
Worker for 2012-10-12-1350026121.24-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 254920 frames written to 2012-10-12-1350026121.24-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
132164  
Worker for 2012-10-12-1350026124.52-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 264328 frames written to 2012-10-12-1350026124.52-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
222276  
Worker for 2012-10-12-1350026127.9-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 444552 frames written to 2012-10-12-1350026127.9-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
796985  
Worker for 2012-10-12-1350026133.96-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026133.96-demo.wav has no TGID  
done - result 1593970 frames written to 2012-10-12-1350026133.96-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
111684  
Worker for 2012-10-12-1350026157.54-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026157.54-demo.wav has no TGID  
done - result 223368 frames written to 2012-10-12-1350026157.54-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
90180  
Worker for 2012-10-12-1350026160.73-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026160.73-demo.wav has no TGID  
done - result 180360 frames written to 2012-10-12-1350026160.73-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76501  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
166462  
Worker for 2012-10-12-1350026328.38-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 332924 frames written to 2012-10-12-1350026328.38-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
95300  
Worker for 2012-10-12-1350026332.55-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 190600 frames written to 2012-10-12-1350026332.55-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1215271  
Worker for 2012-10-12-1350026335.16-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026335.16-demo.wav has no TGID  
done - result 2430542 frames written to 2012-10-12-1350026335.16-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
102468  
Worker for 2012-10-12-1350026368.34-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026368.34-demo.wav has no TGID  
done - result 204936 frames written to 2012-10-12-1350026368.34-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
93252  
Worker for 2012-10-12-1350026370.86-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026370.86-demo.wav has no TGID  
done - result 186504 frames written to 2012-10-12-1350026370.86-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
86084  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
76866  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
108106  
Worker for 2012-10-12-1350026723.98-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 216212 frames written to 2012-10-12-1350026723.98-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
105540  
Worker for 2012-10-12-1350026727.26-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 211080 frames written to 2012-10-12-1350026727.26-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
1018948  
Worker for 2012-10-12-1350026730.76-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026730.76-demo.wav has no TGID  
done - result 2037896 frames written to 2012-10-12-1350026730.76-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
146500  
Worker for 2012-10-12-1350026755.15-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 293000 frames written to 2012-10-12-1350026755.15-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
787196  
Worker for 2012-10-12-1350026759.39-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026759.39-demo.wav has no TGID  
done - result 1574392 frames written to 2012-10-12-1350026759.39-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
97348  
Worker for 2012-10-12-1350026778.48-demo.wav  
GLG,,,,,,,,,,,,  
2012-10-12-1350026778.48-demo.wav has no TGID  
done - result 194696 frames written to 2012-10-12-1350026778.48-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
89156  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
144005  
Worker for 2012-10-12-1350026786.08-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 288010 frames written to 2012-10-12-1350026786.08-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
123972  
Worker for 2012-10-12-1350026789.61-demo.wav  
GLG,10106,NFM,0,0,CanberraMtAinsli,FireandRescNewSo,SYD 7,1,0,NONE,NONE,NONE  
done - result 247944 frames written to 2012-10-12-1350026789.61-demo.wav  
ready to record again  
True  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
510939  
Worker for 2012-10-12-1350026792.66-demo.wav  
 
 
file:a/run.bat -> file:b/run.bat
python scannr.py > output.txt python scannr.py > output.txt
  pause
file:a/scannr.py -> file:b/scannr.py
import logging import logging
   
logging.basicConfig(level=logging.DEBUG, logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s\t%(levelname)s\t%(message)s') format='%(asctime)s\t%(levelname)s\t%(message)s')
   
import snd import snd
import time import time
from datetime import date from datetime import date
import threading import threading
from pydispatch import dispatcher from pydispatch import dispatcher
import wave import wave
import serial import serial
#python -m serial.tools.miniterm -p COM20 -e -b 115200 --cr #python -m serial.tools.miniterm -p COM20 -e -b 115200 --cr
import psycopg2 import psycopg2
import csv import csv
import sys,os import sys
  import os
   
   
sys.path.insert(0, os.path.join(os.path.dirname(__file__) or '.', 'pynma')) sys.path.insert(0, os.path.join(os.path.dirname(__file__) or '.', 'pynma'))
import pynma import pynma
   
filename = "demo.wav" filename = "demo.wav"
  last_call = (None, None, None)
MIN_LENGTH = 90000 MIN_LENGTH = 90000
  lock = threading.RLock()
   
   
def worker(filename, length): def get_call():
  global lock
  with lock:
  ser.write("GLG\r")
  line = ser.readline() # read a '\n' terminated line
  print line
  reader = csv.reader([line])
  for row in reader:
  #GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0
  #,NONE,NONE,NONE
  if (row[0] != 'GLG' or row[1] == ''):
  print "uh oh"
  return (None, None, None)
  if (row[1] != ''):
  tgid = row[1]
  #nma.push("scannr", "ping", filename, "http://www.google.com")
  tgname = row[7]
  sitename = row[5]
  return (tgid, tgname, sitename)
   
   
  def log_recording(tgid, tgname, sitename, filename, length):
  cur = conn.cursor()
  cur.execute("INSERT INTO recordings \
  (tgid, tgname, sitename, filename, length)\
  VALUES (%s, %s, %s, %s, %s)", ( tgid, tgname, sitename, filename, length))
  conn.commit()
  cur.close()
   
   
  def tgid_worker():
  global last_call
  last_call = get_call()
   
   
  def save_worker(filename, length):
  global last_call
"""thread worker function """thread worker function
http://www.doughellmann.com/PyMOTW/threading/ http://www.doughellmann.com/PyMOTW/threading/
https://github.com/uskr/pynma https://github.com/uskr/pynma
ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k test.3gp ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k test.3gp
http://stackoverflow.com/questions/2559746/getting-error-while-converting-wav-to-amr-using-ffmpeg http://stackoverflow.com/questions/2559746/getting-error-while-converting-
  wav-to-amr-using-ffmpeg
""" """
print 'Worker for '+filename print 'Worker for ' + filename
ser.write("GLG\r") (oldtgid, oldtgname, oldsitename) = last_call
line = ser.readline() # read a '\n' terminated line (tgid, tgname, sitename) = get_call()
print line if oldtgid == tgid:
reader = csv.reader([line]) if tgid is None or tgid == '':
for row in reader: print filename + " has no TGID"
#GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE  
if (row[0] != 'GLG'):  
print "uh oh"  
if (row[1] != ''):  
tgid = row[1]  
#nma.push("scannr", "ping", filename, "http://www.google.com")  
tgname = row[7]  
sitename = row[5]  
"""http://initd.org/psycopg/docs/usage.html"""  
cur = conn.cursor()  
cur.execute("INSERT INTO recordings (filename,tgid,tgname,sitename,length) VALUES (%s, %s,%s, %s, %s)",(filename,tgid,tgname,sitename, length))  
conn.commit()  
cur.close()  
else: else:
print filename+" has no TGID" log_recording(tgid, tgname, sitename, filename, length)
  else:
  if tgid is None or tgid == '':
  print filename + " has no TGID"
  else:
  log_recording(tgid, tgname, sitename, filename, length)
  if oldtgid is None or oldtgid == '':
  print filename + " has no old TGID"
  else:
  log_recording(oldtgid, oldtgname, oldsitename, filename, length)
  return
   
return  
   
def filenameMaker(): def filenameMaker():
global filename global filename
filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav' filename = date.today().isoformat() + '-' + str(time.time()) + '-demo.wav'
   
def record_to_async_file():  
"Records from the microphone and outputs the resulting data to `path`" def do_record():
  #global filename
sample_width, data = snd.record() sample_width, data = snd.record()
print str(len(data)) thr = threading.Thread(target=record_to_async_file, args=(sample_width, data, filename))
  thr.start()
   
   
  def record_to_async_file(sample_width, data, filename):
  "Records from the microphone and outputs the resulting data to `filename`"
  print "Recording complete"
if len(data) > MIN_LENGTH: if len(data) > MIN_LENGTH:
data = snd.pack('<' + ('h'*len(data)), *data) print "Recording being saved..."
path = "./data/"+filename dispatcher.send(signal='FILE_CREATED', sender=filename, filename=filename, length=len(data))
dispatcher.send( signal='FILE_CREATED', sender=filename, filename=filename, length=len(data)) print str(len(data))
  data = snd.pack('<' + ('h' * len(data)), *data)
  path = "./data/" + filename
wf = wave.open(path, 'wb') wf = wave.open(path, 'wb')
wf.setnchannels(1) wf.setnchannels(2)
wf.setsampwidth(sample_width) wf.setsampwidth(sample_width)
wf.setframerate(snd.RATE) wf.setframerate(snd.RATE)
wf.writeframes(data) wf.writeframes(data)
wf.close() wf.close()
del wf del wf
print("done - result "+str(len(data))+" frames written to "+path) print("done - result " + str(len(data)) + " frames written to " + path)
del data del data
   
dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any ) dispatcher.connect(filenameMaker, signal='SND_STARTED', sender=dispatcher.Any)
dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any ) dispatcher.connect(tgid_worker, signal='SND_STARTED', sender=dispatcher.Any)
  dispatcher.connect(save_worker, signal='FILE_CREATED', sender=dispatcher.Any)
   
print "Opening serial port..." print "Opening serial port..."
ser = serial.Serial('COM20', 112500, timeout=1) if sys.platform.startswith('darwin'):
  ser = serial.Serial('/dev/tty.usbserial-FTB3VL83', 112500, timeout=1)
  elif sys.platform.startswith('win32'):
  ser = serial.Serial('COM20', 112500, timeout=1)
print "Loading notifymyandroid..." print "Loading notifymyandroid..."
nma = pynma.PyNMA( "a6f50f76119eda33befe4325b4b9e1dd25eef7bad2868e4f") nma = pynma.PyNMA("a6f50f76119eda33befe4325b4b9e1dd25eef7bad2868e4f")
print "Connecting database..." print "Connecting database..."
conn = psycopg2.connect("dbname=scannr user=postgres password=snmc") conn = psycopg2.connect("dbname=scannr user=postgres password=snmc")
print "Scannr started." print "Scannr started."
while True: while True:
print "ready to record again" print "ready to record again"
record_to_async_file() do_record()
ser.close() ser.close()
   
   
   
  bin
  gen
  target
  .settings
  .classpath
  .project
  *.keystore
  *.swp
  *.orig
  *.log
  *.properties
  seed.txt
  map.txt
 
  scannrmobile
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="AntConfiguration">
  <defaultAnt bundledAnt="true" />
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="CompilerConfiguration">
  <option name="DEFAULT_COMPILER" value="Javac" />
  <excludeFromCompile>
  <directory url="file://$PROJECT_DIR$/gen" includeSubdirectories="true" />
  </excludeFromCompile>
  <resourceExtensions />
  <wildcardResourcePatterns>
  <entry name="!?*.java" />
  <entry name="!?*.form" />
  <entry name="!?*.class" />
  <entry name="!?*.groovy" />
  <entry name="!?*.scala" />
  <entry name="!?*.flex" />
  <entry name="!?*.kt" />
  <entry name="!?*.clj" />
  </wildcardResourcePatterns>
  <annotationProcessing>
  <profile default="true" name="Default" enabled="false">
  <processorPath useClasspath="true" />
  </profile>
  </annotationProcessing>
  </component>
  </project>
 
 
  <component name="CopyrightManager">
  <settings default="">
  <module2copyright />
  </settings>
  </component>
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="EntryPointsManager">
  <entry_points version="2.0" />
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="Android 4.2 Platform" project-jdk-type="Android SDK">
  <output url="file://$PROJECT_DIR$/out" />
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="ProjectModuleManager">
  <modules>
  <module fileurl="file://$PROJECT_DIR$/scannrmobile.iml" filepath="$PROJECT_DIR$/scannrmobile.iml" />
  </modules>
  </component>
  </project>
 
 
  <component name="DependencyValidationManager">
  <state>
  <option name="SKIP_IMPORT_STATEMENTS" value="false" />
  </state>
  </component>
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="Palette2">
  <group name="Swing">
  <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
  </item>
  <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
  </item>
  <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
  </item>
  <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
  <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
  </item>
  <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
  <initial-values>
  <property name="text" value="Button" />
  </initial-values>
  </item>
  <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
  <initial-values>
  <property name="text" value="RadioButton" />
  </initial-values>
  </item>
  <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
  <initial-values>
  <property name="text" value="CheckBox" />
  </initial-values>
  </item>
  <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
  <initial-values>
  <property name="text" value="Label" />
  </initial-values>
  </item>
  <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
  <preferred-size width="150" height="-1" />
  </default-constraints>
  </item>
  <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
  <preferred-size width="150" height="-1" />
  </default-constraints>
  </item>
  <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
  <preferred-size width="150" height="-1" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
  </item>
  <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
  <preferred-size width="150" height="50" />
  </default-constraints>
  </item>
  <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
  <preferred-size width="200" height="200" />
  </default-constraints>
  </item>
  <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
  <preferred-size width="200" height="200" />
  </default-constraints>
  </item>
  <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
  </item>
  <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
  </item>
  <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
  </item>
  <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
  </item>
  <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
  <preferred-size width="-1" height="20" />
  </default-constraints>
  </item>
  <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
  <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
  </item>
  <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
  <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
  </item>
  </group>
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="VcsDirectoryMappings">
  <mapping directory="" vcs="" />
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="AndroidConfiguredLogFilters">
  <filters>
  <filter>
  <option name="logLevel" value="verbose" />
  <option name="logMessagePattern" value="Scannr" />
  <option name="logTagPattern" value="" />
  <option name="name" value="Scannr" />
  <option name="pid" value="" />
  </filter>
  </filters>
  </component>
  <component name="AndroidDesignerProfile">
  <option name="fullProfile">
  <profile>
  <option name="device" value="2.7in QVGA" />
  <option name="deviceConfiguration" value="Portrait" />
  <option name="targetHashString" value="android-17" />
  <option name="theme" value="Theme" />
  </profile>
  </option>
  <option name="selection" value="[Full]" />
  </component>
  <component name="AndroidLogFilters">
  <option name="TOOL_WINDOW_CONFIGURED_FILTER" value="Scannr" />
  </component>
  <component name="ChangeListManager">
  <list default="true" id="4912fbca-fcd2-420f-a992-61830c24c4b5" name="Default" comment="" />
  <ignored path="scannrmobile.iws" />
  <ignored path=".idea/workspace.xml" />
  <file path="$PROJECT_DIR$/res/values/strings.xml" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356156665048" ignored="false" />
  <file path="/fragment.java" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356173506003" ignored="false" />
  <file path="/HttpTask.java" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356175420628" ignored="false" />
  <file path="$PROJECT_DIR$/gen/com/example/scannrmobile/Manifest.java" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356176134813" ignored="false" />
  <file path="$PROJECT_DIR$/gen/com/example/scannrmobile/R.java" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356176134813" ignored="false" />
  <file path="$PROJECT_DIR$/gen/com/example/scannrmobile/BuildConfig.java" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356176134813" ignored="false" />
  <file path="/ScannrMobile.java" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356177267735" ignored="false" />
  <file path="/Dummy.txt" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356175572532" ignored="false" />
  <file path="$USER_HOME$/Sites/scannr/calls.json.php" changelist="4912fbca-fcd2-420f-a992-61830c24c4b5" time="1356175698040" ignored="false" />
  <option name="TRACKING_ENABLED" value="true" />
  <option name="SHOW_DIALOG" value="false" />
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
  <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
  <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
  <component name="CreatePatchCommitExecutor">
  <option name="PATCH_PATH" value="" />
  </component>
  <component name="DaemonCodeAnalyzer">
  <disable_hints />
  </component>
  <component name="DebuggerManager">
  <line_breakpoints default_suspend_policy="SuspendAll" default_condition_enabled="true" />
  <breakpoint_any default_suspend_policy="SuspendAll" default_condition_enabled="true">
  <breakpoint>
  <option name="NOTIFY_CAUGHT" value="true" />
  <option name="NOTIFY_UNCAUGHT" value="true" />
  <option name="ENABLED" value="false" />
  <option name="LOG_ENABLED" value="false" />
  <option name="LOG_EXPRESSION_ENABLED" value="false" />
  <option name="SUSPEND_POLICY" value="SuspendAll" />
  <option name="SUSPEND" value="true" />
  <option name="COUNT_FILTER_ENABLED" value="false" />
  <option name="COUNT_FILTER" value="0" />
  <option name="CONDITION_ENABLED" value="true" />
  <option name="CLASS_FILTERS_ENABLED" value="false" />
  <option name="INSTANCE_FILTERS_ENABLED" value="false" />
  <option name="CONDITION" value="" />
  <option name="LOG_MESSAGE" value="" />
  </breakpoint>
  <breakpoint>
  <option name="NOTIFY_CAUGHT" value="true" />
  <option name="NOTIFY_UNCAUGHT" value="true" />
  <option name="ENABLED" value="false" />
  <option name="LOG_ENABLED" value="false" />
  <option name="LOG_EXPRESSION_ENABLED" value="false" />
  <option name="SUSPEND_POLICY" value="SuspendAll" />
  <option name="SUSPEND" value="true" />
  <option name="COUNT_FILTER_ENABLED" value="false" />
  <option name="COUNT_FILTER" value="0" />
  <option name="CONDITION_ENABLED" value="true" />
  <option name="CLASS_FILTERS_ENABLED" value="false" />
  <option name="INSTANCE_FILTERS_ENABLED" value="false" />
  <option name="CONDITION" value="" />
  <option name="LOG_MESSAGE" value="" />
  </breakpoint>
  </breakpoint_any>
  <ui_properties default_suspend_policy="SuspendAll" default_condition_enabled="true" />
  <breakpoint_rules />
  <ui_properties />
  </component>
  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
  <component name="FavoritesManager">
  <favorites_list name="scannrmobile" />
  </component>
  <component name="FileEditorManager">
  <leaf>
  <file leaf-file-name="ScannrMobile.java" pinned="false" current="true" current-in-tab="true">
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/ScannrMobile.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="32" column="50" selection-start="1063" selection-end="1073" vertical-scroll-proportion="0.44060475">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="ArrayAdapter.java" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$USER_HOME$/Downloads/android-sdk-macosx/sources/android-17/android/widget/ArrayAdapter.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="46" column="13" selection-start="1860" selection-end="1860" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="simplerow.xml" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$PROJECT_DIR$/res/layout/simplerow.xml">
  <provider selected="true" editor-type-id="android-designer">
  <state />
  </provider>
  <provider editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="HttpTask.java" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/HttpTask.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="61" column="28" selection-start="1919" selection-end="1919" vertical-scroll-proportion="0.0">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="AndroidManifest.xml" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$PROJECT_DIR$/AndroidManifest.xml">
  <provider selected="true" editor-type-id="text-editor">
  <state line="5" column="68" selection-start="266" selection-end="266" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  </leaf>
  </component>
  <component name="FindManager">
  <FindUsagesManager>
  <setting name="OPEN_NEW_TAB" value="false" />
  </FindUsagesManager>
  </component>
  <component name="IdeDocumentHistory">
  <option name="changedFiles">
  <list>
  <option value="$PROJECT_DIR$/AndroidManifest.xml" />
  <option value="$PROJECT_DIR$/src/com/example/scannrmobile/HttpTask.java" />
  <option value="$PROJECT_DIR$/res/layout/main.xml" />
  <option value="$PROJECT_DIR$/src/com/example/scannrmobile/ScannrMobile.java" />
  </list>
  </option>
  </component>
  <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
  <component name="ProjectFrameBounds">
  <option name="y" value="22" />
  <option name="width" value="1680" />
  <option name="height" value="937" />
  </component>
  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
  <OptionsSetting value="true" id="Add" />
  <OptionsSetting value="true" id="Remove" />
  <OptionsSetting value="true" id="Checkout" />
  <OptionsSetting value="true" id="Update" />
  <OptionsSetting value="true" id="Status" />
  <OptionsSetting value="true" id="Edit" />
  <ConfirmationsSetting value="0" id="Add" />
  <ConfirmationsSetting value="0" id="Remove" />
  </component>
  <component name="ProjectReloadState">
  <option name="STATE" value="0" />
  </component>
  <component name="ProjectView">
  <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
  <flattenPackages />
  <showMembers />
  <showModules />
  <showLibraryContents />
  <hideEmptyPackages />
  <abbreviatePackageNames />
  <autoscrollToSource />
  <autoscrollFromSource />
  <sortByType />
  </navigator>
  <panes>
  <pane id="ProjectPane">
  <subPane>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="src" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="res" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="scannrmobile" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="res" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="layout" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  </subPane>
  </pane>
  <pane id="PackagesPane" />
  <pane id="Scope" />
  </panes>
  </component>
  <component name="PropertiesComponent">
  <property name="GoToFile.includeJavaFiles" value="false" />
  <property name="project.structure.last.edited" value="Modules" />
  <property name="project.structure.proportion" value="0.0" />
  <property name="options.splitter.main.proportions" value="0.3" />
  <property name="options.lastSelected" value="preferences.pluginManager" />
  <property name="MemberChooser.sorted" value="false" />
  <property name="recentsLimit" value="5" />
  <property name="AndroidLayoutSelectedEditor" value="android-designer" />
  <property name="project.structure.side.proportion" value="0.2" />
  <property name="MemberChooser.copyJavadoc" value="false" />
  <property name="GoToClass.toSaveIncludeLibraries" value="false" />
  <property name="WebServerToolWindowFactoryState" value="false" />
  <property name="restartRequiresConfirmation" value="true" />
  <property name="FullScreen" value="false" />
  <property name="MemberChooser.showClasses" value="true" />
  <property name="GoToClass.includeLibraries" value="false" />
  <property name="options.splitter.details.proportions" value="0.2" />
  <property name="options.searchVisible" value="true" />
  </component>
  <component name="PyConsoleOptionsProvider">
  <option name="myPythonConsoleState">
  <PyConsoleSettings />
  </option>
  <option name="myDjangoConsoleState">
  <PyConsoleSettings />
  </option>
  </component>
  <component name="RunManager" selected="Android Application.scannrmobile">
  <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
  <module name="" />
  <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m" />
  <option name="PROGRAM_PARAMETERS" />
  <method />
  </configuration>
  <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
  <module name="" />
  <option name="TESTING_TYPE" value="0" />
  <option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
  <option name="METHOD_NAME" value="" />
  <option name="CLASS_NAME" value="" />
  <option name="PACKAGE_NAME" value="" />
  <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
  <option name="PREFERRED_AVD" value="" />
  <option name="COMMAND_LINE" value="" />
  <option name="WIPE_USER_DATA" value="false" />
  <option name="DISABLE_BOOT_ANIMATION" value="false" />
  <option name="NETWORK_SPEED" value="full" />
  <option name="NETWORK_LATENCY" value="none" />
  <option name="CLEAR_LOGCAT" value="false" />
  <method />
  </configuration>
  <configuration default="true" type="Remote" factoryName="Remote">
  <option name="USE_SOCKET_TRANSPORT" value="true" />
  <option name="SERVER_MODE" value="false" />
  <option name="SHMEM_ADDRESS" value="javadebug" />
  <option name="HOST" value="localhost" />
  <option name="PORT" value="5005" />
  <method />
  </configuration>
  <configuration default="true" type="Applet" factoryName="Applet">
  <module name="" />
  <option name="MAIN_CLASS_NAME" />
  <option name="HTML_FILE_NAME" />
  <option name="HTML_USED" value="false" />
  <option name="WIDTH" value="400" />
  <option name="HEIGHT" value="300" />
  <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
  <option name="VM_PARAMETERS" />
  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
  <option name="ALTERNATIVE_JRE_PATH" />
  <method />
  </configuration>
  <configuration default="true" type="TestNG" factoryName="TestNG">
  <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
  <module name="" />
  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
  <option name="ALTERNATIVE_JRE_PATH" />
  <option name="SUITE_NAME" />
  <option name="PACKAGE_NAME" />
  <option name="MAIN_CLASS_NAME" />
  <option name="METHOD_NAME" />
  <option name="GROUP_NAME" />
  <option name="TEST_OBJECT" value="CLASS" />
  <option name="VM_PARAMETERS" value="-ea" />
  <option name="PARAMETERS" />
  <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
  <option name="OUTPUT_DIRECTORY" />
  <option name="ANNOTATION_TYPE" />
  <option name="ENV_VARIABLES" />
  <option name="PASS_PARENT_ENVS" value="true" />
  <option name="TEST_SEARCH_SCOPE">
  <value defaultName="moduleWithDependencies" />
  </option>
  <option name="USE_DEFAULT_REPORTERS" value="false" />
  <option name="PROPERTIES_FILE" />
  <envs />
  <properties />
  <listeners />
  <method />
  </configuration>
  <configuration default="true" type="Application" factoryName="Application">
  <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
  <option name="MAIN_CLASS_NAME" />
  <option name="VM_PARAMETERS" />
  <option name="PROGRAM_PARAMETERS" />
  <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
  <option name="ALTERNATIVE_JRE_PATH" />
  <option name="ENABLE_SWING_INSPECTOR" value="false" />
  <option name="ENV_VARIABLES" />
  <option name="PASS_PARENT_ENVS" value="true" />
  <module name="" />
  <envs />
  <method />
  </configuration>
  <configuration default="true" type="JUnit" factoryName="JUnit">
  <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
  <module name="" />
  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
  <option name="ALTERNATIVE_JRE_PATH" />
  <option name="PACKAGE_NAME" />
  <option name="MAIN_CLASS_NAME" />
  <option name="METHOD_NAME" />
  <option name="TEST_OBJECT" value="class" />
  <option name="VM_PARAMETERS" value="-ea" />
  <option name="PARAMETERS" />
  <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
  <option name="ENV_VARIABLES" />
  <option name="PASS_PARENT_ENVS" value="true" />
  <option name="TEST_SEARCH_SCOPE">
  <value defaultName="moduleWithDependencies" />
  </option>
  <envs />
  <patterns />
  <method />
  </configuration>
  <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
  <module name="" />
  <option name="ACTIVITY_CLASS" value="" />
  <option name="MODE" value="default_activity" />
  <option name="DEPLOY" value="true" />
  <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
  <option name="PREFERRED_AVD" value="" />
  <option name="COMMAND_LINE" value="" />
  <option name="WIPE_USER_DATA" value="false" />
  <option name="DISABLE_BOOT_ANIMATION" value="false" />
  <option name="NETWORK_SPEED" value="full" />
  <option name="NETWORK_LATENCY" value="none" />
  <option name="CLEAR_LOGCAT" value="false" />
  <method />
  </configuration>
  <configuration default="false" name="scannrmobile" type="AndroidRunConfigurationType" factoryName="Android Application">
  <module name="scannrmobile" />
  <option name="ACTIVITY_CLASS" value="com.example.scannrmobile.ScannrMobile" />
  <option name="MODE" value="specific_activity" />
  <option name="DEPLOY" value="true" />
  <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
  <option name="PREFERRED_AVD" value="MyAvd0" />
  <option name="COMMAND_LINE" value="" />
  <option name="WIPE_USER_DATA" value="false" />
  <option name="DISABLE_BOOT_ANIMATION" value="false" />
  <option name="NETWORK_SPEED" value="full" />
  <option name="NETWORK_LATENCY" value="none" />
  <option name="CLEAR_LOGCAT" value="true" />
  <RunnerSettings RunnerId="AndroidDebugRunner" />
  <ConfigurationWrapper RunnerId="AndroidDebugRunner" />
  <method />
  </configuration>
  <list size="1">
  <item index="0" class="java.lang.String" itemvalue="Android Application.scannrmobile" />
  </list>
  <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
  <Host>localhost</Host>
  <Port>5050</Port>
  </configuration>
  </component>
  <component name="ShelveChangesManager" show_recycled="false" />
  <component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false">
  <option name="USER" value="" />
  <option name="PASSWORD" value="" />
  <option name="mySSHConnectionTimeout" value="30000" />
  <option name="mySSHReadTimeout" value="30000" />
  <option name="LAST_MERGED_REVISION" />
  <option name="MERGE_DRY_RUN" value="false" />
  <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
  <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
  <option name="IGNORE_SPACES_IN_MERGE" value="false" />
  <option name="DETECT_NESTED_COPIES" value="true" />
  <option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
  <option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
  <option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
  <option name="FORCE_UPDATE" value="false" />
  <option name="IGNORE_EXTERNALS" value="false" />
  <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
  </component>
  <component name="TaskManager">
  <task active="true" id="Default" summary="Default task">
  <changelist id="4912fbca-fcd2-420f-a992-61830c24c4b5" name="Default" comment="" />
  <created>1356156646856</created>
  <updated>1356156646856</updated>
  </task>
  <servers />
  </component>
  <component name="ToolWindowManager">
  <frame x="0" y="22" width="1680" height="937" extended-state="6" />
  <editor active="true" />
  <layout>
  <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32986537" sideWeight="0.6719706" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32986537" sideWeight="0.6719706" order="2" side_tool="false" content_ui="tabs" />
  <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39902082" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32925338" sideWeight="0.500612" order="7" side_tool="true" content_ui="tabs" />
  <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
  <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32802936" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Android" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32925338" sideWeight="0.49510404" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
  <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
  <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
  <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.249694" sideWeight="0.6009792" order="0" side_tool="false" content_ui="combo" />
  <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32925338" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
  <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
  <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
  <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32925338" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
  <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
  </layout>
  </component>
  <component name="VcsContentAnnotationSettings">
  <option name="myLimit" value="2678400000" />
  </component>
  <component name="VcsManagerConfiguration">
  <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
  <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
  <option name="CHECK_NEW_TODO" value="true" />
  <option name="myTodoPanelSettings">
  <value>
  <are-packages-shown value="false" />
  <are-modules-shown value="false" />
  <flatten-packages value="false" />
  <is-autoscroll-to-source value="false" />
  </value>
  </option>
  <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
  <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
  <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
  <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
  <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
  <option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
  <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
  <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
  <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
  <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
  <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
  <option name="SHORT_DIFF_HORISONTALLY" value="true" />
  <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
  <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
  <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
  <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
  <option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
  <option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" />
  <option name="SHOW_DIRTY_RECURSIVELY" value="false" />
  <option name="LIMIT_HISTORY" value="true" />
  <option name="MAXIMUM_HISTORY_ROWS" value="1000" />
  <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
  <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
  <option name="LAST_COMMIT_MESSAGE" />
  <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" />
  <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
  <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
  <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
  <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
  <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
  <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
  <option name="ACTIVE_VCS_NAME" />
  <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
  <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
  <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
  <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
  </component>
  <component name="XDebuggerManager">
  <breakpoint-manager />
  </component>
  <component name="antWorkspaceConfiguration">
  <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
  <option name="FILTER_TARGETS" value="false" />
  </component>
  <component name="editorHistoryManager">
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/HttpTask.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="6" column="30" selection-start="184" selection-end="184" vertical-scroll-proportion="0.0">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  <entry file="file://$USER_HOME$/Downloads/android-sdk-macosx/sources/android-17/android/os/AsyncTask.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="347" column="53" selection-start="14141" selection-end="14141" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/AndroidManifest.xml">
  <provider selected="true" editor-type-id="text-editor">
  <state line="5" column="68" selection-start="266" selection-end="266" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/res/layout/main.xml">
  <provider selected="true" editor-type-id="android-designer">
  <state />
  </provider>
  <provider editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/ScannrMobile.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="37" column="0" selection-start="1317" selection-end="1317" vertical-scroll-proportion="0.0">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/AndroidManifest.xml">
  <provider selected="true" editor-type-id="text-editor">
  <state line="5" column="68" selection-start="266" selection-end="266" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/res/layout/main.xml">
  <provider selected="true" editor-type-id="android-designer">
  <state />
  </provider>
  <provider editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/ScannrMobile.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="48" column="0" selection-start="1666" selection-end="1666" vertical-scroll-proportion="0.0">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/AndroidManifest.xml">
  <provider selected="true" editor-type-id="text-editor">
  <state line="5" column="68" selection-start="266" selection-end="266" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$USER_HOME$/Downloads/android-sdk-macosx/sources/android-17/android/os/AsyncTask.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="347" column="53" selection-start="14141" selection-end="14141" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/AndroidManifest.xml">
  <provider selected="true" editor-type-id="text-editor">
  <state line="5" column="68" selection-start="266" selection-end="266" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/res/layout/main.xml">
  <provider selected="true" editor-type-id="android-designer">
  <state />
  </provider>
  <provider editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/res/layout/simplerow.xml">
  <provider selected="true" editor-type-id="android-designer">
  <state />
  </provider>
  <provider editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$USER_HOME$/Downloads/android-sdk-macosx/sources/android-17/android/widget/ArrayAdapter.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="46" column="13" selection-start="1860" selection-end="1860" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/HttpTask.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="61" column="28" selection-start="1919" selection-end="1919" vertical-scroll-proportion="0.0">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/src/com/example/scannrmobile/ScannrMobile.java">
  <provider selected="true" editor-type-id="text-editor">
  <state line="32" column="50" selection-start="1063" selection-end="1073" vertical-scroll-proportion="0.44060475">
  <folding>
  <element signature="imports" expanded="true" />
  </folding>
  </state>
  </provider>
  </entry>
  </component>
  <component name="masterDetails">
  <states>
  <state key="ArtifactsStructureConfigurable.UI">
  <settings>
  <artifact-editor />
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  <state key="FacetStructureConfigurable.UI">
  <settings>
  <last-edited>Android</last-edited>
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  <state key="GlobalLibrariesConfigurable.UI">
  <settings>
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  <state key="JdkListConfigurable.UI">
  <settings>
  <last-edited>Android 4.2 Platform</last-edited>
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  <state key="ModuleStructureConfigurable.UI">
  <settings>
  <last-edited>Android|scannrmobile</last-edited>
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  <state key="ProjectLibrariesConfigurable.UI">
  <settings>
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  </states>
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.scannrmobile"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-sdk android:minSdkVersion="17"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
  <activity android:name="ScannrMobile"
  android:label="@string/app_name">
  <intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  </activity>
  </application>
  </manifest>
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project name="scannrmobile" default="help">
 
  <!-- The local.properties file is created and updated by the 'android' tool.
  It contains the path to the SDK. It should *NOT* be checked into
  Version Control Systems. -->
  <property file="local.properties"/>
 
  <!-- The ant.properties file can be created by you. It is only edited by the
  'android' tool to add properties to it.
  This is the place to change some Ant specific build properties.
  Here are some properties you may want to change/update:
 
  source.dir
  The name of the source directory. Default is 'src'.
  out.dir
  The name of the output directory. Default is 'bin'.
 
  For other overridable properties, look at the beginning of the rules
  files in the SDK, at tools/ant/build.xml
 
  Properties related to the SDK location or the project target should
  be updated using the 'android' tool with the 'update' action.
 
  This file is an integral part of the build system for your
  application and should be checked into Version Control Systems.
 
  -->
  <property file="ant.properties"/>
 
  <!-- if sdk.dir was not set from one of the property file, then
  get it from the ANDROID_HOME env var.
  This must be done before we load project.properties since
  the proguard config can use sdk.dir -->
  <property environment="env"/>
  <condition property="sdk.dir" value="${env.ANDROID_HOME}">
  <isset property="env.ANDROID_HOME"/>
  </condition>
 
  <!-- The project.properties file is created and updated by the 'android'
  tool, as well as ADT.
 
  This contains project specific properties such as project target, and library
  dependencies. Lower level build properties are stored in ant.properties
  (or in .classpath for Eclipse projects).
 
  This file is an integral part of the build system for your
  application and should be checked into Version Control Systems. -->
  <loadproperties srcFile="project.properties"/>
 
  <!-- quick check on sdk.dir -->
  <fail
  message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
  unless="sdk.dir"
  />
 
  <!--
  Import per project custom build rules if present at the root of the project.
  This is the place to put custom intermediary targets such as:
  -pre-build
  -pre-compile
  -post-compile (This is typically used for code obfuscation.
  Compiled code location: ${out.classes.absolute.dir}
  If this is not done in place, override ${out.dex.input.absolute.dir})
  -post-package
  -post-build
  -pre-clean
  -->
  <import file="custom_rules.xml" optional="true"/>
 
  <!-- Import the actual build file.
 
  To customize existing targets, there are two options:
  - Customize only one target:
  - copy/paste the target into this file, *before* the
  <import> task.
  - customize it to your needs.
  - Customize the whole content of build.xml
  - copy/paste the content of the rules files (minus the top node)
  into this file, replacing the <import> task.
  - customize to your needs.
 
  ***********************
  ****** IMPORTANT ******
  ***********************
  In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
  in order to avoid having your file be overridden by tools such as "android update project"
  -->
  <!-- version-tag: 1 -->
  <import file="${sdk.dir}/tools/ant/build.xml"/>
 
  </project>
 
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/BuildConfig.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/HttpTask$HttpTaskHandler.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/HttpTask.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/R$attr.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/R$drawable.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/R$id.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/R$layout.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/R$string.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/R.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/ScannrMobile$1.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/com/example/scannrmobile/ScannrMobile.class differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/scannrmobile.afp.apk differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/scannrmobile.apk differ
 Binary files /dev/null and b/scannrmobile/out/production/scannrmobile/scannrmobile.unaligned.apk differ
  # To enable ProGuard in your project, edit project.properties
  # to define the proguard.config property as described in that file.
  #
  # Add project specific ProGuard rules here.
  # By default, the flags in this file are appended to flags specified
  # in ${sdk.dir}/tools/proguard/proguard-android.txt
  # You can edit the include path and order by changing the ProGuard
  # include property in project.properties.
  #
  # For more details, see
  # http://developer.android.com/guide/developing/tools/proguard.html
 
  # Add any project specific keep options here:
 
  # If your project uses WebView with JS, uncomment the following
  # and specify the fully qualified class name to the JavaScript interface
  # class:
  #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  # public *;
  #}
 
 Binary files /dev/null and b/scannrmobile/res/drawable-hdpi/ic_launcher.png differ
 Binary files /dev/null and b/scannrmobile/res/drawable-ldpi/ic_launcher.png differ
 Binary files /dev/null and b/scannrmobile/res/drawable-mdpi/ic_launcher.png differ
 Binary files /dev/null and b/scannrmobile/res/drawable-xhdpi/ic_launcher.png differ
  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
 
  <ListView android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@+id/mainListView">
  </ListView>
 
  </LinearLayout>
 
  <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/rowTextView"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:padding="10dp"
  android:textSize="16sp" >
  </TextView>
 
  <?xml version="1.0" encoding="utf-8"?>
  <resources>
  <string name="app_name">scannrmobile</string>
  </resources>
 
  <?xml version="1.0" encoding="UTF-8"?>
  <module type="JAVA_MODULE" version="4">
  <component name="FacetManager">
  <facet type="android" name="Android">
  <configuration>
  <option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
  <option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
  <option name="MANIFEST_FILE_RELATIVE_PATH" value="/AndroidManifest.xml" />
  <option name="RES_FOLDER_RELATIVE_PATH" value="/res" />
  <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/assets" />
  <option name="LIBS_FOLDER_RELATIVE_PATH" value="/libs" />
  <option name="USE_CUSTOM_APK_RESOURCE_FOLDER" value="false" />
  <option name="CUSTOM_APK_RESOURCE_FOLDER" value="" />
  <option name="USE_CUSTOM_COMPILER_MANIFEST" value="false" />
  <option name="CUSTOM_COMPILER_MANIFEST" value="" />
  <option name="APK_PATH" value="" />
  <option name="LIBRARY_PROJECT" value="false" />
  <option name="RUN_PROCESS_RESOURCES_MAVEN_TASK" value="true" />
  <option name="GENERATE_UNSIGNED_APK" value="false" />
  <option name="CUSTOM_DEBUG_KEYSTORE_PATH" value="" />
  <option name="PACK_TEST_CODE" value="false" />
  <option name="RUN_PROGUARD" value="false" />
  <option name="PROGUARD_CFG_PATH" value="/proguard-project.txt" />
  <resOverlayFolders>
  <path>/res-overlay</path>
  </resOverlayFolders>
  <includeSystemProguardFile>true</includeSystemProguardFile>
  <includeAssetsFromLibraries>false</includeAssetsFromLibraries>
  <additionalNativeLibs />
  </configuration>
  </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
  <exclude-output />
  <content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" />
  </content>
  <orderEntry type="inheritedJdk" />
  <orderEntry type="sourceFolder" forTests="false" />
  </component>
  </module>
 
 
  package com.example.scannrmobile;
 
  import android.os.AsyncTask;
 
  import org.apache.http.client.methods.*;
  import java.io.BufferedReader;
  import java.io.InputStreamReader;
 
  import org.apache.http.HttpResponse;
  import org.apache.http.client.HttpClient;
  import org.apache.http.impl.client.DefaultHttpClient;
 
  import org.json.*;
  import android.util.Log;
 
 
  //http://www.accella.net/android-http-get-json/
  public class HttpTask extends AsyncTask<HttpUriRequest,Void,JSONArray> {
  private static final String TAG = "Scannr_HTTP_TASK";
 
  @Override
  protected JSONArray doInBackground(HttpUriRequest...params) {
 
  // Performed on Background Thread
 
  HttpUriRequest request = params[0];
  HttpClient client = new DefaultHttpClient();
 
  try {
  // The UI Thread shouldn't be blocked long enough to do the reading in of the stream.
  HttpResponse response = client.execute(request);
 
  // TODO handle bad response codes (such as 404, etc)
 
  BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
  StringBuilder builder = new StringBuilder();
  for (String line = null; (line = reader.readLine()) != null; ) {
  builder.append(line).append("\n");
  }
  JSONTokener tokener = new JSONTokener(builder.toString());
  JSONArray json = new JSONArray(tokener);
  return json;
 
  } catch (Exception e) {
  // TODO handle different exception cases
  Log.e(TAG,e.toString());
  e.printStackTrace();
  return null;
  }
  }
 
  @Override
  protected void onPostExecute(JSONArray json) {
  // Done on UI Thread
  if(json != null) {
  taskHandler.taskSuccessful(json);
  } else {
  taskHandler.taskFailed();
  }
  }
 
  public static interface HttpTaskHandler {
  void taskSuccessful(JSONArray json);
  void taskFailed();
  }
 
  HttpTaskHandler taskHandler;
 
  public void setTaskHandler(HttpTaskHandler taskHandler) {
  this.taskHandler = taskHandler;
  }
 
  }
  package com.example.scannrmobile;
 
  import android.app.Activity;
  import android.os.Bundle;
  import android.util.Log;
  import android.widget.ArrayAdapter;
  import android.widget.ListView;
  import com.example.scannrmobile.HttpTask.HttpTaskHandler;
  import org.apache.http.client.methods.HttpGet;
  import org.json.JSONArray;
  import org.json.JSONException;
 
  import java.util.ArrayList;
 
  public class ScannrMobile extends Activity {
  private ListView mainListView ;
  private ArrayAdapter<String> listAdapter ;
  private ScannrMobile view;
  /**
  * Called when the activity is first created.
  */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mainListView = (ListView) findViewById( R.id.mainListView );
  view = this;
  //DownloadWebPageTask task = new DownloadWebPageTask();
  //task.execute(new String[] { "http://www.vogella.com" });
  HttpTask task = new HttpTask();
 
  task.setTaskHandler(new HttpTaskHandler()
  {
  public void taskSuccessful(JSONArray nodes) {
  // Just put the JSONObjects into an array list so we can use a ListAdapter
  ArrayList<String> data = new ArrayList();
  // Ingest Data
  try {
 
  Log.d(this.getClass().getName(), "Total Nodes: "+nodes.length());
  for (int i = 0; i < nodes.length(); i++ ) {
  data.add(nodes.getJSONObject(i).toString() );
  }
  // TODO update the list
  } catch (JSONException j){
  Log.e(this.getClass().getName(), j.getMessage());
  }
  // Create ArrayAdapter using the planet list.
  listAdapter = new ArrayAdapter<String>(view, R.layout.simplerow, R.id.rowTextView, data);
 
  // Set the ArrayAdapter as the ListView's adapter.
  mainListView.setAdapter( listAdapter );
  }
 
  public void taskFailed() {
  // handler failure (e.g network not available etc.)
  Log.e(this.getClass().getName(),"Task Failed");
  }
  });
  task.execute(new HttpGet("http://192.168.1.113/~maxious/scannr/calls.json.php?action=data"));
  }
 
 
  }
 
 
file:a/snd.py -> file:b/snd.py
""" Record a few seconds of audio and save to a WAVE file. """ Record a few seconds of audio and save to a WAVE file.
Based on http://stackoverflow.com/questions/892199/detect-record-audio-in-python/6743593#6743593 Based on http://stackoverflow.com/questions/892199/detect-record-audio-in-python/6743593#6743593
""" """
   
import pyaudio import pyaudio
import wave import wave
import sys import sys
import audioop # http://docs.python.org/library/audioop  
from os.path import exists  
from array import array from array import array
from struct import unpack, pack from struct import unpack, pack
import threading  
from pydispatch import dispatcher from pydispatch import dispatcher
   
CHANNELS = 1  
THRESHOLD = 500 THRESHOLD = 500
CHUNK_SIZE = 1024 CHUNK_SIZE = 1024
FORMAT = pyaudio.paInt16 FORMAT = pyaudio.paInt16
RATE = 44100 RATE = 44100
MAX_SILENT = 30 if sys.platform.startswith('darwin'):
  CHANNELS = 2
  elif sys.platform.startswith('win32'):
  CHANNELS = 1
   
  MAX_SILENT = 80
   
def is_silent(L): def is_silent(L):
"Returns `True` if below the 'silent' threshold" "Returns `True` if below the 'silent' threshold"
"print max(L)" "print max(L)"
"print max(L) < THRESHOLD" "print max(L) < THRESHOLD"
return max(L) < THRESHOLD return max(L) < THRESHOLD
   
   
def normalize(L): def normalize(L):
"Average the volume out" "Average the volume out"
MAXIMUM = 16384 MAXIMUM = 16384
times = float(MAXIMUM)/max(abs(i) for i in L) times = float(MAXIMUM) / max(abs(i) for i in L)
   
LRtn = array('h') LRtn = array('h')
for i in L: for i in L:
LRtn.append(int(i*times)) LRtn.append(int(i * times))
return LRtn return LRtn
   
   
def trim(L): def trim(L):
"Trim the blank spots at the start and end" "Trim the blank spots at the start and end"
   
def _trim(L): def _trim(L):
snd_started = False snd_started = False
LRtn = array('h') LRtn = array('h')
   
for i in L: for i in L:
if not snd_started and abs(i)>THRESHOLD: if not snd_started and abs(i) > THRESHOLD:
snd_started = True snd_started = True
LRtn.append(i) LRtn.append(i)
   
elif snd_started: elif snd_started:
LRtn.append(i) LRtn.append(i)
return LRtn return LRtn
   
# Trim to the left # Trim to the left
L = _trim(L) L = _trim(L)
   
# Trim to the right # Trim to the right
L.reverse() L.reverse()
L = _trim(L) L = _trim(L)
L.reverse() L.reverse()
return L return L
   
   
def add_silence(L, seconds): def add_silence(L, seconds):
"Add silence to the start and end of `L` of length `seconds` (float)" "Add silence to the start and end of `L` of length `seconds` (float)"
LRtn = array('h', [0 for i in xrange(int(seconds*RATE))]) LRtn = array('h', [0 for i in xrange(int(seconds * RATE))])
LRtn.extend(L) LRtn.extend(L)
LRtn.extend([0 for i in xrange(int(seconds*RATE))]) LRtn.extend([0 for i in xrange(int(seconds * RATE))])
return LRtn return LRtn
   
   
def record(): def record():
""" """
Record a word or words from the microphone and Record a word or words from the microphone and
return the data as an array of signed shorts. return the data as an array of signed shorts.
   
Normalizes the audio, trims silence from the Normalizes the audio, trims silence from the
start and end, and pads with 0.5 seconds of start and end, and pads with 0.5 seconds of
blank sound to make sure VLC et al can play blank sound to make sure VLC et al can play
it without getting chopped off. it without getting chopped off.
""" """
p = pyaudio.PyAudio() p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=1, rate=RATE, stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE,
input=True, output=True, input=True,
frames_per_buffer=CHUNK_SIZE) frames_per_buffer=CHUNK_SIZE)
   
num_silent = 0 num_silent = 0
snd_started = False snd_started = False
   
LRtn = array('h') LRtn = array('h')
   
while 1: while 1:
data = stream.read(CHUNK_SIZE) try:
L = unpack('<' + ('h'*(len(data)/2)), data) # little endian, signed short data = stream.read(CHUNK_SIZE)
  except IOError as ex:
  if ex[1] != pyaudio.paInputOverflowed:
  raise
  data = '\x00' * CHUNK_SIZE
  L = unpack('<' + ('h' * (len(data) / 2)), data) # little endian, signed short
L = array('h', L) L = array('h', L)
   
silent = is_silent(L) silent = is_silent(L)
#print silent, num_silent, L[:10] #print silent, num_silent, L[:10]
   
if silent and snd_started: if silent and snd_started:
num_silent += 1 num_silent += 1
print num_silent #print num_silent
elif not silent and not snd_started: elif not silent and not snd_started:
dispatcher.send( signal='SND_STARTED') dispatcher.send(signal='SND_STARTED')
snd_started = True snd_started = True
print snd_started print snd_started
  if snd_started and not silent:
  num_silent = 0
if snd_started: if snd_started:
LRtn.extend(L) LRtn.extend(L)
if snd_started and num_silent > MAX_SILENT: if snd_started and num_silent > MAX_SILENT:
break break
   
sample_width = p.get_sample_size(FORMAT) sample_width = p.get_sample_size(FORMAT)
stream.stop_stream() stream.stop_stream()
stream.close() stream.close()
p.terminate() p.terminate()
   
LRtn = normalize(LRtn) LRtn = normalize(LRtn)
LRtn = trim(LRtn) LRtn = trim(LRtn)
LRtn = add_silence(LRtn, 0.5) LRtn = add_silence(LRtn, 0.5)
return sample_width, LRtn return sample_width, LRtn
   
   
def record_to_file(path): def record_to_file(path):
"Records from the microphone and outputs the resulting data to `path`" "Records from the microphone and outputs the resulting data to `path`"
sample_width, data = record() sample_width, data = record()
data = pack('<' + ('h'*len(data)), *data) data = pack('<' + ('h' * len(data)), *data)
   
wf = wave.open(path, 'wb') wf = wave.open(path, 'wb')
wf.setnchannels(1) wf.setnchannels(CHANNELS)
wf.setsampwidth(sample_width) wf.setsampwidth(sample_width)
wf.setframerate(RATE) wf.setframerate(RATE)
wf.writeframes(data) wf.writeframes(data)
wf.close() wf.close()
print("done - result written to "+path) print("done - result written to " + path)
del data del data
   
   
  if __name__ == '__main__':
  filename = 'demo.wav'
  record_to_file(filename)
  print("done - result written to " + filename)
   
   
if __name__ == '__main__':  
filename = 'demo.wav'  
record_to_file(filename)  
print("done - result written to "+filename)  
   
file:b/test.py (new)
  """PyAudio example: Record a few seconds of audio and save to a WAVE file."""
 
  import pyaudio
  import wave
 
  CHUNK = 1024
  FORMAT = pyaudio.paInt16
  CHANNELS = 2
  RATE = 44100
  RECORD_SECONDS = 5
  WAVE_OUTPUT_FILENAME = "output.wav"
 
  p = pyaudio.PyAudio()
 
  stream = p.open(format=FORMAT,
  channels=CHANNELS,
  rate=RATE,
  input=True,
  frames_per_buffer=CHUNK)
 
  print("* recording")
 
  frames = []
 
  for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
  data = stream.read(CHUNK)
  frames.append(data)
 
  print("* done recording")
 
  stream.stop_stream()
  stream.close()
  p.terminate()
 
  wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
  wf.setnchannels(CHANNELS)
  wf.setsampwidth(p.get_sample_size(FORMAT))
  wf.setframerate(RATE)
  wf.writeframes(b''.join(frames))
  wf.close()
 
file:b/test2.py (new)
  from os.path import exists
  from array import array
  from struct import unpack, pack
 
  import pyaudio
  import wave
 
  THRESHOLD = 500
  CHUNK_SIZE = 1024
  FORMAT = pyaudio.paInt16
  RATE = 44100
 
  def is_silent(L):
  "Returns `True` if below the 'silent' threshold"
  return max(L) < THRESHOLD
 
 
  def normalize(L):
  "Average the volume out"
  MAXIMUM = 16384
  times = float(MAXIMUM) / max(abs(i) for i in L)
 
  LRtn = array('h')
  for i in L:
  LRtn.append(int(i * times))
  return LRtn
 
 
  def trim(L):
  "Trim the blank spots at the start and end"
 
  def _trim(L):
  snd_started = False
  LRtn = array('h')
 
  for i in L:
  if not snd_started and abs(i) > THRESHOLD:
  snd_started = True
  LRtn.append(i)
 
  elif snd_started:
  LRtn.append(i)
  return LRtn
 
  # Trim to the left
  L = _trim(L)
 
  # Trim to the right
  L.reverse()
  L = _trim(L)
  L.reverse()
  return L
 
 
  def add_silence(L, seconds):
  "Add silence to the start and end of `L` of length `seconds` (float)"
  LRtn = array('h', [0 for i in xrange(int(seconds * RATE))])
  LRtn.extend(L)
  LRtn.extend([0 for i in xrange(int(seconds * RATE))])
  return LRtn
 
 
  def record():
  """
  Record a word or words from the microphone and
  return the data as an array of signed shorts.
 
  Normalizes the audio, trims silence from the
  start and end, and pads with 0.5 seconds of
  blank sound to make sure VLC et al can play
  it without getting chopped off.
  """
  p = pyaudio.PyAudio()
  stream = p.open(format=FORMAT, channels=2, rate=RATE,
  input=True,
  frames_per_buffer=CHUNK_SIZE)
 
  num_silent = 0
  snd_started = False
 
  LRtn = array('h')
 
  while 1:
  data = stream.read(CHUNK_SIZE)
  L = unpack('<' + ('h' * (len(data) / 2)), data) # little endian, signed short
  L = array('h', L)
  LRtn.extend(L)
 
  silent = is_silent(L)
  #print silent, num_silent, L[:10]
 
  if silent and snd_started:
  num_silent += 1
  elif not silent and not snd_started:
  snd_started = True
 
  if snd_started and num_silent > 30:
  break
 
  sample_width = p.get_sample_size(FORMAT)
  stream.stop_stream()
  stream.close()
  p.terminate()
 
  LRtn = normalize(LRtn)
  LRtn = trim(LRtn)
  LRtn = add_silence(LRtn, 0.5)
  return sample_width, LRtn
 
 
  def record_to_file(path):
  "Records from the microphone and outputs the resulting data to `path`"
  sample_width, data = record()
  data = pack('<' + ('h' * len(data)), *data)
 
  wf = wave.open(path, 'wb')
  wf.setnchannels(2)
  wf.setsampwidth(sample_width)
  wf.setframerate(RATE)
  wf.writeframes(data)
  wf.close()
 
  if __name__ == '__main__':
  print("please speak a word into the microphone")
  record_to_file('demo.wav')
  print("done - result written to demo.wav")
 
<?php <?php
// http://www.unitrunker.com/logs.html // http://www.unitrunker.com/logs.html
/* /*
Timestamp as YYYYMMDDHHMMSS Timestamp as YYYYMMDDHHMMSS
Site number in unformatted decimal Site number in unformatted decimal
Action: Call, Leaves, Joins, Login, Logout, Drop, Add, Busy, Deny, Kill Action: Call, Leaves, Joins, Login, Logout, Drop, Add, Busy, Deny, Kill
Source type I or G Source type I or G
Source ID in unformatted decimal Source ID in unformatted decimal
Target type I or G Target type I or G
Target ID in unformatted decimal Target ID in unformatted decimal
Channel number in unformatted decimal Channel number in unformatted decimal
Call Type*/ Call Type*/
$row = 0; $row = 0;
echo "<table>"; echo "<table>";
if (($handle = fopen("C:\Users\Madoka\AppData\Roaming\UniTrunker\S00000001\UniTrunker-20120411.LOG", "r")) !== FALSE) { if (($handle = fopen("C:\Users\Madoka\AppData\Roaming\UniTrunker\S00000001\UniTrunker-20120411.LOG", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
   
if ($row > 0 && count($data) == 9) { if ($row > 0 && count($data) == 9) {
   
echo "<tr>"; echo "<tr>";
for ($c=0; $c < count($data); $c++) { for ($c = 0; $c < count($data); $c++) {
echo '<td>'.$data[$c] . "</td>\n"; echo '<td>' . $data[$c] . "</td>\n";
} }
echo "</tr>"; echo "</tr>";
} }
$row++; $row++;
} }
fclose($handle); fclose($handle);
} }
echo "</table>"; echo "</table>";
?> ?>
<?php <?php
include('common.inc.php'); include('common.inc.php');
$tgid = 44028; $tgid = 44028;
  $from = (isset($_REQUEST['from']) ? $_REQUEST['from'] : strtotime("2012-09-12"));
  $to = (isset($_REQUEST['to']) ? $_REQUEST['to'] : strtotime("2012-12-12"));
include_header("fdds"); include_header("fdds");
  $sth = $conn->prepare('select distinct date_trunc(\'day\', call_timestamp) as rdate from recordings order by rdate');
   
  $sth->execute();
  foreach ($sth->fetchAll() as $row) {
  echo '<a href="?from=' . strtotime($row['rdate']) . '&amp;to=' . strtotime($row['rdate'] . ' +1 day') . '">' . $row['rdate'] . '</a> <br>';
  }
   
?> ?>
<div class="span12"> <div class="span12">
   
<table width="100%" height="775px"><tr><td valign="middle"><span class="arrow-w" style="font-size:2em;">&lt;</span></td><td width="95%"><div id="placeholder" style="width:100%;height:575px;"></div></td><td valign="middle"><span class="arrow-e" style="font-size:2em;">&gt;</span></td></tr></table> <table width="100%" height="775px">
<script> <tr>
  <td valign="middle"><span class="arrow-w" style="font-size:2em;">&lt;</span></td>
  <td width="95%">
  <div id="placeholder" style="width:100%;height:575px;"></div>
  </td>
  <td valign="middle"><span class="arrow-e" style="font-size:2em;">&gt;</span></td>
  </tr>
  </table>
  <script>
var data = []; var data = [];
var plot; var plot;
var options = { var options = {
lines: { show: true }, lines: { show: true },
points: { show: true }, points: { show: true },
xaxis : { xaxis: {
mode : 'time', mode: 'time',
labelsAngle : 45 labelsAngle: 45
}, },
selection : { mode : 'x', fps : 30 }, selection: { mode: 'x', fps: 30 },
series: { series: {
lines: { show: true }, lines: { show: true },
points: { show: true } points: { show: true }
}, },
mouse : { mouse: {
track : true, track: true,
relative : true relative: true
} }
}; };
$(function () { $(function () {
// graph // graph
   
   
var placeholder = document.getElementById("placeholder");  
   
drawGraph (options);  
  var placeholder = document.getElementById("placeholder");
   
  drawGraph(options);
   
// Hook into the 'flotr:select' event. // Hook into the 'flotr:select' event.
Flotr.EventAdapter.observe(placeholder, 'flotr:select', function (area) { Flotr.EventAdapter.observe(placeholder, 'flotr:select', function (area) {
   
// Draw graph with new area // Draw graph with new area
graph = drawGraph({ graph = drawGraph({
xaxis: {min:area.x1, max:area.x2, mode : 'time', labelsAngle : 45}, xaxis: {min: area.x1, max: area.x2, mode: 'time', labelsAngle: 45},
yaxis: {min:area.y1, max:area.y2} yaxis: {min: area.y1, max: area.y2}
}); });
}); });
   
// When graph is clicked, draw the graph with default area. // When graph is clicked, draw the graph with default area.
Flotr.EventAdapter.observe(placeholder, 'flotr:click', function () { drawGraph(); }); Flotr.EventAdapter.observe(placeholder, 'flotr:click', function () {
  drawGraph();
  });
   
   
getData('<?php echo $tgid; ?>','<?php echo strtotime("10/09/2012") ?>','<?php echo strtotime("10/11/2012") ?>'); getData('<?php echo $tgid; ?>', '<?php echo $from ?>', '<?php echo $to ?>');
   
}); });
   
// Draw graph with default options, overwriting with passed options // Draw graph with default options, overwriting with passed options
function drawGraph (opts) { function drawGraph(opts) {
   
// Clone the options, so the 'options' variable always keeps intact. // Clone the options, so the 'options' variable always keeps intact.
var o = Flotr._.extend(Flotr._.clone(options), opts || {}); var o = Flotr._.extend(Flotr._.clone(options), opts || {});
   
// Return a new graph. // Return a new graph.
return Flotr.draw( return Flotr.draw(
placeholder, placeholder,
data, data,
o o
); );
} }
   
   
function onDataReceived(series) { function onDataReceived(series) {
data =[] data = []
for (var key in series.data) { for (var key in series.data) {
data[data.length] = {label: key, data: series.data[key]}; data[data.length] = {label: key, data: series.data[key]};
  }
  drawGraph(options);
} }
drawGraph (options); function getData(sensorID, from, to) {
} $.ajax({
function getData(sensorID,from,to) { url: "<?php echo $basePath; ?>calls.json.php?action=graphcount&tgid=" + sensorID + "&from=" + from + "&to=" + to,
$.ajax({ method: 'GET',
url: "<?php echo $basePath; ?>calls.json.php?action=graphcount&tgid="+sensorID+"&from="+from+"&to="+to, dataType: 'json',
method: 'GET', success: onDataReceived
dataType: 'json', });
success: onDataReceived }
});  
}  
   
   
  </script>
   
</script>  
</div> </div>
<?php <?php
include_footer(); include_footer();
?> ?>