From: <Saved by Windows Internet Explorer 7>
Subject: Translation Workshop 2010
Date: Wed, 7 Jul 2010 14:41:44 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CB1DE2.850A4BD0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5931

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CB1DE2.850A4BD0
Content-Type: text/html;
	charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://C:\Documents and Settings\development.ITI\Local Settings\Temporary Internet Files\OLKB\TranslationWorkshop2010.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Translation =
Workshop 2010</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<SCRIPT language=3DJavaScript=20
src=3D"https://www.surveygold.com/js/prototype/prototype.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"https://www.surveygold.com/js/bramus/jsProgressBarHandler.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript =
src=3D"https://www.surveygold.com/js/jquery.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3Djavascript type=3Dtext/javascript>
  $j =3D jQuery.noConflict();
</SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"https://www.surveygold.com/js/WebSurveyRecordResponseSinglePage.js=
"=20
type=3Dtext/javascript></SCRIPT>
<NOSCRIPT><!--this is shown only if you have disabled javascript-->
<META content=3D"MSHTML 6.00.6000.17063" name=3DGENERATOR></HEAD>
<BODY onkeypress=3D"return SGDisableEnterKey(event)" bgColor=3D#ffffff=20
onload=3DSGOnLoad();>
<TABLE cellSpacing=3D0 width=3D"100%" border=3D1>
  <TBODY>
  <TR>
    <TD width=3D"100%">
      <DIV align=3Dcenter><FONT face=3DVerdana =
color=3D#ff0000><B>JavaScript must be=20
      enabled in your web browser before using this form.<BR>You can =
enable now=20
      JavaScript via the Tools/Options menu of your web =
browser.<BR>After doing=20
      so, select the View/Reload or View/Refresh menu item to clear this =

      message.</B></FONT></DIV></TD></TR></TBODY></TABLE></NOSCRIPT>
<STYLE>.SGHorizontalLine {
	MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; WIDTH: 100%; COLOR: #6482d7; =
HEIGHT: 2px
}
.SGInstructions {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000096; =
LINE-HEIGHT: 150%; FONT-FAMILY: Arial; BACKGROUND-COLOR: #ffffff; =
TEXT-ALIGN: left
}
.SGNormalText {
	FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000080; LINE-HEIGHT: 150%; =
FONT-FAMILY: Arial; TEXT-ALIGN: left
}
.SGQuestion {
	MARGIN-TOP: 4px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN-BOTTOM: =
2px; COLOR: #000080; LINE-HEIGHT: 100%; FONT-FAMILY: Arial; TEXT-ALIGN: =
left
}
.SGQuestionMatrix {
	MARGIN-TOP: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12pt; MARGIN-BOTTOM: =
2px; COLOR: #000080; LINE-HEIGHT: 100%; FONT-FAMILY: Arial; TEXT-ALIGN: =
left
}
.SGQuestionCenter {
	MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN-BOTTOM: =
2px; COLOR: #000080; LINE-HEIGHT: 100%; FONT-FAMILY: Arial; TEXT-ALIGN: =
center
}
.SGResponse {
	FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000080; FONT-FAMILY: Arial; =
BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: left
}
.SGResponseInstructions {
	MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN-BOTTOM: =
3px; COLOR: #000091; FONT-FAMILY: Arial; BACKGROUND-COLOR: #ffffff; =
TEXT-ALIGN: left
}
.SGSection {
	MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 14pt; COLOR: #000080; =
LINE-HEIGHT: 200%; FONT-FAMILY: Arial; BACKGROUND-COLOR: #ffffff; =
TEXT-ALIGN: left
}
.SGTitle {
	MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 18pt; COLOR: #000080; =
LINE-HEIGHT: 200%; FONT-FAMILY: Arial; BACKGROUND-COLOR: #ffffff; =
TEXT-ALIGN: center
}
.SGWatermark {
	FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #000080; FONT-FAMILY: =
Arial; TEXT-ALIGN: left
}
.SGGraphicFile {
	TEXT-ALIGN: center
}
.SGpage {
	VISIBILITY: hidden; POSITION: absolute
}
</STYLE>

<FORM name=3DSGWebForm=20
action=3Dhttps://www.surveygold.com/cgi-bin/WebSurveyResponseRecord.asp=20
method=3Dpost>
<DIV class=3DSGGraphicFile><IMG=20
src=3D"http://surveygoldplus.com/s/161B79B15A444E7D/39.bmp"></DIV>
<DIV class=3DSGTitle>Translation Workshop 2010</DIV>
<DIV class=3DSGpage id=3DPAGE_1 style=3D"VISIBILITY: hidden">
<DIV class=3DSGNormalText style=3D"MARGIN-BOTTOM: 10px"><BR><BR>ITI =
Translation=20
Workshop Booking Form<BR><BR>Saturday 16 October 2010<BR>9.30am -=20
5.00pm<BR><BR>University of Leeds, Michael Sadler Building, Woodhouse =
Lane,=20
Leeds, LS2 9JT<BR><BR>Cost: =A345 ITI members (or member of FIT =
organisation), =A358=20
non-members (rates include VAT, refreshments, lunch, copies of=20
texts).<BR><BR>Please note: Completion of this booking form does not a =
guarantee=20
a place. A confirmation email with details of how to pay will follow in =
the next=20
seven days. If you have not heard from us in that time, please phone =
01908=20
325255.</DIV><A name=3Dskiptorespondent></A>
<HR class=3DSGHorizontalLine color=3D#6482d7>

<DIV class=3DSGSection>Please provide the following (*required)</DIV>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>First Name*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRF>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3D"First Name*" name=3DSGRespondentFirstNamePrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>Last Name*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRL>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3D"Last Name*" name=3DSGRespondentLastNamePrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>Company</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRC>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3DCompany name=3DSGRespondentCompanyPrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>Address*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRA>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3DAddress* name=3DSGRespondentAddressPrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>City*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRY>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3DCity* name=3DSGRespondentCityPrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>Postcode*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRP>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3DPostcode* name=3DSGRespondentPostalCodePrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>Phone*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRH>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3DPhone* name=3DSGRespondentPhonePrompt>=20
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <TABLE width=3D"99%" border=3D0>
        <TBODY>
        <TR>
          <TD width=3D"28%">
            <DIV class=3DSGQuestion style=3D"MARGIN-TOP: 0px; =
MARGIN-BOTTOM: 0px"=20
            align=3Dright>Email*</DIV></TD>
          <TD width=3D"83%"><INPUT class=3DSGResponse size=3D42 =
name=3DRE>=20
        </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><INPUT =
type=3Dhidden=20
value=3DEmail* name=3DSGRespondentEmailPrompt> <BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq1></A>1.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Are you a member of ITI? =
</DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGClearRadioButtonText(this);=20
      type=3Dradio value=3DNo name=3DQ39_SGVAL_803_SGVAL_1>No =
</DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGSetFocusOnRadioButtonText(this);=20
      type=3Dradio value=3DSGOTHR name=3DQ39_SGVAL_803_SGVAL_1>Yes, =
membership=20
      number:<INPUT onfocus=3DSGSelectAdjacentRadioButton(this,false);=20
      onchange=3DSGSelectAdjacentRadioButton(this,true); size=3D30=20
      name=3DQ39_SGVAL_803_SGVAL_1> </DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq2></A>2.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Are you a member of any FIT organisation?=20
  </DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGClearRadioButtonText(this);=20
      type=3Dradio value=3DNo name=3DQ39_SGVAL_804_SGVAL_1>No =
</DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGSetFocusOnRadioButtonText(this);=20
      type=3Dradio value=3DSGOTHR name=3DQ39_SGVAL_804_SGVAL_1>Yes, =
please=20
      specify:<INPUT onfocus=3DSGSelectAdjacentRadioButton(this,false);=20
      onchange=3DSGSelectAdjacentRadioButton(this,true); size=3D30=20
      name=3DQ39_SGVAL_804_SGVAL_1> </DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq3></A>3.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Do you need anything to make this event =
accessible=20
      to you? E.g. wheelchair access, hearing loop etc=20
</DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGClearRadioButtonText(this);=20
      type=3Dradio value=3DNo name=3DQ39_SGVAL_807_SGVAL_1>No =
</DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGSetFocusOnRadioButtonText(this);=20
      type=3Dradio value=3DSGOTHR name=3DQ39_SGVAL_807_SGVAL_1>Yes, =
please=20
      specify:<INPUT onfocus=3DSGSelectAdjacentRadioButton(this,false);=20
      onchange=3DSGSelectAdjacentRadioButton(this,true); size=3D30=20
      name=3DQ39_SGVAL_807_SGVAL_1> </DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq4></A>4.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Do you have any dietary requirements?=20
  </DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGClearRadioButtonText(this);=20
      type=3Dradio value=3DNo name=3DQ39_SGVAL_806_SGVAL_1>No =
</DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGSetFocusOnRadioButtonText(this);=20
      type=3Dradio value=3DSGOTHR name=3DQ39_SGVAL_806_SGVAL_1>Yes, =
please=20
      specify:<INPUT onfocus=3DSGSelectAdjacentRadioButton(this,false);=20
      onchange=3DSGSelectAdjacentRadioButton(this,true); size=3D30=20
      name=3DQ39_SGVAL_806_SGVAL_1> </DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq5></A>5.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Please indicate your chosen language(s) =
for=20
      translation into English </DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGResponseInstructions>(Select all that =
apply.)</DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3D"from =
French"=20
      name=3DQ39_SGVAL_808_SGVAL_1>from French </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3D"from =
German"=20
      name=3DQ39_SGVAL_808_SGVAL_2>from German </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3D"from =
Italian"=20
      name=3DQ39_SGVAL_808_SGVAL_3>from Italian </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3D"from =
Spanish"=20
      name=3DQ39_SGVAL_808_SGVAL_4>from Spanish </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGSetFocusOnCheckBoxText(this);=20
      type=3Dcheckbox value=3DSGOTHR name=3DQ39_SGVAL_808_SGVAL_5>Other, =
please=20
      specify:<INPUT onfocus=3DSGSelectAdjacentCheckBox(this,false);=20
      onchange=3DSGSelectAdjacentCheckBox(this,true); size=3D30=20
      name=3DQ39_SGVAL_808_SGVAL_5> </DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq6></A>6.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Please indicate your chosen language(s) =
for=20
      translation out of English: </DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGResponseInstructions>(Select all that =
apply.)</DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3DFrench=20
      name=3DQ39_SGVAL_809_SGVAL_1>French </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3DGerman=20
      name=3DQ39_SGVAL_809_SGVAL_2>German </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3DItalian=20
      name=3DQ39_SGVAL_809_SGVAL_3>Italian </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT type=3Dcheckbox value=3DSpanish=20
      name=3DQ39_SGVAL_809_SGVAL_4>Spanish </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT =
onclick=3DSGSetFocusOnCheckBoxText(this);=20
      type=3Dcheckbox value=3DSGOTHR name=3DQ39_SGVAL_809_SGVAL_5>Other, =
please=20
      specify:<INPUT onfocus=3DSGSelectAdjacentCheckBox(this,false);=20
      onchange=3DSGSelectAdjacentCheckBox(this,true); size=3D30=20
      name=3DQ39_SGVAL_809_SGVAL_5> </DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq7></A>7.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Other language groups may be available =
depending on=20
      demand; please indicate other languages here: =
</DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%"><TEXTAREA class=3DSGResponse =
name=3DQ39_SGVAL_823_SGVAL_1 rows=3D4 cols=3D80></TEXTAREA>=20
    </TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq8></A>8.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>It is hoped there will be a social event =
(meal=20
      and/or ceilidh), on the evening of Saturday 16 October, close to =
the=20
      workshop venue in Leeds. Participants will pay for this =
individually on=20
      the day. Please indicate if you would like to take part in the =
evening=20
      activity. </DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT onclick=3D"" type=3Dradio =
value=3DYes=20
      name=3DQ39_SGVAL_810_SGVAL_1>Yes </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT onclick=3D"" type=3Dradio =
value=3DNo=20
      name=3DQ39_SGVAL_810_SGVAL_1>No =
</DIV></TD></TR></TBODY></TABLE><BR>
<TABLE width=3D"100%" bgColor=3D#aad2ff border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%">
      <DIV class=3DSGQuestion><A name=3Dskiptoq9></A>9.</DIV></TD>
    <TD width=3D"94%">
      <DIV class=3DSGQuestion>Please indicate if you would like to be =
contacted=20
      about future ITI events </DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT onclick=3D"" type=3Dradio =
value=3DYes=20
      name=3DQ39_SGVAL_811_SGVAL_1>Yes </DIV></TD></TR>
  <TR>
    <TD width=3D"6%"></TD>
    <TD width=3D"94%">
      <DIV class=3DSGNormalText><INPUT onclick=3D"" type=3Dradio =
value=3DNo=20
      name=3DQ39_SGVAL_811_SGVAL_1>No =
</DIV></TD></TR></TBODY></TABLE><INPUT type=3Dhidden=20
value=3D#FFFFFF name=3DSGBackgroundColor> <INPUT type=3Dhidden value=3DF =
name=3DSGBBS>=20
<INPUT type=3Dhidden value=3D161B79B15A444E7D8E6170BD819523E4 =
name=3DSGClientID>=20
<INPUT type=3Dhidden name=3DSGConfirmationURL> <INPUT type=3Dhidden=20
value=3D%a%d%v%e%r%t%i%s%i%n%g%TA%i%t%i%TD%o%r%g%TD%u%k% name=3DSGEMT> =
<INPUT=20
type=3Dhidden value=3DM name=3DSGMultiValueDelimiterOption> <INPUT =
type=3Dhidden value=3DT=20
name=3DSGNotifyAuthorOfNewResponsesEnabled> <INPUT type=3Dhidden=20
value=3D"<style><!--.SGSection { font-family: Arial; font-size: 14pt; =
color: #000080; font-weight: bold; text-align: Left; background-color: =
#FFFFFF; margin-top:0; line-height:200%; }.SGNormalText { font-family: =
Arial; font-size: 12pt; color: #000080; font-weight: bold; text-align: =
Left }.SGHorizontalLine { color: #6482D7 }--></style>"=20
name=3DSGStyle> <INPUT type=3Dhidden value=3D39 name=3DSGSurveyID> =
<INPUT type=3Dhidden=20
value=3D"Translation Workshop 2010" name=3DSGSurveyName> <INPUT =
type=3Dhidden=20
value=3D9C7157DB0F94459FBC7C7CD77FF7C608 name=3DSGEncryptKey> <INPUT =
type=3Dhidden=20
value=3D1_SGVAL_1_SGVAL_1_SGVAL_1_SGVAL_2_SGVAL_2_SGVAL_1_SGVAL_1=20
name=3DSGRequiredQuestionHTMLControlType> <INPUT type=3Dhidden=20
value=3D803_SGVAL_804_SGVAL_807_SGVAL_806_SGVAL_808_SGVAL_809_SGVAL_810_S=
GVAL_811=20
name=3DSGRequiredQuestionID> <INPUT type=3Dhidden=20
value=3D1_SGVAL_2_SGVAL_3_SGVAL_4_SGVAL_5_SGVAL_6_SGVAL_8_SGVAL_9=20
name=3DSGRequiredQuestionNumber> <INPUT type=3Dhidden=20
value=3D1_SGVAL_1_SGVAL_1_SGVAL_1_SGVAL_0_SGVAL_0_SGVAL_1_SGVAL_1=20
name=3DSGRequiredQuestionResponsesAllowed> <INPUT type=3Dhidden=20
value=3D"Are you a member of ITI?_SGVAL_Are you a member of any FIT =
organisation?_SGVAL_Do you need anything to make this event accessible =
to you? E.g. wheelchair access, hearing loop etc_SGVAL_Do you have any =
dietary requirements?_SGVAL_Please indicate your chosen language(s) for =
translation into English_SGVAL_Please indicate your chosen language(s) =
for translation out of English:_SGVAL_It is hoped there will be a social =
event (meal and/or ceilidh), on the evening of Saturday 16 October, =
close to the workshop venue in Leeds. Participants will pay for this =
individually on the day. Please indicate if you would like to take part =
in the evening activity._SGVAL_Please indicate if you would like to be =
contacted about future ITI events"=20
name=3DSGRequiredQuestionText> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentAddressRequired> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentCityRequired> <INPUT type=3Dhidden value=3DF=20
name=3DSGRespondentCompanyRequired> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentEmailRequired> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentFirstNameRequired> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentLastNameRequired> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentPhoneRequired> <INPUT type=3Dhidden value=3DT=20
name=3DSGRespondentPostalCodeRequired> <INPUT type=3Dhidden=20
value=3D803_SGVAL_804_SGVAL_807_SGVAL_806_SGVAL_808_SGVAL_809_SGVAL_823_S=
GVAL_810_SGVAL_811=20
name=3DSGAllQuestionID> <INPUT type=3Dhidden value=3D"8 - 2010/04/18" =
name=3DSGVersion>=20
<HR class=3DSGHorizontalLine color=3D#6482d7>

<DIV><A name=3Dskiptoend></A><INPUT type=3Dsubmit value=3D"Submit Your =
Responses"> <INPUT type=3Dreset value=3D"Reset All Responses"> </DIV>
<P class=3DSGWatermark>Created with SurveyGold <A =
style=3D"TEXT-DECORATION: none"=20
href=3D"http://www.surveygold.com/" target=3D_blank><FONT =
color=3D#000080>survey=20
tools</FONT></A> - <A href=3D"http://www.surveygold.com/"=20
target=3D_blank>http://www.surveygold.com/</A></P></DIV></FORM>
<SCRIPT language=3DJavaScript type=3Dtext/javascript>
SGOnLoad();
SGProcessQueryString();
var frmvalidator =3D new SGFormValidator();
frmvalidator.SGAddValidation("RA","required","Address: Required field");
frmvalidator.SGAddValidation("RY","required","City: Required field");
frmvalidator.SGAddValidation("RE","required","Email: Required field");
frmvalidator.SGAddValidation("RE","email","Email: Enter a valid email =
address");
frmvalidator.SGAddValidation("RF","required","First Name: Required =
field");
frmvalidator.SGAddValidation("RL","required","Last Name: Required =
field");
frmvalidator.SGAddValidation("RH","required","Phone: Required field");
frmvalidator.SGAddValidation("RP","required","Postcode: Required =
field");
</SCRIPT>
</BODY></HTML>

------=_NextPart_000_0000_01CB1DE2.850A4BD0
Content-Type: image/bmp
Content-Transfer-Encoding: base64
Content-Location: http://surveygoldplus.com/s/161B79B15A444E7D/39.bmp

Qk2uKQEAAAAAADYAAAAoAAAA3gAAAHIAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////u6+ri3NzRwcG2oKKjjI2bg4OR
d3uLcXGEbm+PdHaWfIGeiIermZnGt7Xe1dLo5+f49/f/////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////+/s7Mm7u5+DindZWFw1OEkiJkUaHEQZG0QbHEobHUcdHk0aIkofH1AfIUggH0ocIEce
HUgbHEIZHEgbHEcgH1MqK21NTY5zd7uop+Hd3f//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////1dDPnoOCZkRGSSMkRRobSBwf
TSQjVicpWCsrWSovWSwrWSswVS0sWCotWi0tWCotVSstWiwtWCwtWiwtWCwtWissWCouVyssVikp
UyMkSR4gRRkcRR4fWTQ1h2xsxre0+ff3////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////k3Nybf4NZMjJBGR1IHB5SJClZKytYKixaLSxYKi1ZKSxZKy1YKixYKy1Y
LCxZKy9XKixaKy1XKi1aKi1bKixZKyxXKi1ZKy9YLCxaKixXKi5ZLC5bLC1aKy1ZKy1bKyxSJylK
HyFEGRtNIyJ8YGDNv8H/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////7+1tGVBQUIW
GEwbIFQmKFoqLFgrLVkqLFgrLVktLFgqL1ktLFgqL1QtLFkqLVgqLFkqL1wtLFoqLVQqLVoqLVgt
LFcqL1cqLVorLlcsLVYsLlYrLFYrLFYsLFcoLFgqL1UqLVcrL1oqLFcqMFotLFcoLUwjI0MWGVAo
Kp6Giff19f//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////qZeXTygoRBcZUiUnWiwsVysqWi0tVyotWi0tVyot
WSotWCstWSosWCotWS0tWSotWS0sWSovWC0sWSotWCosWCotVSotWCotVC0sWiosVyosWiosVyos
WiwsVywtWiotVyosWiwsVSssWiosVyotWi0sVyotWiotWiotWi0sVicpSx8eRBgYg2Vq8uzr////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////+4p6pIIiFEGBlTKSpaKy9aLC1XKy9aLC1XKixaLS1XKixVKi1YKixZKi1YKi1ZLS1XKipU
Ki1YLSxULS1aKipYLS1aKi9XLS1YKixULSxbKi9XKixXKyxVLC1bKy5XLCxWKixWKixYLSxXKy9b
LC1XKy9aLSxXKi1aLS1XKipZLS1XKi9VLSxZKi1ZLCxNICE/ERWGbm/+/Pv/////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////9LGxk8rK0QVFVUqK1ssLVcs
LVosLFcrLFotLFcrLFUrLVcqLFotLVcqKlorLVgqLFotLVgqKlktLVkqLFkqLVkqLFgtLVcqLFcr
LVoqKlcrLVsqLFctLVoqLVcqLVsrLFcsLVorLlctLFssLFcqLlgtLVgrLFYqLFcqLVgrLVcqLFot
LVgqLFotLFgqLFctLVkqLFkrLFgqL0odITsSFJyFh///////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////+/X3emBlPA8SVCcpVysuWiouWiorWiwrVysuWiwtVystVi0sVyov
Wi0sVyovWi0sWCovWS0sWCosWS0tWSovWSssWSovVS0sWiotWCssWiovVy0tWiovVyssWisqVy0t
VystVSwsWywsVywsVistVistWywsVysuWC0tWCssWyotVyosWi0tVyosWi0sVyovVy0tWCosWS0t
VyosVSssWisvVi0sRhcbUC0t2M7P////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////++
r69DGxtMISBbKytXLS5bLC5XLCxaKi1XKi1aLSxXKy5aLS1XKyxaLSxXKi9aLSxXKixaKy1YKixa
KyxXKi9ZLS1YKixZKyxZKi1YLS1ZKi1YLSxZKi9XLi1bKixXLS1aKy1XLSxbKi1XKi1aLCxXLC5a
LC5XLCxbKi1XKixXLS1XKyxaLS1XKi9aKyxYKixaLSxYKi9aLS1YKi9ZLSxZKixbKy1bKi9YLixW
JCk8ERKDaWz/////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////4FqaDsPEVUsLFsrLVctLVorLlcs
K1osK1csLlosLVcrLFotLFcrLFotLFcqLVotLFcqLVstLFwqL1ktLFcqLFUtLVgqLlYrLVkrLVgt
LFgpLFQoK1gnKlMqKVglK1QpKFQmKVQqKlopKlcrLFsrLVgsLVcrLVYqLlstLVcrLlYqLlcqLlst
LVcqKVotLVcqLVorLVcqLFotLVsqLlgtLVkqLFktLFgqL1grLFoqLVguKlkqLUgdHVQsL+Xh4f//
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////5d/eVzM0TBkeVy4tWCsuVy0sWiotVyotWiwtVywtXCosVyosWi0tVyst
WyotVyotWyssVyouWistVyopWSsvWCoqWi0tVygsUigmTR4gQhocRhsbRRweTyYoVjAzWzMzXjo7
Xjs8WTY3VzEwTyksSCEhRBocRh0dSh0cUyMjVScoWywsWCssWystVyosWi0uVyouWisuWCouWi0s
VyouWSstWSouWCosWC0sWS0sWCotWC0tVyotVy0tWiotUSclQRYbsqCg////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////Qv8FB
Hh5VJCZYLi5YKi5XKixaKy1XLS5aKy5XLCxaKi1YKy1aKyxXKi5bKy5WKi5aKy1bKixaLS5XKi1a
LS1TJihLIB9DGBlOJydpR0mMcnW4oaLaycnm4uLy8PH9/Pv////////////////+/Pz39vXp5ufe
1dbGs7KXgYF2WFdVMDJEGRtHGxxRIyZbLCxXKi5aLixXKixaLS5WKixaLSxYKi5ZLS5WKixWLS5Y
KixWLS1aKi1YLS1XKi1YLS1bKixWKSw8EhiOdXX/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////z7+/Qx7zUyLvUx7zRybnRxr/Ty7rUxrnUx7nUxrnUx7nUxrnUx7nUx7nUx7nU
x7nUx7nUx7nUx7nUx7nUxrnUx7nUxrnUx7nUxrnUx7nUx7nUx7nUx7nUx7nUx7nUx7nUx7zTx77X
x73Txr3Ux77UxrzUx7/Ux7zUx7nUx7zUx7/Ux7vUx7/Ux7vUxr7Ux73Uxr3Ux77UxrvUxrnUx7nU
x7nUx7nUx7nUx7nUx7nUxrzXx77XxcDOwLzx7O3/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////6+cnUEXF1YnKlcsLFgqLlcrLlorLFct
LVorLVctLFosLFcsLVgqLVYrLForLFcqLVctLlcrLVsuLlgoK0sgH0EWFls7OpV5e9K/wvXz8///
//////////////////////////////////////////////////////////////////////38/OXW
16mSk3JPTkIdHkcbG1UkKVsuLFgtLlYqLlcqLFotLFgqK1ktLVoqLlktLloqLVgtLVoqLVctLVkq
LFcrLlgqLlcrLEYZG3ZZWv//////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////+7o3LWa
fsOdfcadfb+hfb6df8SafMSfgMKafMWfgMKafMWfgMGafMSdf8KbfcOcfsOdfsKbfcSegMKafMWf
gMKafMWfgMKafMWfgMGafMSef8KbfcOcfsOdfsKbfcSegMSafMibgcSXgcafgMKWf8KfgcKafsGe
gsGdfcGdfsGcf8KbgsSefsKagsWff8KagMWfgMKaf8WegsKefMSdf8KdfsOdfsOdfsKdfsSdf8We
fMifg8iTibCLieje1v//////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////mYSHQhcZVikoVi0tWyktVyksWiosVy0sWistVy0uVyotViotWywtVywt
VyosVyotWy0sWCktVSgqQxUaSCIjjnV339DQ////////////////////////////////////////
////////////////////////////////////////////////////////////////7+rpp5SYXzo6
PhEWUCUkVyotVS4tWCosWSsuWCosWy4sWiouWCoqWC0tWC0tWCosVisuWyotVy4sWCktVyssShwf
YUFF//v9////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////7unXwp+C06B+1KB/z6CA0qCA1qCB
0qCB0KOB0KCA0KOB0KCA0KKA0KCA0KKA0KGA0KCA0KKA0KCA0KOB0KCB0KOB0KCA0KOB0KCA0KKA
0KCA0KKA0KGA0KCA0KKA0KCA0KOA0KCD0KCE0KCE0KOD0KCD0KOD0KCD0KKA0KF/0KCE0KKE0KCE
0KOE0KCD0KOE0KCE0KOD0KJ+0KZ/0KF+0KZ+0KF+0KZ+0KF+0KZ+zaJ+y6OEzaGMtZeH6ebX////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////+YgoRE
GBhYKSxYKi9aLSxXKy1aKixXKy9aKyxWLS1bKy1XLS5aKi1XKi1bLC5WLC1bLS1VKCpCFhlQMDCv
m5v++vr/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////TwcRzUVY7ExVQIiRbLi9X
Ki1ZLCxWKSxZLi9VKixWKi9aKixXLS9ZKi1XLS5aKixXKy1bKixYKy1NHiFfP0D/+vz/////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////u6d6+nYHSoIXXn3/SnobVoYXbnIXSoYTOoYTSoIXOoYTToIXN
oIPToIbOoIPSoIbPoIPRoIXRoIPQoYXSoITOoYTSoIXOoYTToIXNoIPToIbOoIPSoIbPoIPRoIXR
oIPQoIbSooLOoIHRoIHOoYLToIXSoYPSoIXSoIPToIbPoIDRoIDRoIDQoYHSoIHOoYHSoIHOoIHT
o4DNoIDTooDOoIDSoYDPoYDRoYDQooDQoIDPooHNooO7moLo5Nb/////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////5iCgkMXF1UpLFctLFoqLVgtL1oqLFcu
LFgqLVctLF0qLFcqLVcqLVcqLFosLFcsLVgrLUMYGkooKLejov//////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////9/R0WlISzkPF1UqK1gqLFcqLFUqLVcrL1oq
LVgtLVgqLVQrLFgqLVctLVorKlctLVsrLVgtLk0eIGA9Pv/8/v//////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////7///v/
/////+7p4LyeiNCfhtOehdChiMydiNKdic2chM2iiMuchM6iiMuchM6iiMqdhM6gh8ufhs2ehcug
h8ychMyiiMychM2iiMuchM6iiMuchM6iiMqchM6gh8ufhs2ehcugh8ychMyiiMmhhMuhhMughM6i
hMqchM+hiMudhtCgh86ehsyghMqghM2ghcyihMyghc2ihMughM6hhcuhg86giMqehM6gh8ufhs2f
hsugh82ehMugh9Okf9Gjf7qZfunl1f//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////rJiYQhUVWSksWC0vWiosWC0vWiotVyssWCotVy0sWiotWi0tWissVy0s
WywtWCwtVSQnOxMUn4WF////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////zL/BTCcrSRoeWSosVy4tWyotWC0vWioqVy0tVyosVy0vWyos
Vy0sWisrVi0vWSstWCwtTB4haUdM////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////7ungvp6Fz6CG0qCF
yqCFyKGIzqCEy6GFy6ODyaGFy6OEyaGEy6KEyqGDy6GFyqGDyqGFy6KDyaCGy6OCyaGFy6ODyaGF
y6OEyaGEy6KEyqGEy6GFyqGDyqGFy6KDyaCGz6ODyqCBzqOAy6GBy6KBzaCHyqCEy6GIzJ+IzaKG
yaCAyp6EyaGFzKKEyaGFy6KEyaGEy6KFyaGHy5yEyqGIy56Fyp+Hyp+Gy56GyaGHz5yEz6R/z6Z6
vZp66+bV/////v//////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////Ju7s/
FBZZKStZLS9ZKixYKy9aKixXKyxaKixXLSxbKi9XLSxaKixXKi1aKy1XKyxCFhdePT7t4+T/////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////+PdnY6EBNYJiVaKy1aKi1YLSpaKi1XLS1bKixXKyxaKy1aLS1aKy1XLC1aKyxY
LC1JGh17Y2T/////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////w6djBnYLVn37XoIDNoIDJooDLoIHNpYHOpH7O
pIHOpX7OooHOpn7OoYDOpn/OoX/OpoDOoX/OpoDOon7OpYHOo37OpIHOpX7OooHOpn7OoYHOpn/O
oX/OpoDOoX/OpoDPon/To3vSonvRooLRoILPnHzOoYTPnYPHmoPInIHLnYDOn4DOo4DQoIHOo4HO
n4HOo4HOn4HOo4DOoYTOoIbOoIPOoIbOoIPOoIbOoITQoIHPpH/Upn65nXzr5dX////8////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////97V1z4VF1krKlgtL1kqLFgtLFkqLFct
L1wqLFctL1cqLFcqL1oqKlcqL1crLFgpKT4TFp+Iif//////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////97R
0UckJU4fIlgqL1oqLVctLVctKVctMFoqLFYqLFgrKlosLForK1csLVorK1gsLUMXF5l+gf//////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////Lp3MKfgdWhgtagfs2ihMiihM6jgc+iftCif9Oifs+if9Oifs+iftKiftCi
ftGiftGhf9Cif9Ohf8+jf9Oifs+jf9Oifs+if9Oifs+if9KiftCiftGiftGhftCiftOhfs+jf9aj
f9ajf9WgftKjgdCkh8ufh8WbhMWdiM+mjc2bgdGeftajh8+cg9Ogg8+gg9Ogg8+gg9Ogg8+jgdKf
gNCigNGhgNGhgNCigNKfgM+jgc+fgM+lgbmbfezm1///////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////z8UCotVSYoVy0tWSosWC0sWSotWCosWSosWS0tWiosVyotWiosVy0t
WCssUSUlSSAi1MrL////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////bU9SRxocVy0sVyos
WCotWiosVyotWissVywtWissWSwsWisuVystWiwrWCguPRETyb69////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////7enh
wZ2G056H056Ey6CIzKCGy5+KzaSEzJ+Ey6SEzZ+Ey6SEzZ+EyqKEzaCEyqGFzaKByqCCzaOCy5+C
zKSEzJ+EzKSEzZ+Ey6SFzp+ByqOFzaCEzaGEzKKEzaCEzaOEzZ+D15yD1aCE052D0JyGx5qBwZiH
17Cf7Me48c+52a+YxpuEzaSLzZ2IzZ2IzKCJzJ2JzZ2JzaCFzZ+EyqOEzaCEyqGEzaGEyqCEzaOD
0KCD0J2GzqGAtp186ePW////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////9z
WF1NHh9ZLTBZKixYLC1bLSpZLS1ZKixYLS9ZKixXLS1aKy1XKi1bKytNICFZNTf28O//////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////+LcXRAFhVYJy9XKyxYLS1ZKixaLC9ZKy1X
LC9XKy1XKy5aKy5WLC5ZKyxUKSlDGxv17+//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////u6eDBn4TToYPUoIPLoIPIn4PO
pIHSn4POoITRoITPoITPoITQoITOoITRoITNoYDSon/No4HTon7NpILQn4LOpILPn4LQpILPn37N
pn7NooLOoIHRoITWoYfQnofLnYPNpY3OoovJnoXDnITEo4vPsZnr1MH218fw1cfu1cfpzr7NpZbK
mYTQm4XSn4bNpIPOn4LSoILSoITQpITMn4HRooLMoYLRoYHMooTRoIjPnojUnYbQooa7mYHs49n/
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////6+amj4TE1gtLVUrLFksLVgrLFks
MFkqLFgsLVcrLFgtLVorLVgsLVorLU0cHmZMTP//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////6mTkz0WF1cmLlcqLFgtLVkrLFgsLForLFgsLForLFYrLFYrLlYr
LlosLE0jI2NERP//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////+7p4MGdg9Ofh9Sgg8ugg8yjhMyjgdCgg9KghNGghNKghNGg
hNKghNGghNGghNKhg82ig8ygg8+jg8yfg82kg82fg82kg82fg82hfs2jf8yjgs6kg9Gjgc6bgdWm
hsyhgsCWf8iegdGskta1nejJuO/XxvTj0qeWjxkLAq2clfHa0eTFt8+jjdOiidCgg9Cfgs+kgdKf
gtCggsyfhNGjgcyif9GjgMyhgdGfhMyfhtCdiNKdhs6hgb+Wfuvk1v//////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////7ujoQBYWWCsrWCstWCwtWSssWCwtWCssWCotWSssWCwvVi0sWiwt
WistSB4cak5O////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////sZ2ePBUWWCksWS0tVywtVystVywsVystViwuVisuWSsuVysuWCosWCwuQhgZqZSV////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////7ungwZ+E06GD1KGDy6KEyJ+EzaOBzJ+DzqSEzZ+EzqSEzZ+EzaOEzZ+EzaKEzqGDzaCH
y6CDyp+HzKSDzJ+GzaSEzJ+EzKSEzaGD0aOCyp9+zaGDzaKDz6KGypp+wZZ+zaeN5MCn78+77tfD
793O38/EVUlCBAAAAAAAGxAR0MG489nL576wxpiG0J6G0KCD0Z+C0aSC0J+B0KSEzJ+B0aKCzKGB
0aGBzKKE0Z+HzJ2I0J+FzqGGupeA6+LZ////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//9nSEpSIyRZKytZLC1VKixZLCtYKi1YLC1ZKixYLC9YKyxXLCxZKy1MICBpTE/////////8/PyO
enyUfHuSfICUfXyTfICUe3yUe32UfX2UfX2UfXyUfYCVfXyNdna/srj///////////////////+2
qq2OdnaVen2VfX2Ven+VfX2UfYCYfX2UfX2UfX2UfYCUfXyTe3uUg4P9+/v////////////////s
6OmNdXWUfXyVfYCVen2WfH2Uen2VfX2UfX2VfX2Uen2VfX2VfX2Hc3HXz87///////+woKBBExVY
LSxVKi1ZLCxXKy1ZLC5XLCxWKyxYKyxYLCxZKy1YKyxYKitAFhbw6+z/////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////u6eDBnYPTn4fU
oIPLn4TMo4TNo4HMpIPMn4TNpITMn4TNpITMn4TNooTMoITNoYTMooPLoIfMoIPMoITMpIPOn4PO
pIPNn4PSoIPNm4HOpIHLoYjJnYXKnYXXq5nlwKnw0L3t08Pw183m1MmKgXYZEA0AAAAFAwUCAAAA
AABHOjTo1s7528vft6bKmojOn4PRpIPNo33QpILNn4TRo4HMon/Qo4DMoYHRn4TMoIfRnYjNoIbO
oYG6mX/s4db/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////7eoq0QUGVksLFgrLVgsLFgq
L1gsLFgqLVksLVkqLVksLFgsLFgqL1IjI1QzOf////////////n6+j4aG0kcHEwcHkoeHkccHkse
IEsdHksdIEkeHkwdIUodHUwdIUESEpmAg////////////////////4VtcUEREk0dHkkeHkkdIUke
Hk0dHkgeHksdHkkdH0sdIUkdHkgaG04mJv76+v///////////////9/Z2jUODU0cHkoeHkgdHkwd
Hk0dHkkeHkwdIUkeHkwdHkgeHk0dITQJCr6urP///////////5yDg0AZGFoqLVkrLFcsLFksLVkr
LlcqLFkqLFgrLlgtLVgsLVktLFEjJGZHSf//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////+7p4MGfhNOhg9Shg8uihMifhMyjgc2fg82k
hM2fhM2khMyfhM6jhMufhM6ihMuhg9Ggg86ig82ghM2dfNCfg9OkhdOjhNGfgdOhhdagicKWf8mj
jdawn+rJuPDQwuzRwunTx+zc2qqflygeHQAAAAAAAAQBAGdlYyghIgAAAAAAAH1tavPd0+3Nv9Cl
lc2jisedgNGkgs2ffc2ghM2fgdCigtChgdChgcyig9GehsydiNCfhcumhriYf+zk2f////7/////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////Rx0eWCgqWSstWSwtWCstWSwsWSstWCotWCstVSwsWCst
VywsVicrRyEn/ff5////////////+vv7TScoWSsrWSwuWisuWCstWSwrWSwtWSwtWCwtWSwtWSot
WissSiAhnYWK////////////////////jXZ3TyAhWSwtWSwtWCosWSwtWiotWSwtXCwtWSssVywr
WistVCkqWDI1/fr6////////////////4t3cSRscWiwtWSstWiwsWSwwWiwtWSstWSwsWSswWCws
WSstWS0tQhYaxLKy////////////////f2NlShweWisvVywsWSssWCssWSosWCsuWScuWCssWSos
WCstWiwtQBIUx7q6////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////7ungwZ2D05+H1KCDy5+EzKOEzqOBy6SDzZ+EzaSEy5+EzqSEyp+EzqKE
yqCE0qCD0aB+0KCB0qOA06OFz6WCxZZ5zZyD0KKHyJF5z5+I4bek6si168299NLG8M3P/+Tjt6Oi
KCIiAAAAAAAAVk5QycS/OTAq2s7D3dPFGhEEAQAAAAAAu62j7tTN99bHyaGJxpp/06CF0KSH0KOH
0KOBzaB/zaGAzaGB0aCEzKGI0Z2IzaCGy6GBt52A6uPW/////P//////////////////////////
////////////////////////////////////////////////////////////////////////////
//////+chYdGHR1ZKi9ULCxZKy1ZKi1ZKy1ZKi1YKi1YLCxYKy9UKixZKyw7ERXe1NX/////////
///////7+/tNJylXKitZLC1YKyxZKyxYLCxZJyxYKy1ZLC1YKy1ZLCxYKi9KHiGgh4r/////////
//////////+NdXpOICFZKy9YKixYKi9VKixaKi9YLCxaKy1YLCxZKyxYLC1UKClaMzP//Pz/////
///////////h3NxJGx1YKixULCxYKy9ZLCxYKy1ZLC1YKy1YLCxZKy9ZLCxZKzBEGBnDsrL/////
//////////////9XOjxRJCRYKy1YLCxZLCxYKy5ZKy5YKyxXLCxXKy9ZLC1YKyxTKSlSKyv/////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////u
6eDBn4TToIPToIPLooTJn4TLo4HPoIPNoITNoITPoITKoITRoITJoITQoITRoILSpIPSoIDTo4fI
ln/Ln4fInobBloLSqZPmwa771MTrzrznzsD03dbz1tizmZgmEg4AAAArHh2Jfnzf1tDr49ff181o
VU6gkoTw38nPu7UTBgQEAAAEAADh3dDhzsLrzb3RqpHFm3/OoIPOoITNn4DQooHPoIHQoYDNoYPQ
nYXNnYjPn4XOpoW2mX7q5Nj////8////////////////////////////////////////////////
//////////////////////////////////////////////////////////z5+UAWFlgqL1QqLFkr
L1ksLFgqLVktLVkqLVgtLFkrKlgqLForMD8UFqyYmf////////////////////v7+00nKFkpK1gr
K1krK1gqLFksLVgrLVksLVgrLVksLFgrL1otLEgeHp2Eiv///////////////////413d08fIVgt
LFkqLVctLFkqLVctLFkqLVctLVkrLVgsLForK1MpKVgyNf38+v///////////////+Dd3EkaHVks
LFcrLVksLFgrLVkqLVgrLVkqLVgrLVksLFkrLVktLUEXF8Oysv////////////////////Dp6kMb
G1crLFcrL1grLFosLFgsLFkqLFgrL1oqLVgrLFksLVgrLEYZG7Giof//////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////+7p4MGdhNOghtOgg8ughMui
hM6jgdOgg8+ghNOghM+ghNKghM+gg9KghNCghNChg9Ghgc6ghsyehMWXhsOchtGsm+XDte7NvvDU
wtjCtPbl1eDTxI+AciwWDAgAAE01L7agmevSzebSyePRw9fGvPXm13toWMi4pObQu/DbzL2rqgEA
AAAAADY5Me3l1OXKuu7HsdKljMubgsqggNCigc2hf9CmhM2ggM+ghM6hiM+diNOchc6jgrWcgejj
1v////z/////////////////////////////////////////////////////////////////////
////////////////////////////////////inR3TB8eVS0sWCovVC0sWCotWS0sWCotVC0sWSov
WC0sWSotUyEkcU5N////////////////////////+/v7TScpVyksWiouVyosWistVysrWiwsVyst
WiwtVyotWS0sWCovSx4goIuK////////////////////jXV6TiEhWCovVy0sWSovVy0sWiovVy0s
WistVywtWistVywsVygpVzQ0/Pz8////////////////4N3cRhocWCosWi0sVyotWS0tWCotWS0t
WCotWS0tWCotVC0sWiswRBkYw7Ky////////////////////////u6mqPxMXWCwsViosViouWiwu
WCssVSwsVyssWiwtVystWi0sVygtSCEh////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////7ungwZ6E05+F056Dy6GEyqKEy6OBzaKE0qKEzqCD06KE
zqKD1aKGz6CD0qCD06KF0aOIwpmAw5mI1bKd5sS27M7H5snG6czL8tXV0sW6a2NbDQUADwgCbl5R
1L2v8tfJ7dfF6s/B58y+5dHA7dTDxLCgIQ4A3Mew79PB3b+y1bu4rKSaAAAAAAAAe3pu9uDV8svB
572nzJyIzaCEz6KEzaKAy6F+z6KAzqGEzqCFzaGIz52FzqCEt5l96+TX/////P//////////////
////////////////////////////////////////////////////////////////////////////
//////////////9AGh1aLCtXKi1ZKixYKi1ZKixYKi9ZKixZKi1YKixZKi1ZLCs+FRry6u3/////
///////////////////7/PtNJydZKitXLCxaKixXLCxaLSxXKyxaLC1XKy1aLS1aKi1aLSxIHiGd
hIr///////////////////+Nd3dPHiFYLSxZKixYLSxaKixXLSxaKixXKi1XKypVLCtaKi1TJylY
Mjb9+vv////////////////j3dxJGRxXKixXKi9aKixYKy1ZKi1YKixZLS1YKi1ZLS1ZKS1aKS1A
FxnDsrL///////////////////////////9uT1FQIiJXKi1aKixaKi5aKi5XKixaKixXKixaLC1X
Ki1bLSxDGhq6q6v/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////w6eHBnoLSoILWoITKoYTKooTOo4XInX3MooPToYTNooPToofInX3RoILVpYbInH3Q
rJLZs5zy0bzy0L/u0sPy19Hw19W6pqhTPTsVBgUvJx+LhHzWysLv39Hq08fq0b/ky7rmzbnnz77q
zbzszLzqz7+WiHgfDgHpx7r7z8WynI/PwLCYmIYAAAAAAACbiYj83dbwyL7muq2+lYHHnYDRpYTP
pX7RoYDOoYDLoIbInYjVnYXQn4W9loLr4Nz////8////////////////////////////////////
/////////////////////////////////////////////////////////////////6OQkksaHFcr
LVoqLFcqL1UtLFgqL1QtLFgqLVQtLVkqLFkuLEMVGqyXlv////////////////////////////v8
+00nKlYoKlosLFcsLlosLlcrLFosLVcrLVosKlcqLVotLFoqL04hIKCKiv//////////////////
/410eVEhIFsqLVgqLFgqL1QtLFsqLFctLForLVcsLVorLVosLVcoKVY0M/78/P//////////////
/+Dc3EkdHlcpL1otLFcqLFkqLVgqLFkqLFgqLFktLVcqLFctLVkqLUYZGcOysv//////////////
//////////////Lq6kUaHFoqLVcsLFosLFcsLFosLFcrL1osLVcrLFotLFcqL1UpKFc0N///////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////Dp4cGdgtKg
g9eggMyggMuigMyigdKjhNKhg82eg8mhhMecg8ebhc2kisyniuTAqOfItenOv/PXx/LbzO/XzJqC
eTUgHBEAAGlPSbynqe7e1t3Syunb0uXQxd7Ft+vSwePMvObOvOjPvufNvOfKuubNwvDj1Ix9c/LU
0OXEwunVyGZWSeXh0HdyZgAAAAMAALmoofDXyOfMu8yqkculic6hf9GggM+hgMqghMughcmdidGd
hc+hhbaUguvh2///////////////////////////////////////////////////////////////
////////////////////////////////////////////TicpVignWistVysvWissWCotWi0sWCot
WS0tWSotWi0sViYrVTQz////////////////////////////////+/v7TScnWiorVywtWiosVyou
Wi0tVystWi0qVyssWistVyosWC0sRx4hnYSK////////////////////jXh3Tx4gWCsvWiovWC0s
WiovVyssWiovVy0sVystVS0tVyosUicpWDIz/vz6////////////////493cSRkcVS0sVyovWi0s
WCosWissWCovWS0sWCosWS0tViosWi4tQBYZw7Ky////////////////////////////////ln6E
SB0dWyotVyotWiosVyovWiotVyosWi0sVyosWi0sVyosRRgXz8LE////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////7unhwZ+C06B/06CBzqKAyKF+0KOCzZyB
zZ+CzZ+HxJqCxKGHzKSV372s7dDB7dPF5M/F79/S2Me1bVlNDwAAPCoeoIp969rM8eHV59fJ5dXK
8N/Tp42EfGVbyaqj5c3B4cu+6MzB6c296c3B5cm96dDJuq2mCgAAtaKe7NHN5c/K2Ma4PTIm//Lo
V1JLAAAAEQwBwL+s6+PQ4sy3zaaQxp1+0qKE0aGEzaKDyaCGzpyL1aCDzqKEu5uB6+DX////////
////////////////////////////////////////////////////////////////////////////
///////////////////JvbxDFh1bLSxXKi9aKixYKixXLS1YKixaLS1XLSxVLS1YKixAFhnFsrL/
///////////////////////////////7+/tNJydWKitaLCxXLC1aLCxXKy5aLS1XKy1aLSxXKi9b
LSxXLSxPISGfiIr///////////////////+NdHpNIiJaKixYLSxaKixXLS1aKixXLSxXKixWLS1X
Ki5VKi1UKSlVNDP8+/z////////////////j3dxGGh5YKi5YKyxXKixaKy1YKi9ZLSxYKi1ZLSxZ
Ki9ZLS1ZKi1GGhnDsrL////////////////////////////////8+flKJidZKCtaKi5XKixbLSxX
Ky5aLS1XKyxbLSxXKi9bLixNISR6W1v/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////u6eC8n4TSoIXUoIDLon7LpoHQon3No4THnIHJpIrXtKDjwrLu1MXs
0sLz2c7o2M2nlo81JSILAAB2Z1XUyrft4NPr3s3q28zz49fp2cqOeWtCKR6PcWTqycLt0cnhyMHk
zsTnzL7nzcLtzMTnyrzgyrrt3dSgkIcZBACUf3fu1cbv2MzHs6MyIxn/+O5LQzoAAAAUGA7OzL/l
2cvs0LzNnI3Om4fOn4PLoITLooDRn4HPooTNoIK6lH7r4dz/////////////////////////////
/////////////////////////////////////////////////////////////////////////3ld
X1EjJFcqL1otLVctLFotLVoqLFkrLVcqLFkqLVkqLFYoJ18+Qf//////////////////////////
//////////v7+00nJ1oqK1csLVosLFcrLFssLFcrLlotLVcrLFstLFYqLFstLUceIJ6Giv//////
/////////////414d1AeIlguLVkqLFgtLVkqL1crLVoqLFctLFoqLForLVsqLlQnKVUyNv76+///
/////////////+Xd3EgaHVoqLFcqLVorLFgqL1orLFUqLVotLVgqLFktLVkqL1suLUMWGcSysv//
/////////////////////////////////6WPlEcdHVcsLVsqLVcqLVYqLFYqLFotLVYqLVstLVcq
LFcoK0wmJfz39///////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/+/p4bmdgs2hgc+fgsqghcqigcmegMGeh9a2pOvPuu3Qv+/TyPbd0863sHFYVRUAAEQyJbWllenb
0ujg0Oje0uvk2sG6qXJrXRADAAoAAIt1ZerRwfPUy+rOveXNxOTLwerTx+bLv+XKv+vRw+vKw9/G
u+TTwfTezop5Z8exnujSxObNvPfey4tsYlw/Qvvn6D88OAAAABodF+jn3+HLwuzBuceZh8mggsym
hMmlf86kf9Chfs+mgryZge3h2P//////////////////////////////////////////////////
////////////////////////////////////////////////+PX2TCIiVSkrWy0sVyovWy0sVyou
WS0sVyouVS0sWSouWyssShcbuaqq////////////////////////////////////+/v7TScqVior
WiwtVywsWywtVistVyosVyosWi0tVyosVissVyouTiEgn4iK////////////////////jXR6TSIh
WCovVSstWCoqVS0sWyouVy0sWiosWi0tWisuVy0tVygqWDQz/Pz7////////////////5NzcRx0e
VyksWy0tViosWi0sVyotWC4tWCosWS0tVyouVyssWSovRRoZw7Ky////////////////////////
////////////9/PzTCMoWSosVywuVi0tVyssVi0tVystVi0tVyoqVi0tWCouSRwfuaep////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////7unitp+Dx6KGyqCGwZ6G
yqyP48Gm8NPD7tjG8t3K7NLEooyBPCchNyAbg2lj3MfC7d3O69vP9OPW1snBi313LCIaAAAAFg0F
hnlw7NjK8NnM68vB6Mm66dDA6NHB7dTExbGj2L+15su968u+7c7C7dHC3MKy9+DMsKCH6tjH7NnM
8dnK5Mq4/d3SZUhCdmFi49bWKScnAAAAQTg38NvZ68vB27iow52HxKCByKJ+x6F50KV90qCAxJZ+
7uHY////////////////////////////////////////////////////////////////////////
//////////////////////////+8ra5KGx1ZKi1XKixbKyxWKixaLS1YKixaKy1WKixYKy1UJilW
NTX//v7////////////////////////////////////7+/tNJydaKCtXKixaLC1XKy5WLC1XKy1b
LS1XKyxaLS5XKixbLS1HHiCehor///////////////////+MeHdQHiBYKy5ZKixYLS1aKixXKy1a
KixXLS1aKyxXLSxbKy1TKSlYMjb+/Pr////////////////i3dxJGRxaLSlXKi1ZLStYKi1aLS1Y
KSxZLixYKi5aKy1aKixbLi5DFhnEsrL///////////////////////////////////////+SdnpM
HyBbLC5XKy1bLSxXKy1bLS1XKi1aLS1XKi1aLixQIiVsT1L/////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////r5tyxnoTBoIfJqpDhya/qzbj83Mjt18jJt6d1YlY1
HBRKNyy4ppzp0sv139ns3NPl1MawoJdWRj4UBAAAAAAbCwqBc2vf0Mfoz8bn0sPpzMXr0cLo2MXU
xLGpmYmSf2rOtKTl0MDy0cPqyrro0L7dzLro08fr08nl2MuIgnN0Z2O1qp7n1Mjn0cDw1M09IiGU
gYHYzMoRBwkAAABoWljw39Tu0MPSrpjKnofPpoTIpoHPqHzWoX7IlX7v4dn////9////////////
////////////////////////////////////////////////////////////////////////////
/////3xjY08kI1crLlorLFcqLFYtLFgqLlotLlYqLlYtLFkqLkoeHpiAgv//////////////////
//////////////////////v7+00nKlYqK1osLFcsLVssLVYrLVotKlcrLFotLFcqLlstLFcqLk4h
IZ6JiP///////////////////4x0eU0iIlgqLlUtLFsqLFctLFoqLlctLFoqLVctLVorLVcsLFco
KFc0M/z7/P///////////////+Dc3EkdHFcoLFsuLVYqLVorLVgqLFkpLlgqLFktLFgqLlgtLFkq
LkUaGMOysv///////////////////////////////////////+PW2EQeH1cpLFstLVcrLFssLFcr
LFktLVcqLVotLFcqLFUoK00oKPj39///////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////+3r4cKwnOjGrvrbyOvTwNO6q56DdGdPQVtCNJN7ctXAsPXi1+jXz+nazcm9sn1u
ZCoaFwAAAAkAADciHZ2NheDIwfTc1OTKwejQyOjLwPHXzcauon9xYHRtV76znejUw/DXwOPQuuvO
vevKuejUxN3Nw/fk3L2sqDQvLAAAAAAAAAAAADUrKO3d0ubUzOLOxzAXF6mak8CupwkAAAAAAIJ6
bvXfz+vItNiul8Oaf8amg8+lfNmgfMuVfvDh2P////z/////////////////////////////////
////////////////////////////////////////////////////////////Vy0vVScpWi0uVyos
Wy0uViosWi0sVyouVi0sWCouWS0sQxsb4dna////////////////////////////////////////
+/v7TScnWigrVyosWiotVyotVyosVyotWi0qVyssWy0uVSosWysuRx4hn4mI////////////////
////jHh4UB4gVi4tWiosWS0uWiosVy0sWiotVy0tWiotVyosWyssUykpWDI2/vz7////////////
////493cRxkcWiksVyosVi0tWCotWissWCouWSswWCosWS0sWSosWi4uQRYbxLKz////////////
////////////////////////////////ZUNEVyUoViotWi0uVistWi0uVSosWy0sVyouWisuWCop
RxwdzcLC////////////////////////////////////////////////////////////////////
//////////////////////////////////////7+/////////////v///P//////////9vHp4sq9
5cW3nnxyYVBBfmdhpoyG2ca29N/U8eDT7NrP6NjMnYyEOi0pBgAAAAAAHg4Kb15XwbGj8NvT79rO
6M/H38W79tjO89fQw6udZkxBhHFjyrqp7dzM5djF5Mu538mz5dK+6M684Mu86dXL4dHIdGFhAAAA
AQAAAgMDAAAFCQMEAAAAVktC7t7Vybmx18a+JxMJzbuyoJGOAAAAAAAAnJSL+d7T8M28xaKLvKGH
z6SB26N+wpN57eTb/////P//////////////////////////////////////////////////////
///////////////////////////////////b09NIGh1bLCxXKy1aLSxXKi5WLS1YKi1aLSxYKixa
Ky5RJCdnR0f////////////////////////////////////////////7+/tNJypWKitaLCxXLC1a
LC5XKy1aLSxXKyxbLS5XKi1ZLSxXKi5OIiCehor///////////////////+NdHlNIiJZKi1YLS1X
KitXLS1aKi1XLS1aKixXLSxbKi1XKi5XKClXNDP8+/v////////////////g3NxIHR5XKixbLS5V
Ki1aLSpWKi1aLSxYKi1ZKyxZKixZLSxZKi5GGhjDsrL/////////////////////////////////
//////////+tlpdGHR5XKi1XKi1XKy1XKi1bLSxVKixYKy1XKi1aLS1HHiGTenn/////////////
////////////////////////////////////////////////////////////////////////////
/////////////////Pz////////////////5/f3////8//yLg3RwVkaSeGjJsKP439jjzMnk1c3u
3dT44dq0ppxKPTIAAAAAAABGKiqZf3zXvrfBuKzUy7rm2M/fz8Pnz8bz3Mv43dKihHxALBh/a13n
0sHq18Tn2Mbs2MjkzbvdxLTlzLvfxbrt1cvw4dyrmpUcEgwAAAAKCAMMCQYGAgMCAAURDRQDAAAA
AACPgHzAr6q5o53Xw7oOAADm3NRkYl8AAAAHBADCqan02Mzry7u7oojGoILZoILFnH/q5tv////8
////////////////////////////////////////////////////////////////////////////
/////////////6yXmEoeHlYrLFoqLFcqLVorLVcqKlotLVgqLVoqLVgpLUsbHp6Ghv//////////
//////////////////////////////////v7+00nJ1ooK1cqLFssLVcsLloqLlcqLVsqLlUqLVsr
LlcqLFsrLEceIZ+Hiv///////////////////414eFAeIFguLVoqLFguLVoqKVctLFoqLFctLlsq
LFcrLVkrLVMpKVoyNv77+////////////////+Pd3EcZHFoqLFcqLVcrLFcqLVctLVgqLFktLlgq
LFkrL1kqLForLUEWG8Sys////////////////////////////////////////////+Xc3UYiIlYq
LForLlcrLVorLFcqLFcuLVcoLFotLlgtLFUoJ2dDRf//////////////////////////////////
//////////////////////////////////////////////////////////////////////7/////
/2JfXwAAAC4yMf///0xUVImGgeXc2OHLvvDWxuvOxOPPxujb0tG9tGxbUQ8AAC4dHXdrY8m6stfL
vo57c1M+NWJORbevn+bbzePTy+3c1dPAtWBIRCoRCJd9cvHZz+jdz+XWxvbi182zpYptYauNgPDR
wOzSv/Le1ce8sz02MAAAAAAAAAAAAAkIBwIAAAAAAA8JBw4IBBEICQYAAAAAALKoo4yCfLyppM69
tA8AAOvo4UdBPgAAABkNBdO9sOjUw9S+rcSggMuZfMKbgOvk2v////z8////////////////////
////////////////////////////////////////////////////////////////////g2VlTyEj
Vy0tVystWi0tVyosWi0tWCosWS0tWCgtWiosQh0d2tDQ////////////////////////////////
////////////+/v7TScnViopWyouViouWSwsVystWy0tVystWi0sVyotWi0vVyosTiIhnYWK////
////////////////jHR5TSIiWiosWCwvWiksVy4vWiotVy0vWyotVy0sViosVyosVykpWTMz/vr7
////////////////4NzcSB0eWiksWi0sVyovWi0sWCosWS0sWCotWS0sWSotWS0sWSotRBoZw7Ky
////////////////////////////////////////////////XTc8VCcoVystWistVyosWi0vVyos
WiovVyotWi0sVicqUyou9/T2////////////////////////////////////////////////////
////////////////////////////////////////////////////aWRlAAAAKCgo8/PzjZSV////
////7ObkzrSn9NPG4cO8w6+njnVscFxUuKie69vVva+ld2liGQgAMiAYh3hw3cS88N3T8d7W59DI
oImDNSYdMyUgqJOM5tPL7t7W5trT4dXJnJCDQiogcVlL4sW489jJ+eDS3si8YFJMAAAAAAAAAgQE
AQUCAAAAAAAAEQwLcmVh6dzTxLivAgAABgAABQAADQYFxbq1UEZCx72yu6mhMh4V6tjXNysjAAAA
Gg4J29DA6NfI1bWgyJqEuJeA6eDU/////Pz7////////////////////////////////////////
//////////////////////////////////////////////9hPj5XKCdXKy1aLS1XKixaLS9aKilZ
Ky9YKixaLS1WJydVMTH6+Pj////////////////////////////////////////////7+/tNJyda
KCtWKyxWKy5XKi5bLSxVKyxaLSxaKyxaLS9XKi1bLSxIHiGgior///////////////////+NeHRQ
HiFYKy1XKi1XKyxaKi1XKyxYKi1XLSxYKi1XKy1bKi1TJylXMjb9/Pv////////////////j3dxJ
GRtaLS9UKixbLS9YKixaLS9YKixZLSxYKixZLS9ZKixaLi9BFhnEsrL/////////////////////
//////////////////////////+LbXBOICJbKy5XKi1aLS5XKixaLS9XKi1aLS1YLS1aLCxGHyHg
1db/////////////////////////////////////////////////////////////////////////
//////////////////////////////9pZGUAAADOzs7///+LkY0rLy/d3d/06uLJr57qz8DqyMHj
ycHmzsnHsql7bmUTAwAQAQBPPzq1pJvr2c3z4dTy2dDOtqp3V1MnDQhGMCi4oJnn1Mvo3NDl29PD
ubBsaFofEQNQPTPLtKrz3NL329beycWBbGkQBAAAAAAAAAAAAAACAAEAAAAUCQhoXlbWxcXw29fk
08Hr282mnJgAAAAEAAIAAAAjHBzBubktIhnm1c2smJJVPjTUw8IiGRgAAAA1LyXt2tTp0L7Pq5qv
j3/o5dX/////////////////////////////////////////////////////////////////////
//////////////////////Dt7lEkJ1YoK1otLFcrLForL1YqL1orL1gqLForLFgqLVUmJm9RUf//
//////////////////////////////////////////////v7+00nKlYqKloqLlcqLlosLlcrLVgq
LlcqLFotLlcqLFotLFctLU4iIZ2Eiv///////////////////410d00eIlorLFgrLFoqLFctLFcq
LFcrLForLFctLVorLVctLVcoKVkzNv36+////////////////+Dd3EkaHlcqLFgtLVcqLForLFgq
LVotLFgqLFktL1kqLFktL1cqLEYaGcOysv//////////////////////////////////////////
/////7yop0kcHVcqLVstLFcrLFotLFcqLForLVcqKlotLVgqLEUeHrulpf//////////////////
////////////////////////////////////////////////////////////////////////////
/////////6eiogAAAM7Ozv///////8jMzVVTT/nw7cesoPHQwejMv5F4cCwYFR4JB0IxKpOEfM27
tfDa2e/b0uPNxqaUiUEwJCQVDmxUS8mxq/Pb1ffi3OHOx6SakT41LQwCADgvJLipmPLi1e7d1d/Q
x419dRwPEAAAAAIAAAABAgAAAAAAAB0PC39nZM+3tfzh2+LKw+XIwunMvOTNxPHg1oJzcgMAAAUA
AQAAAEtGQ6CdlSATCvbn3ZyEfm1ZV8C3tAcGAwAAAFFGP/Pg0+jMwLWekOzm1f//////////////
////////////////////////////////////////////////////////////////////////////
3NjXSBscWiwuVystWi0vViosXSosVyosWS0sWCotWiotSSAhk3t9////////////////////////
////////////////////////+/z7TSYnWSorWiwsWiosVyosWiwvVystWioxVyosWiovVyosWyot
SB4hoImK////////////////////jXd0UCEgWC0wVyosWC0vWS0sWi0vWiosVy0vWiosVyotWist
UykpVzI2/vz7////////////////493cSBocWiovVyopWi0wWCosWS0sWCotWS0sWCosWSosVyos
WCswQRYZxLKy////////////////////////////////////////////////3tXURxsgWiwsVSss
WiwvVyosWy0vViosXC0tWCotXC0tSB0fmoCA////////////////////////////////////////
////////////////////////////////////////////////////////////////5ODgAAAAmZmZ
////////rK2szMnI9vHqvaGT6MW4hmhefGBXt5ua3ci+69jS69rS8NrS1sO8kXx0NSUgMyEakYV5
1cy/8Ofd6d/Yyr61Z1hTIxEOBgAAVEA3waej8uLW797V387JjX96HxUTAAAACQECBwICAAAAAAAA
GRMRfnBp2sW8+NnP68/C5ca/7s7J683H7s/F6Mm/6M/F8+DZYlNNAAAACAQEAAAAeXVwaV5YRzQz
9+TeiHdxd2Zno5qVAAAAAAAAdmZf8+DX1L606+TV///4////////////////////////////////
///////////////////////////////////////////////////////LvMJIIB9XKixaLCxXKixa
LS1aKipXLS1YKi1ZLSxYKixIHR7Cr7P/////////////////////////////////////////////
///7+/tNJypWKypaLS1XLCxaLCxaKyxaLCxVKyxZLCxXKixaKi1XKixNISGchIr/////////////
//////+NdHhNISRYKixXLS1ZKixXKi1aKixXLS1aKyxXKSxaKyxXLSxXKSlZNDP9+/v/////////
///////g3NxJHB5XKixaLS1XKixZLS1YKi1ZLS1YKixZLS9YKixZLSxZKy1GGRnDsrL/////////
///////////////////////////////////////09PRUKipWKChYLCxXKyxbKi1UKixaLS1ZKi1a
LSxZKixSISR/YGX/////////////////////////////////////////////////////////////
//////////////////////////////////////////////8HAABYV1f///////8lKiWflZb+9erA
ppr50cfy0cn42dbpz87t2M/s08rKsalrUks0IBlrXFe9q6Px6eHp3tbf1Muclo40LCoAAAAAAABg
TkrUu7vz2tP74dzn1NSYiYgfFxYAAAAAAAAFBgAAAAAAAAAhGROQhHvXzsHx3tHjy77sz77pzr7r
y8Hkzb7oy7znzsXkx7zsy77pzsLy3NJNPjsBAAAAAAYAAACgmpIzKiJcTEz75+N+b2ePgnmLgXoA
AAAFAACIenLo19Dp4NL///j///3/////////////////////////////////////////////////
/////////////////////////////////7WhoEgcHl0sL1crLVoqLFcqLVotLVQqLVktLVgqKlos
LEUeHtzPzv////////////////////////////////////////////////v7+0wnJ1goKVYqLVgr
LVcrLVosLVgrK1gsLlgrLVctLFcrLFoqL0seIKCLiv///////////////////413eU8eIFgtMFkq
LFgqL1krLFctL1oqLFctLVorLVcqL1oqLVUnK1czNv38+////////////////+Pd3EYZHFosLFcq
LVotLVgqLVkqLVgqLFktL1gqLFgqLVgqLFktLUUZFsOysv//////////////////////////////
/////////////////////106O1coKFUrLVcqLVUqLVgqLVcqLVktLVQqKlgqMFMkJm9MTf//////
////////////////////////////////////////////////////////////////////////////
/////////////////////////yEiIioqKv////z//////xwYFLWgnMarm+7JvOzMvunOyt/ExHxl
XEs1KGpVSruomfrk2PTj2//y6rSioFBIQgQAAAAAAA0GAHNqZuLVzfPl3O/d1uvU0YdxaiEQEAAA
AAkEBwAAAAAAAAAAACkpI56Yjerg1u7azurUw+LMvOTOuebOuubQv+bOu+bOu+XMwObLxezJw+vJ
wuzJuOnPwerW1CwlJgAAAAIAAgAAAMa/tygWFWhYUv/w529fVrOqoFhQRgAAAAMAAKSbleDYye/l
1////f//////////////////////////////////////////////////////////////////////
////////////mH6ASx4hWissWSwsWCstWSwtWCotVy0tWCotWSwtVCkrTSUk5+Pj////////////
////////////////////////////////////+/v7TScpVyorVystWCotWiwtVSssWSwsVSssWSws
WCotWiwtWCssTCEhnISH////////////////////jXV3Th4hWSstWCotWSssWCwvWSssWCwvWSos
WCwsWSssWCwsVCkpWDMz/Pr6////////////////4t3cSRkeWCssVyotWCotWSwtWCssWSwtWCos
WCwtWCssWCovWSstQxgaw7Ky////////////////////////////////////////////////////
b09RVCQlVywtWCssWiotWCosWSwtWCssWCwwWissVigpXDo7////////////////////////////
////////////////////////////////////////////////////////////////////////////
////MDAwDA4O9/j4////////v7WwuZ6Rw6WT68S09NDHvp6ahGxj0Ly0+eDY8N3U/erjyLmsb2Nb
DQAAAAAAIg8Ia1VRxbCq/+zn+Ofj5djYqaWgX1JTAgAAAAAAAAAAAAAAAAAAIR8ZcWRc1L6y/+fY
79XB686668jB68296c676c275s7A58vB5snC68vB6s686cu/6c6/6czB6MzC7MfB7tPK3cvGIx4a
AAAACQAECQEAyMG/IxMRf2lh+ujibmVd1s/KOignBAAAAQAAs6un1tPP7fTq+/r8////////////
//////////////////////////////////////////////////////////////////+LbnNNIiJa
LC9YKy1ZLCxYKy1ZKi1YKy1ZKi1UKy1XKipSKy739PT/////////////////////////////////
///////////////8+/tOJyhcKitYLC1ZLC1YLCxXKi9YKyxXLCxXKy1ZKi1UKy1aLC1IHiCgiYr/
//////////////////+NeHhPHyFYLCxWKy1YLC1WKixYLC1ZKyxXKi9ZKyxYLCxZKy1VKSlYMzX9
/Pz////////////////l3dxIGhxZLCxYKi1ZKi1YKyxZLC9YKyxZKi1YKy1YLC1YKyxaLCxBFxrD
srL///////////////////////////////////////////////////+CZWZPIyZYLS1ZLC9XKyxZ
Ki9YKyxZLC1YKyxZLC1XKCpVMjP6+Pj/////////////////////////////////////////////
//////////////////////////////////////////////////////////9SUlIAAADl5eX/////
//98cnD79O3BppTnxLX10cPt0cL42tHx29PSurOGcG0wGxgAAAAcFg5fVU3Fs6vn2tP74+T429y/
pKR9Z2ghGhUAAAAAAAAAAAAAAAAiIB1fYFmzrqXZ0Mns2s7r1MXozbzsyrnq07zpzr/pzbzozbvm
zbvlzr3lzsLny8DpzbzpzrrmzbzkzsDnzb/pzMLtyMDxz8fv187CtKsNAAAMBAUCAAAZGRHFu7og
EA6VgHj149uJgHjbysUpGhUAAAAXDgrEwrzb2dj/////////////////////////////////////
/////////////////////////////////////////////4Jka08iI1UrLFgrLFgsLFksLVgqLVks
LVgrLFgsLVcnKlczMv/9/f////////////////////////////////////////////////z8+08n
KVgpK1krLFkrLFkrLVkrLVksLVkrLVgsLVkrLVgsLVoqLUgfJJ2Fiv///////////////////412
dU4gIVgrK1ktLVcrLFgqL1kqLFgsLV0sLFgsLFkrK1gsLVYpKVgyNP36+v///////////////+Hc
3EobHFkrLFoqLVksLVksLVksLFksLVkqLVksLVkrLVksLVosK0MYHcOysv//////////////////
/////////////////////////////////49xdk4gIlkrLFgrLFcsLVgrLFksLVgrLVksLVgrLFgp
KlUtLPfz8///////////////////////////////////////////////////////////////////
/////////////////////////////////////1paWgAAANLT0////////wMFA7CimbKdjOPCs+rI
usapm5+FdVM9LzshHlE/N418dsO0ruDW0ffv5tTMx6+ooGxjXSwdGwgAAAAAAAAAAA0BADcsK3Zs
bL61tdvKxe7f0uXWzN7QxOPLverJv+zPvuXMu+LOvOnMvufNvebPuOXQu+TOvObMwOXNu+nOvOnO
vOnOveTOvOHOwObNvOzLw+zLwuLDuvHWzcGwpwAAAAUAAAAAADgvL8i7uBgAAK+dlurTyOTUxr6r
pBgLBQMAABkSEeLg2v//////////////////////////////////////////////////////////
////////////////////////f2BlUCMkVyotWSssWSwvVCssWSotWCwsWCwvWSwsViYpWTY2////
////////////////////////////////////////////////+fn5NxQWRBMXRBgZRhgZRBgaRxgZ
RBUaRRgYQxgaSBoZQxUZRRgZOAkOk3p9////////////////////jXR4TiAhWCwtVS0sWSsvXCws
WCotWCwtWiwtWCotWCwtWistVSkpWDM1/fz8////////////////39nYMAgJSBkYQxYaSBoYQxUa
RxcZQxYaRxgZQxgZRxkZRBUZSBgaMAQHvKur////////////////////////////////////////
////////////mH2ATB8jWSstWCwsWSstWCwtWCotXCwrWCssWSsvWSkqUCot8e7v////////////
////////////////////////////////////////////////////////////////////////////
////////////////WVlZAAAAucLC/////f//29naLiUeXkU46Mu9lXlsh25lr5qIzLir69nR+unm
8uLb08e/qJqRTkI/HRcRAAAAAAAAAAAAEgwIQjw2mYyJ08HB6M3O+9ra8MrK7czB6c6/4cy85M3B
58y+7M/E68q+59C/6My+6sy+6czA58295s695s7B6MzA6s3A6c286c296c686s685M285c6/6s7B
687B68/C7cq+8d3Nv7WlCQAAAgAAAAAAWE9P0sG9FQMAzreq5tLK7tzRpZOLDAAABAAAMCss////
////////////////////////////////////////////////////////////////////////////
//95WVhSJCVZLCtYKyxZKixXLS1ZKi1YKy1ZKixYKy1WKChgPj3/////////////////////////
///////////////////////////+/v7GvL3LvL7MvcHIvb/Nvr/Mvr3MvcDMvb/MvcHLvbzMvb/M
vb/Iubzh29r///////////////////+NdnZPHyFYKixZKy9YKixZKy9YKixZKy1YKi1ZKi1YKi1a
Ky1VKSlXMzT9/Pr////////////////49vbEubzMvLzMvsHLvb/MvcDLvbzMvcHLvb3MvcDLvsDM
vsDMvb3Et7rt6en///////////////////////////////////////////////////+fi4pMICBZ
Ky1ZKi1ZKy1ZLCxYKi1ZLCtYKy1ZLCxYKi5MJCfs5+j/////////////////////////////////
//////////////////////////////////////////////////////////////////////9jY2MA
AACanJz///////////+dlYqAbVzdxLTt08f029Lv4NTp2tLIu7SDeXA/MS0RAQAAAAAAAAAFAAAk
GhRnWFSpnI/gz8Pv4dbs2Mzk0cbrzsXrw77xycLuyr7sz73p0cDmzb3pz77tzbztybvpy7rozL7r
y8Dq08zu2M7m1cvl0cnu0sv01tHpz8joycDuzb/tzbzs0L7kzbvm0L7jzLrnzr3tzb3p0cDw2cq4
p5wMAwAGAAAAAABxaGPWzMUeCwDay7zgzMLu2syUgXYAAAAAAAB+gID/////////////////////
/////////////////////////////////////////////////////////3pZXFEkJFgrLFksK1gr
LVkrLVgqLVksLFgqLVksLFUnK182Pf//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////411dE4gIVkqLVgsLFkqLVgsLFkqMFgsKlkqLVgsLFkrK1gsLVYoKVozNP/7/P//////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////5+Fh0wfIFksLFgqLFQsLFgrL1ksLFgr
LVcqLFgrLVQqKk0qKO3r6f//////////////////////////////////////////////////////
/////////////////////////////////////////////////0lJSQAAAHR0dP////r9/vz47oJz
YLidjdnAr/vi0dfEvXttaCYaFAAAAAAAAAAAAA0AAEk6M4t2c823sPDd1ffj2v3azufHtujPwOjL
uebLvufNu+vNv+rMvOrMwOjIturOwOHLuezQwe/NwvDOwvDLxe/PwuzTy8i2rW1jXjYtKxgHBiwY
GGlYT9DCuuzb0+vNwe/PwuTFufDPxebNvOHOvOfPvufPvujPu+bOuvTcz7Wjng0AAQUFAAAAAJWN
hsa3siUaD+bWyebRxvXcz21aVQAAAAAAAICCg///////////////////////////////////////
////////////////////////////////////f2ZmUCQkWiwqWCsrVCotWCoqWS0sWCsvWSwsWCst
VycpVzQ0////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////i3d0Th8hWC0s
WSsvWCwsWSstWCosWSssWC0tWSssWCosVystUykpWDMz/fz6////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////knl7TSEhWCsvWSwtVysvWSosWCstWSwsWCovWSwsVygqUi4t8vDw
////////////////////////////////////////////////////////////////////////////
////////////////////////////HR0dAAAAp6mp//////////////Xvoop3dVVDLxEIAAAAHQ0I
RDQvZmBSkIF3v7Gj8dzU/+nb+NzR5Mm97tLL5ce88M278M/B7M6/48u65s285s6858686M687s67
7s/D38i759HF6dTG6M/A6MW968q+79XLinZsAAAAAAAAXVRUraecoJSLKRkWAAAAcmlk793S6cvB
8M3D58i7586+5c695c6858285Mq37tG+3cW26dnKxbatCgIABQAAAAAAuq2purGoPCsj7djN48q/
9tzSXUg/AAAAAAAAoaWl////////////////////////////////////////////////////////
//////////////+FbGxNIyNYKy1VLCxXKi9aLSxYKy1UKixYKy1ZLSxWJy1WMjH9+/v/////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////+NdXdOISFYKy1VKixZKi9XLSxaKi9XLSxa
Ky1YLCxXKyxVLC1XKCtWNDP+/Pz/////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//+Mb3NOISJaLC1XKyxaLSxXKi9aKixXKy1ZLSxYKy1VKCpTLjH39vb/////////////////////
////////////////////////////////////////////////////////////////////////////
//////8ZGRkAAACYn5/Kycm3t7f////s5t9xWEelinrUuqz55NXu18ro1cvv3dTo08zs08jtz8Xj
w7jnzMXu08jfxLvqzcDn0b/my7niy7zkzr3kzrzmzr7pzL3tzb3y0sjvzcTs0cnKt6qynJHu1M3s
08jnxb3nz8T02tG9qqQNBgMQCwnKvrb14tb65NyFdHEAAAA0JyHiz8jry8Txz8fry8Tnzb7mzLzl
zLrm1MPgzLvt0MLr1MXk1MuzrKILAwEEAAAAAADNwMK8rKNdQjr22Mvw18jv2dKPiH4AAAAAAAC5
uLn//////////////////////////////////////////////////////////////////4pyc0wf
JFoqLVcqLFotLFcqL1oqLFgqLVgqLFoqKlgoKk4rKvHu7f//////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////413d08eIFgrLFoqLVgtLFkqLVctLFoqL1ctLFoqL1cqLFcrLFIpKlcy
OP76+///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////3pfX04jJFcqK1osLFcq
L1oqLFcqLVkqLVgqLFoqLVgnKVc1NP36+v//////////////////////////////////////////
/////////////////////////////////////////////////////////+7u7gAAAAAAAAAAAAAA
AAAAAC8pLP/695V7bVg+LYtwYe7PxPXWyuLNu+bIuujOvubLv+bJu+/PxevHtuXKuenOwufNv+jP
wOTKvOnOvuTKvefNvOXPxPDb0erWys2zseLJxPvj3pF+eAAAAEQ0L97OxvTh2tvFxM+xqtTFu+XV
zkAvLwAAAJaFe+3Wzvnk352TjwAAAGJRSvHZ0OjJxOvJwefNwuXMvubMvuHOvOTRwt7Ku+jOvuPO
weXazKyemgcAAAgAABUODNfMxrijmoBnXuzTyOHNwf///4OFggAAAAMDA8rKyv//////////////
////////////////////////////////////////////////pY6OSCAfVystWiwsVyosWi0sVyot
VC0sWCovWS0sVykrSR8j393f////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
lH2DTSEhWCovVCosWiotVy0sWiovVy0sWiosVywtWisvVywsVygpXDc2////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////bUhHUiUnWi0tVystWi0sVyosWi0tVyosWS0sVyos
VCkoYUBA////////////////////////////////////////////////////////////////////
////////////////////////////////////8PDwvr6+5eXlxcXFXV1dDxAQAAAAY01Iz7enuJuL
Wj8vTSscyaaV8dnJ8M+56My44s/A48m+7c++8cu58M696Mq96M7A6MrB7M6868267M+558276NPH
c2ZhFgwLCAAAEQQEJxgYn46JrJyUEQYBGQ4OVUhKDQABEwQEDgUAMSMksqeedGdjAAAAYVlTnJSP
PjcxAAAAUkI78djU5s3A6MvC6M295szC3su95M7B5MrB4s6/6dDC3sy75tHH6tnQuqShEgAAAAAA
LSQj6dzUt6SanH975svL//r30NHSAAAAAAAAUlJS////////////////////////////////////
//////////////////////////+/q6tJGxtYLSxXKy1aLS1XKixaLS1YKi1VKCxYKi1aLSxIHR3X
xMb////////////////////////////////////////////////5+flLLS1XLi5UMDNUMDBUMDBX
MDBXMDBXMDBUMDBXLTBULTBUMDBUMDBWMDBVMDBWMDBVMDJXMDBbMjNVKS5XKS5XKixbKi1aLS1a
KixaKyxaKi9XLSxaKixXKixaKyxXLCxUJytVLjRXMTBXMDBXMDBXMDNXMC9XMDNXMC9UMDNXMDBU
LTBWMDBULjJXLTJXMDJXMDJXMDFXMDBDIB+/s7b/////////////////////////////////////
//////////////9aMjZYJylXKixaLS1XKixaKy1XKixaKyxbKi9ZKSxSIyl5Vlj/////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////9/v5EPEAAAABsUk/Hp5nOrZyTbVgdAwB0ZU/k0bfq
0cDuzMXnxcHnzsHqzr3nzrnnzr3hzr/mzr/ozbzozr3oz7jp0cDAsKQBAAAGAACrnZfEsappXFFa
SkPq2NDWv70+KyoAAABBQT7Jv7vLwro1KikAAACxqaCim5IAAAAAAAA0Kh+Me3TdyL/q0MTrzsHs
y73ry8LozLzlzr3kzr3ozsLjzr7o0L7hyLnlzMLfyL7t19O4n5kEAAAAAABNPDvy3dq5nZyznJj+
9PS/w8MOERHNzMz/////////////////////////////////////////////////////////////
/////9TGyUUeH1gqLlYqLVYqLlstLVcqLForLVgqLFktLVgqLUkeHbScnP//////////////////
//////////////////////////////n7+0gkJ1MnKVgpKlQoKlcnKlUoK1YnKlUnKlMoKFUnLFYr
KVMnLFMqKVcmKVUpKFMlK1UqKVcnKVQqKVgpK1gtLFcsK1cqLFkoK1ctLFcqL1QsK1sqLFcrLVoq
MVcqLFoqLVcsLFknKVUmKFcnKVQmKlQpKVUoKlkqKVUnKlgpKFgmKVUrKlcnKlYqKVYlK1InJlYk
J1QqKVgnLUIWFsKxsf///////////////////////////////////////////////+vp6U8lJFYp
K1ctLFcrLlotLFcqL1UtLFcqL1crLFgrLU4gIYdsa///////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////7+/v39/f///////3lrcAUAAEsyLMWektSylr2bhCQYByETCLmhme7Zy/HWyeTLuOTOuejO
vd/Kwd7OwuLOwePNvePQuefNvebMuubWxjInIgAAALmupPTc1Pjd0/LYyejNxvLUyvDZz3BeXAAA
AF9hWH55eBQTDQAAAG5gV/fn2cu3rNHAsvXez+/a0ObNwurJwuvLwu3LvuvNvOjOvOjOvOfOwenL
vufLvOLKuejPvufQv+nRxuPNxfDe1qyhlAgAAAoAAGdRV//n7LadoPHo7P///y0xLcvKy/////f3
9///////////////////////////////////////////////////////////4d/eSR4fWiwrVyss
Wy0tViovWystVyoqVi0tWiosWistTyAjhWpt////////////////////////////////////////
////////+/v7TSUnWiksVyosVSorUSgnVisrWissVysrUSYpVywsVykpWy0sVyksTCQjUC0tUycs
TyQnWS0sWSosVSstUiMpUicqUygrUikoUSgoVywrUiMpVikrWysuVywsTiAnUicmVCoqVSoqUSUp
VSgrViorUSYrVywtVy0qWCcqTCEkUicqWCksWCksSx4eTyYmXTg5Ui4vRhwbUiQmRxYWw7Ky////
////////////////////////////////////////////08fHRxscWiwtWistVi0tVyosWyssVyos
WisvWCosWistSR0epYyM////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///7dWVnAwAAKQsCsIh5zKSV07SgcFlMAAAARkEy2My/9tvP6cy/5sq/4s6/482/486/4c6/6M29
48695cy759HH2cS6LBsUAAAAj392+uXc993Q8dzOSDUxEQIA693UnZGHAAAAAAAAVUpGo5eR5tnN
48m868/D7c287Mm858y97My+6szC7Mi/7cy87cu86My86c286Mu86M6+7Mu94ci16c+859G/5c29
5MzC48m+7NfNr6KYBQAAAQAAh3B19trl7+Tmy8jGbW1u/////f39////////////////////////
///////////////////////////////////////7+flULjBUJypaLS1XKy5YLSxXKixaLS1XKi5X
KyxYKi1WKChmREX////////////////////////////////////////////////7/PtNJypWKClS
IiKLc3Tg1NRIHyBbLC1EGRj16O12V1dTKCdYKSxBGhzJvr3DtLTe09R+Z2ZRIiRaLS1UJChxUFL/
+fhEIyX///9XNDlXNjj/+fw/FxdYKi1JGx2lkpL37/FCFx2IcHDj1NQ6ERK9ra2jiIpNICJaLCs+
GRv+9/akjI5MISFHHByslZX79vf/+Pj/+v3h2dduTE8/FBTDsrL/////////////////////////
//////////////////////+okJNJHh9XKy5aLS1XKy5YKyxXKi1YKyxXKi5aLSxYKixGHBvIubz/
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////r5eHAq52ujYU2FA4LAAB2
WUnQrp7MsJq1oY8uHBgAAACEbnLz3dfn2M7f0Lvp1b/lzLzny77mzr3nzrznzLzmzb7q0MT329N9
bmgAAAAQCgZnYFpbVlIAAAAAAAClnpbu2tDrz8v22Nb02tby08zozL/ny7/mzrzmzr3lzbzq0cLo
z73ry7jrzL3ry77ry7/ny73ozb3r0sXx1Mjw2MX14dHq0r3nzrzo0L/qz8Dky8Li0MPt3dayoZoU
AAQAAACdhov59fTx7u0kJCDx8fH/////////////////////////////////////////////////
/////////////////////2xMTFIiKFcrLlorLVcqLVotLVcqLForLVgqLFotLVknK04pKO7r7P//
//////////////////////////////////////////z8+04nKloqK04iIo14eubZ2UYdHVgrLkIW
F/fy8XZXW1MkJ0khIXpfYf///0MdHp2EhNPIyTQKDUQaHzMLDMa3t7ytrTcQEv///1U1N1M1Of//
/z0VFFIjImNGSf////Pw7z4WGYl1dOvc3DMOEL6ytaKMjE4iIT8TFr+xsP///6aPjjsOEbGdnu7n
6FMxMUAWFkQbG5qGhvv39jgVFcKxsf//////////////////////////////////////////////
/3daXFAiJlstLVcrLFoqLFcqLVotLVcqLVotLVgqLFksK0kjJOfh4///////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////Dn3L2aiNOjj8qmmF1DOgAAAD8uHsGijceii9ComYxq
YgwAACMYE7Spn+nfy93Nt+fNwuvPwunIwubPvujMvunPvurLwevRw+/XzeXWz4+HgVBLREA+N2xa
VcStpvXVzevJwu/Mxe/Nx+nGw+3MxevMv+nOvOnOvebNverRuubNvOnNvenNvufNvOzUwu7VyPTb
0PLez+XQwrChkWhWTzsmF7ihkPTcy+fMu+3TwujKv+vSv9zEuvfj27KhnRYFBAAAAM6+vv///7e3
ty0tLf//////////////////////////////////////////////////////////////////////
jnd4TSAiWysuVyktWCsuVyouWi0uVyouWi0sWCosWSktQxodxLS3////////////////////////
////////////////////+/v7TiYpViorUSEii3d45tfXRBwfXCosPxYX9fDwZUdHOw4ORyco////
gGNiSR0dVjE0////3MvO5tHU28jK////Yj8/QBoa////UzQ1Uzc5////PBMTRR4h+e/ynIqK9ert
PxYaiXRz6draNgsPvLGzpYyOQhUWdFZd////saKjq5SURBse////Xjc7TiAiVC0tWjEzY0VK8evs
OhUVwrCw////////////////////////////////////////////+Pf3USwtWSgqVyosWi0tVyss
Wi0tVyotWi0qVyouWi0sVicpVTI0////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////8erfwJmD2Z+L1J6NyqiYgXNiCAAAKA4JqYJv2KqU0aaRsph+RzgrAAAAZlZQ3sbC
79jN4crC58/F5Mm/6s7B6Mm/686+7c6+7MzD6M3A8NfN69fS8dnR99rQ99PJ8sq97sy758q/5c29
5c++5cu958y86czA6s687sy97M275c/B6NHA7tjJ9OPR49HEuqibg3JsOCggDQAAFQoHXEpD0MGx
6dLD6My/6My77M697svE6sq96M7A4MrA3c/EvrGpBQAABwAA8e3t////k5OTwMDA////////////
//////////////////////////////////////////////////////+9ra9JGx1XKi1bKSxWKixb
LS5XKi5bLSxXKixaKy5TKipOIiGIb2/////////////////////////////////////////////7
+/tNJiZaKStNISKLd3jl19dHHCBYKi1FFhfr5OPh1tbPwL3////k3NxNJy5QIiRGGhrSw8SlmptZ
NjelkpTh2NtIGhpEHh////9TNTdTNzn///8nAwO2oqXVycpMKy//9PY/GRmJc3Pp2tozCw+9sbSg
iIg9Ehj///9jRka0oaWqlJRXMjP///9GHx5PISWFZmf28PHt6Ofg1tU7FhjCsbH/////////////
///////////////////////////////Vx8lIGx9XKixaLSxXKyxaLS5aKixaKi5XLSpaLS1XKixS
JSZyU1L/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////s6uO6norZ
oIfUnn7Po4jMr5+hioUrGw4UAQB/YEfVrovZqpHNo5eNc20TAAAiERGikInv3tXhzsTkzcPfyL7q
zcDnyr3oyr3lybrj0L7kyr3nzsTnzMPmzb3lzLvq1b7p0Lbo0b/lzrzlz73iybnnzb3mzLvqz8Ls
0sHx2szs2cnKtaell4dQQDgcEAcaDgkvJiB3Z2axpKPMwb3s49va0MDizcHlyr7vzsPuyb32z8n1
z8Xszr7h0b/bzrvm2sqwn5cAAAAqIiP//f+1tbX/////////////////////////////////////
/////////////////////////////////+jl50oeIVosK1UrLVctLFcqLVotLFsqLFkrLlgqLVot
LVYmKVY1Nfz7/P////////////////////////////////////////z8+04nKlcpK1AhIop3eeXX
10McIFwsLT8XF/Hr6pOChHVhYXBZW5qIif///1k0M04fInthYebd3y4FBefa2YRsalEfIkUfIP//
/1UzN1M1OP/7/kkzNf///0ojJF48P//19z8WGYl0c+na2jYLD72xs41xdsG5usO0tTMHBsCssauV
lEwmKv///0siIVcoLlMoKU4lJ0ccHTwVFz8YGMOysv//////////////////////////////////
/////////4t0dUwgIVstLlcrLVotLFcrL1crLlcqLVotLVcqLVorLEYcIKmTlP//////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////7+/v7+/v////////v///////Dt4LughcuZeN2kgNWgf86ggdSoj8Wl
jlxOPgUAAFAwJ9WgkdmkldCok7ebjFA6MAUAAFY8N9nHverUxubSwevQwunMvurMwO3Nv+vQwu3L
v+3Lv+vLwOrNwefQvOTKuuTPu+bNv+bMvOXMvubOv+bOvOnQw9rEt7mej3piWFVBNU02LVY8N4Rr
ZLWdlt/Hv/La0urUy+PNx+nUy9zKwOfWyvDZz/Dd0efWyO7bzO3az9y+r9G0pOXMu+vTyNfGv+fc
0rGjngAAADs6PP////////////7+/v//////////////////////////////////////////////
////////////////YT4+UiUnViotVyosXCsuViosWS0sWCotWi0uWCosWi0sQRkZzb6+////////
////////////////////////////////+/v7TiYmUSEkQxYWhG9w49PUPhMUTx8hQxUV9fDwbEhL
QxMVSxgcKQAA5+Pij3BwUSEjSiIi8ufqcltb9OzsTSgnVioqRB8g////VDY2UjQ3//z78e/vhGhr
RxobYj9C//X2PhcbiHRz6draMwsPtqmr1MnJ/vX4RBwdShsavKutrZeXORMT9u/vgWVnQhMXViQk
Rxsad1dXwqanOQ4Ow7Ky/////////////////////////////////////////Pz8VC8xWSkqVSkt
Wi0uVystWiotVyotWi0sVyotWi0tVyosSx4g3tfX////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/f39/v7+/v7++fn5////////9O7jwaOL06WF3KKB1aB/zaJ12qmF0qaGxqKPknpyDQEAGQcBtYx7
36+YxaCG0LKgnX95IAgAGQAAspKJ8tzN6dLD48294szB7M7A7s285cu838u85szA7Mu7687A6czA
6c6/6czC6cy/7MzC7My/6cu/7crB0Kqizq2k6se/8tfK/N3V+N7X8tfR6MzF+dbW8NHO583G5MjB
+dnUJQgFQCwod2tdeGtgdmpeZFFHPy0nTjMsyKqa89HB4cS769HP1MS98+bes7SqAAAAZmVm////
/////Pz8//////////////////////////////////////////////////////////////+Ren1N
IiFXKy1aKyxaKC1aLSxYKi1aLS1YKi1aLSxXKi1RIyR9YWH/////////////////////////////
///////////5+/tGJCiJa22MdXW4rKvy7vCFbnGcfn9FHx/38/KjjI2BaGeDZGipl5X///9XNTVW
JypMHh6rlJj///+pl5dKHB5aKStFISD///9WMzhTNDb////Kvb0/FRVUJilkQUX///8+FxqLeHfv
4uQ2DQ+1q6z///9pTExQJCRHHBzEtLaxn59FFhtzVFb///+dhoZpSkuCbGz///+LcHM6EBDCsrL/
///////////////////////////////////////Kt7pGGhpXLC1XKi1VKi1aLS1XKyxaKyxXKi1b
LSpVKi1YJylTLzH/////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////7+/v/////////////////
///Vz8JMLyJyPjDCh3XXp4zQon7Kn3jQnXjbpo3RqJS2pJg/NCYAAACQZlXZrZXKpInOqZHLqJZ6
WEsAAABRNzToz8jr28/k18feybrhy7ff1MDZ0bzg0cDlzsDsysHryb/ozMLny73pzMLqyL3rzMHx
zMLtycHwzcDx0snixbnq0cPx18nmzcLnzMXy3dQ9LSdnVk/cyMP/5+l4Yl0AAAALAAAAAAAAAAAj
Fw9ZSUK+pp3y4Nnpyb/tzLzpzcDmzb7q1MfZzLz///+9vL0AAAB5eXn/////////////////////
/////////////////////////////////////////////////9LIx0QZHVsqLFcqLFoqL1ctL1ot
LVUqKVotL1cqLFctLVkoK0chIe3o6P////////////////////////////////////v7+0YjI7ql
pM+9wse3ucCtsc/Av9bHyVkxNKqOkMy6wsu8u9DBwcGqrWFGRVAjIFotKlYnJl44Osq0s1s3N1cn
KVgqLEwlJMqrrlczMlQuMNC6vkwnJ1ooKlQoKlw2NbueoEwjInZSUq+OkkQbG5d5eJ9/gUobIFUt
LFEiIpV1eI5tbVAiJk4gH189Pca2tt/V1tPHyW9XWUoeIUUWG8Oys///////////////////////
/////////////////3RTUlAjJFosLVorLFcqLFcqLFoqL1YqLFotLVcqLVguLUwfIoZqav//////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////+bm5oaEhgAAABYLAph2bNalmNWgkMma
gcqjitWpgdSngcygf9GhhM2dhdqqm518aQMAAEQuHMWdg9OjidKkj8OdjbSTiS4YEwkAAJqHgOnb
0+3VxuLKuOzUw+THt+TIvuLOvOXOwOjLv+zLvuTNwuLOvebNwefJxeXFvOfRxuHOwtrPveLWy8Ow
pIh1aMm2qvfl3PXl2yIRChQDBDUmIRwSEAAAAEg4Mvjm4/nm3vTi2evaz+7czOTTyubMxufJvu/P
ueTHtuTKud/EutTIvf7//f///8XFxQAAAJeXl///////////////////////////////////////
////////////////////////////////VjAwVSgpWy4sVygtVystWSosVy0tWCotWi0sWSosWi4t
RBsdln9/////////////////////////////////////+/v7TSQqShseRxobRhobRRoaRxoaRxoa
VSopTR4jRxoZRxsaRxcaShsdVCUnWistWCotWS4tVSYqShwcVyYoWC4vWiosWC0sSh0eVygrVykr
SRsaWSkpVy0sWysrVSsqTR0eWCouUyYnSx4fWy0tTx8jTyAjWCssWCovWCstTyQmUiEjVy4tWCot
VikoRx0cRhgaRhkbUycmWioqSBoZw7Ky////////////////////////////////////49fZQxcb
WyssVywsWi0sVyssWi0tVisqXS0tWSotWi0tVyosRxsd08nJ////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////4eHhVFRUAAAABwcHqKmn//bvwZ2Mzp2K0qCJzZ+KzaSI1qKFx56A0q+Kxppx
46p/1px+1amRtp6HRS0eHwYAm3ln1LKaxqOLw5qKzKqefV1TFwAAWEM65c288tHJ78nC7si68M/C
5s284s296dC96c286s7A58m/6cfC58jA79PK38vD5tzO5N7N5OTUaF1VAAAAAAAAEAUANSQiAAAA
b2Ri7uDe08K+hnht5M7F5c/E38/D5tHD4cq75tHA6NLC6cy5+9a96s2y6tbF8ubi//v2///9////
////////xMTEAAAAwsLC////////////////////////////////////////////////////////
//////////+XfoFLHSFXKi1aKyxXKixZLS9YKixZLSxYKixZLS9ZKixZKypMJSj9+Pj/////////
///////////////////////6+vpEGx1RICBPHiJQISJOHiJSHSJNHSJRIiJPHSFSIyJPHSJSICJM
HiJSHyJNHSJOIiJQHCJOICJOHSJRIiJNHiFQICJOHSJQICJOICJPICFPICJOIyJQHSJOHSJQICJN
HyJRISJNHiJRHyJPHiFRIiJMHSFSHyFMHiFSICJMHSJSHSJPHyJRHSJPHSJSIiJOHSJRHSJNHSJR
IiI3CxDArq7///////////////////////////////////9+ZWVNISNXKi5aKi5VKi1aKi9WKi1d
LS1WKi1aLS1XKixXJyxSLi3/////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////d3d1SUlIAAAAG
BgaEhIT//v/////y7eW+moPNnoLQoIbOpIfXqpLEkXqlfWXSp4bTp3jTpnfOpnjOnIHOoYzJqJiB
a10fCgJUOiPKqZPXqpTNnozUrZqwjoBDJBscCQa9qaHt08rtzcPoy7zrzr3rz7zozrXm073syb3w
zsbtysL10s6zk48HAABNPzaRinyfmooJCgAhGxfTzsOJg3xOQj00JB+bhIPq1NPp0MP208Ls0cHq
zLzuzrzs0MDwz7/uybjnu6vetZrMo4m7moLr4dr///////////////////////////+/v78AAAD/
/////////////////////////////////////////////////////////////////+Pf4UEWGFot
LFcqLVoqLVgqLFotLVgqLVktLVgqLFktLVYqLEwcIJd6gP//////////////////////////////
//z8/JF7epN5eZR+gJR6eZR+gJR6fJR+gJR6fJR+gJR6fJR+gJR6fJR7gJR7fZR9fpR6e5R7fpR7
fJN7f5J8f5R7fpR7f5R7e5J7fpN7fZR7gJR6fJR9gJR7eZR7gJR6fJR9gJR6fJR7f5R7f5R7f5R6
fJR7f5R7f5R7gJR7eZR7gJR7epR9f5R7e5R9f5R7fZR8f5R8f5R8fZR6fYlxctrS0f//////////
/////////////////////+HX2EEXG1grK1osLFcsLFgqLFcqLFosLFkrLVotLVcqLVotKkogH5qA
g///////////////////////////////////////////////////////////////////////////
//////////////////////////////////r6+lFRUQAAABgYGJWVlfLy8v////z5/P///+/n372a
hcyhiMighcqpj41mTmEqGLqPeMuhh8unfciqdsSlddGkgM6ehsmfi8ink7WdjVU4KDENBKJ9Y9uy
mMiahdGplsSgkIRlXwcAAGdiV+DXxurYyerKufDNverLtd/It+nOve3WzOnSyurT0FJBPw0EAGlZ
UjgyIx0YEQsCAIV7c+jf0+vb0+rYzvDXy+3RyOnPwe3UwevRve7Mt+jEsua5q9yqm9ehlMyej8+Z
j8mki8uokrmejvnx7v////T09OPh4dXTz62uraGhobW1tf///7q6uv//////////////////////
////////////////////////////////////////////////ZUNFUiUkWi0tVyssWSovVSosWiot
VSotWSotVCssWCovWSorQxkb8Orq////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
b1NUUCMiWSwtWCsuWCwsVSstWSotVystWSotVyotVy0tWCksRBwd7enp////////////////////
////////////////////////////////////////////////////////////////////////////
/////Pz8m5ubFBQUSEhIzc3N/////////////Pz8/////v//7+nnvKCOw5+Mx6eUXz8sMQ0Cy56F
0aGKy6WKwqR/y6aC0KiByZx8yqKCzqWFyqCGxp2N1rKcl3VlLg4BXz4rzaWSyJ+O0J+PzqOUtZmK
DA0AJSsZt7Wh9dzK886/99LJ4Ma7iXhnYFdJq6OZr6ilAAAAKiYm8+ri8+TU6dPI4cvB48q+5s/B
6cy97c697s+98tG+5MSs1bihx7GXw6GNy6KQ0qSXz6OWxZeOxZyQto6Hm4F1gmpZYE9AUUhIKiss
BAQAAAAAAAAAIyUjh4eIw8PD/Pz8////////////////////////////////////////////////
///////////////////////////JvLxGGRlXKi1aLS1YKixYKi1YKy1YKi1YKyxYLC1ZKyxZLS1P
ISF5X1//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////GtrhAFBZXKy1YKyxXKixYKy1X
LC1YKyxZLCxYKy1ZLS1YKixQJSR4WFr/////////////////////////////////////////////
///////////////////////////////////////////////////////+/v7p6enNzc3/////////
///////////////////////////r6Oa5nZW7mYw+IRgjDAK8oIvIoYvQqIjCmIHQpYvGpIfHo4bM
qIfLo37OqIDMon/Ro4XHm4XJqI7JqZNdPCwtCwCadV/arZvTo5DFoIrBrZpDPS4CAACTgnf/3NTx
yMLxyMHr18rGu698cGo8NTEAAACCcm/02s/qysH40cP30L/30r7008DqyLHVsZrOqZDEoojRqI3N
pY7PqZfGnJGbeW1wU0hMOCwqHRgHAAAAAAAAAAACAAAAAAAQBQNeYF6amJfX1c3/////////////
///////8/Pz/////////////////////////////////////////////////////////////////
/////////1ErLVYnKVgrLVkqLVgrLVksLVUqLFksL1krLFksLVYqLFkqLz0VFMi4uf//////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////8/U4mKVQnKlgrLFkrLlgrLlkrLFgrLFksL1grLVksLFgtLVos
KkAWFt7T1///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////j8
/P////T0656JgSMDAD4hErqij8Klj8aaiM6ahcyiiM+tlpx/aZJyW8ikgc2igdKmhNWjgtSfgNOg
gNKghsyihs+ola+NdTEYCT8kGK+Zf9auleCikdalm4Z0bgAAAFRFO/zf0/LKu+XTvOPTvenVw/Pc
0vjf3PHVyvbSwPfItO69od2vldGmjsaghsWki8uomc6wnaeLenVaT0QpIRYAAwcAAAAAAAAAAAAA
AAAAAAABACcoImlVRJB4YbCdj/749v//////////////////////////////////////////////
////////////////////////////////////////////////////////////////uamoRhUYWSwt
WSssXCwtWCssWCotWSosWCwtVCstWCotWSosWCkqSSMn//v7////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////hGlpSh4gWSsvWSwuViwuWCwsWCwtWSwtWCssWSwsWCstWSwtUSQnZEVF////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////v7+/fz9////vLWuAwAAUC8fyqKP
1K6Vxpl70qGB1aaNx56No4FzLQsAvpl/yJ1/06WF1J2B1KKH0KCBzqCBzqODyZ+GyKSJxaOJzKaS
hGJJFQAAXEY6vaCQ2q2h2Z6WyZuQHxECGRMG69TI9NbD8NLB8cu89MS24bOm1amZ0KGRyZKC1KSO
1q2QzaeOs4t0fGJWRTMkDQAAAAAAAAAAAAAAAAAAAAAAJB4TTD8wdWFWqpKDyKyayKia0K2WzKiQ
s5WF6t7d////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////9SLS9VKClZLC9YKyxYKy9ZLCxZKitY
LC1YLC1VLCxZKi9ZLCxQISFqUFL/////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////+/q61CFBRXLC1XKixZLCxY
LCxXLC1ZKy1YKyxYLCxYKy1YLC1ZKyw9EhTi1tX/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////+/v79/f3///+vqKYAAABXPjTCoJLXq5DKlHLgp4fUp3rDo4awjXom
BgChe2nNpI3Uo4nSo4bQnYbLn4PMoYPLooPJn4TOpITNooHJnYPNo4fUq4zFmIxAJiEYAgByVEXL
m5DQo5bUtKZDNiUYCgHGsqLOsZ3Rpo/Kl4LNm4LOpY3Eo5HMq5yefHBnR0A0FhAQAAAEAAAGAAAW
CAAxJhxDPDFoWU2Zg3W3nY3KqZjOqZLUpo/WpInWn4LZnoXNn4HHmX/BnYXv4tv/////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////8i7u0ATElgqLFcrLVksLFkrL1ksK1ksLVgqLFgrL1gqLFkrLVks
LUUVFaSNjf///////////////8zIyHhiZXtfYYlsb4xvcYpwcYtvcYhvcYhvcYptcYpvcYttcYpv
cYtwcYlvb41vcYlucYxtcYlucYxucYlucYlucYlvb41ucIhtcotvcYhtcY1vcYhwcYtvcYhtcYxv
cYhtcYtvcYltcY1vcYttcYtvcYhtcYhvcYptcYxvcYxvcYlvcYttcYttcYtucYxucYxucYlucYxu
cYBlaHJaW6SWmf7+/v////////////Dk5EAaGlopKlcsLVkqLFgsLlYrLlYrLFksLFkrL1gqLV0r
LFkqLE8jI3JWWv//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////6OhogAAAIl2b8Kpk8uji9aef+Ckg9Ocdc6qgrKahSYPAGxMQM+llNCnjcuYftCihc6h
ic2ehMyig8ughMyjhNCfgtWjh8+igsycfNCkfsugitGomY5pWRoLABANAGVRQbmSgN66qWRQQiIU
Bq2Ufcili9OrisKhgaOIamJJOCgTCBsJAycJDz4hJmVHRYxwY66QgLSUgsOhiceqjNWrktWij9Wk
i9Sbg9afiNijg96jgN2hgNmcfNiigtOlgMGZf+zh1v//////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////Yj49UiYqWSwsWCstWSwsWSstWCosWSovWCwsWSotWCwtWSstWywrPhISwra1////////
////////6OLiiXByOg8XPhARSh4gTCAgTCAgTB8gTB8gTh8jSRsgTh8jTB4jTh8gTCEgTh8jSyAg
Th4eSyEgTh4gSyEgSx8gSiAgTx0kSSEgTx4gSiEgTh4iSh8gTh4gSx8gTR8gTCAgTR8gSiAgTB8g
TSEfTyAgSiAgShsgTh8gTCEgTh4jSyAgSh4gSyAeTh8hTCAgRRYZNAkKZUVIysDB///+////////
////////SygqViYpWCwsWSstWCwtWSssVyssWSssWCwsVSwsWCssWiosWSouPBAQ8u3t////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////v7+////////oaGgAAAAvru9//zy
t5t/z6J+2qV+1p140KGAw7CWNB4QPiYVzKqU0KCNzJuB06CHzZ2EzaCIzJ+G0aGGy6KD0Z+Ez6SC
0aN9zaGB0aR/0aV/0KKE0J6H0qqVtZmHRjktAgAAFgAAVTUoq5B+cFdAaEsyxKGDpHtdiGBDe1c+
jm5apYZwsJGAw6KUzKadzaiWzKOPyqON0KOH0KCD0aGE0qGE0KKC0p+D06GD0qCC0KCA0KF+0J5+
1qaFz6R8zqV7wZl/7eTZ////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////n4+M7FRRZKixZ
LC1YKy1VKixZKi1YKixYLS9YKixZKy1YLCxYKzBXKyo+Exjf1NP////////////////////38vOW
gIJGHB1JGxxYKixaLC1YKy1aLS1XKi1aLS1XKi1ZLS1ZKy1ZKi1ZKy1ZLSxZKy1ZLS1YKy5VKi1a
Ky1YLSxZKy1YKy1aKy1YKy1aKy1YLC1aKy1YLC1aLC1YLC1aKy1YKy1aLSxYLCxaKy9YKy9aLS1Y
Ky1aLS1ZKy1aLS1ZKyxQIiM+ExVxU1bY0dD///////////////////////9ZOj1QISNYLCxZKy1Y
Ki1ZKy1YKyxZKytYLC5ZKC5XKytXKi5ZKi1GGxyZg4L/////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////9/f3///+2trZVVVXv8vL////y6t7CnoParILQoHXZqYTNr51Q
QzMYAQCxloHOp5DKnH/WoYLRnoPQoYjNnoPOn4bRoIPRoITSoITQn4HQo4LNpH7NpH3No3zPpX7K
nXbRo4rTopDVq5yOcGc2Lh4dDABiOSXVsZG+lXbQpIrVpIvUqJDMoorSpYzUpo3Vp4zNpIPMo4HN
o4XNo4LMo4POn4PRpIPNn4TPpIPNo33Qo4HMooHNo4HNoYHNoIfLoITJn4PNp3zOp33Annzs49b/
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////56EhkYZG1krLVktLFgqL1gtLFgqL1kt
LFgqL1UtLFoqKlctLForLVYpKUEaHubc3v////////////////////////j09JiAgkQaHUkbG1cr
K1grLVotLVcqLVktLVgqLVQsLVgqLVgtLVgqLVktLFYqLVgtLFoqLVgtLFkrL1cqLFcqL1UqLFcr
LFYsLVcqL1YqLFYsLVYsLVosLFcrLlosLVctLForLFgqLFQtLFgqLVotLVgqLVotLVAjIjsSE3BR
VdvU0v///////////////////////////2VJSk4fIFgqLVorLVcsLVorLVgsLVorK1ctK1csLFcq
LlosLVcrLlQmKVUuLv//////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////39/fb29uLi4v////////v//+7n376bftSqhc2lf8qghLOVhQAAAJR4bsuplMmfgtWigtSf
ftKghM+gg9CihM2hg9Ggh8+gg9CfhNCkgc2fgsyjgsykfs2lg8iif9GnhdOghNufjc2Wicmkkcas
lNCzltKwk8ykgc2jh8iZfdChic2ji8qhhsiegNWlgdOhf82mf86igM2ifs2jgtCjfdCkgtCfg9Ck
hNKfg9aggtCfgdCigdChgdGhhMuig8ygh8ufh9CjfM6me7qYfevk2f//////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////UC0yVSgnWCovWS0sWCosWC0sWSotWCosWCotVC0sWiotVyos
WCovVSYoQRkf49rd/////////////////////////////v7+mISEQBQUSRsdWCwsWi0sWCotVCos
WC0tWS0tWCotWS0sWCovWSosWCotVS0tWCotVyosWiovVyosWyovVy0sWissVywsWistVywtWios
VyosWiwsVyssWiwsVysvWiwtVyssWi0tWSotUCMjORAQcVFT3tjY////////////////////////
////////YURHTR4gWC0tWiotVywtWistVywsVystViwsWiosVyosWiosVyotWywtPA8P3tLS////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////f39/f39////////
/P//////7OffuJyKyZ6HyJ2I0rGaOxkQaUM6yaWXzqSQzJ1+1KV+2ah/zp+B0KKEz6CA0KGAyqKE
zqCEzaOEzp+Ey6SCzZ+BzKOBzJ+B0KCCy5191p6E2Z5/05+Fy5qDy6KByaKGwKGCxaKAzqKF1qaJ
z5l/z6ODyp+AyKB+zKF70KWAyqCE0KCH0KCA0J+B0KCBz5+B06CBz5+B0qSBz5+B0KOAzqKBzaKB
zqKEzqKEyqKEzqOEz6GBzaKBvpqC6+DY/////P//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////i3d88ERZYLSxZKixYKixYKi9ZLSxZKi9YLSxaKi1YLSxaKi9ULSxYKi9SKShAFRzRx8b/
//////////////////////////////////+ahIc8ExVJGyBXLCtZKi9aKixYKixZLS1YKixYLSxZ
Ki9VKixaKixYLS1YKi1UKixbKi1UKixbKi1XKi1aKyxXLCpaKy1XKy5aKy5XLCxaLC1XKyxaLCxX
Ky9bKi1QJCM2Dg5sUFDl3eD///////////////////////////////////9cO0JOHiFbLSxXKi1U
Ki1aKy1VLCxaKyxXLCxaKixXKi5aLC5aLC5YKitEFxmUe4L/////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////6+vr8/Pz8/Pz////////x6+i6nZHFm4PP
o4+OaVouCAXTqpbMo5DGl37SpoXQon7Sn4HPooDNoIDSooDPoYDLoITKooTQoITKo4TPoITMo4TN
oITPo4TNoITTnYTRnYDXoITSnX/UpITVpYbJmXzMo4jPooTSpIHSnILPnYTNmoDUpIfNo4TQpYDN
oYDRoITPoIbPoITQo4TPn4TRo4TOn4TSo4PNoIHKo4TKn4TLooTLoYDLoYDKooDQn4DNo4HPooXN
oYW9lIHr4dz////8////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////7Cfn0ITE1kr
LVgqL1krLFYqLFgrLFgqLFQqLVotLFcqLFsqL1crLForLFQrKj0RE7Ghov//////////////////
/////////////////////5qDg0IWGUkcHlQoKlUuLVgqLFkrLVgqLFotLFoqLFgqLVotLFgqLVoq
LVcrLVsqLVctLFoqLFcqLVorLVcsLFosLFcsLFoqLFoqLFsoLVYqLFAjIzoQE29OTevl5f//////
//////////////////////////////Tp600lKFAhI1crLVoqLFctLVstLVcqLFsrLFctLVorL1cs
LFosLFcsLFoqLU8iImdFRf//////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////+7l57KWg8imftSpjDgKB7qOhtCnks2gg8+g
hM6ig86ghM+ihM6ghM+hhM2hhM+hhM2hhM+hhM6ihM+ghM6ihM6ghM+ihM6hhNKghM6ghNGghM+g
hNCghNCghM+gg9OghM+hg86ig86ghM6ihM6ghM+jhM2gg8+hhM6ghM+hhM6hg8+gg86ihM+ghM6i
hM6ghM6ihM6ghM+ihM2ghNCihM2hhNChhM2hhM+hhM6ihM+hhM+ghdCig8CbgO3g1v////z/////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////eWFhSxsgWy0sWSovVS0tWCosWCss
WCsvVCosWyovVyssWiovVy0sWyovVy0sQBQTiG9v////////////////////////////////////
////////nYSJRSIhSRsgUygqWiovWS0sVyovVy0sVyovVSosWCotVC0tWyosVy0tWissVy0tVysu
VSwsWissVysuWiwuWCwtVSwsTiIjPhcZcFJV4+Df////////////////////////////////////
////w7K1QxwcViQnWC4sWiovVyssWiotVy0sWCosVyotWissVy0tWiwuVywsViwsVCgqSCEl+PX1
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////7efmvqON1KuHgFIwk2ZXzqGSzKKGzqCDz6GDzqGEzqGEzqGEz6GEzqGE
zqGEzqGEz6GEzqGEzqGEzqGEzqGEzqGEzqGEzqGEzaCE06CEzqCE0qCE0KCE0KCE0qCEzqCE06CE
zqGEzqGEzqGEzqGEzqGEz6GEzqGEzqGEzqGEzqGEzqGEzqGEzqGEzqGEzqGEzqGEzqGEzqGEz6GE
zqGEz6GEzqGEz6GEzqGEzqGEzqKDz5yF0KCEwJR97eXX////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////9eOkBQIyRZKyxZKi9YLSxXKixVKy1aKi1XLSlaKi1XKyxa
Ky1XLSxbLCpYKi5LGRpZOjnm3t7///////////////////////////////////////////+fh4pL
JSRHHB5XJipaKixXKi9VKyxaKi1YLS1aKixXLS1aKixXKi1XKyxVLSxbKy1aLS1WKS1WKi1NICNB
Ghp4V1nj3dz///////////////////////////////////////////+LcXE/EhZWKCtYLi1ZKixX
Ky1aKixXLS1aKixXKi1aKy5XLSxaKipXKi1bLCxWKSpEGRrZzM3/////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////u
6OW7nYPNnXqpeFTZrJjInYbVoYHQoYTOooPOoITPooTOoYTPoYTOoITPoYTOoYTPoYTOoYTPoITO
ooTPoITOooTOoITOooTRoYTOoITSoYTPoITRoITQoITQoITSoYTPoITPoYTOooTOoITPooTOoITP
ooTOoITPoYTOoYTPoITOoYTPoITOooTPoITOooTOoITPooTOoITPooTOoITPoYTOoYTPoYTOoYTP
oITOooPPoIXPooTAm4Ht39f////7////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////Tx8FIuLlQjJlkuLFgqLFUtLFoqL1gtLFgqLVUtLVgqLFUqLVsrLFcsLVorLlcsLVUl
JkEYGJ2Jif////////////////////////////////////////////38/KCKik0qKkYaGlQqKVsq
LFgtLVoqLVctLFoqLlctLVorLlctLFsrLVgtLVYqLUwhIkQcHnxbXuPb2///////////////////
/////////////////////////87Dw1QvLkcaHlgrLlcuLFgqLVUrLFoqL1ctLFoqLVcrLForLlct
LVorLFctLVsrLVcsLEAWG72rr///////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////Dn4sOehNGffeKriMiZgcmd
gs+kgc2ig8+ghM6jhM6ghM+jhM2ghNCihM2ghNChhM2hhNCghM2ihNCghM6jhM6ghM6jhM6ghM+j
hM2ghM+ihM2ghM+hhM2hhM+ghM2ihM+ghM6jhM6ghM6jhM6ghM+jhM2ghNCihM2ghNChhM2hhNCg
hM2ihNCghM6jhM6ghM6jhM6ghM+jhM2ghNCihM2ghNChhM2hhNCghM2ihM+gg8+chdCggsCUfe3l
1///////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////49zdSCAj
VCUnWC4uWSosWCstWSotVy0qWyotVysuWyosVyotWissVy0sWiosVyouWistRhgZWjk5x7u7////
/////////////////////////////////////////Pn6o4yQTywsSBodVycpWS4tWSosVy0tWiou
Vy0sWystVywrTSAfQxwdfWFi49va////////////////////////////////////////////7OPj
fWJkQRUVVCYoWSstWSstWiosWCstWSosVy0sWiotVy0tWiosVy0tWisuVy0tWissVystRBgZoY2Q
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////8efiwZ6D1qJ+16J+z6KEy6CEzqOB0J+DzqOEzp+Ez6OE
zZ+E0KOEzZ+E0KKEzaGE0KCEzaKE0J+EzaOEz5+EzqOEzp+Ez6OEzZ+E0KOEzZ+E0KKEzaGE0KCE
zaKE0J+EzaOE0J+EzqOEzp+Ez6OEzZ+E0KOEzZ+E0KKEzaGE0KCEzaKE0J+EzaOEz5+EzqOEzp+E
z6OEzZ+E0KOEzZ+E0KKEzaGE0KGEzaKE0J+EzaODz6CFz6KFwJqB7eDY////+///////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////c0dRIISFTJClWLi1YKipVLS1b
Ki1XLS1aKi5XLSxaKy5XLSxaKyxXLC1aLC1XLC1aKS1SJShBFRhlSErRxsb/////////////////
///////////////////////////8+vmmkJFSLSxEGBtTKCpbKi5YLixYKixMICBDHB2AYWjk3N3/
///////////////////////////////////////////y6+qLdHNFGxtOHiFbLS1aKixYLSxZKi5Y
LSxYKixVKy5aKixXLS1aKi1XLS1XKyxWLS1XKy5WLCxFGBmYhob/////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////x6eHDnYLVn4DYoIHRoITLoIPLoIPNpIPPn4TPpITOn4TQpITNn4TRooTMoITRoYTM
ooTRoITMo4TRn4TOpITPn4TPpITOn4TQpITNn4TLo4TOoITLoYTOooTLoITOo4TLn4TNpITPn4TP
pITOn4TQpITNn4TRo4TMoITRoYTMoYTRoITMo4TRn4TOpITPn4TPpITOn4TQpITNn4TRo4TMoITR
oYTMoYTRoITMo4TQn4PQnYbRoILAlH3t5Nb/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////93T00chIlUlJ1grLVoqLVcrLVoqKVctLlorLFctLloq
LVcqLlosLFcsK1osLFosLVstLFgrLFIiJkIXF2JBQ7uqqv/+/v//////////////////////////
//////////////77+qqTllEtLEMYG0wdIEEXG4Fnaufe4f//////////////////////////////
/////////////9rT031hZUYfIEscIFcpK1guLlkqLFgtLlkqLFktLlYtLFctLloqLlcrLFYqLVct
LVoqLVcqLVsqLVcpK0QYGpyHiP//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////+/p38Gfgtih
gtmgg86eg8ihiMydiM+ghM+kg8+fhNCkhM2fhNGjhMyfhNGihMyhhNGghMyihNGfhMykhNCfhM6k
hM+fhNCkhM2fhMujhM6fhMuihM6hhMughM6ihMufhM2khNCfhM6khM+fhNCkhM2fhNGkhMyfhNGi
hMyhhNGghMyihNGfhMykhNCfhM6khM+fhNCkhM2fhNGkhMyfhNGihMyhhNGhhMyihNGfhMykg8+f
hc+ihsCZge3h2f////z/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////4NnaSyUlUyMlWC4tWiopVystWiotVyssWiotVystWiotVyosWiwtVywtWiwt
VistWiwsVystWiwtUicoRBgYUCstiW5w1czM////////////////////////////////////////
/vz8p5CUfmNj6uHl////////////////////////////////////////7OXloo+OXT9BRxoZTB8i
VikrWCouWi0sWCouWS0sWSotWS0sVyotVyosWiotWC0uWCosVi0tWyoqVy0tWistVisqQBYXoIyM
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////7uncwZ2C1J+D1Z+DzaCGyZ+IyJ2LzaCD
z5+Dz6SEzp+E0KSEzZ+E0aKEzaCE0aGEzaKE0aCEzaOE0Z+EzqSEz5+Ez6SEzp+E0KSEzZ+EzKOE
zaCEzKGEzaKEzKCEzaOEzJ+EzaSEz5+Ez6SEzp+E0KSEzZ+E0aOEzaCE0aGEzaGE0aCEzaOE0Z+E
zqSEz5+Ez6SEzp+E0KSEzZ+E0aOEzaCE0aGEzaGE0aCEzaOE0J+D0J6G0KGBwJd/7OPW/////v//
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////u
6+tUMzROHCFYKy9WKixXKy5YKixXKixaKyxXLSxaLC1WLC1aLC1XKytXLCxXLS1aLSxXKyxbKi1Y
Ki1YKyxLHiFEGh1TLy97YGO7qarl3t7//vz/////////////////////////////////////////
///////////////////v6ejNwcOPd3lfPT9HISBJGR5WJSlXKixdLi1YKi1aLSxYKi1ZLSxYKixZ
Ky5ZKixZLS5aKixYLS5YKi1XLS5bKixXLS1XKi1ZKylAFhi8qav/////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////u6eDBnYLYn4PZn4LLoILIn4fOnYfNoITNpIPNo4PNo4PNo4PMo4TN
o4PMo4TNo4PMo4TNo4PMooTNo4PNo4PNo4PNo4PNo4PNo4PNo4TMooPNo4TMo4PNo4TMo4PNooTM
o4PMo4PNo4PNo4PNo4PNo4PMo4TNooPMo4TNo4PMo4TNo4PMooTNo4PNo4PNo4PNo4PNo4PNo4PM
o4TNooPMo4TNo4PMo4TNo4PMooTQpIPSnn/OoIW5lYTs5Nj////+////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////2pNTUEUGVkuL1gq
LVYtLFsrLVctLlsqLFcqLVwsLVYpLFssLlcrLVssLFcrLFstLFcqLVgrLFcqLVcuLVcqKVUqKlAg
IEkbG0ccHE0qKmVGR39paJqDhbulpc6+vtLHx9jQ0t3S0tPIy9DDxca0tKmUlIxydGxSVFUyMUcd
IEUaGkweIFYlJ1YpLFgtLVcqLVotLVsqLVktLVcqLFguLVgqLVktLFkqLVkrLFkqLVgrLFcqLVcq
L1otLVYtLV0qKlMjI0EdHd3Oz///////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/+7p4r2ditefiNyggcqggcOjg8qdhcyghM6fhc6ghcyfhNCghsugg9Ggh8ugg9Ggh8ugg9Ggh8ug
g9Gfh8yghM+fhc6ghcyfhNCghsugg9Ggh8ugg9Ggh8ugg9Ggh8ugg9Gfh8yghM+fhc6ghcyfhNCg
hsufg9Ggh8ugg9Ggh8ugg9Ggh8ugg9Gfh8yghM+fhc6ghcyfhNCghsufg9Ggh8ugg9Ggh8ugg9Gg
h8ugg8+fgtelfc6ggbaWgerk2P////3/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////mYOGNw4OVSsrWy0sVywtWyotVyosWSwt
WiwsWiouVisuWissVSosWiouVSotWyssVCotWy0sVyosVystWCosWisvWCosWSovVyoqVCcmUCAi
TR4jSRscSBgeQxgXRBcaRRoZRRgaRBgZRxgcSx0dTh8iVCQlUygpVistVywtWystVyotWystVyot
WistVyoqVSstWCosWi0vVSgsWi4tViotWS0sWSotWSssVyosWC0vVyosVy0vXCotRBgXYEBD+fX1
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////7ungwZ2G2p6C3Z9+0aN+
x6KBzKSD0J+Dz6SDz5+D0KSDzZ+D0aODzaCD0aKDzaGD0aGDzaKD0aCDzaSD0J+DzqSDz5+D0KSD
zZ+D0aODzaCD0aKDzaGD0aGDzaKD0aCDzaSD0J+DzqSDz5+D0KSDzZ+D0aSDzaCD0aKDzaGD0aGD
zaKD0aCDzaSD0J+DzqSDz5+D0KSDzZ+D0aSDzaCD0aKDzaGD0aGDzaKD0aCE0KSC0qF7zqaBuJmB
7OPY////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////bzdA/FxdMICNZKy1XLSxWKixXJyxaLCxXLCxYKixXKixYLSxX
Ky1YLS1XKi1YLSxUKixaLTBYKilaLS1aKixZLSxWKi1ZLSxZKi1YKy1aKixYLi1YKixYLS1YKixY
LSxVKyxYLS1YKy9XLSxbLCxXLCxYLCxXKyxaLCxXKyxaLSxXKyxaLS1XKi1aLS1XKixXLS9VKC1Y
Ky9XKixXKy1ZKi1ZLSpYKi1UKyxYKixVKy1ZKCo1CgyWfID/////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////t6OG5mH7Um4DWm3nOoXjEoHrGoHzMn3rMmnvMm3vL
m3rMm3zLm3nMm33Lm3nMm33Lm3nMm33Lm3nMm33Lm3rMm3vMm3vLm3rMm3zLm3nMm33Lm3nMm33L
m3nMm33Lm3nMm33Lm3rMm3vMm3vLm3rMm3zLm3rMm33Lm3nMm33Lm3nMm33Lm3nMm33Lm3rMm3vM
m3vLm3rMm3zLm3rMm33Lm3nMm33Lm3nMm33Lm3nLm33Pm33HnX+vlH7p4tX/////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////3dbWzkQEFkoKlctL1ssLlUsLlkqLlcqLlgtLlcrLVssLFUrLVotLFcqL1gtLFQq
LFotMFgqLFkqL1cqLFcqLFkqLFktLVkqLFgqL1kqLFgtL1cqLFctL1cqLFcqL1oqLFcqLVoqL1Uq
LlksLlcrLlorLlcrLVosL1crLVosL1cqLFotLVcqLVotLFoqLForLVUqKVotLVkqLFkrL1cqLFcs
L1oqLFktL0YYHEkkJt7O0f//////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////Py7M7Fu9fFuN3Et9XGudPGvNfHvNbDvNrIutrDutrIu9rDudnHvNnEudnGvNnF
udnEvNnGudnDvNrIudrDu9rIutrDutrIu9rDudnHvNnDudnGvNnFudnEvNnGudnDvNrIudrDu9rI
utrDutrIu9rDudrIvNnDudnGvNnFudnFvNnGudnDvNrIudrDu9rIutrDutrIu9rDudrIvNnDudnG
vNnFudnFvNnGudnDvNrIudbDudXEu82/uvHw7P//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////0MXF
TCUoSxscVioqWCouVyouWiwuWCstWiwuVSstWiwtWioqWi0sVyotWC0sVSosWS0tWCosWS0tWSos
WSovViosWC0vWiosWC0vWSosVy0tWiosVy0vWi0sVywsVyosWCosVywsVyssWissVyssWiwsVyss
WiwsVyosWi0tVyotWi0tWiotWS0sVCosWC0tWCotWS0tWCksWSkvWSosVCAkPBMWl4OC////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////+Zh4ZFHyFLHiBXKitW
LC1XLCxVKyxZLCxaKy1aLSxUKixaLS1XKi1YKi1YKi1YKi1YKi1ZLSxXKyxYKi1ZLSxVKi1ZKixY
LS9ZKixXLS9aKixWKixYKy1XLC9YKixYKi1aLC1XKyxaKy5XKy1aLCxXKyxaKi9XKyxaKi1UKixa
LS1XKixYKi9YKyxZKyxZKy1ZKixTISVDGBhuUVTs5OP/////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////rz9Y53d0YcHUsdHlYoKVgqL1grLVksLVgr
KlgtMFgqLFksLFgrLFoqLVorLFgsLVgqKlksLVkrLFgsL1kqLFgtLFkqL1csLFkqLFgsLVcrLFgs
LFcqLFgqLForLFcrLForLlcrLlksLFcrLFksLFcrLFktLVgrLFgqL1QrLFktLVkqLFcsLVgnKVEi
I0MWGmZJS9jPzv//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////8erqk39/TykqSRcZVCUlVyosWi0tVCosWSwtWCsqWSwwVSos
WSwvWissWywtWCstWCwtWCssWCovWSssWCwrXCstVywtWSssWCwvWSssWCosWSstVyouWisuVyou
WSssWCsrWSwuWC0tWSwsWCssWSwtVCssWCwwWCssVicrSBwdRB0fclhZ1cfI////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////9+vqvnp5jQkFFHx9KGx1VJilYKyxZLC1VKixYKi9YKixZLC1ZKy1ZKy1ZKS1Y
LC1ZKyxYLC1ZKitaLC1ZKy1YLC1XKixYLCxZKyxYLCxXKi1ZJy5XKyxYKy1ZLC1YKixZKyxYKytZ
LS9YKixVKilOHiFGHBtRLS+Pdnno39//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////+Xc3JiIhV46O0gaH0gYGVAhJVYpKVgqL1ksLVksLVUqLVkqLVUsLVgsLVgsLFgqMFUsLFks
LVgqLFoqL1gsLFgsLlkrLVYrLlYrLFkrLVkrLVgrLVkqL1YpKlQmJkkcHEgVHE8qKYBmas3Bwf/+
/v//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////6uDg
sp+fe19eVS4wRxgdRhkYSRscUCIjUiUoVikqVyorWSssWCwsWCwtVistWSgwWS0sWSstWSouVysr
ViorVCcpVCQlTB4eRhoaQhcXSiMnbElJl4aJ3M3M+/n5////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////8+frr5eXDt7iX
h4h8XV5oQkRZLjFKISFGGBxCGhlCFRlEFhZFFhZCFRVEFxtDGRlJGR9OKilgO0FxVleOdnezpaXh
1tb39PT/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/vn29vHp
6evf397Z2djPz9XJzN7W1ejc2+3l5/Xy8vz8/P//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////w==

------=_NextPart_000_0000_01CB1DE2.850A4BD0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.surveygold.com/js/prototype/prototype.js

/*  Prototype JavaScript framework, version 1.6.0.2=0A=
 *  (c) 2005-2008 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://www.prototypejs.org/=0A=
 *=0A=
 =
*------------------------------------------------------------------------=
--*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.6.0.2',=0A=
=0A=
  Browser: {=0A=
    IE:     !!(window.attachEvent && !window.opera),=0A=
    Opera:  !!window.opera,=0A=
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,=0A=
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1,=0A=
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)=0A=
  },=0A=
=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate,=0A=
    ElementExtensions: !!window.HTMLElement,=0A=
    SpecificElementExtensions:=0A=
      document.createElement('div').__proto__ &&=0A=
      document.createElement('div').__proto__ !=3D=3D=0A=
        document.createElement('form').__proto__=0A=
  },=0A=
=0A=
  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',=0A=
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,=0A=
=0A=
  emptyFunction: function() { },=0A=
  K: function(x) { return x }=0A=
};=0A=
=0A=
if (Prototype.Browser.MobileSafari)=0A=
  Prototype.BrowserFeatures.SpecificElementExtensions =3D false;=0A=
=0A=
=0A=
/* Based on Alex Arnell's inheritance implementation. */=0A=
var Class =3D {=0A=
  create: function() {=0A=
    var parent =3D null, properties =3D $A(arguments);=0A=
    if (Object.isFunction(properties[0]))=0A=
      parent =3D properties.shift();=0A=
=0A=
    function klass() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
=0A=
    Object.extend(klass, Class.Methods);=0A=
    klass.superclass =3D parent;=0A=
    klass.subclasses =3D [];=0A=
=0A=
    if (parent) {=0A=
      var subclass =3D function() { };=0A=
      subclass.prototype =3D parent.prototype;=0A=
      klass.prototype =3D new subclass;=0A=
      parent.subclasses.push(klass);=0A=
    }=0A=
=0A=
    for (var i =3D 0; i < properties.length; i++)=0A=
      klass.addMethods(properties[i]);=0A=
=0A=
    if (!klass.prototype.initialize)=0A=
      klass.prototype.initialize =3D Prototype.emptyFunction;=0A=
=0A=
    klass.prototype.constructor =3D klass;=0A=
=0A=
    return klass;=0A=
  }=0A=
};=0A=
=0A=
Class.Methods =3D {=0A=
  addMethods: function(source) {=0A=
    var ancestor   =3D this.superclass && this.superclass.prototype;=0A=
    var properties =3D Object.keys(source);=0A=
=0A=
    if (!Object.keys({ toString: true }).length)=0A=
      properties.push("toString", "valueOf");=0A=
=0A=
    for (var i =3D 0, length =3D properties.length; i < length; i++) {=0A=
      var property =3D properties[i], value =3D source[property];=0A=
      if (ancestor && Object.isFunction(value) &&=0A=
          value.argumentNames().first() =3D=3D "$super") {=0A=
        var method =3D value, value =3D Object.extend((function(m) {=0A=
          return function() { return ancestor[m].apply(this, arguments) =
};=0A=
        })(property).wrap(method), {=0A=
          valueOf:  function() { return method },=0A=
          toString: function() { return method.toString() }=0A=
        });=0A=
      }=0A=
      this.prototype[property] =3D value;=0A=
    }=0A=
=0A=
    return this;=0A=
  }=0A=
};=0A=
=0A=
var Abstract =3D { };=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source)=0A=
    destination[property] =3D source[property];=0A=
  return destination;=0A=
};=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (Object.isUndefined(object)) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : String(object);=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  toJSON: function(object) {=0A=
    var type =3D typeof object;=0A=
    switch (type) {=0A=
      case 'undefined':=0A=
      case 'function':=0A=
      case 'unknown': return;=0A=
      case 'boolean': return object.toString();=0A=
    }=0A=
=0A=
    if (object =3D=3D=3D null) return 'null';=0A=
    if (object.toJSON) return object.toJSON();=0A=
    if (Object.isElement(object)) return;=0A=
=0A=
    var results =3D [];=0A=
    for (var property in object) {=0A=
      var value =3D Object.toJSON(object[property]);=0A=
      if (!Object.isUndefined(value))=0A=
        results.push(property.toJSON() + ': ' + value);=0A=
    }=0A=
=0A=
    return '{' + results.join(', ') + '}';=0A=
  },=0A=
=0A=
  toQueryString: function(object) {=0A=
    return $H(object).toQueryString();=0A=
  },=0A=
=0A=
  toHTML: function(object) {=0A=
    return object && object.toHTML ? object.toHTML() : =
String.interpret(object);=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({ }, object);=0A=
  },=0A=
=0A=
  isElement: function(object) {=0A=
    return object && object.nodeType =3D=3D 1;=0A=
  },=0A=
=0A=
  isArray: function(object) {=0A=
    return object !=3D null && typeof object =3D=3D "object" &&=0A=
      'splice' in object && 'join' in object;=0A=
  },=0A=
=0A=
  isHash: function(object) {=0A=
    return object instanceof Hash;=0A=
  },=0A=
=0A=
  isFunction: function(object) {=0A=
    return typeof object =3D=3D "function";=0A=
  },=0A=
=0A=
  isString: function(object) {=0A=
    return typeof object =3D=3D "string";=0A=
  },=0A=
=0A=
  isNumber: function(object) {=0A=
    return typeof object =3D=3D "number";=0A=
  },=0A=
=0A=
  isUndefined: function(object) {=0A=
    return typeof object =3D=3D "undefined";=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Function.prototype, {=0A=
  argumentNames: function() {=0A=
    var names =3D =
this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").inv=
oke("strip");=0A=
    return names.length =3D=3D 1 && !names[0] ? [] : names;=0A=
  },=0A=
=0A=
  bind: function() {=0A=
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return =
this;=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function() {=0A=
      return __method.apply(object, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  bindAsEventListener: function() {=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function(event) {=0A=
      return __method.apply(object, [event || =
window.event].concat(args));=0A=
    }=0A=
  },=0A=
=0A=
  curry: function() {=0A=
    if (!arguments.length) return this;=0A=
    var __method =3D this, args =3D $A(arguments);=0A=
    return function() {=0A=
      return __method.apply(this, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  delay: function() {=0A=
    var __method =3D this, args =3D $A(arguments), timeout =3D =
args.shift() * 1000;=0A=
    return window.setTimeout(function() {=0A=
      return __method.apply(__method, args);=0A=
    }, timeout);=0A=
  },=0A=
=0A=
  wrap: function(wrapper) {=0A=
    var __method =3D this;=0A=
    return function() {=0A=
      return wrapper.apply(this, =
[__method.bind(this)].concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  methodize: function() {=0A=
    if (this._methodized) return this._methodized;=0A=
    var __method =3D this;=0A=
    return this._methodized =3D function() {=0A=
      return __method.apply(null, [this].concat($A(arguments)));=0A=
    };=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.defer =3D Function.prototype.delay.curry(0.01);=0A=
=0A=
Date.prototype.toJSON =3D function() {=0A=
  return '"' + this.getUTCFullYear() + '-' +=0A=
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +=0A=
    this.getUTCDate().toPaddedString(2) + 'T' +=0A=
    this.getUTCHours().toPaddedString(2) + ':' +=0A=
    this.getUTCMinutes().toPaddedString(2) + ':' +=0A=
    this.getUTCSeconds().toPaddedString(2) + 'Z"';=0A=
};=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) { }=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
};=0A=
=0A=
RegExp.prototype.match =3D RegExp.prototype.test;=0A=
=0A=
RegExp.escape =3D function(str) {=0A=
  return String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g, '\\$1');=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create({=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    this.callback(this);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.execute();=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
Object.extend(String, {=0A=
  interpret: function(value) {=0A=
    return value =3D=3D null ? '' : String(value);=0A=
  },=0A=
  specialChar: {=0A=
    '\b': '\\b',=0A=
    '\t': '\\t',=0A=
    '\n': '\\n',=0A=
    '\f': '\\f',=0A=
    '\r': '\\r',=0A=
    '\\': '\\\\'=0A=
  }=0A=
});=0A=
=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D Object.isUndefined(count) ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return String(this);=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D Object.isUndefined(truncation) ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : =
String(this);=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var self =3D arguments.callee;=0A=
    self.text.data =3D this;=0A=
    return self.div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D new Element('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('', function(memo, node) { return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return { };=0A=
=0A=
    return match[1].split(separator || '&').inject({ }, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var key =3D decodeURIComponent(pair.shift());=0A=
        var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];=0A=
        if (value !=3D undefined) value =3D decodeURIComponent(value);=0A=
=0A=
        if (key in hash) {=0A=
          if (!Object.isArray(hash[key])) hash[key] =3D [hash[key]];=0A=
          hash[key].push(value);=0A=
        }=0A=
        else hash[key] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  times: function(count) {=0A=
    return count < 1 ? '' : new Array(count + 1).join(this);=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function() {=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {=0A=
      var character =3D String.specialChar[match[0]];=0A=
      return character ? character : '\\u00' + =
match[0].charCodeAt().toPaddedString(2, 16);=0A=
    });=0A=
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';=0A=
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return this.inspect(true);=0A=
  },=0A=
=0A=
  unfilterJSON: function(filter) {=0A=
    return this.sub(filter || Prototype.JSONFilter, '#{1}');=0A=
  },=0A=
=0A=
  isJSON: function() {=0A=
    var str =3D this;=0A=
    if (str.blank()) return false;=0A=
    str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');=0A=
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);=0A=
  },=0A=
=0A=
  evalJSON: function(sanitize) {=0A=
    var json =3D this.unfilterJSON();=0A=
    try {=0A=
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');=0A=
    } catch (e) { }=0A=
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A=
  },=0A=
=0A=
  include: function(pattern) {=0A=
    return this.indexOf(pattern) > -1;=0A=
  },=0A=
=0A=
  startsWith: function(pattern) {=0A=
    return this.indexOf(pattern) =3D=3D=3D 0;=0A=
  },=0A=
=0A=
  endsWith: function(pattern) {=0A=
    var d =3D this.length - pattern.length;=0A=
    return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;=0A=
  },=0A=
=0A=
  empty: function() {=0A=
    return this =3D=3D '';=0A=
  },=0A=
=0A=
  blank: function() {=0A=
    return /^\s*$/.test(this);=0A=
  },=0A=
=0A=
  interpolate: function(object, pattern) {=0A=
    return new Template(this, pattern).evaluate(object);=0A=
  }=0A=
});=0A=
=0A=
if (Prototype.Browser.WebKit || Prototype.Browser.IE) =
Object.extend(String.prototype, {=0A=
  escapeHTML: function() {=0A=
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');=0A=
  },=0A=
  unescapeHTML: function() {=0A=
    return =
this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (Object.isFunction(replacement)) return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
};=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
Object.extend(String.prototype.escapeHTML, {=0A=
  div:  document.createElement('div'),=0A=
  text: document.createTextNode('')=0A=
});=0A=
=0A=
with (String.prototype.escapeHTML) div.appendChild(text);=0A=
=0A=
var Template =3D Class.create({=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    if (Object.isFunction(object.toTemplateReplacements))=0A=
      object =3D object.toTemplateReplacements();=0A=
=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      if (object =3D=3D null) return '';=0A=
=0A=
      var before =3D match[1] || '';=0A=
      if (before =3D=3D '\\') return match[2];=0A=
=0A=
      var ctx =3D object, expr =3D match[3];=0A=
      var pattern =3D /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;=0A=
      match =3D pattern.exec(expr);=0A=
      if (match =3D=3D null) return before;=0A=
=0A=
      while (match !=3D null) {=0A=
        var comp =3D match[1].startsWith('[') ? match[2].gsub('\\\\]', =
']') : match[1];=0A=
        ctx =3D ctx[comp];=0A=
        if (null =3D=3D ctx || '' =3D=3D match[3]) break;=0A=
        expr =3D expr.substring('[' =3D=3D match[3] ? match[1].length : =
match[0].length);=0A=
        match =3D pattern.exec(expr);=0A=
      }=0A=
=0A=
      return before + String.interpret(ctx);=0A=
    });=0A=
  }=0A=
});=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
=0A=
var $break =3D { };=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator, context) {=0A=
    var index =3D 0;=0A=
    iterator =3D iterator.bind(context);=0A=
    try {=0A=
      this._each(function(value) {=0A=
        iterator(value, index++);=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.collect(iterator, context);=0A=
  },=0A=
=0A=
  all: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!iterator(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!iterator(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(iterator(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(filter, iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var results =3D [];=0A=
=0A=
    if (Object.isString(filter))=0A=
      filter =3D new RegExp(filter);=0A=
=0A=
    this.each(function(value, index) {=0A=
      if (filter.match(value))=0A=
        results.push(iterator(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    if (Object.isFunction(this.indexOf))=0A=
      if (this.indexOf(object) !=3D -1) return true;=0A=
=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  },=0A=
=0A=
  inGroupsOf: function(number, fillWith) {=0A=
    fillWith =3D Object.isUndefined(fillWith) ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=0A=
  inject: function(memo, iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=0A=
  invoke: function(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  },=0A=
=0A=
  max: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator(value, index);=0A=
      if (result =3D=3D null || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator(value, index);=0A=
      if (result =3D=3D null || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      (iterator(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (Object.isFunction(args.last()))=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.toArray().length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Enumerable, {=0A=
  map:     Enumerable.collect,=0A=
  find:    Enumerable.detect,=0A=
  select:  Enumerable.findAll,=0A=
  filter:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray,=0A=
  every:   Enumerable.all,=0A=
  some:    Enumerable.any=0A=
});=0A=
function $A(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) return iterable.toArray();=0A=
  var length =3D iterable.length || 0, results =3D new Array(length);=0A=
  while (length--) results[length] =3D iterable[length];=0A=
  return results;=0A=
}=0A=
=0A=
if (Prototype.Browser.WebKit) {=0A=
  $A =3D function(iterable) {=0A=
    if (!iterable) return [];=0A=
    if (!(Object.isFunction(iterable) && iterable =3D=3D '[object =
NodeList]') &&=0A=
        iterable.toArray) return iterable.toArray();=0A=
    var length =3D iterable.length || 0, results =3D new Array(length);=0A=
    while (length--) results[length] =3D iterable[length];=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
Array.from =3D $A;=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse) Array.prototype._reverse =3D =
Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      iterator(this[i]);=0A=
  },=0A=
=0A=
  clear: function() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  },=0A=
=0A=
  first: function() {=0A=
    return this[0];=0A=
  },=0A=
=0A=
  last: function() {=0A=
    return this[this.length - 1];=0A=
  },=0A=
=0A=
  compact: function() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  },=0A=
=0A=
  flatten: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.concat(Object.isArray(value) ?=0A=
        value.flatten() : [value]);=0A=
    });=0A=
  },=0A=
=0A=
  without: function() {=0A=
    var values =3D $A(arguments);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  },=0A=
=0A=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function(sorted) {=0A=
    return this.inject([], function(array, value, index) {=0A=
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))=0A=
        array.push(value);=0A=
      return array;=0A=
    });=0A=
  },=0A=
=0A=
  intersect: function(array) {=0A=
    return this.uniq().findAll(function(item) {=0A=
      return array.detect(function(value) { return item =3D=3D=3D value =
});=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    var results =3D [];=0A=
    this.each(function(object) {=0A=
      var value =3D Object.toJSON(object);=0A=
      if (!Object.isUndefined(value)) results.push(value);=0A=
    });=0A=
    return '[' + results.join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
// use native browser JS 1.6 implementation if available=0A=
if (Object.isFunction(Array.prototype.forEach))=0A=
  Array.prototype._each =3D Array.prototype.forEach;=0A=
=0A=
if (!Array.prototype.indexOf) Array.prototype.indexOf =3D function(item, =
i) {=0A=
  i || (i =3D 0);=0A=
  var length =3D this.length;=0A=
  if (i < 0) i =3D length + i;=0A=
  for (; i < length; i++)=0A=
    if (this[i] =3D=3D=3D item) return i;=0A=
  return -1;=0A=
};=0A=
=0A=
if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf =3D =
function(item, i) {=0A=
  i =3D isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;=0A=
  var n =3D this.slice(0, i).reverse().indexOf(item);=0A=
  return (n < 0) ? n : i - n - 1;=0A=
};=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string) {=0A=
  if (!Object.isString(string)) return [];=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if (Prototype.Browser.Opera){=0A=
  Array.prototype.concat =3D function() {=0A=
    var array =3D [];=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if (Object.isArray(arguments[i])) {=0A=
        for (var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  };=0A=
}=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    return this.toPaddedString(2, 16);=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  toPaddedString: function(length, radix) {=0A=
    var string =3D this.toString(radix || 10);=0A=
    return '0'.times(length - string.length) + string;=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return isFinite(this) ? this.toString() : 'null';=0A=
  }=0A=
});=0A=
=0A=
$w('abs round ceil floor').each(function(method){=0A=
  Number.prototype[method] =3D Math[method].methodize();=0A=
});=0A=
function $H(object) {=0A=
  return new Hash(object);=0A=
};=0A=
=0A=
var Hash =3D Class.create(Enumerable, (function() {=0A=
=0A=
  function toQueryPair(key, value) {=0A=
    if (Object.isUndefined(value)) return key;=0A=
    return key + '=3D' + encodeURIComponent(String.interpret(value));=0A=
  }=0A=
=0A=
  return {=0A=
    initialize: function(object) {=0A=
      this._object =3D Object.isHash(object) ? object.toObject() : =
Object.clone(object);=0A=
    },=0A=
=0A=
    _each: function(iterator) {=0A=
      for (var key in this._object) {=0A=
        var value =3D this._object[key], pair =3D [key, value];=0A=
        pair.key =3D key;=0A=
        pair.value =3D value;=0A=
        iterator(pair);=0A=
      }=0A=
    },=0A=
=0A=
    set: function(key, value) {=0A=
      return this._object[key] =3D value;=0A=
    },=0A=
=0A=
    get: function(key) {=0A=
      return this._object[key];=0A=
    },=0A=
=0A=
    unset: function(key) {=0A=
      var value =3D this._object[key];=0A=
      delete this._object[key];=0A=
      return value;=0A=
    },=0A=
=0A=
    toObject: function() {=0A=
      return Object.clone(this._object);=0A=
    },=0A=
=0A=
    keys: function() {=0A=
      return this.pluck('key');=0A=
    },=0A=
=0A=
    values: function() {=0A=
      return this.pluck('value');=0A=
    },=0A=
=0A=
    index: function(value) {=0A=
      var match =3D this.detect(function(pair) {=0A=
        return pair.value =3D=3D=3D value;=0A=
      });=0A=
      return match && match.key;=0A=
    },=0A=
=0A=
    merge: function(object) {=0A=
      return this.clone().update(object);=0A=
    },=0A=
=0A=
    update: function(object) {=0A=
      return new Hash(object).inject(this, function(result, pair) {=0A=
        result.set(pair.key, pair.value);=0A=
        return result;=0A=
      });=0A=
    },=0A=
=0A=
    toQueryString: function() {=0A=
      return this.map(function(pair) {=0A=
        var key =3D encodeURIComponent(pair.key), values =3D pair.value;=0A=
=0A=
        if (values && typeof values =3D=3D 'object') {=0A=
          if (Object.isArray(values))=0A=
            return values.map(toQueryPair.curry(key)).join('&');=0A=
        }=0A=
        return toQueryPair(key, values);=0A=
      }).join('&');=0A=
    },=0A=
=0A=
    inspect: function() {=0A=
      return '#<Hash:{' + this.map(function(pair) {=0A=
        return pair.map(Object.inspect).join(': ');=0A=
      }).join(', ') + '}>';=0A=
    },=0A=
=0A=
    toJSON: function() {=0A=
      return Object.toJSON(this.toObject());=0A=
    },=0A=
=0A=
    clone: function() {=0A=
      return new Hash(this);=0A=
    }=0A=
  }=0A=
})());=0A=
=0A=
Hash.prototype.toTemplateReplacements =3D Hash.prototype.toObject;=0A=
Hash.from =3D $H;=0A=
var ObjectRange =3D Class.create(Enumerable, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  },=0A=
=0A=
  include: function(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
});=0A=
=0A=
var $R =3D function(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
};=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
};=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (Object.isFunction(responder[callback])) {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) { }=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate:   function() { Ajax.activeRequestCount++ },=0A=
  onComplete: function() { Ajax.activeRequestCount-- }=0A=
});=0A=
=0A=
Ajax.Base =3D Class.create({=0A=
  initialize: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   '',=0A=
      evalJSON:     true,=0A=
      evalJS:       true=0A=
    };=0A=
    Object.extend(this.options, options || { });=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
=0A=
    if (Object.isString(this.options.parameters))=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
    else if (Object.isHash(this.options.parameters))=0A=
      this.options.parameters =3D this.options.parameters.toObject();=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request =3D Class.create(Ajax.Base, {=0A=
  _complete: false,=0A=
=0A=
  initialize: function($super, url, options) {=0A=
    $super(options);=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D Object.clone(this.options.parameters);=0A=
=0A=
    if (!['get', 'post'].include(this.method)) {=0A=
      // simulate other verbs over post=0A=
      params['_method'] =3D this.method;=0A=
      this.method =3D 'post';=0A=
    }=0A=
=0A=
    this.parameters =3D params;=0A=
=0A=
    if (params =3D Object.toQueryString(params)) {=0A=
      // when GET, append parameters to URL=0A=
      if (this.method =3D=3D 'get')=0A=
        this.url +=3D (this.url.include('?') ? '&' : '?') + params;=0A=
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
        params +=3D '&_=3D';=0A=
    }=0A=
=0A=
    try {=0A=
      var response =3D new Ajax.Response(this);=0A=
      if (this.options.onCreate) this.options.onCreate(response);=0A=
      Ajax.Responders.dispatch('onCreate', this, response);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous) =
this.respondToReadyState.bind(this).defer(1);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;=0A=
      this.transport.send(this.body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (Object.isFunction(extras.push))=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    var status =3D this.getStatus();=0A=
    return !status || (status >=3D 200 && status < 300);=0A=
  },=0A=
=0A=
  getStatus: function() {=0A=
    try {=0A=
      return this.transport.status || 0;=0A=
    } catch (e) { return 0 }=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState], response =3D new =
Ajax.Response(this);=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + response.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(response, response.headerJSON);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      var contentType =3D response.getHeader('Content-type');=0A=
      if (this.options.evalJS =3D=3D 'force'=0A=
          || (this.options.evalJS && this.isSameOrigin() && contentType=0A=
          && =
contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s=
*$/i)))=0A=
        this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(response, =
response.headerJSON);=0A=
      Ajax.Responders.dispatch('on' + state, this, response, =
response.headerJSON);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      // avoid memory leak in MSIE: clean up=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  isSameOrigin: function() {=0A=
    var m =3D this.url.match(/^\s*https?:\/\/[^\/]*/);=0A=
    return !m || (m[0] =3D=3D =
'#{protocol}//#{domain}#{port}'.interpolate({=0A=
      protocol: location.protocol,=0A=
      domain: document.domain,=0A=
      port: location.port ? ':' + location.port : ''=0A=
    }));=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name) || null;=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval((this.transport.responseText || '').unfilterJSON());=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Response =3D Class.create({=0A=
  initialize: function(request){=0A=
    this.request =3D request;=0A=
    var transport  =3D this.transport  =3D request.transport,=0A=
        readyState =3D this.readyState =3D transport.readyState;=0A=
=0A=
    if((readyState > 2 && !Prototype.Browser.IE) || readyState =3D=3D 4) =
{=0A=
      this.status       =3D this.getStatus();=0A=
      this.statusText   =3D this.getStatusText();=0A=
      this.responseText =3D String.interpret(transport.responseText);=0A=
      this.headerJSON   =3D this._getHeaderJSON();=0A=
    }=0A=
=0A=
    if(readyState =3D=3D 4) {=0A=
      var xml =3D transport.responseXML;=0A=
      this.responseXML  =3D Object.isUndefined(xml) ? null : xml;=0A=
      this.responseJSON =3D this._getResponseJSON();=0A=
    }=0A=
  },=0A=
=0A=
  status:      0,=0A=
  statusText: '',=0A=
=0A=
  getStatus: Ajax.Request.prototype.getStatus,=0A=
=0A=
  getStatusText: function() {=0A=
    try {=0A=
      return this.transport.statusText || '';=0A=
    } catch (e) { return '' }=0A=
  },=0A=
=0A=
  getHeader: Ajax.Request.prototype.getHeader,=0A=
=0A=
  getAllHeaders: function() {=0A=
    try {=0A=
      return this.getAllResponseHeaders();=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  getResponseHeader: function(name) {=0A=
    return this.transport.getResponseHeader(name);=0A=
  },=0A=
=0A=
  getAllResponseHeaders: function() {=0A=
    return this.transport.getAllResponseHeaders();=0A=
  },=0A=
=0A=
  _getHeaderJSON: function() {=0A=
    var json =3D this.getHeader('X-JSON');=0A=
    if (!json) return null;=0A=
    json =3D decodeURIComponent(escape(json));=0A=
    try {=0A=
      return json.evalJSON(this.request.options.sanitizeJSON ||=0A=
        !this.request.isSameOrigin());=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  _getResponseJSON: function() {=0A=
    var options =3D this.request.options;=0A=
    if (!options.evalJSON || (options.evalJSON !=3D 'force' &&=0A=
      !(this.getHeader('Content-type') || =
'').include('application/json')) ||=0A=
        this.responseText.blank())=0A=
          return null;=0A=
    try {=0A=
      return this.responseText.evalJSON(options.sanitizeJSON ||=0A=
        !this.request.isSameOrigin());=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create(Ajax.Request, {=0A=
  initialize: function($super, container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    };=0A=
=0A=
    options =3D Object.clone(options);=0A=
    var onComplete =3D options.onComplete;=0A=
    options.onComplete =3D (function(response, json) {=0A=
      this.updateContent(response.responseText);=0A=
      if (Object.isFunction(onComplete)) onComplete(response, json);=0A=
    }).bind(this);=0A=
=0A=
    $super(url, options);=0A=
  },=0A=
=0A=
  updateContent: function(responseText) {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'],=0A=
        options =3D this.options;=0A=
=0A=
    if (!options.evalScripts) responseText =3D =
responseText.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (options.insertion) {=0A=
        if (Object.isString(options.insertion)) {=0A=
          var insertion =3D { }; insertion[options.insertion] =3D =
responseText;=0A=
          receiver.insert(insertion);=0A=
        }=0A=
        else options.insertion(receiver, responseText);=0A=
      }=0A=
      else receiver.update(responseText);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create(Ajax.Base, {=0A=
  initialize: function($super, container, url, options) {=0A=
    $super(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D { };=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(response) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (response.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D response.responseText;=0A=
    }=0A=
    this.timer =3D this.onTimerEvent.bind(this).delay(this.decay * =
this.frequency);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (Object.isString(element))=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(Element.extend(query.snapshotItem(i)));=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Node) var Node =3D { };=0A=
=0A=
if (!Node.ELEMENT_NODE) {=0A=
  // DOM level 2 ECMAScript Language Binding=0A=
  Object.extend(Node, {=0A=
    ELEMENT_NODE: 1,=0A=
    ATTRIBUTE_NODE: 2,=0A=
    TEXT_NODE: 3,=0A=
    CDATA_SECTION_NODE: 4,=0A=
    ENTITY_REFERENCE_NODE: 5,=0A=
    ENTITY_NODE: 6,=0A=
    PROCESSING_INSTRUCTION_NODE: 7,=0A=
    COMMENT_NODE: 8,=0A=
    DOCUMENT_NODE: 9,=0A=
    DOCUMENT_TYPE_NODE: 10,=0A=
    DOCUMENT_FRAGMENT_NODE: 11,=0A=
    NOTATION_NODE: 12=0A=
  });=0A=
}=0A=
=0A=
(function() {=0A=
  var element =3D this.Element;=0A=
  this.Element =3D function(tagName, attributes) {=0A=
    attributes =3D attributes || { };=0A=
    tagName =3D tagName.toLowerCase();=0A=
    var cache =3D Element.cache;=0A=
    if (Prototype.Browser.IE && attributes.name) {=0A=
      tagName =3D '<' + tagName + ' name=3D"' + attributes.name + '">';=0A=
      delete attributes.name;=0A=
      return Element.writeAttribute(document.createElement(tagName), =
attributes);=0A=
    }=0A=
    if (!cache[tagName]) cache[tagName] =3D =
Element.extend(document.createElement(tagName));=0A=
    return Element.writeAttribute(cache[tagName].cloneNode(false), =
attributes);=0A=
  };=0A=
  Object.extend(this.Element, element || { });=0A=
}).call(window);=0A=
=0A=
Element.cache =3D { };=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    $(element).style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    $(element).style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: function(element, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) return =
element.update().insert(content);=0A=
    content =3D Object.toHTML(content);=0A=
    element.innerHTML =3D content.stripScripts();=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    else if (!Object.isElement(content)) {=0A=
      content =3D Object.toHTML(content);=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNode(element);=0A=
      content.evalScripts.bind(content).defer();=0A=
      content =3D range.createContextualFragment(content.stripScripts());=0A=
    }=0A=
    element.parentNode.replaceChild(content, element);=0A=
    return element;=0A=
  },=0A=
=0A=
  insert: function(element, insertions) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Object.isString(insertions) || Object.isNumber(insertions) ||=0A=
        Object.isElement(insertions) || (insertions && =
(insertions.toElement || insertions.toHTML)))=0A=
          insertions =3D {bottom:insertions};=0A=
=0A=
    var content, insert, tagName, childNodes;=0A=
=0A=
    for (var position in insertions) {=0A=
      content  =3D insertions[position];=0A=
      position =3D position.toLowerCase();=0A=
      insert =3D Element._insertionTranslations[position];=0A=
=0A=
      if (content && content.toElement) content =3D content.toElement();=0A=
      if (Object.isElement(content)) {=0A=
        insert(element, content);=0A=
        continue;=0A=
      }=0A=
=0A=
      content =3D Object.toHTML(content);=0A=
=0A=
      tagName =3D ((position =3D=3D 'before' || position =3D=3D 'after')=0A=
        ? element.parentNode : element).tagName.toUpperCase();=0A=
=0A=
      childNodes =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
=0A=
      if (position =3D=3D 'top' || position =3D=3D 'after') =
childNodes.reverse();=0A=
      childNodes.each(insert.curry(element));=0A=
=0A=
      content.evalScripts.bind(content).defer();=0A=
    }=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  wrap: function(element, wrapper, attributes) {=0A=
    element =3D $(element);=0A=
    if (Object.isElement(wrapper))=0A=
      $(wrapper).writeAttribute(attributes || { });=0A=
    else if (Object.isString(wrapper)) wrapper =3D new Element(wrapper, =
attributes);=0A=
    else wrapper =3D new Element('div', wrapper);=0A=
    if (element.parentNode)=0A=
      element.parentNode.replaceChild(wrapper, element);=0A=
    wrapper.appendChild(element);=0A=
    return wrapper;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $(element).select("*");=0A=
  },=0A=
=0A=
  firstDescendant: function(element) {=0A=
    element =3D $(element).firstChild;=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    return $(element);=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (Object.isString(selector))=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return $(element.parentNode);=0A=
    var ancestors =3D element.ancestors();=0A=
    return Object.isNumber(expression) ? ancestors[expression] :=0A=
      Selector.findElement(ancestors, expression, index);=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return element.firstDescendant();=0A=
    return Object.isNumber(expression) ? =
element.descendants()[expression] :=0A=
      element.select(expression)[index || 0];=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.previousElementSibling(element));=0A=
    var previousSiblings =3D element.previousSiblings();=0A=
    return Object.isNumber(expression) ? previousSiblings[expression] :=0A=
      Selector.findElement(previousSiblings, expression, index);=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.nextElementSibling(element));=0A=
    var nextSiblings =3D element.nextSiblings();=0A=
    return Object.isNumber(expression) ? nextSiblings[expression] :=0A=
      Selector.findElement(nextSiblings, expression, index);=0A=
  },=0A=
=0A=
  select: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  adjacent: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element.parentNode, =
args).without(element);=0A=
  },=0A=
=0A=
  identify: function(element) {=0A=
    element =3D $(element);=0A=
    var id =3D element.readAttribute('id'), self =3D arguments.callee;=0A=
    if (id) return id;=0A=
    do { id =3D 'anonymous_element_' + self.counter++ } while ($(id));=0A=
    element.writeAttribute('id', id);=0A=
    return id;=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (Prototype.Browser.IE) {=0A=
      var t =3D Element._attributeTranslations.read;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name]) name =3D t.names[name];=0A=
      if (name.include(':')) {=0A=
        return (!element.attributes || !element.attributes[name]) ? null =
:=0A=
         element.attributes[name].value;=0A=
      }=0A=
    }=0A=
    return element.getAttribute(name);=0A=
  },=0A=
=0A=
  writeAttribute: function(element, name, value) {=0A=
    element =3D $(element);=0A=
    var attributes =3D { }, t =3D Element._attributeTranslations.write;=0A=
=0A=
    if (typeof name =3D=3D 'object') attributes =3D name;=0A=
    else attributes[name] =3D Object.isUndefined(value) ? true : value;=0A=
=0A=
    for (var attr in attributes) {=0A=
      name =3D t.names[attr] || attr;=0A=
      value =3D attributes[attr];=0A=
      if (t.values[attr]) name =3D t.values[attr](element, value);=0A=
      if (value =3D=3D=3D false || value =3D=3D=3D null)=0A=
        element.removeAttribute(name);=0A=
      else if (value =3D=3D=3D true)=0A=
        element.setAttribute(name, name);=0A=
      else element.setAttribute(name, value);=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return $(element).getDimensions().height;=0A=
  },=0A=
=0A=
  getWidth: function(element) {=0A=
    return $(element).getDimensions().width;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    return (elementClassName.length > 0 && (elementClassName =3D=3D =
className ||=0A=
      new RegExp("(^|\\s)" + className + =
"(\\s|$)").test(elementClassName)));=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    if (!element.hasClassName(className))=0A=
      element.className +=3D (element.className ? ' ' : '') + className;=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    element.className =3D element.className.replace(=0A=
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    return element[element.hasClassName(className) ?=0A=
      'removeClassName' : 'addClassName'](className);=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.blank();=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
    var originalAncestor =3D ancestor;=0A=
=0A=
    if (element.compareDocumentPosition)=0A=
      return (element.compareDocumentPosition(ancestor) & 8) =3D=3D=3D 8;=0A=
=0A=
    if (element.sourceIndex && !Prototype.Browser.Opera) {=0A=
      var e =3D element.sourceIndex, a =3D ancestor.sourceIndex,=0A=
       nextAncestor =3D ancestor.nextSibling;=0A=
      if (!nextAncestor) {=0A=
        do { ancestor =3D ancestor.parentNode; }=0A=
        while (!(nextAncestor =3D ancestor.nextSibling) && =
ancestor.parentNode);=0A=
      }=0A=
      if (nextAncestor && nextAncestor.sourceIndex)=0A=
       return (e > a && e < nextAncestor.sourceIndex);=0A=
    }=0A=
=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D originalAncestor) return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D element.cumulativeOffset();=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value) {=0A=
      var css =3D document.defaultView.getComputedStyle(element, null);=0A=
      value =3D css ? css[style] : null;=0A=
    }=0A=
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  getOpacity: function(element) {=0A=
    return $(element).getStyle('opacity');=0A=
  },=0A=
=0A=
  setStyle: function(element, styles) {=0A=
    element =3D $(element);=0A=
    var elementStyle =3D element.style, match;=0A=
    if (Object.isString(styles)) {=0A=
      element.style.cssText +=3D ';' + styles;=0A=
      return styles.include('opacity') ?=0A=
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : =
element;=0A=
    }=0A=
    for (var property in styles)=0A=
      if (property =3D=3D 'opacity') =
element.setOpacity(styles[property]);=0A=
      else=0A=
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?=0A=
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : =
'styleFloat') :=0A=
            property] =3D styles[property];=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  setOpacity: function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    var display =3D $(element).getStyle('display');=0A=
    if (display !=3D 'none' && display !=3D null) // Safari bug=0A=
      return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
    // All *Width and *Height properties give 0 on elements with display =
none,=0A=
    // so enable the element temporarily=0A=
    var els =3D element.style;=0A=
    var originalVisibility =3D els.visibility;=0A=
    var originalPosition =3D els.position;=0A=
    var originalDisplay =3D els.display;=0A=
    els.visibility =3D 'hidden';=0A=
    els.position =3D 'absolute';=0A=
    els.display =3D 'block';=0A=
    var originalWidth =3D element.clientWidth;=0A=
    var originalHeight =3D element.clientHeight;=0A=
    els.display =3D originalDisplay;=0A=
    els.position =3D originalPosition;=0A=
    els.visibility =3D originalVisibility;=0A=
    return {width: originalWidth, height: originalHeight};=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      // Opera returns the offset relative to the positioning context, =
when an=0A=
      // element is position relative but top and left have not been =
defined=0A=
      if (window.opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D Element.getStyle(element, 'overflow') || =
'auto';=0A=
    if (element._overflow !=3D=3D 'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  },=0A=
=0A=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  positionedOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if (element.tagName =3D=3D 'BODY') break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p !=3D=3D 'static') break;=0A=
      }=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.getStyle('position') =3D=3D 'absolute') return;=0A=
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.=0A=
=0A=
    var offsets =3D element.positionedOffset();=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=0A=
    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);=0A=
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);=0A=
    element._originalWidth  =3D element.style.width;=0A=
    element._originalHeight =3D element.style.height;=0A=
=0A=
    element.style.position =3D 'absolute';=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.width  =3D width + 'px';=0A=
    element.style.height =3D height + 'px';=0A=
    return element;=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.getStyle('position') =3D=3D 'relative') return;=0A=
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.=0A=
=0A=
    element.style.position =3D 'relative';=0A=
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);=0A=
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.height =3D element._originalHeight;=0A=
    element.style.width  =3D element._originalWidth;=0A=
    return element;=0A=
  },=0A=
=0A=
  cumulativeScrollOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  getOffsetParent: function(element) {=0A=
    if (element.offsetParent) return $(element.offsetParent);=0A=
    if (element =3D=3D document.body) return $(element);=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
      if (Element.getStyle(element, 'position') !=3D 'static')=0A=
        return $(element);=0A=
=0A=
    return $(document.body);=0A=
  },=0A=
=0A=
  viewportOffset: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent =3D=3D document.body &&=0A=
        Element.getStyle(element, 'position') =3D=3D 'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!Prototype.Browser.Opera || element.tagName =3D=3D 'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  clonePosition: function(element, source) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || { });=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D source.viewportOffset();=0A=
=0A=
    // find coordinate system to use=0A=
    element =3D $(element);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(element, 'position') =3D=3D 'absolute') {=0A=
      parent =3D element.getOffsetParent();=0A=
      delta =3D parent.viewportOffset();=0A=
    }=0A=
=0A=
    // correct by body offsets (fixes Safari)=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    // set position=0A=
    if (options.setLeft)   element.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if (options.setTop)    element.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if (options.setWidth)  element.style.width =3D source.offsetWidth + =
'px';=0A=
    if (options.setHeight) element.style.height =3D source.offsetHeight =
+ 'px';=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.identify.counter =3D 1;=0A=
=0A=
Object.extend(Element.Methods, {=0A=
  getElementsBySelector: Element.Methods.select,=0A=
  childElements: Element.Methods.immediateDescendants=0A=
});=0A=
=0A=
Element._attributeTranslations =3D {=0A=
  write: {=0A=
    names: {=0A=
      className: 'class',=0A=
      htmlFor:   'for'=0A=
    },=0A=
    values: { }=0A=
  }=0A=
};=0A=
=0A=
if (Prototype.Browser.Opera) {=0A=
  Element.Methods.getStyle =3D Element.Methods.getStyle.wrap(=0A=
    function(proceed, element, style) {=0A=
      switch (style) {=0A=
        case 'left': case 'top': case 'right': case 'bottom':=0A=
          if (proceed(element, 'position') =3D=3D=3D 'static') return =
null;=0A=
        case 'height': case 'width':=0A=
          // returns '0px' for hidden elements; we want it to return null=0A=
          if (!Element.visible(element)) return null;=0A=
=0A=
          // returns the border-box dimensions rather than the =
content-box=0A=
          // dimensions, so we subtract padding and borders from the =
value=0A=
          var dim =3D parseInt(proceed(element, style), 10);=0A=
=0A=
          if (dim !=3D=3D element['offset' + style.capitalize()])=0A=
            return dim + 'px';=0A=
=0A=
          var properties;=0A=
          if (style =3D=3D=3D 'height') {=0A=
            properties =3D ['border-top-width', 'padding-top',=0A=
             'padding-bottom', 'border-bottom-width'];=0A=
          }=0A=
          else {=0A=
            properties =3D ['border-left-width', 'padding-left',=0A=
             'padding-right', 'border-right-width'];=0A=
          }=0A=
          return properties.inject(dim, function(memo, property) {=0A=
            var val =3D proceed(element, property);=0A=
            return val =3D=3D=3D null ? memo : memo - parseInt(val, 10);=0A=
          }) + 'px';=0A=
        default: return proceed(element, style);=0A=
      }=0A=
    }=0A=
  );=0A=
=0A=
  Element.Methods.readAttribute =3D Element.Methods.readAttribute.wrap(=0A=
    function(proceed, element, attribute) {=0A=
      if (attribute =3D=3D=3D 'title') return element.title;=0A=
      return proceed(element, attribute);=0A=
    }=0A=
  );=0A=
}=0A=
=0A=
else if (Prototype.Browser.IE) {=0A=
  // IE doesn't report offsets correctly for static elements, so we =
change them=0A=
  // to "relative" to get the values, then change them back.=0A=
  Element.Methods.getOffsetParent =3D =
Element.Methods.getOffsetParent.wrap(=0A=
    function(proceed, element) {=0A=
      element =3D $(element);=0A=
      var position =3D element.getStyle('position');=0A=
      if (position !=3D=3D 'static') return proceed(element);=0A=
      element.setStyle({ position: 'relative' });=0A=
      var value =3D proceed(element);=0A=
      element.setStyle({ position: position });=0A=
      return value;=0A=
    }=0A=
  );=0A=
=0A=
  $w('positionedOffset viewportOffset').each(function(method) {=0A=
    Element.Methods[method] =3D Element.Methods[method].wrap(=0A=
      function(proceed, element) {=0A=
        element =3D $(element);=0A=
        var position =3D element.getStyle('position');=0A=
        if (position !=3D=3D 'static') return proceed(element);=0A=
        // Trigger hasLayout on the offset parent so that IE6 reports=0A=
        // accurate offsetTop and offsetLeft values for position: fixed.=0A=
        var offsetParent =3D element.getOffsetParent();=0A=
        if (offsetParent && offsetParent.getStyle('position') =3D=3D=3D =
'fixed')=0A=
          offsetParent.setStyle({ zoom: 1 });=0A=
        element.setStyle({ position: 'relative' });=0A=
        var value =3D proceed(element);=0A=
        element.setStyle({ position: position });=0A=
        return value;=0A=
      }=0A=
    );=0A=
  });=0A=
=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];=0A=
=0A=
    if (style =3D=3D 'opacity') {=0A=
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if (value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
=0A=
    if (value =3D=3D 'auto') {=0A=
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))=0A=
        return element['offset' + style.capitalize()] + 'px';=0A=
      return null;=0A=
    }=0A=
    return value;=0A=
  };=0A=
=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    function stripAlpha(filter){=0A=
      return filter.replace(/alpha\([^\)]*\)/gi,'');=0A=
    }=0A=
    element =3D $(element);=0A=
    var currentStyle =3D element.currentStyle;=0A=
    if ((currentStyle && !currentStyle.hasLayout) ||=0A=
      (!currentStyle && element.style.zoom =3D=3D 'normal'))=0A=
        element.style.zoom =3D 1;=0A=
=0A=
    var filter =3D element.getStyle('filter'), style =3D element.style;=0A=
    if (value =3D=3D 1 || value =3D=3D=3D '') {=0A=
      (filter =3D stripAlpha(filter)) ?=0A=
        style.filter =3D filter : style.removeAttribute('filter');=0A=
      return element;=0A=
    } else if (value < 0.00001) value =3D 0;=0A=
    style.filter =3D stripAlpha(filter) +=0A=
      'alpha(opacity=3D' + (value * 100) + ')';=0A=
    return element;=0A=
  };=0A=
=0A=
  Element._attributeTranslations =3D {=0A=
    read: {=0A=
      names: {=0A=
        'class': 'className',=0A=
        'for':   'htmlFor'=0A=
      },=0A=
      values: {=0A=
        _getAttr: function(element, attribute) {=0A=
          return element.getAttribute(attribute, 2);=0A=
        },=0A=
        _getAttrNode: function(element, attribute) {=0A=
          var node =3D element.getAttributeNode(attribute);=0A=
          return node ? node.value : "";=0A=
        },=0A=
        _getEv: function(element, attribute) {=0A=
          attribute =3D element.getAttribute(attribute);=0A=
          return attribute ? attribute.toString().slice(23, -2) : null;=0A=
        },=0A=
        _flag: function(element, attribute) {=0A=
          return $(element).hasAttribute(attribute) ? attribute : null;=0A=
        },=0A=
        style: function(element) {=0A=
          return element.style.cssText.toLowerCase();=0A=
        },=0A=
        title: function(element) {=0A=
          return element.title;=0A=
        }=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.write =3D {=0A=
    names: Object.extend({=0A=
      cellpadding: 'cellPadding',=0A=
      cellspacing: 'cellSpacing'=0A=
    }, Element._attributeTranslations.read.names),=0A=
    values: {=0A=
      checked: function(element, value) {=0A=
        element.checked =3D !!value;=0A=
      },=0A=
=0A=
      style: function(element, value) {=0A=
        element.style.cssText =3D value ? value : '';=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.has =3D {};=0A=
=0A=
  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +=0A=
      'encType maxLength readOnly longDesc').each(function(attr) {=0A=
    Element._attributeTranslations.write.names[attr.toLowerCase()] =3D =
attr;=0A=
    Element._attributeTranslations.has[attr.toLowerCase()] =3D attr;=0A=
  });=0A=
=0A=
  (function(v) {=0A=
    Object.extend(v, {=0A=
      href:        v._getAttr,=0A=
      src:         v._getAttr,=0A=
      type:        v._getAttr,=0A=
      action:      v._getAttrNode,=0A=
      disabled:    v._flag,=0A=
      checked:     v._flag,=0A=
      readonly:    v._flag,=0A=
      multiple:    v._flag,=0A=
      onload:      v._getEv,=0A=
      onunload:    v._getEv,=0A=
      onclick:     v._getEv,=0A=
      ondblclick:  v._getEv,=0A=
      onmousedown: v._getEv,=0A=
      onmouseup:   v._getEv,=0A=
      onmouseover: v._getEv,=0A=
      onmousemove: v._getEv,=0A=
      onmouseout:  v._getEv,=0A=
      onfocus:     v._getEv,=0A=
      onblur:      v._getEv,=0A=
      onkeypress:  v._getEv,=0A=
      onkeydown:   v._getEv,=0A=
      onkeyup:     v._getEv,=0A=
      onsubmit:    v._getEv,=0A=
      onreset:     v._getEv,=0A=
      onselect:    v._getEv,=0A=
      onchange:    v._getEv=0A=
    });=0A=
  })(Element._attributeTranslations.read.values);=0A=
}=0A=
=0A=
else if (Prototype.Browser.Gecko && =
/rv:1\.8\.0/.test(navigator.userAgent)) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :=0A=
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
else if (Prototype.Browser.WebKit) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
=0A=
    if (value =3D=3D 1)=0A=
      if(element.tagName =3D=3D 'IMG' && element.width) {=0A=
        element.width++; element.width--;=0A=
      } else try {=0A=
        var n =3D document.createTextNode(' ');=0A=
        element.appendChild(n);=0A=
        element.removeChild(n);=0A=
      } catch (e) { }=0A=
=0A=
    return element;=0A=
  };=0A=
=0A=
  // Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
  // positioned.  For performance reasons, redefine =
Element#cumulativeOffset for=0A=
  // KHTML/WebKit only.=0A=
  Element.Methods.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  };=0A=
}=0A=
=0A=
if (Prototype.Browser.IE || Prototype.Browser.Opera) {=0A=
  // IE and Opera are missing .innerHTML support for TABLE-related and =
SELECT elements=0A=
  Element.Methods.update =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) return =
element.update().insert(content);=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
=0A=
    if (tagName in Element._insertionTranslations.tags) {=0A=
      $A(element.childNodes).each(function(node) { =
element.removeChild(node) });=0A=
      Element._getContentFromAnonymousElement(tagName, =
content.stripScripts())=0A=
        .each(function(node) { element.appendChild(node) });=0A=
    }=0A=
    else element.innerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
if ('outerHTML' in document.createElement('div')) {=0A=
  Element.Methods.replace =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) {=0A=
      element.parentNode.replaceChild(content, element);=0A=
      return element;=0A=
    }=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var parent =3D element.parentNode, tagName =3D =
parent.tagName.toUpperCase();=0A=
=0A=
    if (Element._insertionTranslations.tags[tagName]) {=0A=
      var nextSibling =3D element.next();=0A=
      var fragments =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
      parent.removeChild(element);=0A=
      if (nextSibling)=0A=
        fragments.each(function(node) { parent.insertBefore(node, =
nextSibling) });=0A=
      else=0A=
        fragments.each(function(node) { parent.appendChild(node) });=0A=
    }=0A=
    else element.outerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
Element._returnOffset =3D function(l, t) {=0A=
  var result =3D [l, t];=0A=
  result.left =3D l;=0A=
  result.top =3D t;=0A=
  return result;=0A=
};=0A=
=0A=
Element._getContentFromAnonymousElement =3D function(tagName, html) {=0A=
  var div =3D new Element('div'), t =3D =
Element._insertionTranslations.tags[tagName];=0A=
  if (t) {=0A=
    div.innerHTML =3D t[0] + html + t[1];=0A=
    t[2].times(function() { div =3D div.firstChild });=0A=
  } else div.innerHTML =3D html;=0A=
  return $A(div.childNodes);=0A=
};=0A=
=0A=
Element._insertionTranslations =3D {=0A=
  before: function(element, node) {=0A=
    element.parentNode.insertBefore(node, element);=0A=
  },=0A=
  top: function(element, node) {=0A=
    element.insertBefore(node, element.firstChild);=0A=
  },=0A=
  bottom: function(element, node) {=0A=
    element.appendChild(node);=0A=
  },=0A=
  after: function(element, node) {=0A=
    element.parentNode.insertBefore(node, element.nextSibling);=0A=
  },=0A=
  tags: {=0A=
    TABLE:  ['<table>',                '</table>',                   1],=0A=
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],=0A=
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],=0A=
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],=0A=
    SELECT: ['<select>',               '</select>',                  1]=0A=
  }=0A=
};=0A=
=0A=
(function() {=0A=
  Object.extend(this.tags, {=0A=
    THEAD: this.tags.TBODY,=0A=
    TFOOT: this.tags.TBODY,=0A=
    TH:    this.tags.TD=0A=
  });=0A=
}).call(Element._insertionTranslations);=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    attribute =3D Element._attributeTranslations.has[attribute] || =
attribute;=0A=
    var node =3D $(element).getAttributeNode(attribute);=0A=
    return node && node.specified;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.ByTag =3D { };=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
if (!Prototype.BrowserFeatures.ElementExtensions &&=0A=
    document.createElement('div').__proto__) {=0A=
  window.HTMLElement =3D { };=0A=
  window.HTMLElement.prototype =3D =
document.createElement('div').__proto__;=0A=
  Prototype.BrowserFeatures.ElementExtensions =3D true;=0A=
}=0A=
=0A=
Element.extend =3D (function() {=0A=
  if (Prototype.BrowserFeatures.SpecificElementExtensions)=0A=
    return Prototype.K;=0A=
=0A=
  var Methods =3D { }, ByTag =3D Element.Methods.ByTag;=0A=
=0A=
  var extend =3D Object.extend(function(element) {=0A=
    if (!element || element._extendedByPrototype ||=0A=
        element.nodeType !=3D 1 || element =3D=3D window) return element;=0A=
=0A=
    var methods =3D Object.clone(Methods),=0A=
      tagName =3D element.tagName, property, value;=0A=
=0A=
    // extend methods for specific tags=0A=
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);=0A=
=0A=
    for (property in methods) {=0A=
      value =3D methods[property];=0A=
      if (Object.isFunction(value) && !(property in element))=0A=
        element[property] =3D value.methodize();=0A=
    }=0A=
=0A=
    element._extendedByPrototype =3D Prototype.emptyFunction;=0A=
    return element;=0A=
=0A=
  }, {=0A=
    refresh: function() {=0A=
      // extend methods for all tags (Safari doesn't need this)=0A=
      if (!Prototype.BrowserFeatures.ElementExtensions) {=0A=
        Object.extend(Methods, Element.Methods);=0A=
        Object.extend(Methods, Element.Methods.Simulated);=0A=
      }=0A=
    }=0A=
  });=0A=
=0A=
  extend.refresh();=0A=
  return extend;=0A=
})();=0A=
=0A=
Element.hasAttribute =3D function(element, attribute) {=0A=
  if (element.hasAttribute) return element.hasAttribute(attribute);=0A=
  return Element.Methods.Simulated.hasAttribute(element, attribute);=0A=
};=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=0A=
=0A=
  if (!methods) {=0A=
    Object.extend(Form, Form.Methods);=0A=
    Object.extend(Form.Element, Form.Element.Methods);=0A=
    Object.extend(Element.Methods.ByTag, {=0A=
      "FORM":     Object.clone(Form.Methods),=0A=
      "INPUT":    Object.clone(Form.Element.Methods),=0A=
      "SELECT":   Object.clone(Form.Element.Methods),=0A=
      "TEXTAREA": Object.clone(Form.Element.Methods)=0A=
    });=0A=
  }=0A=
=0A=
  if (arguments.length =3D=3D 2) {=0A=
    var tagName =3D methods;=0A=
    methods =3D arguments[1];=0A=
  }=0A=
=0A=
  if (!tagName) Object.extend(Element.Methods, methods || { });=0A=
  else {=0A=
    if (Object.isArray(tagName)) tagName.each(extend);=0A=
    else extend(tagName);=0A=
  }=0A=
=0A=
  function extend(tagName) {=0A=
    tagName =3D tagName.toUpperCase();=0A=
    if (!Element.Methods.ByTag[tagName])=0A=
      Element.Methods.ByTag[tagName] =3D { };=0A=
    Object.extend(Element.Methods.ByTag[tagName], methods);=0A=
  }=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!Object.isFunction(value)) continue;=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D value.methodize();=0A=
    }=0A=
  }=0A=
=0A=
  function findDOMClass(tagName) {=0A=
    var klass;=0A=
    var trans =3D {=0A=
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",=0A=
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",=0A=
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",=0A=
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",=0A=
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":=0A=
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":=0A=
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":=0A=
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":=0A=
      "FrameSet", "IFRAME": "IFrame"=0A=
    };=0A=
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName.capitalize() + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
=0A=
    window[klass] =3D { };=0A=
    window[klass].prototype =3D =
document.createElement(tagName).__proto__;=0A=
    return window[klass];=0A=
  }=0A=
=0A=
  if (F.ElementExtensions) {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
  }=0A=
=0A=
  if (F.SpecificElementExtensions) {=0A=
    for (var tag in Element.Methods.ByTag) {=0A=
      var klass =3D findDOMClass(tag);=0A=
      if (Object.isUndefined(klass)) continue;=0A=
      copy(T[tag], klass.prototype);=0A=
    }=0A=
  }=0A=
=0A=
  Object.extend(Element, Element.Methods);=0A=
  delete Element.ByTag;=0A=
=0A=
  if (Element.extend.refresh) Element.extend.refresh();=0A=
  Element.cache =3D { };=0A=
};=0A=
=0A=
document.viewport =3D {=0A=
  getDimensions: function() {=0A=
    var dimensions =3D { };=0A=
    var B =3D Prototype.Browser;=0A=
    $w('width height').each(function(d) {=0A=
      var D =3D d.capitalize();=0A=
      dimensions[d] =3D (B.WebKit && !document.evaluate) ? self['inner' =
+ D] :=0A=
        (B.Opera) ? document.body['client' + D] : =
document.documentElement['client' + D];=0A=
    });=0A=
    return dimensions;=0A=
  },=0A=
=0A=
  getWidth: function() {=0A=
    return this.getDimensions().width;=0A=
  },=0A=
=0A=
  getHeight: function() {=0A=
    return this.getDimensions().height;=0A=
  },=0A=
=0A=
  getScrollOffsets: function() {=0A=
    return Element._returnOffset(=0A=
      window.pageXOffset || document.documentElement.scrollLeft || =
document.body.scrollLeft,=0A=
      window.pageYOffset || document.documentElement.scrollTop || =
document.body.scrollTop);=0A=
  }=0A=
};=0A=
/* Portions of the Selector class are derived from Jack Slocum=E2=80=99s =
DomQuery,=0A=
 * part of YUI-Ext version 0.40, distributed under the terms of an =
MIT-style=0A=
 * license.  Please see http://www.yui-ext.com/ for more information. */=0A=
=0A=
var Selector =3D Class.create({=0A=
  initialize: function(expression) {=0A=
    this.expression =3D expression.strip();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  shouldUseXPath: function() {=0A=
    if (!Prototype.BrowserFeatures.XPath) return false;=0A=
=0A=
    var e =3D this.expression;=0A=
=0A=
    // Safari 3 chokes on :*-of-type and :empty=0A=
    if (Prototype.Browser.WebKit &&=0A=
     (e.include("-of-type") || e.include(":empty")))=0A=
      return false;=0A=
=0A=
    // XPath can't do namespaced attributes, nor can it read=0A=
    // the "checked" property from DOM nodes=0A=
    if ((/(\[[\w-]*?:|:checked)/).test(this.expression))=0A=
      return false;=0A=
=0A=
    return true;=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    if (this.shouldUseXPath())=0A=
      return this.compileXPathMatcher();=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,=0A=
        c =3D Selector.criteria, le, p, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.matcher =3D Selector._cache[e];=0A=
      return;=0A=
    }=0A=
=0A=
    this.matcher =3D ["this.matcher =3D function(root) {",=0A=
                    "var r =3D root, h =3D Selector.handlers, c =3D =
false, n;"];=0A=
=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :=0A=
    	      new Template(c[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.matcher.push("return h.unique(n);\n}");=0A=
    eval(this.matcher.join('\n'));=0A=
    Selector._cache[this.expression] =3D this.matcher;=0A=
  },=0A=
=0A=
  compileXPathMatcher: function() {=0A=
    var e =3D this.expression, ps =3D Selector.patterns,=0A=
        x =3D Selector.xpath, le, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.xpath =3D Selector._cache[e]; return;=0A=
    }=0A=
=0A=
    this.matcher =3D ['.//*'];=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        if (m =3D e.match(ps[i])) {=0A=
          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :=0A=
            new Template(x[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.xpath =3D this.matcher.join('');=0A=
    Selector._cache[this.expression] =3D this.xpath;=0A=
  },=0A=
=0A=
  findElements: function(root) {=0A=
    root =3D root || document;=0A=
    if (this.xpath) return document._getElementsByXPath(this.xpath, =
root);=0A=
    return this.matcher(root);=0A=
  },=0A=
=0A=
  match: function(element) {=0A=
    this.tokens =3D [];=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, as =3D =
Selector.assertions;=0A=
    var le, p, m;=0A=
=0A=
    while (e && le !=3D=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          // use the Selector.assertions methods unless the selector=0A=
          // is too complex.=0A=
          if (as[i]) {=0A=
            this.tokens.push([i, Object.clone(m)]);=0A=
            e =3D e.replace(m[0], '');=0A=
          } else {=0A=
            // reluctantly do a document-wide search=0A=
            // and look for a match in the array=0A=
            return this.findElements(document).include(element);=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    var match =3D true, name, matches;=0A=
    for (var i =3D 0, token; token =3D this.tokens[i]; i++) {=0A=
      name =3D token[0], matches =3D token[1];=0A=
      if (!Selector.assertions[name](element, matches)) {=0A=
        match =3D false; break;=0A=
      }=0A=
    }=0A=
=0A=
    return match;=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return "#<Selector:" + this.expression.inspect() + ">";=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Selector, {=0A=
  _cache: { },=0A=
=0A=
  xpath: {=0A=
    descendant:   "//*",=0A=
    child:        "/*",=0A=
    adjacent:     "/following-sibling::*[1]",=0A=
    laterSibling: '/following-sibling::*',=0A=
    tagName:      function(m) {=0A=
      if (m[1] =3D=3D '*') return '';=0A=
      return "[local-name()=3D'" + m[1].toLowerCase() +=0A=
             "' or local-name()=3D'" + m[1].toUpperCase() + "']";=0A=
    },=0A=
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",=0A=
    id:           "[@id=3D'#{1}']",=0A=
    attrPresence: function(m) {=0A=
      m[1] =3D m[1].toLowerCase();=0A=
      return new Template("[@#{1}]").evaluate(m);=0A=
    },=0A=
    attr: function(m) {=0A=
      m[1] =3D m[1].toLowerCase();=0A=
      m[3] =3D m[5] || m[6];=0A=
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      var h =3D Selector.xpath.pseudos[m[1]];=0A=
      if (!h) return '';=0A=
      if (Object.isFunction(h)) return h(m);=0A=
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);=0A=
    },=0A=
    operators: {=0A=
      '=3D':  "[@#{1}=3D'#{3}']",=0A=
      '!=3D': "[@#{1}!=3D'#{3}']",=0A=
      '^=3D': "[starts-with(@#{1}, '#{3}')]",=0A=
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",=0A=
      '*=3D': "[contains(@#{1}, '#{3}')]",=0A=
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",=0A=
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"=0A=
    },=0A=
    pseudos: {=0A=
      'first-child': '[not(preceding-sibling::*)]',=0A=
      'last-child':  '[not(following-sibling::*)]',=0A=
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',=0A=
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",=0A=
      'checked':     "[@checked]",=0A=
      'disabled':    "[@disabled]",=0A=
      'enabled':     "[not(@disabled)]",=0A=
      'not': function(m) {=0A=
        var e =3D m[6], p =3D Selector.patterns,=0A=
            x =3D Selector.xpath, le, v;=0A=
=0A=
        var exclusion =3D [];=0A=
        while (e && le !=3D e && (/\S/).test(e)) {=0A=
          le =3D e;=0A=
          for (var i in p) {=0A=
            if (m =3D e.match(p[i])) {=0A=
              v =3D Object.isFunction(x[i]) ? x[i](m) : new =
Template(x[i]).evaluate(m);=0A=
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");=0A=
              e =3D e.replace(m[0], '');=0A=
              break;=0A=
            }=0A=
          }=0A=
        }=0A=
        return "[not(" + exclusion.join(" and ") + ")]";=0A=
      },=0A=
      'nth-child':      function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-last-child': function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-of-type':    function(m) {=0A=
        return Selector.xpath.pseudos.nth("position() ", m);=0A=
      },=0A=
      'nth-last-of-type': function(m) {=0A=
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", =
m);=0A=
      },=0A=
      'first-of-type':  function(m) {=0A=
        m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);=0A=
      },=0A=
      'last-of-type':   function(m) {=0A=
        m[6] =3D "1"; return =
Selector.xpath.pseudos['nth-last-of-type'](m);=0A=
      },=0A=
      'only-of-type':   function(m) {=0A=
        var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + =
p['last-of-type'](m);=0A=
      },=0A=
      nth: function(fragment, m) {=0A=
        var mm, formula =3D m[6], predicate;=0A=
        if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
        if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
        if (mm =3D formula.match(/^(\d+)$/)) // digit only=0A=
          return '[' + fragment + "=3D " + mm[1] + ']';=0A=
        if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b=0A=
          if (mm[1] =3D=3D "-") mm[1] =3D -1;=0A=
          var a =3D mm[1] ? Number(mm[1]) : 1;=0A=
          var b =3D mm[2] ? Number(mm[2]) : 0;=0A=
          predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +=0A=
          "((#{fragment} - #{b}) div #{a} >=3D 0)]";=0A=
          return new Template(predicate).evaluate({=0A=
            fragment: fragment, a: a, b: b });=0A=
        }=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  criteria: {=0A=
    tagName:      'n =3D h.tagName(n, r, "#{1}", c);      c =3D false;',=0A=
    className:    'n =3D h.className(n, r, "#{1}", c);    c =3D false;',=0A=
    id:           'n =3D h.id(n, r, "#{1}", c);           c =3D false;',=0A=
    attrPresence: 'n =3D h.attrPresence(n, r, "#{1}", c); c =3D false;',=0A=
    attr: function(m) {=0A=
      m[3] =3D (m[5] || m[6]);=0A=
      return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}", =
c); c =3D false;').evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');=0A=
      return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);=0A=
    },=0A=
    descendant:   'c =3D "descendant";',=0A=
    child:        'c =3D "child";',=0A=
    adjacent:     'c =3D "adjacent";',=0A=
    laterSibling: 'c =3D "laterSibling";'=0A=
  },=0A=
=0A=
  patterns: {=0A=
    // combinators must be listed first=0A=
    // (and descendant needs to be last combinator)=0A=
    laterSibling: /^\s*~\s*/,=0A=
    child:        /^\s*>\s*/,=0A=
    adjacent:     /^\s*\+\s*/,=0A=
    descendant:   /^\s/,=0A=
=0A=
    // selectors follow=0A=
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,=0A=
    id:           /^#([\w\-\*]+)(\b|$)/,=0A=
    className:    /^\.([\w\-\*]+)(\b|$)/,=0A=
    pseudo:=0A=
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|(?=3D\s|[:+~>]))/,=0A=
    attrPresence: /^\[([\w]+)\]/,=0A=
    attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\4]*?)\4|([^'"][^=
\]]*?)))?\]/=0A=
  },=0A=
=0A=
  // for Selector.match and Element#match=0A=
  assertions: {=0A=
    tagName: function(element, matches) {=0A=
      return matches[1].toUpperCase() =3D=3D =
element.tagName.toUpperCase();=0A=
    },=0A=
=0A=
    className: function(element, matches) {=0A=
      return Element.hasClassName(element, matches[1]);=0A=
    },=0A=
=0A=
    id: function(element, matches) {=0A=
      return element.id =3D=3D=3D matches[1];=0A=
    },=0A=
=0A=
    attrPresence: function(element, matches) {=0A=
      return Element.hasAttribute(element, matches[1]);=0A=
    },=0A=
=0A=
    attr: function(element, matches) {=0A=
      var nodeValue =3D Element.readAttribute(element, matches[1]);=0A=
      return nodeValue && Selector.operators[matches[2]](nodeValue, =
matches[5] || matches[6]);=0A=
    }=0A=
  },=0A=
=0A=
  handlers: {=0A=
    // UTILITY FUNCTIONS=0A=
    // joins two collections=0A=
    concat: function(a, b) {=0A=
      for (var i =3D 0, node; node =3D b[i]; i++)=0A=
        a.push(node);=0A=
      return a;=0A=
    },=0A=
=0A=
    // marks an array of nodes for counting=0A=
    mark: function(nodes) {=0A=
      var _true =3D Prototype.emptyFunction;=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._countedByPrototype =3D _true;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    unmark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._countedByPrototype =3D undefined;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    // mark each child node with its position (for nth calls)=0A=
    // "ofType" flag indicates whether we're indexing for nth-of-type=0A=
    // rather than nth-child=0A=
    index: function(parentNode, reverse, ofType) {=0A=
      parentNode._countedByPrototype =3D Prototype.emptyFunction;=0A=
      if (reverse) {=0A=
        for (var nodes =3D parentNode.childNodes, i =3D nodes.length - =
1, j =3D 1; i >=3D 0; i--) {=0A=
          var node =3D nodes[i];=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || =
node._countedByPrototype)) node.nodeIndex =3D j++;=0A=
        }=0A=
      } else {=0A=
        for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node =
=3D nodes[i]; i++)=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || =
node._countedByPrototype)) node.nodeIndex =3D j++;=0A=
      }=0A=
    },=0A=
=0A=
    // filters out duplicates and extends all nodes=0A=
    unique: function(nodes) {=0A=
      if (nodes.length =3D=3D 0) return nodes;=0A=
      var results =3D [], n;=0A=
      for (var i =3D 0, l =3D nodes.length; i < l; i++)=0A=
        if (!(n =3D nodes[i])._countedByPrototype) {=0A=
          n._countedByPrototype =3D Prototype.emptyFunction;=0A=
          results.push(Element.extend(n));=0A=
        }=0A=
      return Selector.handlers.unmark(results);=0A=
    },=0A=
=0A=
    // COMBINATOR FUNCTIONS=0A=
    descendant: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, node.getElementsByTagName('*'));=0A=
      return results;=0A=
    },=0A=
=0A=
    child: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        for (var j =3D 0, child; child =3D node.childNodes[j]; j++)=0A=
          if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') =
results.push(child);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    adjacent: function(nodes) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        var next =3D this.nextElementSibling(node);=0A=
        if (next) results.push(next);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    laterSibling: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, Element.nextSiblings(node));=0A=
      return results;=0A=
    },=0A=
=0A=
    nextElementSibling: function(node) {=0A=
      while (node =3D node.nextSibling)=0A=
	      if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    previousElementSibling: function(node) {=0A=
      while (node =3D node.previousSibling)=0A=
        if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    // TOKEN FUNCTIONS=0A=
    tagName: function(nodes, root, tagName, combinator) {=0A=
      var uTagName =3D tagName.toUpperCase();=0A=
      var results =3D [], h =3D Selector.handlers;=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          // fastlane for ordinary descendant combinators=0A=
          if (combinator =3D=3D "descendant") {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              h.concat(results, node.getElementsByTagName(tagName));=0A=
            return results;=0A=
          } else nodes =3D this[combinator](nodes);=0A=
          if (tagName =3D=3D "*") return nodes;=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.tagName.toUpperCase() =3D=3D=3D uTagName) =
results.push(node);=0A=
        return results;=0A=
      } else return root.getElementsByTagName(tagName);=0A=
    },=0A=
=0A=
    id: function(nodes, root, id, combinator) {=0A=
      var targetNode =3D $(id), h =3D Selector.handlers;=0A=
      if (!targetNode) return [];=0A=
      if (!nodes && root =3D=3D document) return [targetNode];=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          if (combinator =3D=3D 'child') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (targetNode.parentNode =3D=3D node) return [targetNode];=0A=
          } else if (combinator =3D=3D 'descendant') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Element.descendantOf(targetNode, node)) return =
[targetNode];=0A=
          } else if (combinator =3D=3D 'adjacent') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Selector.handlers.previousElementSibling(targetNode) =
=3D=3D node)=0A=
                return [targetNode];=0A=
          } else nodes =3D h[combinator](nodes);=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node =3D=3D targetNode) return [targetNode];=0A=
        return [];=0A=
      }=0A=
      return (targetNode && Element.descendantOf(targetNode, root)) ? =
[targetNode] : [];=0A=
    },=0A=
=0A=
    className: function(nodes, root, className, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      return Selector.handlers.byClassName(nodes, root, className);=0A=
    },=0A=
=0A=
    byClassName: function(nodes, root, className) {=0A=
      if (!nodes) nodes =3D Selector.handlers.descendant([root]);=0A=
      var needle =3D ' ' + className + ' ';=0A=
      for (var i =3D 0, results =3D [], node, nodeClassName; node =3D =
nodes[i]; i++) {=0A=
        nodeClassName =3D node.className;=0A=
        if (nodeClassName.length =3D=3D 0) continue;=0A=
        if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' =
').include(needle))=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    attrPresence: function(nodes, root, attr, combinator) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      var results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        if (Element.hasAttribute(node, attr)) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    attr: function(nodes, root, attr, value, operator, combinator) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      var handler =3D Selector.operators[operator], results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        var nodeValue =3D Element.readAttribute(node, attr);=0A=
        if (nodeValue =3D=3D=3D null) continue;=0A=
        if (handler(nodeValue, value)) results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    pseudo: function(nodes, name, value, root, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      return Selector.pseudos[name](nodes, value, root);=0A=
    }=0A=
  },=0A=
=0A=
  pseudos: {=0A=
    'first-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.previousElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'last-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.nextElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'only-child': function(nodes, value, root) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!h.previousElementSibling(node) && =
!h.nextElementSibling(node))=0A=
          results.push(node);=0A=
      return results;=0A=
    },=0A=
    'nth-child':        function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root);=0A=
    },=0A=
    'nth-last-child':   function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true);=0A=
    },=0A=
    'nth-of-type':      function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, false, true);=0A=
    },=0A=
    'nth-last-of-type': function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true, true);=0A=
    },=0A=
    'first-of-type':    function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, false, true);=0A=
    },=0A=
    'last-of-type':     function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, true, true);=0A=
    },=0A=
    'only-of-type':     function(nodes, formula, root) {=0A=
      var p =3D Selector.pseudos;=0A=
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), =
formula, root);=0A=
    },=0A=
=0A=
    // handles the an+b logic=0A=
    getIndices: function(a, b, total) {=0A=
      if (a =3D=3D 0) return b > 0 ? [b] : [];=0A=
      return $R(1, total).inject([], function(memo, i) {=0A=
        if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);=0A=
        return memo;=0A=
      });=0A=
    },=0A=
=0A=
    // handles nth(-last)-child, nth(-last)-of-type, and =
(first|last)-of-type=0A=
    nth: function(nodes, formula, root, reverse, ofType) {=0A=
      if (nodes.length =3D=3D 0) return [];=0A=
      if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
      if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
      var h =3D Selector.handlers, results =3D [], indexed =3D [], m;=0A=
      h.mark(nodes);=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        if (!node.parentNode._countedByPrototype) {=0A=
          h.index(node.parentNode, reverse, ofType);=0A=
          indexed.push(node.parentNode);=0A=
        }=0A=
      }=0A=
      if (formula.match(/^\d+$/)) { // just a number=0A=
        formula =3D Number(formula);=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.nodeIndex =3D=3D formula) results.push(node);=0A=
      } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // =
an+b=0A=
        if (m[1] =3D=3D "-") m[1] =3D -1;=0A=
        var a =3D m[1] ? Number(m[1]) : 1;=0A=
        var b =3D m[2] ? Number(m[2]) : 0;=0A=
        var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);=0A=
        for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; =
i++) {=0A=
          for (var j =3D 0; j < l; j++)=0A=
            if (node.nodeIndex =3D=3D indices[j]) results.push(node);=0A=
        }=0A=
      }=0A=
      h.unmark(nodes);=0A=
      h.unmark(indexed);=0A=
      return results;=0A=
    },=0A=
=0A=
    'empty': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        // IE treats comments as element nodes=0A=
        if (node.tagName =3D=3D '!' || (node.firstChild && =
!node.innerHTML.match(/^\s*$/))) continue;=0A=
        results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    'not': function(nodes, selector, root) {=0A=
      var h =3D Selector.handlers, selectorType, m;=0A=
      var exclusions =3D new Selector(selector).findElements(root);=0A=
      h.mark(exclusions);=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node._countedByPrototype) results.push(node);=0A=
      h.unmark(exclusions);=0A=
      return results;=0A=
    },=0A=
=0A=
    'enabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'disabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'checked': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.checked) results.push(node);=0A=
      return results;=0A=
    }=0A=
  },=0A=
=0A=
  operators: {=0A=
    '=3D':  function(nv, v) { return nv =3D=3D v; },=0A=
    '!=3D': function(nv, v) { return nv !=3D v; },=0A=
    '^=3D': function(nv, v) { return nv.startsWith(v); },=0A=
    '$=3D': function(nv, v) { return nv.endsWith(v); },=0A=
    '*=3D': function(nv, v) { return nv.include(v); },=0A=
    '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + =
' '); },=0A=
    '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + =
'-').include('-' + v.toUpperCase() + '-'); }=0A=
  },=0A=
=0A=
  split: function(expression) {=0A=
    var expressions =3D [];=0A=
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, =
function(m) {=0A=
      expressions.push(m[1].strip());=0A=
    });=0A=
    return expressions;=0A=
  },=0A=
=0A=
  matchElements: function(elements, expression) {=0A=
    var matches =3D $$(expression), h =3D Selector.handlers;=0A=
    h.mark(matches);=0A=
    for (var i =3D 0, results =3D [], element; element =3D elements[i]; =
i++)=0A=
      if (element._countedByPrototype) results.push(element);=0A=
    h.unmark(matches);=0A=
    return results;=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (Object.isNumber(expression)) {=0A=
      index =3D expression; expression =3D false;=0A=
    }=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    expressions =3D Selector.split(expressions.join(','));=0A=
    var results =3D [], h =3D Selector.handlers;=0A=
    for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {=0A=
      selector =3D new Selector(expressions[i].strip());=0A=
      h.concat(results, selector.findElements(element));=0A=
    }=0A=
    return (l > 1) ? h.unique(results) : results;=0A=
  }=0A=
});=0A=
=0A=
if (Prototype.Browser.IE) {=0A=
  Object.extend(Selector.handlers, {=0A=
    // IE returns comment nodes on getElementsByTagName("*").=0A=
    // Filter them out.=0A=
    concat: function(a, b) {=0A=
      for (var i =3D 0, node; node =3D b[i]; i++)=0A=
        if (node.tagName !=3D=3D "!") a.push(node);=0A=
      return a;=0A=
    },=0A=
=0A=
    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.=0A=
    unmark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node.removeAttribute('_countedByPrototype');=0A=
      return nodes;=0A=
    }=0A=
  });=0A=
}=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, options) {=0A=
    if (typeof options !=3D 'object') options =3D { hash: !!options };=0A=
    else if (Object.isUndefined(options.hash)) options.hash =3D true;=0A=
    var key, value, submitted =3D false, submit =3D options.submit;=0A=
=0A=
    var data =3D elements.inject({ }, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        key =3D element.name; value =3D $(element).getValue();=0A=
        if (value !=3D null && (element.type !=3D 'submit' || =
(!submitted &&=0A=
            submit !=3D=3D false && (!submit || key =3D=3D submit) && =
(submitted =3D true)))) {=0A=
          if (key in result) {=0A=
            // a key is already present; construct an array of values=0A=
            if (!Object.isArray(result[key])) result[key] =3D =
[result[key]];=0A=
            result[key].push(value);=0A=
          }=0A=
          else result[key] =3D value;=0A=
        }=0A=
      }=0A=
      return result;=0A=
    });=0A=
=0A=
    return options.hash ? data : Object.toQueryString(data);=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, options) {=0A=
    return Form.serializeElements(Form.getElements(form), options);=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    return $A($(form).getElementsByTagName('*')).inject([],=0A=
      function(elements, child) {=0A=
        if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
          elements.push(Element.extend(child));=0A=
        return elements;=0A=
      }=0A=
    );=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
    if (!typeName && !name) return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('disable');=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('enable');=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    var elements =3D $(form).getElements().findAll(function(element) {=0A=
      return 'hidden' !=3D element.type && !element.disabled;=0A=
    });=0A=
    var firstByIndex =3D elements.findAll(function(element) {=0A=
      return element.hasAttribute('tabIndex') && element.tabIndex >=3D 0;=0A=
    }).sortBy(function(element) { return element.tabIndex }).first();=0A=
=0A=
    return firstByIndex ? firstByIndex : elements.find(function(element) =
{=0A=
      return ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  },=0A=
=0A=
  request: function(form, options) {=0A=
    form =3D $(form), options =3D Object.clone(options || { });=0A=
=0A=
    var params =3D options.parameters, action =3D =
form.readAttribute('action') || '';=0A=
    if (action.blank()) action =3D window.location.href;=0A=
    options.parameters =3D form.serialize(true);=0A=
=0A=
    if (params) {=0A=
      if (Object.isString(params)) params =3D params.toQueryParams();=0A=
      Object.extend(options.parameters, params);=0A=
    }=0A=
=0A=
    if (form.hasAttribute('method') && !options.method)=0A=
      options.method =3D form.method;=0A=
=0A=
    return new Ajax.Request(action, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && element.name) {=0A=
      var value =3D element.getValue();=0A=
      if (value !=3D undefined) {=0A=
        var pair =3D { };=0A=
        pair[element.name] =3D value;=0A=
        return Object.toQueryString(pair);=0A=
      }=0A=
    }=0A=
    return '';=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    return Form.Element.Serializers[method](element);=0A=
  },=0A=
=0A=
  setValue: function(element, value) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    Form.Element.Serializers[method](element, value);=0A=
    return element;=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    try {=0A=
      element.focus();=0A=
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||=0A=
          !['button', 'reset', 'submit'].include(element.type)))=0A=
        element.select();=0A=
    } catch (e) { }=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.Methods.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element, value) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element, value);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element, value);=0A=
    }=0A=
  },=0A=
=0A=
  inputSelector: function(element, value) {=0A=
    if (Object.isUndefined(value)) return element.checked ? =
element.value : null;=0A=
    else element.checked =3D !!value;=0A=
  },=0A=
=0A=
  textarea: function(element, value) {=0A=
    if (Object.isUndefined(value)) return element.value;=0A=
    else element.value =3D value;=0A=
  },=0A=
=0A=
  select: function(element, index) {=0A=
    if (Object.isUndefined(index))=0A=
      return this[element.type =3D=3D 'select-one' ?=0A=
        'selectOne' : 'selectMany'](element);=0A=
    else {=0A=
      var opt, value, single =3D !Object.isArray(index);=0A=
      for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
        opt =3D element.options[i];=0A=
        value =3D this.optionValue(opt);=0A=
        if (single) {=0A=
          if (value =3D=3D index) {=0A=
            opt.selected =3D true;=0A=
            return;=0A=
          }=0A=
        }=0A=
        else opt.selected =3D index.include(value);=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  selectOne: function(element) {=0A=
    var index =3D element.selectedIndex;=0A=
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;=0A=
  },=0A=
=0A=
  selectMany: function(element) {=0A=
    var values, length =3D element.length;=0A=
    if (!length) return null;=0A=
=0A=
    for (var i =3D 0, values =3D []; i < length; i++) {=0A=
      var opt =3D element.options[i];=0A=
      if (opt.selected) values.push(this.optionValue(opt));=0A=
    }=0A=
    return values;=0A=
  },=0A=
=0A=
  optionValue: function(opt) {=0A=
    // extend element because hasAttribute may not be native=0A=
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D Class.create(PeriodicalExecuter, {=0A=
  initialize: function($super, element, frequency, callback) {=0A=
    $super(callback, frequency);=0A=
    this.element   =3D $(element);=0A=
    this.lastValue =3D this.getValue();=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    var value =3D this.getValue();=0A=
    if (Object.isString(this.lastValue) && Object.isString(value) ?=0A=
        this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value)) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D Class.create({=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    Form.getElements(this.element).each(this.registerCallback, this);=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) var Event =3D { };=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
  KEY_INSERT:   45,=0A=
=0A=
  cache: { },=0A=
=0A=
  relatedTarget: function(event) {=0A=
    var element;=0A=
    switch(event.type) {=0A=
      case 'mouseover': element =3D event.fromElement; break;=0A=
      case 'mouseout':  element =3D event.toElement;   break;=0A=
      default: return null;=0A=
    }=0A=
    return Element.extend(element);=0A=
  }=0A=
});=0A=
=0A=
Event.Methods =3D (function() {=0A=
  var isButton;=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    var buttonMap =3D { 0: 1, 1: 4, 2: 2 };=0A=
    isButton =3D function(event, code) {=0A=
      return event.button =3D=3D buttonMap[code];=0A=
    };=0A=
=0A=
  } else if (Prototype.Browser.WebKit) {=0A=
    isButton =3D function(event, code) {=0A=
      switch (code) {=0A=
        case 0: return event.which =3D=3D 1 && !event.metaKey;=0A=
        case 1: return event.which =3D=3D 1 && event.metaKey;=0A=
        default: return false;=0A=
      }=0A=
    };=0A=
=0A=
  } else {=0A=
    isButton =3D function(event, code) {=0A=
      return event.which ? (event.which =3D=3D=3D code + 1) : =
(event.button =3D=3D=3D code);=0A=
    };=0A=
  }=0A=
=0A=
  return {=0A=
    isLeftClick:   function(event) { return isButton(event, 0) },=0A=
    isMiddleClick: function(event) { return isButton(event, 1) },=0A=
    isRightClick:  function(event) { return isButton(event, 2) },=0A=
=0A=
    element: function(event) {=0A=
      var node =3D Event.extend(event).target;=0A=
      return Element.extend(node.nodeType =3D=3D Node.TEXT_NODE ? =
node.parentNode : node);=0A=
    },=0A=
=0A=
    findElement: function(event, expression) {=0A=
      var element =3D Event.element(event);=0A=
      if (!expression) return element;=0A=
      var elements =3D [element].concat(element.ancestors());=0A=
      return Selector.findElement(elements, expression, 0);=0A=
    },=0A=
=0A=
    pointer: function(event) {=0A=
      return {=0A=
        x: event.pageX || (event.clientX +=0A=
          (document.documentElement.scrollLeft || =
document.body.scrollLeft)),=0A=
        y: event.pageY || (event.clientY +=0A=
          (document.documentElement.scrollTop || =
document.body.scrollTop))=0A=
      };=0A=
    },=0A=
=0A=
    pointerX: function(event) { return Event.pointer(event).x },=0A=
    pointerY: function(event) { return Event.pointer(event).y },=0A=
=0A=
    stop: function(event) {=0A=
      Event.extend(event);=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
      event.stopped =3D true;=0A=
    }=0A=
  };=0A=
})();=0A=
=0A=
Event.extend =3D (function() {=0A=
  var methods =3D Object.keys(Event.Methods).inject({ }, function(m, =
name) {=0A=
    m[name] =3D Event.Methods[name].methodize();=0A=
    return m;=0A=
  });=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    Object.extend(methods, {=0A=
      stopPropagation: function() { this.cancelBubble =3D true },=0A=
      preventDefault:  function() { this.returnValue =3D false },=0A=
      inspect: function() { return "[object Event]" }=0A=
    });=0A=
=0A=
    return function(event) {=0A=
      if (!event) return false;=0A=
      if (event._extendedByPrototype) return event;=0A=
=0A=
      event._extendedByPrototype =3D Prototype.emptyFunction;=0A=
      var pointer =3D Event.pointer(event);=0A=
      Object.extend(event, {=0A=
        target: event.srcElement,=0A=
        relatedTarget: Event.relatedTarget(event),=0A=
        pageX:  pointer.x,=0A=
        pageY:  pointer.y=0A=
      });=0A=
      return Object.extend(event, methods);=0A=
    };=0A=
=0A=
  } else {=0A=
    Event.prototype =3D Event.prototype || =
document.createEvent("HTMLEvents").__proto__;=0A=
    Object.extend(Event.prototype, methods);=0A=
    return Prototype.K;=0A=
  }=0A=
})();=0A=
=0A=
Object.extend(Event, (function() {=0A=
  var cache =3D Event.cache;=0A=
=0A=
  function getEventID(element) {=0A=
    if (element._prototypeEventID) return element._prototypeEventID[0];=0A=
    arguments.callee.id =3D arguments.callee.id || 1;=0A=
    return element._prototypeEventID =3D [++arguments.callee.id];=0A=
  }=0A=
=0A=
  function getDOMEventName(eventName) {=0A=
    if (eventName && eventName.include(':')) return "dataavailable";=0A=
    return eventName;=0A=
  }=0A=
=0A=
  function getCacheForID(id) {=0A=
    return cache[id] =3D cache[id] || { };=0A=
  }=0A=
=0A=
  function getWrappersForEventName(id, eventName) {=0A=
    var c =3D getCacheForID(id);=0A=
    return c[eventName] =3D c[eventName] || [];=0A=
  }=0A=
=0A=
  function createWrapper(element, eventName, handler) {=0A=
    var id =3D getEventID(element);=0A=
    var c =3D getWrappersForEventName(id, eventName);=0A=
    if (c.pluck("handler").include(handler)) return false;=0A=
=0A=
    var wrapper =3D function(event) {=0A=
      if (!Event || !Event.extend ||=0A=
        (event.eventName && event.eventName !=3D eventName))=0A=
          return false;=0A=
=0A=
      Event.extend(event);=0A=
      handler.call(element, event);=0A=
    };=0A=
=0A=
    wrapper.handler =3D handler;=0A=
    c.push(wrapper);=0A=
    return wrapper;=0A=
  }=0A=
=0A=
  function findWrapper(id, eventName, handler) {=0A=
    var c =3D getWrappersForEventName(id, eventName);=0A=
    return c.find(function(wrapper) { return wrapper.handler =3D=3D =
handler });=0A=
  }=0A=
=0A=
  function destroyWrapper(id, eventName, handler) {=0A=
    var c =3D getCacheForID(id);=0A=
    if (!c[eventName]) return false;=0A=
    c[eventName] =3D c[eventName].without(findWrapper(id, eventName, =
handler));=0A=
  }=0A=
=0A=
  function destroyCache() {=0A=
    for (var id in cache)=0A=
      for (var eventName in cache[id])=0A=
        cache[id][eventName] =3D null;=0A=
  }=0A=
=0A=
  if (window.attachEvent) {=0A=
    window.attachEvent("onunload", destroyCache);=0A=
  }=0A=
=0A=
  return {=0A=
    observe: function(element, eventName, handler) {=0A=
      element =3D $(element);=0A=
      var name =3D getDOMEventName(eventName);=0A=
=0A=
      var wrapper =3D createWrapper(element, eventName, handler);=0A=
      if (!wrapper) return element;=0A=
=0A=
      if (element.addEventListener) {=0A=
        element.addEventListener(name, wrapper, false);=0A=
      } else {=0A=
        element.attachEvent("on" + name, wrapper);=0A=
      }=0A=
=0A=
      return element;=0A=
    },=0A=
=0A=
    stopObserving: function(element, eventName, handler) {=0A=
      element =3D $(element);=0A=
      var id =3D getEventID(element), name =3D =
getDOMEventName(eventName);=0A=
=0A=
      if (!handler && eventName) {=0A=
        getWrappersForEventName(id, eventName).each(function(wrapper) {=0A=
          element.stopObserving(eventName, wrapper.handler);=0A=
        });=0A=
        return element;=0A=
=0A=
      } else if (!eventName) {=0A=
        Object.keys(getCacheForID(id)).each(function(eventName) {=0A=
          element.stopObserving(eventName);=0A=
        });=0A=
        return element;=0A=
      }=0A=
=0A=
      var wrapper =3D findWrapper(id, eventName, handler);=0A=
      if (!wrapper) return element;=0A=
=0A=
      if (element.removeEventListener) {=0A=
        element.removeEventListener(name, wrapper, false);=0A=
      } else {=0A=
        element.detachEvent("on" + name, wrapper);=0A=
      }=0A=
=0A=
      destroyWrapper(id, eventName, handler);=0A=
=0A=
      return element;=0A=
    },=0A=
=0A=
    fire: function(element, eventName, memo) {=0A=
      element =3D $(element);=0A=
      if (element =3D=3D document && document.createEvent && =
!element.dispatchEvent)=0A=
        element =3D document.documentElement;=0A=
=0A=
      var event;=0A=
      if (document.createEvent) {=0A=
        event =3D document.createEvent("HTMLEvents");=0A=
        event.initEvent("dataavailable", true, true);=0A=
      } else {=0A=
        event =3D document.createEventObject();=0A=
        event.eventType =3D "ondataavailable";=0A=
      }=0A=
=0A=
      event.eventName =3D eventName;=0A=
      event.memo =3D memo || { };=0A=
=0A=
      if (document.createEvent) {=0A=
        element.dispatchEvent(event);=0A=
      } else {=0A=
        element.fireEvent(event.eventType, event);=0A=
      }=0A=
=0A=
      return Event.extend(event);=0A=
    }=0A=
  };=0A=
})());=0A=
=0A=
Object.extend(Event, Event.Methods);=0A=
=0A=
Element.addMethods({=0A=
  fire:          Event.fire,=0A=
  observe:       Event.observe,=0A=
  stopObserving: Event.stopObserving=0A=
});=0A=
=0A=
Object.extend(document, {=0A=
  fire:          Element.Methods.fire.methodize(),=0A=
  observe:       Element.Methods.observe.methodize(),=0A=
  stopObserving: Element.Methods.stopObserving.methodize(),=0A=
  loaded:        false=0A=
});=0A=
=0A=
(function() {=0A=
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,=0A=
     Matthias Miller, Dean Edwards and John Resig. */=0A=
=0A=
  var timer;=0A=
=0A=
  function fireContentLoadedEvent() {=0A=
    if (document.loaded) return;=0A=
    if (timer) window.clearInterval(timer);=0A=
    document.fire("dom:loaded");=0A=
    document.loaded =3D true;=0A=
  }=0A=
=0A=
  if (document.addEventListener) {=0A=
    if (Prototype.Browser.WebKit) {=0A=
      timer =3D window.setInterval(function() {=0A=
        if (/loaded|complete/.test(document.readyState))=0A=
          fireContentLoadedEvent();=0A=
      }, 0);=0A=
=0A=
      Event.observe(window, "load", fireContentLoadedEvent);=0A=
=0A=
    } else {=0A=
      document.addEventListener("DOMContentLoaded",=0A=
        fireContentLoadedEvent, false);=0A=
    }=0A=
=0A=
  } else {=0A=
    document.write("<script id=3D__onDOMContentLoaded defer =
src=3D//:><\/script>");=0A=
    $("__onDOMContentLoaded").onreadystatechange =3D function() {=0A=
      if (this.readyState =3D=3D "complete") {=0A=
        this.onreadystatechange =3D null;=0A=
        fireContentLoadedEvent();=0A=
      }=0A=
    };=0A=
  }=0A=
})();=0A=
/*------------------------------- DEPRECATED =
-------------------------------*/=0A=
=0A=
Hash.toQueryString =3D Object.toQueryString;=0A=
=0A=
var Toggle =3D { display: Element.toggle };=0A=
=0A=
Element.Methods.childOf =3D Element.Methods.descendantOf;=0A=
=0A=
var Insertion =3D {=0A=
  Before: function(element, content) {=0A=
    return Element.insert(element, {before:content});=0A=
  },=0A=
=0A=
  Top: function(element, content) {=0A=
    return Element.insert(element, {top:content});=0A=
  },=0A=
=0A=
  Bottom: function(element, content) {=0A=
    return Element.insert(element, {bottom:content});=0A=
  },=0A=
=0A=
  After: function(element, content) {=0A=
    return Element.insert(element, {after:content});=0A=
  }=0A=
};=0A=
=0A=
var $continue =3D new Error('"throw $continue" is deprecated, use =
"return" instead');=0A=
=0A=
// This should be moved to script.aculo.us; notice the deprecated methods=0A=
// further below, that map to the newer Element methods.=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=0A=
  // must be called before calling withinIncludingScrolloffset, every =
time the=0A=
  // page is scrolled=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D Element.cumulativeScrollOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  // within must be called directly before=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
  // Deprecation layer -- use newer Element methods now (1.5.2).=0A=
=0A=
  cumulativeOffset: Element.Methods.cumulativeOffset,=0A=
=0A=
  positionedOffset: Element.Methods.positionedOffset,=0A=
=0A=
  absolutize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.absolutize(element);=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.relativize(element);=0A=
  },=0A=
=0A=
  realOffset: Element.Methods.cumulativeScrollOffset,=0A=
=0A=
  offsetParent: Element.Methods.getOffsetParent,=0A=
=0A=
  page: Element.Methods.viewportOffset,=0A=
=0A=
  clone: function(source, target, options) {=0A=
    options =3D options || { };=0A=
    return Element.clonePosition(target, source, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!document.getElementsByClassName) document.getElementsByClassName =
=3D function(instanceMethods){=0A=
  function iter(name) {=0A=
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' =
" + name + " ')]";=0A=
  }=0A=
=0A=
  instanceMethods.getElementsByClassName =3D =
Prototype.BrowserFeatures.XPath ?=0A=
  function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var cond =3D /\s/.test(className) ? $w(className).map(iter).join('') =
: iter(className);=0A=
    return cond ? document._getElementsByXPath('.//*' + cond, element) : =
[];=0A=
  } : function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var elements =3D [], classNames =3D (/\s/.test(className) ? =
$w(className) : null);=0A=
    if (!classNames && !className) return elements;=0A=
=0A=
    var nodes =3D $(element).getElementsByTagName('*');=0A=
    className =3D ' ' + className + ' ';=0A=
=0A=
    for (var i =3D 0, child, cn; child =3D nodes[i]; i++) {=0A=
      if (child.className && (cn =3D ' ' + child.className + ' ') && =
(cn.include(className) ||=0A=
          (classNames && classNames.all(function(name) {=0A=
            return !name.toString().blank() && cn.include(' ' + name + ' =
');=0A=
          }))))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  };=0A=
=0A=
  return function(className, parentElement) {=0A=
    return $(parentElement || =
document.body).getElementsByClassName(className);=0A=
  };=0A=
}(Element.Methods);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0000_01CB1DE2.850A4BD0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.surveygold.com/js/bramus/jsProgressBarHandler.js

/*****************************************************************
 *
 * jsProgressBarHandler 0.3.1 - by Bramus! - http://www.bram.us/
 *
 * v 0.3.1 - 2008.02.20 - UPD: fixed queue bug when animate was set to =
false (thanks Jamie Chong)
 *                      - UPD: update Prototype to version 1.6.0.2
 * v 0.3.0 - 2008.02.01 - ADD: animation queue, prevents from the =
progressbar getting stuck when multiple calls are made during an =
animation
 *                      - UPD: multiple barImages now work properly in =
Safari
 * v 0.2.1 - 2007.12.20 - ADD: option : set boxImage
 *                        ADD: option : set barImage (one or more)
 *                        ADD: option : showText
 * v 0.2   - 2007.12.13 - SYS: rewrite in 2 classs including =
optimisations
 *                        ADD: Config options
 * v 0.1   - 2007.08.02 - initial release
 *
 * @see http://www.barenakedapp.com/the-design/displaying-percentages on =
how to create a progressBar Background Image!
 *
 * Licensed under the Creative Commons Attribution 2.5 License - =
http://creativecommons.org/licenses/by/2.5/
 *
 *****************************************************************/
=20
	=09
 /**
  * CONFIG
  * -------------------------------------------------------------
  */
 =20
 	// Should jsProgressBarHandler hook itself to all span.progressBar =
elements? - default : true
		var autoHook	=3D true;	=09
=20
 	// Default Options
		var defaultOptions =3D {
			animate		: false,										// Animate the progress? - default: true
			showText	: true,										// show text with percentage in next to the =
progressbar? - default : true
			width		: 120,										// Width of the progressbar - don't forget to =
adjust your image too!!!
			boxImage	: =
'http://www.surveygold.com/images/bramus/percentImage.png',			// =
boxImage : image around the progress bar
			barImage	: =
'http://www.surveygold.com/images/bramus/percentImage_back.png',	// =
Image to use in the progressbar. Can be an array of images too.
			height		: 12										// Height of the progressbar - don't forget to =
adjust your image too!!!
		}
	=09
 /**
  * NO NEED TO CHANGE ANYTHING BENEATH THIS LINE
  * -------------------------------------------------------------
  */
=20
	/**
	 * JS_BRAMUS Object
	 * -------------------------------------------------------------
	 */
	=20
		if (!JS_BRAMUS) { var JS_BRAMUS =3D new Object(); }


	/**
	 * ProgressBar Class
	 * -------------------------------------------------------------
	 */
	=20
		JS_BRAMUS.jsProgressBar =3D Class.create();
=09
		JS_BRAMUS.jsProgressBar.prototype =3D {
		=09
		=09
			/**
			 * Datamembers
			 * -------------------------------------------------------------
			 */
				el				: null,								// Element where to render the progressBar in
				id				: null,								// Unique ID of the progressbar
				percentage		: null,								// Percentage of the progressbar
			=09
				options			: null,								// The options
			=09
				initialPos		: null,								// Initial postion of the background in =
the progressbar
				pxPerPercent	: null,								// Number of pixels per 1 percent
			=09
				backIndex		: null,								// index in the array of background images =
currently used
			=09
				running			: null,								// is this one running (being animated) or =
not?
			=09
				queue			: false,							// queue of percentages to set to
		=09
		=09
			/**
			 * Constructor
			 *
			 * @param HTMLElement el
			 * @param string id
			 * @param int percentage
			 * @return void
			 * -------------------------------------------------------------
			 */
				initialize		: function(el, percentage, options) {
				=09
					// get the options
					this.options			=3D Object.clone(defaultOptions);
					Object.extend(this.options, options || {});
				=09
					// datamembers from arguments
					this.el				=3D el;
					this.id				=3D el.id;
					this.percentage		=3D 0;							// Set to 0 intially, we'll change =
this later.
					this.backIndex		=3D 0;							// Set to 0 initially
					this.running		=3D false;						// Set to false initially
					this.queue			=3D Array();						// Set to empty Array initially
								=09
					// datamembers which are calculatef
					this.imgWidth		=3D this.options.width * 2;		// define the width of =
the image (twice the width of the progressbar)
					this.initialPos		=3D this.options.width * (-1);	// Initial postion =
of the background in the progressbar (0% is the middle of our image!)
					this.pxPerPercent	=3D this.options.width / 100;		// Define how much =
pixels go into 1%
				=09
					// enfore backimage array
					if (this.options.barImage.constructor !=3D Array) { 	// used to be =
(but doesn't work in Safari): if =
(this.options.barImage.constructor.toString().indexOf("Array") =3D=3D =
-1) {
						this.options.barImage =3D Array(this.options.barImage);
					}
				=09
					// create the progressBar
					this.el.update(
						'<img id=3D"' + this.id + '_percentImage" src=3D"' + =
this.options.boxImage + '" alt=3D"0%" style=3D"width: ' + =
this.options.width + 'px; height: ' + this.options.height + 'px; =
background-position: ' + this.initialPos + 'px 50%; background-image: =
url(' + this.options.barImage[this.backIndex] + '); padding: 0; margin: =
0;"/>' +=20
						((this.options.showText =3D=3D true)?'<span id=3D"' + this.id + =
'_percentText">0%</span>':''));
			=09
					// set initial percentage
					this.setPercentage(percentage);
				=09
				},
		=09
		=09
			/**
			 * Sets the percentage of the progressbar
			 *
			 * @param string targetPercentage
			 * @return void
			 * -------------------------------------------------------------
			 */
				setPercentage	: function(targetPercentage) {
				=09
					// add the percentage on the queue
					this.queue.push(targetPercentage);
				=09
					// process the queue (if not running already)
					if (this.running =3D=3D false) {
						this.processQueue();
					}
				=09
				},
		=09
		=09
			/**
			 * Processes the queue
			 *
			 * @return void
			 * -------------------------------------------------------------
			 */
			=09
				processQueue	: function() {
				=09
					// stuff on queue?
					if (this.queue.length > 0) {
					=09
						// tell the world that we're busy
						this.running =3D true;
					=09
						// process the entry
						this.processQueueEntry(this.queue[0]);
					=09
					// no stuff on queue
					} else {
						=09
						// return;
						return;
						=09
					}
				=09
				},
		=09
		=09
			/**
			 * Processes an entry from the queue (viz. animates it)
			 *
			 * @param string targetPercentage
			 * @return void
			 * -------------------------------------------------------------
			 */
			=09
				processQueueEntry	: function(targetPercentage) {
									=09
					// get the current percentage
					var curPercentage	=3D this.percentage;
				=09
					// define the new percentage
					if ((targetPercentage.toString().substring(0,1) =3D=3D "+") || =
(targetPercentage.toString().substring(0,1) =3D=3D "-")) {
						targetPercentage	=3D curPercentage + parseInt(targetPercentage);
					}
			=09
					// min and max percentages
					if (targetPercentage < 0)		targetPercentage =3D 0;
					if (targetPercentage > 100)		targetPercentage =3D 100;
				=09
					// if we don't need to animate, just change the background position =
right now and return
					if (this.options.animate =3D=3D false) {
					=09
						// remove the entry from the queue=20
						this.queue.splice(0,1);	// @see: =
http://www.bram.us/projects/js_bramus/jsprogressbarhandler/#comment-17487=
8
					=09
						// change background
						this._setBgPosition(targetPercentage);
					=09
						// we're not running anymore
						this.running =3D false;
					=09
						// continue processing the queue
						this.processQueue();
					=09
						// we're done!
						return;
					}
				=09
					// define if we need to add/subtract something to the current =
percentage in order to reach the target percentage
					if (targetPercentage !=3D curPercentage) {				=09
						if (curPercentage < targetPercentage) {
							newPercentage =3D curPercentage + 1;
						} else {
							newPercentage =3D curPercentage - 1;=09
						}		=09
					} else {
						newPercentage =3D curPercentage;=09
					}
				=09
					// Change the background position
					this._setBgPosition(newPercentage);
				=09
					// Percentage not reached yet : continue processing entry
					if (curPercentage !=3D newPercentage) {
						setTimeout(function() { this.processQueueEntry(targetPercentage); =
}.bind(this), 10);
					=09
					// Percentage reached!
					} else {
														 =20
						// remove the entry from the queue
						this.queue.splice(0,1);
					=09
						// we're not running anymore
						this.running =3D false;=09
					=09
						// process the rest of the queue
						this.processQueue();
					=09
						// we're done!
						return;
					}
				=09
				},
		=09
		=09
			/**
			 * Gets the percentage of the progressbar
			 *
			 * @return int
			 */
				getPercentage		: function(id) {
					return this.percentage;
				},
		=09
		=09
			/**
			 * Set the background position
			 *
			 * @param int percentage
			 */
				_setBgPosition		: function(percentage) {
					// adjust the background position
						$(this.id + "_percentImage").style.backgroundPosition 	=3D "" + =
(this.initialPos + (percentage * this.pxPerPercent)) + "px 50%";
											=09
					// adjust the background image and backIndex
						var newBackIndex										=3D Math.floor((percentage-1) / =
(100/this.options.barImage.length));
					=09
						if ((newBackIndex !=3D this.backIndex) && =
(this.options.barImage[newBackIndex] !=3D undefined)) {
							$(this.id + "_percentImage").style.backgroundImage 	=3D "url(" + =
this.options.barImage[newBackIndex] + ")";
						}
					=09
						this.backIndex											=3D newBackIndex;
				=09
					// Adjust the alt & title of the image
						$(this.id + "_percentImage").alt 						=3D "" + percentage + "%";
						$(this.id + "_percentImage").title 						=3D "" + percentage + =
"%";
					=09
					// Update the text
						if (this.options.showText =3D=3D true) {
							$(this.id + "_percentText").update("&nbsp;" + percentage + "%");
						}
					=09
					// adjust datamember to stock the percentage
						this.percentage	=3D percentage;
				}
		}


	/**
	 * ProgressHandlerBar Class - automatically create ProgressBar =
instances
	 * -------------------------------------------------------------
	 */
	=20
		JS_BRAMUS.jsProgressBarHandler =3D Class.create();
=09
		JS_BRAMUS.jsProgressBarHandler.prototype =3D {
		=09
		=09
			/**
			 * Datamembers
			 * -------------------------------------------------------------
			 */
			=20
				pbArray				: new Array(),		// Array of progressBars
	=09
	=09
			/**
			 * Constructor
			 *
			 * @return void
			 * -------------------------------------------------------------
			 */
			=20
				initialize			: function() {	=09
			=09
					// get all span.progressBar elements
					$$('span.progressBar').each(function(el) {
														=20
						// create a progressBar for each element
						this.pbArray[el.id]	=3D new JS_BRAMUS.jsProgressBar(el, =
parseInt(el.innerHTML.replace("%","")));=20
				=09
					}.bind(this));
				},
	=09
	=09
			/**
			 * Set the percentage of a progressbar
			 *
			 * @param string el
			 * @param string percentage
			 * @return void
			 * -------------------------------------------------------------
			 */
				setPercentage		: function(el, percentage) {
					if(this.pbArray[el]){
						this.pbArray[el].setPercentage(percentage);
					}=09
				},
	=09
	=09
			/**
			 * Get the percentage of a progressbar
			 *
			 * @param string el
			 * @return int percentage
			 * -------------------------------------------------------------
			 */
				getPercentage		: function(el) {
					if(this.pbArray[el]){
						return this.pbArray[el].getPercentage();
					}
					else
					{
						return 0;
					}
				}
		=09
		}


	/**
	 * ProgressHandlerBar Class - hook me or not?
	 * -------------------------------------------------------------
	 */
=09
		if (autoHook =3D=3D true) {
			function initProgressBarHandler() { myJsProgressBarHandler =3D new =
JS_BRAMUS.jsProgressBarHandler(); }
			Event.observe(window, 'load', initProgressBarHandler, false);
		}
------=_NextPart_000_0000_01CB1DE2.850A4BD0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.surveygold.com/js/jquery.js

/*!=0A=
 * jQuery JavaScript Library v1.4.2=0A=
 * http://jquery.com/=0A=
 *=0A=
 * Copyright 2010, John Resig=0A=
 * Dual licensed under the MIT or GPL Version 2 licenses.=0A=
 * http://jquery.org/license=0A=
 *=0A=
 * Includes Sizzle.js=0A=
 * http://sizzlejs.com/=0A=
 * Copyright 2010, The Dojo Foundation=0A=
 * Released under the MIT, BSD, and GPL Licenses.=0A=
 *=0A=
 * Date: Sat Feb 13 22:33:48 2010 -0500=0A=
 */=0A=
(function( window, undefined ) {=0A=
=0A=
// Define a local copy of jQuery=0A=
var jQuery =3D function( selector, context ) {=0A=
		// The jQuery object is actually just the init constructor 'enhanced'=0A=
		return new jQuery.fn.init( selector, context );=0A=
	},=0A=
=0A=
	// Map over jQuery in case of overwrite=0A=
	_jQuery =3D window.jQuery,=0A=
=0A=
	// Map over the $ in case of overwrite=0A=
	_$ =3D window.$,=0A=
=0A=
	// Use the correct document accordingly with window argument (sandbox)=0A=
	document =3D window.document,=0A=
=0A=
	// A central reference to the root jQuery(document)=0A=
	rootjQuery,=0A=
=0A=
	// A simple way to check for HTML strings or ID strings=0A=
	// (both of which we optimize for)=0A=
	quickExpr =3D /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,=0A=
=0A=
	// Is it a simple selector=0A=
	isSimple =3D /^.[^:#\[\.,]*$/,=0A=
=0A=
	// Check if a string has a non-whitespace character in it=0A=
	rnotwhite =3D /\S/,=0A=
=0A=
	// Used for trimming whitespace=0A=
	rtrim =3D /^(\s|\u00A0)+|(\s|\u00A0)+$/g,=0A=
=0A=
	// Match a standalone tag=0A=
	rsingleTag =3D /^<(\w+)\s*\/?>(?:<\/\1>)?$/,=0A=
=0A=
	// Keep a UserAgent string for use with jQuery.browser=0A=
	userAgent =3D navigator.userAgent,=0A=
=0A=
	// For matching the engine and version of the browser=0A=
	browserMatch,=0A=
	=0A=
	// Has the ready events already been bound?=0A=
	readyBound =3D false,=0A=
	=0A=
	// The functions to execute on DOM ready=0A=
	readyList =3D [],=0A=
=0A=
	// The ready event handler=0A=
	DOMContentLoaded,=0A=
=0A=
	// Save a reference to some core methods=0A=
	toString =3D Object.prototype.toString,=0A=
	hasOwnProperty =3D Object.prototype.hasOwnProperty,=0A=
	push =3D Array.prototype.push,=0A=
	slice =3D Array.prototype.slice,=0A=
	indexOf =3D Array.prototype.indexOf;=0A=
=0A=
jQuery.fn =3D jQuery.prototype =3D {=0A=
	init: function( selector, context ) {=0A=
		var match, elem, ret, doc;=0A=
=0A=
		// Handle $(""), $(null), or $(undefined)=0A=
		if ( !selector ) {=0A=
			return this;=0A=
		}=0A=
=0A=
		// Handle $(DOMElement)=0A=
		if ( selector.nodeType ) {=0A=
			this.context =3D this[0] =3D selector;=0A=
			this.length =3D 1;=0A=
			return this;=0A=
		}=0A=
		=0A=
		// The body element only exists once, optimize finding it=0A=
		if ( selector =3D=3D=3D "body" && !context ) {=0A=
			this.context =3D document;=0A=
			this[0] =3D document.body;=0A=
			this.selector =3D "body";=0A=
			this.length =3D 1;=0A=
			return this;=0A=
		}=0A=
=0A=
		// Handle HTML strings=0A=
		if ( typeof selector =3D=3D=3D "string" ) {=0A=
			// Are we dealing with HTML string or an ID?=0A=
			match =3D quickExpr.exec( selector );=0A=
=0A=
			// Verify a match, and that no context was specified for #id=0A=
			if ( match && (match[1] || !context) ) {=0A=
=0A=
				// HANDLE: $(html) -> $(array)=0A=
				if ( match[1] ) {=0A=
					doc =3D (context ? context.ownerDocument || context : document);=0A=
=0A=
					// If a single string is passed in and it's a single tag=0A=
					// just do a createElement and skip the rest=0A=
					ret =3D rsingleTag.exec( selector );=0A=
=0A=
					if ( ret ) {=0A=
						if ( jQuery.isPlainObject( context ) ) {=0A=
							selector =3D [ document.createElement( ret[1] ) ];=0A=
							jQuery.fn.attr.call( selector, context, true );=0A=
=0A=
						} else {=0A=
							selector =3D [ doc.createElement( ret[1] ) ];=0A=
						}=0A=
=0A=
					} else {=0A=
						ret =3D buildFragment( [ match[1] ], [ doc ] );=0A=
						selector =3D (ret.cacheable ? ret.fragment.cloneNode(true) : =
ret.fragment).childNodes;=0A=
					}=0A=
					=0A=
					return jQuery.merge( this, selector );=0A=
					=0A=
				// HANDLE: $("#id")=0A=
				} else {=0A=
					elem =3D document.getElementById( match[2] );=0A=
=0A=
					if ( elem ) {=0A=
						// Handle the case where IE and Opera return items=0A=
						// by name instead of ID=0A=
						if ( elem.id !=3D=3D match[2] ) {=0A=
							return rootjQuery.find( selector );=0A=
						}=0A=
=0A=
						// Otherwise, we inject the element directly into the jQuery object=0A=
						this.length =3D 1;=0A=
						this[0] =3D elem;=0A=
					}=0A=
=0A=
					this.context =3D document;=0A=
					this.selector =3D selector;=0A=
					return this;=0A=
				}=0A=
=0A=
			// HANDLE: $("TAG")=0A=
			} else if ( !context && /^\w+$/.test( selector ) ) {=0A=
				this.selector =3D selector;=0A=
				this.context =3D document;=0A=
				selector =3D document.getElementsByTagName( selector );=0A=
				return jQuery.merge( this, selector );=0A=
=0A=
			// HANDLE: $(expr, $(...))=0A=
			} else if ( !context || context.jquery ) {=0A=
				return (context || rootjQuery).find( selector );=0A=
=0A=
			// HANDLE: $(expr, context)=0A=
			// (which is just equivalent to: $(context).find(expr)=0A=
			} else {=0A=
				return jQuery( context ).find( selector );=0A=
			}=0A=
=0A=
		// HANDLE: $(function)=0A=
		// Shortcut for document ready=0A=
		} else if ( jQuery.isFunction( selector ) ) {=0A=
			return rootjQuery.ready( selector );=0A=
		}=0A=
=0A=
		if (selector.selector !=3D=3D undefined) {=0A=
			this.selector =3D selector.selector;=0A=
			this.context =3D selector.context;=0A=
		}=0A=
=0A=
		return jQuery.makeArray( selector, this );=0A=
	},=0A=
=0A=
	// Start with an empty selector=0A=
	selector: "",=0A=
=0A=
	// The current version of jQuery being used=0A=
	jquery: "1.4.2",=0A=
=0A=
	// The default length of a jQuery object is 0=0A=
	length: 0,=0A=
=0A=
	// The number of elements contained in the matched element set=0A=
	size: function() {=0A=
		return this.length;=0A=
	},=0A=
=0A=
	toArray: function() {=0A=
		return slice.call( this, 0 );=0A=
	},=0A=
=0A=
	// Get the Nth element in the matched element set OR=0A=
	// Get the whole matched element set as a clean array=0A=
	get: function( num ) {=0A=
		return num =3D=3D null ?=0A=
=0A=
			// Return a 'clean' array=0A=
			this.toArray() :=0A=
=0A=
			// Return just the object=0A=
			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );=0A=
	},=0A=
=0A=
	// Take an array of elements and push it onto the stack=0A=
	// (returning the new matched element set)=0A=
	pushStack: function( elems, name, selector ) {=0A=
		// Build a new jQuery matched element set=0A=
		var ret =3D jQuery();=0A=
=0A=
		if ( jQuery.isArray( elems ) ) {=0A=
			push.apply( ret, elems );=0A=
		=0A=
		} else {=0A=
			jQuery.merge( ret, elems );=0A=
		}=0A=
=0A=
		// Add the old object onto the stack (as a reference)=0A=
		ret.prevObject =3D this;=0A=
=0A=
		ret.context =3D this.context;=0A=
=0A=
		if ( name =3D=3D=3D "find" ) {=0A=
			ret.selector =3D this.selector + (this.selector ? " " : "") + =
selector;=0A=
		} else if ( name ) {=0A=
			ret.selector =3D this.selector + "." + name + "(" + selector + ")";=0A=
		}=0A=
=0A=
		// Return the newly-formed element set=0A=
		return ret;=0A=
	},=0A=
=0A=
	// Execute a callback for every element in the matched set.=0A=
	// (You can seed the arguments with an array of args, but this is=0A=
	// only used internally.)=0A=
	each: function( callback, args ) {=0A=
		return jQuery.each( this, callback, args );=0A=
	},=0A=
	=0A=
	ready: function( fn ) {=0A=
		// Attach the listeners=0A=
		jQuery.bindReady();=0A=
=0A=
		// If the DOM is already ready=0A=
		if ( jQuery.isReady ) {=0A=
			// Execute the function immediately=0A=
			fn.call( document, jQuery );=0A=
=0A=
		// Otherwise, remember the function for later=0A=
		} else if ( readyList ) {=0A=
			// Add the function to the wait list=0A=
			readyList.push( fn );=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
	=0A=
	eq: function( i ) {=0A=
		return i =3D=3D=3D -1 ?=0A=
			this.slice( i ) :=0A=
			this.slice( i, +i + 1 );=0A=
	},=0A=
=0A=
	first: function() {=0A=
		return this.eq( 0 );=0A=
	},=0A=
=0A=
	last: function() {=0A=
		return this.eq( -1 );=0A=
	},=0A=
=0A=
	slice: function() {=0A=
		return this.pushStack( slice.apply( this, arguments ),=0A=
			"slice", slice.call(arguments).join(",") );=0A=
	},=0A=
=0A=
	map: function( callback ) {=0A=
		return this.pushStack( jQuery.map(this, function( elem, i ) {=0A=
			return callback.call( elem, i, elem );=0A=
		}));=0A=
	},=0A=
	=0A=
	end: function() {=0A=
		return this.prevObject || jQuery(null);=0A=
	},=0A=
=0A=
	// For internal use only.=0A=
	// Behaves like an Array's method, not like a jQuery method.=0A=
	push: push,=0A=
	sort: [].sort,=0A=
	splice: [].splice=0A=
};=0A=
=0A=
// Give the init function the jQuery prototype for later instantiation=0A=
jQuery.fn.init.prototype =3D jQuery.fn;=0A=
=0A=
jQuery.extend =3D jQuery.fn.extend =3D function() {=0A=
	// copy reference to target object=0A=
	var target =3D arguments[0] || {}, i =3D 1, length =3D =
arguments.length, deep =3D false, options, name, src, copy;=0A=
=0A=
	// Handle a deep copy situation=0A=
	if ( typeof target =3D=3D=3D "boolean" ) {=0A=
		deep =3D target;=0A=
		target =3D arguments[1] || {};=0A=
		// skip the boolean and the target=0A=
		i =3D 2;=0A=
	}=0A=
=0A=
	// Handle case when target is a string or something (possible in deep =
copy)=0A=
	if ( typeof target !=3D=3D "object" && !jQuery.isFunction(target) ) {=0A=
		target =3D {};=0A=
	}=0A=
=0A=
	// extend jQuery itself if only one argument is passed=0A=
	if ( length =3D=3D=3D i ) {=0A=
		target =3D this;=0A=
		--i;=0A=
	}=0A=
=0A=
	for ( ; i < length; i++ ) {=0A=
		// Only deal with non-null/undefined values=0A=
		if ( (options =3D arguments[ i ]) !=3D null ) {=0A=
			// Extend the base object=0A=
			for ( name in options ) {=0A=
				src =3D target[ name ];=0A=
				copy =3D options[ name ];=0A=
=0A=
				// Prevent never-ending loop=0A=
				if ( target =3D=3D=3D copy ) {=0A=
					continue;=0A=
				}=0A=
=0A=
				// Recurse if we're merging object literal values or arrays=0A=
				if ( deep && copy && ( jQuery.isPlainObject(copy) || =
jQuery.isArray(copy) ) ) {=0A=
					var clone =3D src && ( jQuery.isPlainObject(src) || =
jQuery.isArray(src) ) ? src=0A=
						: jQuery.isArray(copy) ? [] : {};=0A=
=0A=
					// Never move original objects, clone them=0A=
					target[ name ] =3D jQuery.extend( deep, clone, copy );=0A=
=0A=
				// Don't bring in undefined values=0A=
				} else if ( copy !=3D=3D undefined ) {=0A=
					target[ name ] =3D copy;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	// Return the modified object=0A=
	return target;=0A=
};=0A=
=0A=
jQuery.extend({=0A=
	noConflict: function( deep ) {=0A=
		window.$ =3D _$;=0A=
=0A=
		if ( deep ) {=0A=
			window.jQuery =3D _jQuery;=0A=
		}=0A=
=0A=
		return jQuery;=0A=
	},=0A=
	=0A=
	// Is the DOM ready to be used? Set to true once it occurs.=0A=
	isReady: false,=0A=
	=0A=
	// Handle when the DOM is ready=0A=
	ready: function() {=0A=
		// Make sure that the DOM is not already loaded=0A=
		if ( !jQuery.isReady ) {=0A=
			// Make sure body exists, at least, in case IE gets a little =
overzealous (ticket #5443).=0A=
			if ( !document.body ) {=0A=
				return setTimeout( jQuery.ready, 13 );=0A=
			}=0A=
=0A=
			// Remember that the DOM is ready=0A=
			jQuery.isReady =3D true;=0A=
=0A=
			// If there are functions bound, to execute=0A=
			if ( readyList ) {=0A=
				// Execute all of them=0A=
				var fn, i =3D 0;=0A=
				while ( (fn =3D readyList[ i++ ]) ) {=0A=
					fn.call( document, jQuery );=0A=
				}=0A=
=0A=
				// Reset the list of functions=0A=
				readyList =3D null;=0A=
			}=0A=
=0A=
			// Trigger any bound ready events=0A=
			if ( jQuery.fn.triggerHandler ) {=0A=
				jQuery( document ).triggerHandler( "ready" );=0A=
			}=0A=
		}=0A=
	},=0A=
	=0A=
	bindReady: function() {=0A=
		if ( readyBound ) {=0A=
			return;=0A=
		}=0A=
=0A=
		readyBound =3D true;=0A=
=0A=
		// Catch cases where $(document).ready() is called after the=0A=
		// browser event has already occurred.=0A=
		if ( document.readyState =3D=3D=3D "complete" ) {=0A=
			return jQuery.ready();=0A=
		}=0A=
=0A=
		// Mozilla, Opera and webkit nightlies currently support this event=0A=
		if ( document.addEventListener ) {=0A=
			// Use the handy event callback=0A=
			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, =
false );=0A=
			=0A=
			// A fallback to window.onload, that will always work=0A=
			window.addEventListener( "load", jQuery.ready, false );=0A=
=0A=
		// If IE event model is used=0A=
		} else if ( document.attachEvent ) {=0A=
			// ensure firing before onload,=0A=
			// maybe late but safe also for iframes=0A=
			document.attachEvent("onreadystatechange", DOMContentLoaded);=0A=
			=0A=
			// A fallback to window.onload, that will always work=0A=
			window.attachEvent( "onload", jQuery.ready );=0A=
=0A=
			// If IE and not a frame=0A=
			// continually check to see if the document is ready=0A=
			var toplevel =3D false;=0A=
=0A=
			try {=0A=
				toplevel =3D window.frameElement =3D=3D null;=0A=
			} catch(e) {}=0A=
=0A=
			if ( document.documentElement.doScroll && toplevel ) {=0A=
				doScrollCheck();=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	// See test/unit/core.js for details concerning isFunction.=0A=
	// Since version 1.3, DOM methods and functions like alert=0A=
	// aren't supported. They return false on IE (#2968).=0A=
	isFunction: function( obj ) {=0A=
		return toString.call(obj) =3D=3D=3D "[object Function]";=0A=
	},=0A=
=0A=
	isArray: function( obj ) {=0A=
		return toString.call(obj) =3D=3D=3D "[object Array]";=0A=
	},=0A=
=0A=
	isPlainObject: function( obj ) {=0A=
		// Must be an Object.=0A=
		// Because of IE, we also have to check the presence of the =
constructor property.=0A=
		// Make sure that DOM nodes and window objects don't pass through, as =
well=0A=
		if ( !obj || toString.call(obj) !=3D=3D "[object Object]" || =
obj.nodeType || obj.setInterval ) {=0A=
			return false;=0A=
		}=0A=
		=0A=
		// Not own constructor property must be Object=0A=
		if ( obj.constructor=0A=
			&& !hasOwnProperty.call(obj, "constructor")=0A=
			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) =
{=0A=
			return false;=0A=
		}=0A=
		=0A=
		// Own properties are enumerated firstly, so to speed up,=0A=
		// if last one is own, then all properties are own.=0A=
	=0A=
		var key;=0A=
		for ( key in obj ) {}=0A=
		=0A=
		return key =3D=3D=3D undefined || hasOwnProperty.call( obj, key );=0A=
	},=0A=
=0A=
	isEmptyObject: function( obj ) {=0A=
		for ( var name in obj ) {=0A=
			return false;=0A=
		}=0A=
		return true;=0A=
	},=0A=
	=0A=
	error: function( msg ) {=0A=
		throw msg;=0A=
	},=0A=
	=0A=
	parseJSON: function( data ) {=0A=
		if ( typeof data !=3D=3D "string" || !data ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		// Make sure leading/trailing whitespace is removed (IE can't handle =
it)=0A=
		data =3D jQuery.trim( data );=0A=
		=0A=
		// Make sure the incoming data is actual JSON=0A=
		// Logic borrowed from http://json.org/json2.js=0A=
		if ( =
/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, =
"@")=0A=
			=
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?=
/g, "]")=0A=
			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {=0A=
=0A=
			// Try to use the native JSON parser first=0A=
			return window.JSON && window.JSON.parse ?=0A=
				window.JSON.parse( data ) :=0A=
				(new Function("return " + data))();=0A=
=0A=
		} else {=0A=
			jQuery.error( "Invalid JSON: " + data );=0A=
		}=0A=
	},=0A=
=0A=
	noop: function() {},=0A=
=0A=
	// Evalulates a script in a global context=0A=
	globalEval: function( data ) {=0A=
		if ( data && rnotwhite.test(data) ) {=0A=
			// Inspired by code by Andrea Giammarchi=0A=
			// =
http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom=
.html=0A=
			var head =3D document.getElementsByTagName("head")[0] || =
document.documentElement,=0A=
				script =3D document.createElement("script");=0A=
=0A=
			script.type =3D "text/javascript";=0A=
=0A=
			if ( jQuery.support.scriptEval ) {=0A=
				script.appendChild( document.createTextNode( data ) );=0A=
			} else {=0A=
				script.text =3D data;=0A=
			}=0A=
=0A=
			// Use insertBefore instead of appendChild to circumvent an IE6 bug.=0A=
			// This arises when a base node is used (#2709).=0A=
			head.insertBefore( script, head.firstChild );=0A=
			head.removeChild( script );=0A=
		}=0A=
	},=0A=
=0A=
	nodeName: function( elem, name ) {=0A=
		return elem.nodeName && elem.nodeName.toUpperCase() =3D=3D=3D =
name.toUpperCase();=0A=
	},=0A=
=0A=
	// args is for internal usage only=0A=
	each: function( object, callback, args ) {=0A=
		var name, i =3D 0,=0A=
			length =3D object.length,=0A=
			isObj =3D length =3D=3D=3D undefined || jQuery.isFunction(object);=0A=
=0A=
		if ( args ) {=0A=
			if ( isObj ) {=0A=
				for ( name in object ) {=0A=
					if ( callback.apply( object[ name ], args ) =3D=3D=3D false ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			} else {=0A=
				for ( ; i < length; ) {=0A=
					if ( callback.apply( object[ i++ ], args ) =3D=3D=3D false ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
		// A special, fast, case for the most common use of each=0A=
		} else {=0A=
			if ( isObj ) {=0A=
				for ( name in object ) {=0A=
					if ( callback.call( object[ name ], name, object[ name ] ) =
=3D=3D=3D false ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			} else {=0A=
				for ( var value =3D object[0];=0A=
					i < length && callback.call( value, i, value ) !=3D=3D false; value =
=3D object[++i] ) {}=0A=
			}=0A=
		}=0A=
=0A=
		return object;=0A=
	},=0A=
=0A=
	trim: function( text ) {=0A=
		return (text || "").replace( rtrim, "" );=0A=
	},=0A=
=0A=
	// results is for internal usage only=0A=
	makeArray: function( array, results ) {=0A=
		var ret =3D results || [];=0A=
=0A=
		if ( array !=3D null ) {=0A=
			// The window, strings (and functions) also have 'length'=0A=
			// The extra typeof function check is to prevent crashes=0A=
			// in Safari 2 (See: #3039)=0A=
			if ( array.length =3D=3D null || typeof array =3D=3D=3D "string" || =
jQuery.isFunction(array) || (typeof array !=3D=3D "function" && =
array.setInterval) ) {=0A=
				push.call( ret, array );=0A=
			} else {=0A=
				jQuery.merge( ret, array );=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	inArray: function( elem, array ) {=0A=
		if ( array.indexOf ) {=0A=
			return array.indexOf( elem );=0A=
		}=0A=
=0A=
		for ( var i =3D 0, length =3D array.length; i < length; i++ ) {=0A=
			if ( array[ i ] =3D=3D=3D elem ) {=0A=
				return i;=0A=
			}=0A=
		}=0A=
=0A=
		return -1;=0A=
	},=0A=
=0A=
	merge: function( first, second ) {=0A=
		var i =3D first.length, j =3D 0;=0A=
=0A=
		if ( typeof second.length =3D=3D=3D "number" ) {=0A=
			for ( var l =3D second.length; j < l; j++ ) {=0A=
				first[ i++ ] =3D second[ j ];=0A=
			}=0A=
		=0A=
		} else {=0A=
			while ( second[j] !=3D=3D undefined ) {=0A=
				first[ i++ ] =3D second[ j++ ];=0A=
			}=0A=
		}=0A=
=0A=
		first.length =3D i;=0A=
=0A=
		return first;=0A=
	},=0A=
=0A=
	grep: function( elems, callback, inv ) {=0A=
		var ret =3D [];=0A=
=0A=
		// Go through the array, only saving the items=0A=
		// that pass the validator function=0A=
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {=0A=
			if ( !inv !=3D=3D !callback( elems[ i ], i ) ) {=0A=
				ret.push( elems[ i ] );=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	// arg is for internal usage only=0A=
	map: function( elems, callback, arg ) {=0A=
		var ret =3D [], value;=0A=
=0A=
		// Go through the array, translating each of the items to their=0A=
		// new value (or values).=0A=
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {=0A=
			value =3D callback( elems[ i ], i, arg );=0A=
=0A=
			if ( value !=3D null ) {=0A=
				ret[ ret.length ] =3D value;=0A=
			}=0A=
		}=0A=
=0A=
		return ret.concat.apply( [], ret );=0A=
	},=0A=
=0A=
	// A global GUID counter for objects=0A=
	guid: 1,=0A=
=0A=
	proxy: function( fn, proxy, thisObject ) {=0A=
		if ( arguments.length =3D=3D=3D 2 ) {=0A=
			if ( typeof proxy =3D=3D=3D "string" ) {=0A=
				thisObject =3D fn;=0A=
				fn =3D thisObject[ proxy ];=0A=
				proxy =3D undefined;=0A=
=0A=
			} else if ( proxy && !jQuery.isFunction( proxy ) ) {=0A=
				thisObject =3D proxy;=0A=
				proxy =3D undefined;=0A=
			}=0A=
		}=0A=
=0A=
		if ( !proxy && fn ) {=0A=
			proxy =3D function() {=0A=
				return fn.apply( thisObject || this, arguments );=0A=
			};=0A=
		}=0A=
=0A=
		// Set the guid of unique handler to the same of original handler, so =
it can be removed=0A=
		if ( fn ) {=0A=
			proxy.guid =3D fn.guid =3D fn.guid || proxy.guid || jQuery.guid++;=0A=
		}=0A=
=0A=
		// So proxy can be declared as an argument=0A=
		return proxy;=0A=
	},=0A=
=0A=
	// Use of jQuery.browser is frowned upon.=0A=
	// More details: http://docs.jquery.com/Utilities/jQuery.browser=0A=
	uaMatch: function( ua ) {=0A=
		ua =3D ua.toLowerCase();=0A=
=0A=
		var match =3D /(webkit)[ \/]([\w.]+)/.exec( ua ) ||=0A=
			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||=0A=
			/(msie) ([\w.]+)/.exec( ua ) ||=0A=
			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua =
) ||=0A=
		  	[];=0A=
=0A=
		return { browser: match[1] || "", version: match[2] || "0" };=0A=
	},=0A=
=0A=
	browser: {}=0A=
});=0A=
=0A=
browserMatch =3D jQuery.uaMatch( userAgent );=0A=
if ( browserMatch.browser ) {=0A=
	jQuery.browser[ browserMatch.browser ] =3D true;=0A=
	jQuery.browser.version =3D browserMatch.version;=0A=
}=0A=
=0A=
// Deprecated, use jQuery.browser.webkit instead=0A=
if ( jQuery.browser.webkit ) {=0A=
	jQuery.browser.safari =3D true;=0A=
}=0A=
=0A=
if ( indexOf ) {=0A=
	jQuery.inArray =3D function( elem, array ) {=0A=
		return indexOf.call( array, elem );=0A=
	};=0A=
}=0A=
=0A=
// All jQuery objects should point back to these=0A=
rootjQuery =3D jQuery(document);=0A=
=0A=
// Cleanup functions for the document ready method=0A=
if ( document.addEventListener ) {=0A=
	DOMContentLoaded =3D function() {=0A=
		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, =
false );=0A=
		jQuery.ready();=0A=
	};=0A=
=0A=
} else if ( document.attachEvent ) {=0A=
	DOMContentLoaded =3D function() {=0A=
		// Make sure body exists, at least, in case IE gets a little =
overzealous (ticket #5443).=0A=
		if ( document.readyState =3D=3D=3D "complete" ) {=0A=
			document.detachEvent( "onreadystatechange", DOMContentLoaded );=0A=
			jQuery.ready();=0A=
		}=0A=
	};=0A=
}=0A=
=0A=
// The DOM ready check for Internet Explorer=0A=
function doScrollCheck() {=0A=
	if ( jQuery.isReady ) {=0A=
		return;=0A=
	}=0A=
=0A=
	try {=0A=
		// If IE is used, use the trick by Diego Perini=0A=
		// http://javascript.nwbox.com/IEContentLoaded/=0A=
		document.documentElement.doScroll("left");=0A=
	} catch( error ) {=0A=
		setTimeout( doScrollCheck, 1 );=0A=
		return;=0A=
	}=0A=
=0A=
	// and execute any waiting functions=0A=
	jQuery.ready();=0A=
}=0A=
=0A=
function evalScript( i, elem ) {=0A=
	if ( elem.src ) {=0A=
		jQuery.ajax({=0A=
			url: elem.src,=0A=
			async: false,=0A=
			dataType: "script"=0A=
		});=0A=
	} else {=0A=
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || =
"" );=0A=
	}=0A=
=0A=
	if ( elem.parentNode ) {=0A=
		elem.parentNode.removeChild( elem );=0A=
	}=0A=
}=0A=
=0A=
// Mutifunctional method to get and set values to a collection=0A=
// The value/s can be optionally by executed if its a function=0A=
function access( elems, key, value, exec, fn, pass ) {=0A=
	var length =3D elems.length;=0A=
	=0A=
	// Setting many attributes=0A=
	if ( typeof key =3D=3D=3D "object" ) {=0A=
		for ( var k in key ) {=0A=
			access( elems, k, key[k], exec, fn, value );=0A=
		}=0A=
		return elems;=0A=
	}=0A=
	=0A=
	// Setting one attribute=0A=
	if ( value !=3D=3D undefined ) {=0A=
		// Optionally, function values get executed if exec is true=0A=
		exec =3D !pass && exec && jQuery.isFunction(value);=0A=
		=0A=
		for ( var i =3D 0; i < length; i++ ) {=0A=
			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key =
) ) : value, pass );=0A=
		}=0A=
		=0A=
		return elems;=0A=
	}=0A=
	=0A=
	// Getting an attribute=0A=
	return length ? fn( elems[0], key ) : undefined;=0A=
}=0A=
=0A=
function now() {=0A=
	return (new Date).getTime();=0A=
}=0A=
(function() {=0A=
=0A=
	jQuery.support =3D {};=0A=
=0A=
	var root =3D document.documentElement,=0A=
		script =3D document.createElement("script"),=0A=
		div =3D document.createElement("div"),=0A=
		id =3D "script" + now();=0A=
=0A=
	div.style.display =3D "none";=0A=
	div.innerHTML =3D "   <link/><table></table><a href=3D'/a' =
style=3D'color:red;float:left;opacity:.55;'>a</a><input =
type=3D'checkbox'/>";=0A=
=0A=
	var all =3D div.getElementsByTagName("*"),=0A=
		a =3D div.getElementsByTagName("a")[0];=0A=
=0A=
	// Can't get basic test support=0A=
	if ( !all || !all.length || !a ) {=0A=
		return;=0A=
	}=0A=
=0A=
	jQuery.support =3D {=0A=
		// IE strips leading whitespace when .innerHTML is used=0A=
		leadingWhitespace: div.firstChild.nodeType =3D=3D=3D 3,=0A=
=0A=
		// Make sure that tbody elements aren't automatically inserted=0A=
		// IE will insert them into empty tables=0A=
		tbody: !div.getElementsByTagName("tbody").length,=0A=
=0A=
		// Make sure that link elements get serialized correctly by innerHTML=0A=
		// This requires a wrapper element in IE=0A=
		htmlSerialize: !!div.getElementsByTagName("link").length,=0A=
=0A=
		// Get the style information from getAttribute=0A=
		// (IE uses .cssText insted)=0A=
		style: /red/.test( a.getAttribute("style") ),=0A=
=0A=
		// Make sure that URLs aren't manipulated=0A=
		// (IE normalizes it by default)=0A=
		hrefNormalized: a.getAttribute("href") =3D=3D=3D "/a",=0A=
=0A=
		// Make sure that element opacity exists=0A=
		// (IE uses filter instead)=0A=
		// Use a regex to work around a WebKit issue. See #5145=0A=
		opacity: /^0.55$/.test( a.style.opacity ),=0A=
=0A=
		// Verify style float existence=0A=
		// (IE uses styleFloat instead of cssFloat)=0A=
		cssFloat: !!a.style.cssFloat,=0A=
=0A=
		// Make sure that if no value is specified for a checkbox=0A=
		// that it defaults to "on".=0A=
		// (WebKit defaults to "" instead)=0A=
		checkOn: div.getElementsByTagName("input")[0].value =3D=3D=3D "on",=0A=
=0A=
		// Make sure that a selected-by-default option has a working selected =
property.=0A=
		// (WebKit defaults to false instead of true, IE too, if it's in an =
optgroup)=0A=
		optSelected: document.createElement("select").appendChild( =
document.createElement("option") ).selected,=0A=
=0A=
		parentNode: div.removeChild( div.appendChild( =
document.createElement("div") ) ).parentNode =3D=3D=3D null,=0A=
=0A=
		// Will be defined later=0A=
		deleteExpando: true,=0A=
		checkClone: false,=0A=
		scriptEval: false,=0A=
		noCloneEvent: true,=0A=
		boxModel: null=0A=
	};=0A=
=0A=
	script.type =3D "text/javascript";=0A=
	try {=0A=
		script.appendChild( document.createTextNode( "window." + id + "=3D1;" =
) );=0A=
	} catch(e) {}=0A=
=0A=
	root.insertBefore( script, root.firstChild );=0A=
=0A=
	// Make sure that the execution of code works by injecting a script=0A=
	// tag with appendChild/createTextNode=0A=
	// (IE doesn't support this, fails, and uses .text instead)=0A=
	if ( window[ id ] ) {=0A=
		jQuery.support.scriptEval =3D true;=0A=
		delete window[ id ];=0A=
	}=0A=
=0A=
	// Test to see if it's possible to delete an expando from an element=0A=
	// Fails in Internet Explorer=0A=
	try {=0A=
		delete script.test;=0A=
	=0A=
	} catch(e) {=0A=
		jQuery.support.deleteExpando =3D false;=0A=
	}=0A=
=0A=
	root.removeChild( script );=0A=
=0A=
	if ( div.attachEvent && div.fireEvent ) {=0A=
		div.attachEvent("onclick", function click() {=0A=
			// Cloning a node shouldn't copy over any=0A=
			// bound event handlers (IE does this)=0A=
			jQuery.support.noCloneEvent =3D false;=0A=
			div.detachEvent("onclick", click);=0A=
		});=0A=
		div.cloneNode(true).fireEvent("onclick");=0A=
	}=0A=
=0A=
	div =3D document.createElement("div");=0A=
	div.innerHTML =3D "<input type=3D'radio' name=3D'radiotest' =
checked=3D'checked'/>";=0A=
=0A=
	var fragment =3D document.createDocumentFragment();=0A=
	fragment.appendChild( div.firstChild );=0A=
=0A=
	// WebKit doesn't clone checked state correctly in fragments=0A=
	jQuery.support.checkClone =3D =
fragment.cloneNode(true).cloneNode(true).lastChild.checked;=0A=
=0A=
	// Figure out if the W3C box model works as expected=0A=
	// document.body must exist before we can do this=0A=
	jQuery(function() {=0A=
		var div =3D document.createElement("div");=0A=
		div.style.width =3D div.style.paddingLeft =3D "1px";=0A=
=0A=
		document.body.appendChild( div );=0A=
		jQuery.boxModel =3D jQuery.support.boxModel =3D div.offsetWidth =
=3D=3D=3D 2;=0A=
		document.body.removeChild( div ).style.display =3D 'none';=0A=
=0A=
		div =3D null;=0A=
	});=0A=
=0A=
	// Technique from Juriy Zaytsev=0A=
	// =
http://thinkweb2.com/projects/prototype/detecting-event-support-without-b=
rowser-sniffing/=0A=
	var eventSupported =3D function( eventName ) { =0A=
		var el =3D document.createElement("div"); =0A=
		eventName =3D "on" + eventName; =0A=
=0A=
		var isSupported =3D (eventName in el); =0A=
		if ( !isSupported ) { =0A=
			el.setAttribute(eventName, "return;"); =0A=
			isSupported =3D typeof el[eventName] =3D=3D=3D "function"; =0A=
		} =0A=
		el =3D null; =0A=
=0A=
		return isSupported; =0A=
	};=0A=
	=0A=
	jQuery.support.submitBubbles =3D eventSupported("submit");=0A=
	jQuery.support.changeBubbles =3D eventSupported("change");=0A=
=0A=
	// release memory in IE=0A=
	root =3D script =3D div =3D all =3D a =3D null;=0A=
})();=0A=
=0A=
jQuery.props =3D {=0A=
	"for": "htmlFor",=0A=
	"class": "className",=0A=
	readonly: "readOnly",=0A=
	maxlength: "maxLength",=0A=
	cellspacing: "cellSpacing",=0A=
	rowspan: "rowSpan",=0A=
	colspan: "colSpan",=0A=
	tabindex: "tabIndex",=0A=
	usemap: "useMap",=0A=
	frameborder: "frameBorder"=0A=
};=0A=
var expando =3D "jQuery" + now(), uuid =3D 0, windowData =3D {};=0A=
=0A=
jQuery.extend({=0A=
	cache: {},=0A=
	=0A=
	expando:expando,=0A=
=0A=
	// The following elements throw uncatchable exceptions if you=0A=
	// attempt to add expando properties to them.=0A=
	noData: {=0A=
		"embed": true,=0A=
		"object": true,=0A=
		"applet": true=0A=
	},=0A=
=0A=
	data: function( elem, name, data ) {=0A=
		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {=0A=
			return;=0A=
		}=0A=
=0A=
		elem =3D elem =3D=3D window ?=0A=
			windowData :=0A=
			elem;=0A=
=0A=
		var id =3D elem[ expando ], cache =3D jQuery.cache, thisCache;=0A=
=0A=
		if ( !id && typeof name =3D=3D=3D "string" && data =3D=3D=3D undefined =
) {=0A=
			return null;=0A=
		}=0A=
=0A=
		// Compute a unique ID for the element=0A=
		if ( !id ) { =0A=
			id =3D ++uuid;=0A=
		}=0A=
=0A=
		// Avoid generating a new cache unless none exists and we=0A=
		// want to manipulate it.=0A=
		if ( typeof name =3D=3D=3D "object" ) {=0A=
			elem[ expando ] =3D id;=0A=
			thisCache =3D cache[ id ] =3D jQuery.extend(true, {}, name);=0A=
=0A=
		} else if ( !cache[ id ] ) {=0A=
			elem[ expando ] =3D id;=0A=
			cache[ id ] =3D {};=0A=
		}=0A=
=0A=
		thisCache =3D cache[ id ];=0A=
=0A=
		// Prevent overriding the named cache with undefined values=0A=
		if ( data !=3D=3D undefined ) {=0A=
			thisCache[ name ] =3D data;=0A=
		}=0A=
=0A=
		return typeof name =3D=3D=3D "string" ? thisCache[ name ] : thisCache;=0A=
	},=0A=
=0A=
	removeData: function( elem, name ) {=0A=
		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {=0A=
			return;=0A=
		}=0A=
=0A=
		elem =3D elem =3D=3D window ?=0A=
			windowData :=0A=
			elem;=0A=
=0A=
		var id =3D elem[ expando ], cache =3D jQuery.cache, thisCache =3D =
cache[ id ];=0A=
=0A=
		// If we want to remove a specific section of the element's data=0A=
		if ( name ) {=0A=
			if ( thisCache ) {=0A=
				// Remove the section of cache data=0A=
				delete thisCache[ name ];=0A=
=0A=
				// If we've removed all the data, remove the element's cache=0A=
				if ( jQuery.isEmptyObject(thisCache) ) {=0A=
					jQuery.removeData( elem );=0A=
				}=0A=
			}=0A=
=0A=
		// Otherwise, we want to remove all of the element's data=0A=
		} else {=0A=
			if ( jQuery.support.deleteExpando ) {=0A=
				delete elem[ jQuery.expando ];=0A=
=0A=
			} else if ( elem.removeAttribute ) {=0A=
				elem.removeAttribute( jQuery.expando );=0A=
			}=0A=
=0A=
			// Completely remove the data cache=0A=
			delete cache[ id ];=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
jQuery.fn.extend({=0A=
	data: function( key, value ) {=0A=
		if ( typeof key =3D=3D=3D "undefined" && this.length ) {=0A=
			return jQuery.data( this[0] );=0A=
=0A=
		} else if ( typeof key =3D=3D=3D "object" ) {=0A=
			return this.each(function() {=0A=
				jQuery.data( this, key );=0A=
			});=0A=
		}=0A=
=0A=
		var parts =3D key.split(".");=0A=
		parts[1] =3D parts[1] ? "." + parts[1] : "";=0A=
=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			var data =3D this.triggerHandler("getData" + parts[1] + "!", =
[parts[0]]);=0A=
=0A=
			if ( data =3D=3D=3D undefined && this.length ) {=0A=
				data =3D jQuery.data( this[0], key );=0A=
			}=0A=
			return data =3D=3D=3D undefined && parts[1] ?=0A=
				this.data( parts[0] ) :=0A=
				data;=0A=
		} else {=0A=
			return this.trigger("setData" + parts[1] + "!", [parts[0], =
value]).each(function() {=0A=
				jQuery.data( this, key, value );=0A=
			});=0A=
		}=0A=
	},=0A=
=0A=
	removeData: function( key ) {=0A=
		return this.each(function() {=0A=
			jQuery.removeData( this, key );=0A=
		});=0A=
	}=0A=
});=0A=
jQuery.extend({=0A=
	queue: function( elem, type, data ) {=0A=
		if ( !elem ) {=0A=
			return;=0A=
		}=0A=
=0A=
		type =3D (type || "fx") + "queue";=0A=
		var q =3D jQuery.data( elem, type );=0A=
=0A=
		// Speed up dequeue by getting out quickly if this is just a lookup=0A=
		if ( !data ) {=0A=
			return q || [];=0A=
		}=0A=
=0A=
		if ( !q || jQuery.isArray(data) ) {=0A=
			q =3D jQuery.data( elem, type, jQuery.makeArray(data) );=0A=
=0A=
		} else {=0A=
			q.push( data );=0A=
		}=0A=
=0A=
		return q;=0A=
	},=0A=
=0A=
	dequeue: function( elem, type ) {=0A=
		type =3D type || "fx";=0A=
=0A=
		var queue =3D jQuery.queue( elem, type ), fn =3D queue.shift();=0A=
=0A=
		// If the fx queue is dequeued, always remove the progress sentinel=0A=
		if ( fn =3D=3D=3D "inprogress" ) {=0A=
			fn =3D queue.shift();=0A=
		}=0A=
=0A=
		if ( fn ) {=0A=
			// Add a progress sentinel to prevent the fx queue from being=0A=
			// automatically dequeued=0A=
			if ( type =3D=3D=3D "fx" ) {=0A=
				queue.unshift("inprogress");=0A=
			}=0A=
=0A=
			fn.call(elem, function() {=0A=
				jQuery.dequeue(elem, type);=0A=
			});=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
jQuery.fn.extend({=0A=
	queue: function( type, data ) {=0A=
		if ( typeof type !=3D=3D "string" ) {=0A=
			data =3D type;=0A=
			type =3D "fx";=0A=
		}=0A=
=0A=
		if ( data =3D=3D=3D undefined ) {=0A=
			return jQuery.queue( this[0], type );=0A=
		}=0A=
		return this.each(function( i, elem ) {=0A=
			var queue =3D jQuery.queue( this, type, data );=0A=
=0A=
			if ( type =3D=3D=3D "fx" && queue[0] !=3D=3D "inprogress" ) {=0A=
				jQuery.dequeue( this, type );=0A=
			}=0A=
		});=0A=
	},=0A=
	dequeue: function( type ) {=0A=
		return this.each(function() {=0A=
			jQuery.dequeue( this, type );=0A=
		});=0A=
	},=0A=
=0A=
	// Based off of the plugin by Clint Helfers, with permission.=0A=
	// http://blindsignals.com/index.php/2009/07/jquery-delay/=0A=
	delay: function( time, type ) {=0A=
		time =3D jQuery.fx ? jQuery.fx.speeds[time] || time : time;=0A=
		type =3D type || "fx";=0A=
=0A=
		return this.queue( type, function() {=0A=
			var elem =3D this;=0A=
			setTimeout(function() {=0A=
				jQuery.dequeue( elem, type );=0A=
			}, time );=0A=
		});=0A=
	},=0A=
=0A=
	clearQueue: function( type ) {=0A=
		return this.queue( type || "fx", [] );=0A=
	}=0A=
});=0A=
var rclass =3D /[\n\t]/g,=0A=
	rspace =3D /\s+/,=0A=
	rreturn =3D /\r/g,=0A=
	rspecialurl =3D /href|src|style/,=0A=
	rtype =3D /(button|input)/i,=0A=
	rfocusable =3D /(button|input|object|select|textarea)/i,=0A=
	rclickable =3D /^(a|area)$/i,=0A=
	rradiocheck =3D /radio|checkbox/;=0A=
=0A=
jQuery.fn.extend({=0A=
	attr: function( name, value ) {=0A=
		return access( this, name, value, true, jQuery.attr );=0A=
	},=0A=
=0A=
	removeAttr: function( name, fn ) {=0A=
		return this.each(function(){=0A=
			jQuery.attr( this, name, "" );=0A=
			if ( this.nodeType =3D=3D=3D 1 ) {=0A=
				this.removeAttribute( name );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	addClass: function( value ) {=0A=
		if ( jQuery.isFunction(value) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.addClass( value.call(this, i, self.attr("class")) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( value && typeof value =3D=3D=3D "string" ) {=0A=
			var classNames =3D (value || "").split( rspace );=0A=
=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				var elem =3D this[i];=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
					if ( !elem.className ) {=0A=
						elem.className =3D value;=0A=
=0A=
					} else {=0A=
						var className =3D " " + elem.className + " ", setClass =3D =
elem.className;=0A=
						for ( var c =3D 0, cl =3D classNames.length; c < cl; c++ ) {=0A=
							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {=0A=
								setClass +=3D " " + classNames[c];=0A=
							}=0A=
						}=0A=
						elem.className =3D jQuery.trim( setClass );=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	removeClass: function( value ) {=0A=
		if ( jQuery.isFunction(value) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.removeClass( value.call(this, i, self.attr("class")) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( (value && typeof value =3D=3D=3D "string") || value =3D=3D=3D =
undefined ) {=0A=
			var classNames =3D (value || "").split(rspace);=0A=
=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				var elem =3D this[i];=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 && elem.className ) {=0A=
					if ( value ) {=0A=
						var className =3D (" " + elem.className + " ").replace(rclass, " =
");=0A=
						for ( var c =3D 0, cl =3D classNames.length; c < cl; c++ ) {=0A=
							className =3D className.replace(" " + classNames[c] + " ", " ");=0A=
						}=0A=
						elem.className =3D jQuery.trim( className );=0A=
=0A=
					} else {=0A=
						elem.className =3D "";=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	toggleClass: function( value, stateVal ) {=0A=
		var type =3D typeof value, isBool =3D typeof stateVal =3D=3D=3D =
"boolean";=0A=
=0A=
		if ( jQuery.isFunction( value ) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), =
stateVal );=0A=
			});=0A=
		}=0A=
=0A=
		return this.each(function() {=0A=
			if ( type =3D=3D=3D "string" ) {=0A=
				// toggle individual class names=0A=
				var className, i =3D 0, self =3D jQuery(this),=0A=
					state =3D stateVal,=0A=
					classNames =3D value.split( rspace );=0A=
=0A=
				while ( (className =3D classNames[ i++ ]) ) {=0A=
					// check each className given, space seperated list=0A=
					state =3D isBool ? state : !self.hasClass( className );=0A=
					self[ state ? "addClass" : "removeClass" ]( className );=0A=
				}=0A=
=0A=
			} else if ( type =3D=3D=3D "undefined" || type =3D=3D=3D "boolean" ) {=0A=
				if ( this.className ) {=0A=
					// store className if set=0A=
					jQuery.data( this, "__className__", this.className );=0A=
				}=0A=
=0A=
				// toggle whole className=0A=
				this.className =3D this.className || value =3D=3D=3D false ? "" : =
jQuery.data( this, "__className__" ) || "";=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	hasClass: function( selector ) {=0A=
		var className =3D " " + selector + " ";=0A=
		for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( =
className ) > -1 ) {=0A=
				return true;=0A=
			}=0A=
		}=0A=
=0A=
		return false;=0A=
	},=0A=
=0A=
	val: function( value ) {=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			var elem =3D this[0];=0A=
=0A=
			if ( elem ) {=0A=
				if ( jQuery.nodeName( elem, "option" ) ) {=0A=
					return (elem.attributes.value || {}).specified ? elem.value : =
elem.text;=0A=
				}=0A=
=0A=
				// We need to handle select boxes special=0A=
				if ( jQuery.nodeName( elem, "select" ) ) {=0A=
					var index =3D elem.selectedIndex,=0A=
						values =3D [],=0A=
						options =3D elem.options,=0A=
						one =3D elem.type =3D=3D=3D "select-one";=0A=
=0A=
					// Nothing was selected=0A=
					if ( index < 0 ) {=0A=
						return null;=0A=
					}=0A=
=0A=
					// Loop through all the selected options=0A=
					for ( var i =3D one ? index : 0, max =3D one ? index + 1 : =
options.length; i < max; i++ ) {=0A=
						var option =3D options[ i ];=0A=
=0A=
						if ( option.selected ) {=0A=
							// Get the specifc value for the option=0A=
							value =3D jQuery(option).val();=0A=
=0A=
							// We don't need an array for one selects=0A=
							if ( one ) {=0A=
								return value;=0A=
							}=0A=
=0A=
							// Multi-Selects return an array=0A=
							values.push( value );=0A=
						}=0A=
					}=0A=
=0A=
					return values;=0A=
				}=0A=
=0A=
				// Handle the case where in Webkit "" is returned instead of "on" if =
a value isn't specified=0A=
				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {=0A=
					return elem.getAttribute("value") =3D=3D=3D null ? "on" : =
elem.value;=0A=
				}=0A=
				=0A=
=0A=
				// Everything else, we just grab the value=0A=
				return (elem.value || "").replace(rreturn, "");=0A=
=0A=
			}=0A=
=0A=
			return undefined;=0A=
		}=0A=
=0A=
		var isFunction =3D jQuery.isFunction(value);=0A=
=0A=
		return this.each(function(i) {=0A=
			var self =3D jQuery(this), val =3D value;=0A=
=0A=
			if ( this.nodeType !=3D=3D 1 ) {=0A=
				return;=0A=
			}=0A=
=0A=
			if ( isFunction ) {=0A=
				val =3D value.call(this, i, self.val());=0A=
			}=0A=
=0A=
			// Typecast each time if the value is a Function and the appended=0A=
			// value is therefore different each time.=0A=
			if ( typeof val =3D=3D=3D "number" ) {=0A=
				val +=3D "";=0A=
			}=0A=
=0A=
			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {=0A=
				this.checked =3D jQuery.inArray( self.val(), val ) >=3D 0;=0A=
=0A=
			} else if ( jQuery.nodeName( this, "select" ) ) {=0A=
				var values =3D jQuery.makeArray(val);=0A=
=0A=
				jQuery( "option", this ).each(function() {=0A=
					this.selected =3D jQuery.inArray( jQuery(this).val(), values ) >=3D =
0;=0A=
				});=0A=
=0A=
				if ( !values.length ) {=0A=
					this.selectedIndex =3D -1;=0A=
				}=0A=
=0A=
			} else {=0A=
				this.value =3D val;=0A=
			}=0A=
		});=0A=
	}=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	attrFn: {=0A=
		val: true,=0A=
		css: true,=0A=
		html: true,=0A=
		text: true,=0A=
		data: true,=0A=
		width: true,=0A=
		height: true,=0A=
		offset: true=0A=
	},=0A=
		=0A=
	attr: function( elem, name, value, pass ) {=0A=
		// don't set attributes on text and comment nodes=0A=
		if ( !elem || elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) =
{=0A=
			return undefined;=0A=
		}=0A=
=0A=
		if ( pass && name in jQuery.attrFn ) {=0A=
			return jQuery(elem)[name](value);=0A=
		}=0A=
=0A=
		var notxml =3D elem.nodeType !=3D=3D 1 || !jQuery.isXMLDoc( elem ),=0A=
			// Whether we are setting (or getting)=0A=
			set =3D value !=3D=3D undefined;=0A=
=0A=
		// Try to normalize/fix the name=0A=
		name =3D notxml && jQuery.props[ name ] || name;=0A=
=0A=
		// Only do all the following if this is a node (faster for style)=0A=
		if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
			// These attributes require special treatment=0A=
			var special =3D rspecialurl.test( name );=0A=
=0A=
			// Safari mis-reports the default selected property of an option=0A=
			// Accessing the parent's selectedIndex property fixes it=0A=
			if ( name =3D=3D=3D "selected" && !jQuery.support.optSelected ) {=0A=
				var parent =3D elem.parentNode;=0A=
				if ( parent ) {=0A=
					parent.selectedIndex;=0A=
	=0A=
					// Make sure that it also works with optgroups, see #5701=0A=
					if ( parent.parentNode ) {=0A=
						parent.parentNode.selectedIndex;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			// If applicable, access the attribute via the DOM 0 way=0A=
			if ( name in elem && notxml && !special ) {=0A=
				if ( set ) {=0A=
					// We can't allow the type property to be changed (since it causes =
problems in IE)=0A=
					if ( name =3D=3D=3D "type" && rtype.test( elem.nodeName ) && =
elem.parentNode ) {=0A=
						jQuery.error( "type property can't be changed" );=0A=
					}=0A=
=0A=
					elem[ name ] =3D value;=0A=
				}=0A=
=0A=
				// browsers index elements by id/name on forms, give priority to =
attributes.=0A=
				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) =
) {=0A=
					return elem.getAttributeNode( name ).nodeValue;=0A=
				}=0A=
=0A=
				// elem.tabIndex doesn't always return the correct value when it =
hasn't been explicitly set=0A=
				// =
http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabi=
ndex-values-with-javascript/=0A=
				if ( name =3D=3D=3D "tabIndex" ) {=0A=
					var attributeNode =3D elem.getAttributeNode( "tabIndex" );=0A=
=0A=
					return attributeNode && attributeNode.specified ?=0A=
						attributeNode.value :=0A=
						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName =
) && elem.href ?=0A=
							0 :=0A=
							undefined;=0A=
				}=0A=
=0A=
				return elem[ name ];=0A=
			}=0A=
=0A=
			if ( !jQuery.support.style && notxml && name =3D=3D=3D "style" ) {=0A=
				if ( set ) {=0A=
					elem.style.cssText =3D "" + value;=0A=
				}=0A=
=0A=
				return elem.style.cssText;=0A=
			}=0A=
=0A=
			if ( set ) {=0A=
				// convert the value to a string (all browsers do this but IE) see =
#1070=0A=
				elem.setAttribute( name, "" + value );=0A=
			}=0A=
=0A=
			var attr =3D !jQuery.support.hrefNormalized && notxml && special ?=0A=
					// Some attributes require a special call on IE=0A=
					elem.getAttribute( name, 2 ) :=0A=
					elem.getAttribute( name );=0A=
=0A=
			// Non-existent attributes return null, we normalize to undefined=0A=
			return attr =3D=3D=3D null ? undefined : attr;=0A=
		}=0A=
=0A=
		// elem is actually elem.style ... set the style=0A=
		// Using attr for specific style information is now deprecated. Use =
style instead.=0A=
		return jQuery.style( elem, name, value );=0A=
	}=0A=
});=0A=
var rnamespaces =3D /\.(.*)$/,=0A=
	fcleanup =3D function( nm ) {=0A=
		return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {=0A=
			return "\\" + ch;=0A=
		});=0A=
	};=0A=
=0A=
/*=0A=
 * A number of helper functions used for managing events.=0A=
 * Many of the ideas behind this code originated from=0A=
 * Dean Edwards' addEvent library.=0A=
 */=0A=
jQuery.event =3D {=0A=
=0A=
	// Bind an event to an element=0A=
	// Original by Dean Edwards=0A=
	add: function( elem, types, handler, data ) {=0A=
		if ( elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// For whatever reason, IE has trouble passing the window object=0A=
		// around, causing it to be cloned in the process=0A=
		if ( elem.setInterval && ( elem !=3D=3D window && !elem.frameElement ) =
) {=0A=
			elem =3D window;=0A=
		}=0A=
=0A=
		var handleObjIn, handleObj;=0A=
=0A=
		if ( handler.handler ) {=0A=
			handleObjIn =3D handler;=0A=
			handler =3D handleObjIn.handler;=0A=
		}=0A=
=0A=
		// Make sure that the function being executed has a unique ID=0A=
		if ( !handler.guid ) {=0A=
			handler.guid =3D jQuery.guid++;=0A=
		}=0A=
=0A=
		// Init the element's event structure=0A=
		var elemData =3D jQuery.data( elem );=0A=
=0A=
		// If no elemData is found then we must be trying to bind to one of the=0A=
		// banned noData elements=0A=
		if ( !elemData ) {=0A=
			return;=0A=
		}=0A=
=0A=
		var events =3D elemData.events =3D elemData.events || {},=0A=
			eventHandle =3D elemData.handle, eventHandle;=0A=
=0A=
		if ( !eventHandle ) {=0A=
			elemData.handle =3D eventHandle =3D function() {=0A=
				// Handle the second event of a trigger and when=0A=
				// an event is called after a page has unloaded=0A=
				return typeof jQuery !=3D=3D "undefined" && !jQuery.event.triggered ?=0A=
					jQuery.event.handle.apply( eventHandle.elem, arguments ) :=0A=
					undefined;=0A=
			};=0A=
		}=0A=
=0A=
		// Add elem as a property of the handle function=0A=
		// This is to prevent a memory leak with non-native events in IE.=0A=
		eventHandle.elem =3D elem;=0A=
=0A=
		// Handle multiple events separated by a space=0A=
		// jQuery(...).bind("mouseover mouseout", fn);=0A=
		types =3D types.split(" ");=0A=
=0A=
		var type, i =3D 0, namespaces;=0A=
=0A=
		while ( (type =3D types[ i++ ]) ) {=0A=
			handleObj =3D handleObjIn ?=0A=
				jQuery.extend({}, handleObjIn) :=0A=
				{ handler: handler, data: data };=0A=
=0A=
			// Namespaced event handlers=0A=
			if ( type.indexOf(".") > -1 ) {=0A=
				namespaces =3D type.split(".");=0A=
				type =3D namespaces.shift();=0A=
				handleObj.namespace =3D namespaces.slice(0).sort().join(".");=0A=
=0A=
			} else {=0A=
				namespaces =3D [];=0A=
				handleObj.namespace =3D "";=0A=
			}=0A=
=0A=
			handleObj.type =3D type;=0A=
			handleObj.guid =3D handler.guid;=0A=
=0A=
			// Get the current list of functions bound to this event=0A=
			var handlers =3D events[ type ],=0A=
				special =3D jQuery.event.special[ type ] || {};=0A=
=0A=
			// Init the event handler queue=0A=
			if ( !handlers ) {=0A=
				handlers =3D events[ type ] =3D [];=0A=
=0A=
				// Check for a special event handler=0A=
				// Only use addEventListener/attachEvent if the special=0A=
				// events handler returns false=0A=
				if ( !special.setup || special.setup.call( elem, data, namespaces, =
eventHandle ) =3D=3D=3D false ) {=0A=
					// Bind the global event handler to the element=0A=
					if ( elem.addEventListener ) {=0A=
						elem.addEventListener( type, eventHandle, false );=0A=
=0A=
					} else if ( elem.attachEvent ) {=0A=
						elem.attachEvent( "on" + type, eventHandle );=0A=
					}=0A=
				}=0A=
			}=0A=
			=0A=
			if ( special.add ) { =0A=
				special.add.call( elem, handleObj ); =0A=
=0A=
				if ( !handleObj.handler.guid ) {=0A=
					handleObj.handler.guid =3D handler.guid;=0A=
				}=0A=
			}=0A=
=0A=
			// Add the function to the element's handler list=0A=
			handlers.push( handleObj );=0A=
=0A=
			// Keep track of which events have been used, for global triggering=0A=
			jQuery.event.global[ type ] =3D true;=0A=
		}=0A=
=0A=
		// Nullify elem to prevent memory leaks in IE=0A=
		elem =3D null;=0A=
	},=0A=
=0A=
	global: {},=0A=
=0A=
	// Detach an event or set of events from an element=0A=
	remove: function( elem, types, handler, pos ) {=0A=
		// don't do events on text and comment nodes=0A=
		if ( elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) {=0A=
			return;=0A=
		}=0A=
=0A=
		var ret, type, fn, i =3D 0, all, namespaces, namespace, special, =
eventType, handleObj, origType,=0A=
			elemData =3D jQuery.data( elem ),=0A=
			events =3D elemData && elemData.events;=0A=
=0A=
		if ( !elemData || !events ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// types is actually an event object here=0A=
		if ( types && types.type ) {=0A=
			handler =3D types.handler;=0A=
			types =3D types.type;=0A=
		}=0A=
=0A=
		// Unbind all events for the element=0A=
		if ( !types || typeof types =3D=3D=3D "string" && types.charAt(0) =
=3D=3D=3D "." ) {=0A=
			types =3D types || "";=0A=
=0A=
			for ( type in events ) {=0A=
				jQuery.event.remove( elem, type + types );=0A=
			}=0A=
=0A=
			return;=0A=
		}=0A=
=0A=
		// Handle multiple events separated by a space=0A=
		// jQuery(...).unbind("mouseover mouseout", fn);=0A=
		types =3D types.split(" ");=0A=
=0A=
		while ( (type =3D types[ i++ ]) ) {=0A=
			origType =3D type;=0A=
			handleObj =3D null;=0A=
			all =3D type.indexOf(".") < 0;=0A=
			namespaces =3D [];=0A=
=0A=
			if ( !all ) {=0A=
				// Namespaced event handlers=0A=
				namespaces =3D type.split(".");=0A=
				type =3D namespaces.shift();=0A=
=0A=
				namespace =3D new RegExp("(^|\\.)" + =0A=
					jQuery.map( namespaces.slice(0).sort(), fcleanup =
).join("\\.(?:.*\\.)?") + "(\\.|$)")=0A=
			}=0A=
=0A=
			eventType =3D events[ type ];=0A=
=0A=
			if ( !eventType ) {=0A=
				continue;=0A=
			}=0A=
=0A=
			if ( !handler ) {=0A=
				for ( var j =3D 0; j < eventType.length; j++ ) {=0A=
					handleObj =3D eventType[ j ];=0A=
=0A=
					if ( all || namespace.test( handleObj.namespace ) ) {=0A=
						jQuery.event.remove( elem, origType, handleObj.handler, j );=0A=
						eventType.splice( j--, 1 );=0A=
					}=0A=
				}=0A=
=0A=
				continue;=0A=
			}=0A=
=0A=
			special =3D jQuery.event.special[ type ] || {};=0A=
=0A=
			for ( var j =3D pos || 0; j < eventType.length; j++ ) {=0A=
				handleObj =3D eventType[ j ];=0A=
=0A=
				if ( handler.guid =3D=3D=3D handleObj.guid ) {=0A=
					// remove the given handler for the given type=0A=
					if ( all || namespace.test( handleObj.namespace ) ) {=0A=
						if ( pos =3D=3D null ) {=0A=
							eventType.splice( j--, 1 );=0A=
						}=0A=
=0A=
						if ( special.remove ) {=0A=
							special.remove.call( elem, handleObj );=0A=
						}=0A=
					}=0A=
=0A=
					if ( pos !=3D null ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			// remove generic event handler if no more handlers exist=0A=
			if ( eventType.length =3D=3D=3D 0 || pos !=3D null && =
eventType.length =3D=3D=3D 1 ) {=0A=
				if ( !special.teardown || special.teardown.call( elem, namespaces ) =
=3D=3D=3D false ) {=0A=
					removeEvent( elem, type, elemData.handle );=0A=
				}=0A=
=0A=
				ret =3D null;=0A=
				delete events[ type ];=0A=
			}=0A=
		}=0A=
=0A=
		// Remove the expando if it's no longer used=0A=
		if ( jQuery.isEmptyObject( events ) ) {=0A=
			var handle =3D elemData.handle;=0A=
			if ( handle ) {=0A=
				handle.elem =3D null;=0A=
			}=0A=
=0A=
			delete elemData.events;=0A=
			delete elemData.handle;=0A=
=0A=
			if ( jQuery.isEmptyObject( elemData ) ) {=0A=
				jQuery.removeData( elem );=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	// bubbling is internal=0A=
	trigger: function( event, data, elem /*, bubbling */ ) {=0A=
		// Event object or event type=0A=
		var type =3D event.type || event,=0A=
			bubbling =3D arguments[3];=0A=
=0A=
		if ( !bubbling ) {=0A=
			event =3D typeof event =3D=3D=3D "object" ?=0A=
				// jQuery.Event object=0A=
				event[expando] ? event :=0A=
				// Object literal=0A=
				jQuery.extend( jQuery.Event(type), event ) :=0A=
				// Just the event type (string)=0A=
				jQuery.Event(type);=0A=
=0A=
			if ( type.indexOf("!") >=3D 0 ) {=0A=
				event.type =3D type =3D type.slice(0, -1);=0A=
				event.exclusive =3D true;=0A=
			}=0A=
=0A=
			// Handle a global trigger=0A=
			if ( !elem ) {=0A=
				// Don't bubble custom events when global (to avoid too much =
overhead)=0A=
				event.stopPropagation();=0A=
=0A=
				// Only trigger if we've ever bound an event for it=0A=
				if ( jQuery.event.global[ type ] ) {=0A=
					jQuery.each( jQuery.cache, function() {=0A=
						if ( this.events && this.events[type] ) {=0A=
							jQuery.event.trigger( event, data, this.handle.elem );=0A=
						}=0A=
					});=0A=
				}=0A=
			}=0A=
=0A=
			// Handle triggering a single element=0A=
=0A=
			// don't do events on text and comment nodes=0A=
			if ( !elem || elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 =
) {=0A=
				return undefined;=0A=
			}=0A=
=0A=
			// Clean up in case it is reused=0A=
			event.result =3D undefined;=0A=
			event.target =3D elem;=0A=
=0A=
			// Clone the incoming data, if any=0A=
			data =3D jQuery.makeArray( data );=0A=
			data.unshift( event );=0A=
		}=0A=
=0A=
		event.currentTarget =3D elem;=0A=
=0A=
		// Trigger the event, it is assumed that "handle" is a function=0A=
		var handle =3D jQuery.data( elem, "handle" );=0A=
		if ( handle ) {=0A=
			handle.apply( elem, data );=0A=
		}=0A=
=0A=
		var parent =3D elem.parentNode || elem.ownerDocument;=0A=
=0A=
		// Trigger an inline bound script=0A=
		try {=0A=
			if ( !(elem && elem.nodeName && =
jQuery.noData[elem.nodeName.toLowerCase()]) ) {=0A=
				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) =
=3D=3D=3D false ) {=0A=
					event.result =3D false;=0A=
				}=0A=
			}=0A=
=0A=
		// prevent IE from throwing an error for some elements with some event =
types, see #3533=0A=
		} catch (e) {}=0A=
=0A=
		if ( !event.isPropagationStopped() && parent ) {=0A=
			jQuery.event.trigger( event, data, parent, true );=0A=
=0A=
		} else if ( !event.isDefaultPrevented() ) {=0A=
			var target =3D event.target, old,=0A=
				isClick =3D jQuery.nodeName(target, "a") && type =3D=3D=3D "click",=0A=
				special =3D jQuery.event.special[ type ] || {};=0A=
=0A=
			if ( (!special._default || special._default.call( elem, event ) =
=3D=3D=3D false) && =0A=
				!isClick && !(target && target.nodeName && =
jQuery.noData[target.nodeName.toLowerCase()]) ) {=0A=
=0A=
				try {=0A=
					if ( target[ type ] ) {=0A=
						// Make sure that we don't accidentally re-trigger the onFOO events=0A=
						old =3D target[ "on" + type ];=0A=
=0A=
						if ( old ) {=0A=
							target[ "on" + type ] =3D null;=0A=
						}=0A=
=0A=
						jQuery.event.triggered =3D true;=0A=
						target[ type ]();=0A=
					}=0A=
=0A=
				// prevent IE from throwing an error for some elements with some =
event types, see #3533=0A=
				} catch (e) {}=0A=
=0A=
				if ( old ) {=0A=
					target[ "on" + type ] =3D old;=0A=
				}=0A=
=0A=
				jQuery.event.triggered =3D false;=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	handle: function( event ) {=0A=
		var all, handlers, namespaces, namespace, events;=0A=
=0A=
		event =3D arguments[0] =3D jQuery.event.fix( event || window.event );=0A=
		event.currentTarget =3D this;=0A=
=0A=
		// Namespaced event handlers=0A=
		all =3D event.type.indexOf(".") < 0 && !event.exclusive;=0A=
=0A=
		if ( !all ) {=0A=
			namespaces =3D event.type.split(".");=0A=
			event.type =3D namespaces.shift();=0A=
			namespace =3D new RegExp("(^|\\.)" + =
namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");=0A=
		}=0A=
=0A=
		var events =3D jQuery.data(this, "events"), handlers =3D events[ =
event.type ];=0A=
=0A=
		if ( events && handlers ) {=0A=
			// Clone the handlers to prevent manipulation=0A=
			handlers =3D handlers.slice(0);=0A=
=0A=
			for ( var j =3D 0, l =3D handlers.length; j < l; j++ ) {=0A=
				var handleObj =3D handlers[ j ];=0A=
=0A=
				// Filter the functions by class=0A=
				if ( all || namespace.test( handleObj.namespace ) ) {=0A=
					// Pass in a reference to the handler function itself=0A=
					// So that we can later remove it=0A=
					event.handler =3D handleObj.handler;=0A=
					event.data =3D handleObj.data;=0A=
					event.handleObj =3D handleObj;=0A=
	=0A=
					var ret =3D handleObj.handler.apply( this, arguments );=0A=
=0A=
					if ( ret !=3D=3D undefined ) {=0A=
						event.result =3D ret;=0A=
						if ( ret =3D=3D=3D false ) {=0A=
							event.preventDefault();=0A=
							event.stopPropagation();=0A=
						}=0A=
					}=0A=
=0A=
					if ( event.isImmediatePropagationStopped() ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return event.result;=0A=
	},=0A=
=0A=
	props: "altKey attrChange attrName bubbles button cancelable charCode =
clientX clientY ctrlKey currentTarget data detail eventPhase fromElement =
handler keyCode layerX layerY metaKey newValue offsetX offsetY =
originalTarget pageX pageY prevValue relatedNode relatedTarget screenX =
screenY shiftKey srcElement target toElement view wheelDelta =
which".split(" "),=0A=
=0A=
	fix: function( event ) {=0A=
		if ( event[ expando ] ) {=0A=
			return event;=0A=
		}=0A=
=0A=
		// store a copy of the original event object=0A=
		// and "clone" to set read-only properties=0A=
		var originalEvent =3D event;=0A=
		event =3D jQuery.Event( originalEvent );=0A=
=0A=
		for ( var i =3D this.props.length, prop; i; ) {=0A=
			prop =3D this.props[ --i ];=0A=
			event[ prop ] =3D originalEvent[ prop ];=0A=
		}=0A=
=0A=
		// Fix target property, if necessary=0A=
		if ( !event.target ) {=0A=
			event.target =3D event.srcElement || document; // Fixes #1925 where =
srcElement might not be defined either=0A=
		}=0A=
=0A=
		// check if target is a textnode (safari)=0A=
		if ( event.target.nodeType =3D=3D=3D 3 ) {=0A=
			event.target =3D event.target.parentNode;=0A=
		}=0A=
=0A=
		// Add relatedTarget, if necessary=0A=
		if ( !event.relatedTarget && event.fromElement ) {=0A=
			event.relatedTarget =3D event.fromElement =3D=3D=3D event.target ? =
event.toElement : event.fromElement;=0A=
		}=0A=
=0A=
		// Calculate pageX/Y if missing and clientX/Y available=0A=
		if ( event.pageX =3D=3D null && event.clientX !=3D null ) {=0A=
			var doc =3D document.documentElement, body =3D document.body;=0A=
			event.pageX =3D event.clientX + (doc && doc.scrollLeft || body && =
body.scrollLeft || 0) - (doc && doc.clientLeft || body && =
body.clientLeft || 0);=0A=
			event.pageY =3D event.clientY + (doc && doc.scrollTop  || body && =
body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop =
 || 0);=0A=
		}=0A=
=0A=
		// Add which for key events=0A=
		if ( !event.which && ((event.charCode || event.charCode =3D=3D=3D 0) ? =
event.charCode : event.keyCode) ) {=0A=
			event.which =3D event.charCode || event.keyCode;=0A=
		}=0A=
=0A=
		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for =
Macs)=0A=
		if ( !event.metaKey && event.ctrlKey ) {=0A=
			event.metaKey =3D event.ctrlKey;=0A=
		}=0A=
=0A=
		// Add which for click: 1 =3D=3D=3D left; 2 =3D=3D=3D middle; 3 =
=3D=3D=3D right=0A=
		// Note: button is not normalized, so don't use it=0A=
		if ( !event.which && event.button !=3D=3D undefined ) {=0A=
			event.which =3D (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( =
event.button & 4 ? 2 : 0 ) ));=0A=
		}=0A=
=0A=
		return event;=0A=
	},=0A=
=0A=
	// Deprecated, use jQuery.guid instead=0A=
	guid: 1E8,=0A=
=0A=
	// Deprecated, use jQuery.proxy instead=0A=
	proxy: jQuery.proxy,=0A=
=0A=
	special: {=0A=
		ready: {=0A=
			// Make sure the ready event is setup=0A=
			setup: jQuery.bindReady,=0A=
			teardown: jQuery.noop=0A=
		},=0A=
=0A=
		live: {=0A=
			add: function( handleObj ) {=0A=
				jQuery.event.add( this, handleObj.origType, jQuery.extend({}, =
handleObj, {handler: liveHandler}) ); =0A=
			},=0A=
=0A=
			remove: function( handleObj ) {=0A=
				var remove =3D true,=0A=
					type =3D handleObj.origType.replace(rnamespaces, "");=0A=
				=0A=
				jQuery.each( jQuery.data(this, "events").live || [], function() {=0A=
					if ( type =3D=3D=3D this.origType.replace(rnamespaces, "") ) {=0A=
						remove =3D false;=0A=
						return false;=0A=
					}=0A=
				});=0A=
=0A=
				if ( remove ) {=0A=
					jQuery.event.remove( this, handleObj.origType, liveHandler );=0A=
				}=0A=
			}=0A=
=0A=
		},=0A=
=0A=
		beforeunload: {=0A=
			setup: function( data, namespaces, eventHandle ) {=0A=
				// We only want to do this special case on windows=0A=
				if ( this.setInterval ) {=0A=
					this.onbeforeunload =3D eventHandle;=0A=
				}=0A=
=0A=
				return false;=0A=
			},=0A=
			teardown: function( namespaces, eventHandle ) {=0A=
				if ( this.onbeforeunload =3D=3D=3D eventHandle ) {=0A=
					this.onbeforeunload =3D null;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
var removeEvent =3D document.removeEventListener ?=0A=
	function( elem, type, handle ) {=0A=
		elem.removeEventListener( type, handle, false );=0A=
	} : =0A=
	function( elem, type, handle ) {=0A=
		elem.detachEvent( "on" + type, handle );=0A=
	};=0A=
=0A=
jQuery.Event =3D function( src ) {=0A=
	// Allow instantiation without the 'new' keyword=0A=
	if ( !this.preventDefault ) {=0A=
		return new jQuery.Event( src );=0A=
	}=0A=
=0A=
	// Event object=0A=
	if ( src && src.type ) {=0A=
		this.originalEvent =3D src;=0A=
		this.type =3D src.type;=0A=
	// Event type=0A=
	} else {=0A=
		this.type =3D src;=0A=
	}=0A=
=0A=
	// timeStamp is buggy for some events on Firefox(#3843)=0A=
	// So we won't rely on the native value=0A=
	this.timeStamp =3D now();=0A=
=0A=
	// Mark it as fixed=0A=
	this[ expando ] =3D true;=0A=
};=0A=
=0A=
function returnFalse() {=0A=
	return false;=0A=
}=0A=
function returnTrue() {=0A=
	return true;=0A=
}=0A=
=0A=
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript =
Language Binding=0A=
// =
http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-bind=
ing.html=0A=
jQuery.Event.prototype =3D {=0A=
	preventDefault: function() {=0A=
		this.isDefaultPrevented =3D returnTrue;=0A=
=0A=
		var e =3D this.originalEvent;=0A=
		if ( !e ) {=0A=
			return;=0A=
		}=0A=
		=0A=
		// if preventDefault exists run it on the original event=0A=
		if ( e.preventDefault ) {=0A=
			e.preventDefault();=0A=
		}=0A=
		// otherwise set the returnValue property of the original event to =
false (IE)=0A=
		e.returnValue =3D false;=0A=
	},=0A=
	stopPropagation: function() {=0A=
		this.isPropagationStopped =3D returnTrue;=0A=
=0A=
		var e =3D this.originalEvent;=0A=
		if ( !e ) {=0A=
			return;=0A=
		}=0A=
		// if stopPropagation exists run it on the original event=0A=
		if ( e.stopPropagation ) {=0A=
			e.stopPropagation();=0A=
		}=0A=
		// otherwise set the cancelBubble property of the original event to =
true (IE)=0A=
		e.cancelBubble =3D true;=0A=
	},=0A=
	stopImmediatePropagation: function() {=0A=
		this.isImmediatePropagationStopped =3D returnTrue;=0A=
		this.stopPropagation();=0A=
	},=0A=
	isDefaultPrevented: returnFalse,=0A=
	isPropagationStopped: returnFalse,=0A=
	isImmediatePropagationStopped: returnFalse=0A=
};=0A=
=0A=
// Checks if an event happened on an element within another element=0A=
// Used in jQuery.event.special.mouseenter and mouseleave handlers=0A=
var withinElement =3D function( event ) {=0A=
	// Check if mouse(over|out) are still within the same parent element=0A=
	var parent =3D event.relatedTarget;=0A=
=0A=
	// Firefox sometimes assigns relatedTarget a XUL element=0A=
	// which we cannot access the parentNode property of=0A=
	try {=0A=
		// Traverse up the tree=0A=
		while ( parent && parent !=3D=3D this ) {=0A=
			parent =3D parent.parentNode;=0A=
		}=0A=
=0A=
		if ( parent !=3D=3D this ) {=0A=
			// set the correct event type=0A=
			event.type =3D event.data;=0A=
=0A=
			// handle event if we actually just moused on to a non sub-element=0A=
			jQuery.event.handle.apply( this, arguments );=0A=
		}=0A=
=0A=
	// assuming we've left the element since we most likely mousedover a =
xul element=0A=
	} catch(e) { }=0A=
},=0A=
=0A=
// In case of event delegation, we only need to rename the event.type,=0A=
// liveHandler will take care of the rest.=0A=
delegate =3D function( event ) {=0A=
	event.type =3D event.data;=0A=
	jQuery.event.handle.apply( this, arguments );=0A=
};=0A=
=0A=
// Create mouseenter and mouseleave events=0A=
jQuery.each({=0A=
	mouseenter: "mouseover",=0A=
	mouseleave: "mouseout"=0A=
}, function( orig, fix ) {=0A=
	jQuery.event.special[ orig ] =3D {=0A=
		setup: function( data ) {=0A=
			jQuery.event.add( this, fix, data && data.selector ? delegate : =
withinElement, orig );=0A=
		},=0A=
		teardown: function( data ) {=0A=
			jQuery.event.remove( this, fix, data && data.selector ? delegate : =
withinElement );=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
// submit delegation=0A=
if ( !jQuery.support.submitBubbles ) {=0A=
=0A=
	jQuery.event.special.submit =3D {=0A=
		setup: function( data, namespaces ) {=0A=
			if ( this.nodeName.toLowerCase() !=3D=3D "form" ) {=0A=
				jQuery.event.add(this, "click.specialSubmit", function( e ) {=0A=
					var elem =3D e.target, type =3D elem.type;=0A=
=0A=
					if ( (type =3D=3D=3D "submit" || type =3D=3D=3D "image") && jQuery( =
elem ).closest("form").length ) {=0A=
						return trigger( "submit", this, arguments );=0A=
					}=0A=
				});=0A=
	 =0A=
				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {=0A=
					var elem =3D e.target, type =3D elem.type;=0A=
=0A=
					if ( (type =3D=3D=3D "text" || type =3D=3D=3D "password") && =
jQuery( elem ).closest("form").length && e.keyCode =3D=3D=3D 13 ) {=0A=
						return trigger( "submit", this, arguments );=0A=
					}=0A=
				});=0A=
=0A=
			} else {=0A=
				return false;=0A=
			}=0A=
		},=0A=
=0A=
		teardown: function( namespaces ) {=0A=
			jQuery.event.remove( this, ".specialSubmit" );=0A=
		}=0A=
	};=0A=
=0A=
}=0A=
=0A=
// change delegation, happens here so we have bind.=0A=
if ( !jQuery.support.changeBubbles ) {=0A=
=0A=
	var formElems =3D /textarea|input|select/i,=0A=
=0A=
	changeFilters,=0A=
=0A=
	getVal =3D function( elem ) {=0A=
		var type =3D elem.type, val =3D elem.value;=0A=
=0A=
		if ( type =3D=3D=3D "radio" || type =3D=3D=3D "checkbox" ) {=0A=
			val =3D elem.checked;=0A=
=0A=
		} else if ( type =3D=3D=3D "select-multiple" ) {=0A=
			val =3D elem.selectedIndex > -1 ?=0A=
				jQuery.map( elem.options, function( elem ) {=0A=
					return elem.selected;=0A=
				}).join("-") :=0A=
				"";=0A=
=0A=
		} else if ( elem.nodeName.toLowerCase() =3D=3D=3D "select" ) {=0A=
			val =3D elem.selectedIndex;=0A=
		}=0A=
=0A=
		return val;=0A=
	},=0A=
=0A=
	testChange =3D function testChange( e ) {=0A=
		var elem =3D e.target, data, val;=0A=
=0A=
		if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {=0A=
			return;=0A=
		}=0A=
=0A=
		data =3D jQuery.data( elem, "_change_data" );=0A=
		val =3D getVal(elem);=0A=
=0A=
		// the current data will be also retrieved by beforeactivate=0A=
		if ( e.type !=3D=3D "focusout" || elem.type !=3D=3D "radio" ) {=0A=
			jQuery.data( elem, "_change_data", val );=0A=
		}=0A=
		=0A=
		if ( data =3D=3D=3D undefined || val =3D=3D=3D data ) {=0A=
			return;=0A=
		}=0A=
=0A=
		if ( data !=3D null || val ) {=0A=
			e.type =3D "change";=0A=
			return jQuery.event.trigger( e, arguments[1], elem );=0A=
		}=0A=
	};=0A=
=0A=
	jQuery.event.special.change =3D {=0A=
		filters: {=0A=
			focusout: testChange, =0A=
=0A=
			click: function( e ) {=0A=
				var elem =3D e.target, type =3D elem.type;=0A=
=0A=
				if ( type =3D=3D=3D "radio" || type =3D=3D=3D "checkbox" || =
elem.nodeName.toLowerCase() =3D=3D=3D "select" ) {=0A=
					return testChange.call( this, e );=0A=
				}=0A=
			},=0A=
=0A=
			// Change has to be called before submit=0A=
			// Keydown will be called before keypress, which is used in =
submit-event delegation=0A=
			keydown: function( e ) {=0A=
				var elem =3D e.target, type =3D elem.type;=0A=
=0A=
				if ( (e.keyCode =3D=3D=3D 13 && elem.nodeName.toLowerCase() !=3D=3D =
"textarea") ||=0A=
					(e.keyCode =3D=3D=3D 32 && (type =3D=3D=3D "checkbox" || type =
=3D=3D=3D "radio")) ||=0A=
					type =3D=3D=3D "select-multiple" ) {=0A=
					return testChange.call( this, e );=0A=
				}=0A=
			},=0A=
=0A=
			// Beforeactivate happens also before the previous element is blurred=0A=
			// with this event you can't trigger a change event, but you can store=0A=
			// information/focus[in] is not needed anymore=0A=
			beforeactivate: function( e ) {=0A=
				var elem =3D e.target;=0A=
				jQuery.data( elem, "_change_data", getVal(elem) );=0A=
			}=0A=
		},=0A=
=0A=
		setup: function( data, namespaces ) {=0A=
			if ( this.type =3D=3D=3D "file" ) {=0A=
				return false;=0A=
			}=0A=
=0A=
			for ( var type in changeFilters ) {=0A=
				jQuery.event.add( this, type + ".specialChange", changeFilters[type] =
);=0A=
			}=0A=
=0A=
			return formElems.test( this.nodeName );=0A=
		},=0A=
=0A=
		teardown: function( namespaces ) {=0A=
			jQuery.event.remove( this, ".specialChange" );=0A=
=0A=
			return formElems.test( this.nodeName );=0A=
		}=0A=
	};=0A=
=0A=
	changeFilters =3D jQuery.event.special.change.filters;=0A=
}=0A=
=0A=
function trigger( type, elem, args ) {=0A=
	args[0].type =3D type;=0A=
	return jQuery.event.handle.apply( elem, args );=0A=
}=0A=
=0A=
// Create "bubbling" focus and blur events=0A=
if ( document.addEventListener ) {=0A=
	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix =
) {=0A=
		jQuery.event.special[ fix ] =3D {=0A=
			setup: function() {=0A=
				this.addEventListener( orig, handler, true );=0A=
			}, =0A=
			teardown: function() { =0A=
				this.removeEventListener( orig, handler, true );=0A=
			}=0A=
		};=0A=
=0A=
		function handler( e ) { =0A=
			e =3D jQuery.event.fix( e );=0A=
			e.type =3D fix;=0A=
			return jQuery.event.handle.call( this, e );=0A=
		}=0A=
	});=0A=
}=0A=
=0A=
jQuery.each(["bind", "one"], function( i, name ) {=0A=
	jQuery.fn[ name ] =3D function( type, data, fn ) {=0A=
		// Handle object literals=0A=
		if ( typeof type =3D=3D=3D "object" ) {=0A=
			for ( var key in type ) {=0A=
				this[ name ](key, data, type[key], fn);=0A=
			}=0A=
			return this;=0A=
		}=0A=
		=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			fn =3D data;=0A=
			data =3D undefined;=0A=
		}=0A=
=0A=
		var handler =3D name =3D=3D=3D "one" ? jQuery.proxy( fn, function( =
event ) {=0A=
			jQuery( this ).unbind( event, handler );=0A=
			return fn.apply( this, arguments );=0A=
		}) : fn;=0A=
=0A=
		if ( type =3D=3D=3D "unload" && name !=3D=3D "one" ) {=0A=
			this.one( type, data, fn );=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				jQuery.event.add( this[i], type, handler, data );=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	};=0A=
});=0A=
=0A=
jQuery.fn.extend({=0A=
	unbind: function( type, fn ) {=0A=
		// Handle object literals=0A=
		if ( typeof type =3D=3D=3D "object" && !type.preventDefault ) {=0A=
			for ( var key in type ) {=0A=
				this.unbind(key, type[key]);=0A=
			}=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				jQuery.event.remove( this[i], type, fn );=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
	=0A=
	delegate: function( selector, types, data, fn ) {=0A=
		return this.live( types, data, fn, selector );=0A=
	},=0A=
	=0A=
	undelegate: function( selector, types, fn ) {=0A=
		if ( arguments.length =3D=3D=3D 0 ) {=0A=
				return this.unbind( "live" );=0A=
		=0A=
		} else {=0A=
			return this.die( types, null, fn, selector );=0A=
		}=0A=
	},=0A=
	=0A=
	trigger: function( type, data ) {=0A=
		return this.each(function() {=0A=
			jQuery.event.trigger( type, data, this );=0A=
		});=0A=
	},=0A=
=0A=
	triggerHandler: function( type, data ) {=0A=
		if ( this[0] ) {=0A=
			var event =3D jQuery.Event( type );=0A=
			event.preventDefault();=0A=
			event.stopPropagation();=0A=
			jQuery.event.trigger( event, data, this[0] );=0A=
			return event.result;=0A=
		}=0A=
	},=0A=
=0A=
	toggle: function( fn ) {=0A=
		// Save reference to arguments for access in closure=0A=
		var args =3D arguments, i =3D 1;=0A=
=0A=
		// link all the functions, so any of them can unbind this click handler=0A=
		while ( i < args.length ) {=0A=
			jQuery.proxy( fn, args[ i++ ] );=0A=
		}=0A=
=0A=
		return this.click( jQuery.proxy( fn, function( event ) {=0A=
			// Figure out which function to execute=0A=
			var lastToggle =3D ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 =
) % i;=0A=
			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );=0A=
=0A=
			// Make sure that clicks stop=0A=
			event.preventDefault();=0A=
=0A=
			// and execute the function=0A=
			return args[ lastToggle ].apply( this, arguments ) || false;=0A=
		}));=0A=
	},=0A=
=0A=
	hover: function( fnOver, fnOut ) {=0A=
		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );=0A=
	}=0A=
});=0A=
=0A=
var liveMap =3D {=0A=
	focus: "focusin",=0A=
	blur: "focusout",=0A=
	mouseenter: "mouseover",=0A=
	mouseleave: "mouseout"=0A=
};=0A=
=0A=
jQuery.each(["live", "die"], function( i, name ) {=0A=
	jQuery.fn[ name ] =3D function( types, data, fn, origSelector /* =
Internal Use Only */ ) {=0A=
		var type, i =3D 0, match, namespaces, preType,=0A=
			selector =3D origSelector || this.selector,=0A=
			context =3D origSelector ? this : jQuery( this.context );=0A=
=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			fn =3D data;=0A=
			data =3D undefined;=0A=
		}=0A=
=0A=
		types =3D (types || "").split(" ");=0A=
=0A=
		while ( (type =3D types[ i++ ]) !=3D null ) {=0A=
			match =3D rnamespaces.exec( type );=0A=
			namespaces =3D "";=0A=
=0A=
			if ( match )  {=0A=
				namespaces =3D match[0];=0A=
				type =3D type.replace( rnamespaces, "" );=0A=
			}=0A=
=0A=
			if ( type =3D=3D=3D "hover" ) {=0A=
				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );=0A=
				continue;=0A=
			}=0A=
=0A=
			preType =3D type;=0A=
=0A=
			if ( type =3D=3D=3D "focus" || type =3D=3D=3D "blur" ) {=0A=
				types.push( liveMap[ type ] + namespaces );=0A=
				type =3D type + namespaces;=0A=
=0A=
			} else {=0A=
				type =3D (liveMap[ type ] || type) + namespaces;=0A=
			}=0A=
=0A=
			if ( name =3D=3D=3D "live" ) {=0A=
				// bind live handler=0A=
				context.each(function(){=0A=
					jQuery.event.add( this, liveConvert( type, selector ),=0A=
						{ data: data, selector: selector, handler: fn, origType: type, =
origHandler: fn, preType: preType } );=0A=
				});=0A=
=0A=
			} else {=0A=
				// unbind live handler=0A=
				context.unbind( liveConvert( type, selector ), fn );=0A=
			}=0A=
		}=0A=
		=0A=
		return this;=0A=
	}=0A=
});=0A=
=0A=
function liveHandler( event ) {=0A=
	var stop, elems =3D [], selectors =3D [], args =3D arguments,=0A=
		related, match, handleObj, elem, j, i, l, data,=0A=
		events =3D jQuery.data( this, "events" );=0A=
=0A=
	// Make sure we avoid non-left-click bubbling in Firefox (#3861)=0A=
	if ( event.liveFired =3D=3D=3D this || !events || !events.live || =
event.button && event.type =3D=3D=3D "click" ) {=0A=
		return;=0A=
	}=0A=
=0A=
	event.liveFired =3D this;=0A=
=0A=
	var live =3D events.live.slice(0);=0A=
=0A=
	for ( j =3D 0; j < live.length; j++ ) {=0A=
		handleObj =3D live[j];=0A=
=0A=
		if ( handleObj.origType.replace( rnamespaces, "" ) =3D=3D=3D =
event.type ) {=0A=
			selectors.push( handleObj.selector );=0A=
=0A=
		} else {=0A=
			live.splice( j--, 1 );=0A=
		}=0A=
	}=0A=
=0A=
	match =3D jQuery( event.target ).closest( selectors, =
event.currentTarget );=0A=
=0A=
	for ( i =3D 0, l =3D match.length; i < l; i++ ) {=0A=
		for ( j =3D 0; j < live.length; j++ ) {=0A=
			handleObj =3D live[j];=0A=
=0A=
			if ( match[i].selector =3D=3D=3D handleObj.selector ) {=0A=
				elem =3D match[i].elem;=0A=
				related =3D null;=0A=
=0A=
				// Those two events require additional checking=0A=
				if ( handleObj.preType =3D=3D=3D "mouseenter" || handleObj.preType =
=3D=3D=3D "mouseleave" ) {=0A=
					related =3D jQuery( event.relatedTarget ).closest( =
handleObj.selector )[0];=0A=
				}=0A=
=0A=
				if ( !related || related !=3D=3D elem ) {=0A=
					elems.push({ elem: elem, handleObj: handleObj });=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	for ( i =3D 0, l =3D elems.length; i < l; i++ ) {=0A=
		match =3D elems[i];=0A=
		event.currentTarget =3D match.elem;=0A=
		event.data =3D match.handleObj.data;=0A=
		event.handleObj =3D match.handleObj;=0A=
=0A=
		if ( match.handleObj.origHandler.apply( match.elem, args ) =3D=3D=3D =
false ) {=0A=
			stop =3D false;=0A=
			break;=0A=
		}=0A=
	}=0A=
=0A=
	return stop;=0A=
}=0A=
=0A=
function liveConvert( type, selector ) {=0A=
	return "live." + (type && type !=3D=3D "*" ? type + "." : "") + =
selector.replace(/\./g, "`").replace(/ /g, "&");=0A=
}=0A=
=0A=
jQuery.each( ("blur focus focusin focusout load resize scroll unload =
click dblclick " +=0A=
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " =
+=0A=
	"change select submit keydown keypress keyup error").split(" "), =
function( i, name ) {=0A=
=0A=
	// Handle event binding=0A=
	jQuery.fn[ name ] =3D function( fn ) {=0A=
		return fn ? this.bind( name, fn ) : this.trigger( name );=0A=
	};=0A=
=0A=
	if ( jQuery.attrFn ) {=0A=
		jQuery.attrFn[ name ] =3D true;=0A=
	}=0A=
});=0A=
=0A=
// Prevent memory leaks in IE=0A=
// Window isn't included so as not to unbind existing unload events=0A=
// More info:=0A=
//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/=0A=
if ( window.attachEvent && !window.addEventListener ) {=0A=
	window.attachEvent("onunload", function() {=0A=
		for ( var id in jQuery.cache ) {=0A=
			if ( jQuery.cache[ id ].handle ) {=0A=
				// Try/Catch is to handle iframes being unloaded, see #4280=0A=
				try {=0A=
					jQuery.event.remove( jQuery.cache[ id ].handle.elem );=0A=
				} catch(e) {}=0A=
			}=0A=
		}=0A=
	});=0A=
}=0A=
/*!=0A=
 * Sizzle CSS Selector Engine - v1.0=0A=
 *  Copyright 2009, The Dojo Foundation=0A=
 *  Released under the MIT, BSD, and GPL Licenses.=0A=
 *  More information: http://sizzlejs.com/=0A=
 */=0A=
(function(){=0A=
=0A=
var chunker =3D =
/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+=
)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,=0A=
	done =3D 0,=0A=
	toString =3D Object.prototype.toString,=0A=
	hasDuplicate =3D false,=0A=
	baseHasDuplicate =3D true;=0A=
=0A=
// Here we check if the JavaScript engine is using some sort of=0A=
// optimization where it does not always call our comparision=0A=
// function. If that is the case, discard the hasDuplicate value.=0A=
//   Thus far that includes Google Chrome.=0A=
[0, 0].sort(function(){=0A=
	baseHasDuplicate =3D false;=0A=
	return 0;=0A=
});=0A=
=0A=
var Sizzle =3D function(selector, context, results, seed) {=0A=
	results =3D results || [];=0A=
	var origContext =3D context =3D context || document;=0A=
=0A=
	if ( context.nodeType !=3D=3D 1 && context.nodeType !=3D=3D 9 ) {=0A=
		return [];=0A=
	}=0A=
	=0A=
	if ( !selector || typeof selector !=3D=3D "string" ) {=0A=
		return results;=0A=
	}=0A=
=0A=
	var parts =3D [], m, set, checkSet, extra, prune =3D true, contextXML =
=3D isXML(context),=0A=
		soFar =3D selector;=0A=
	=0A=
	// Reset the position of the chunker regexp (start from head)=0A=
	while ( (chunker.exec(""), m =3D chunker.exec(soFar)) !=3D=3D null ) {=0A=
		soFar =3D m[3];=0A=
		=0A=
		parts.push( m[1] );=0A=
		=0A=
		if ( m[2] ) {=0A=
			extra =3D m[3];=0A=
			break;=0A=
		}=0A=
	}=0A=
=0A=
	if ( parts.length > 1 && origPOS.exec( selector ) ) {=0A=
		if ( parts.length =3D=3D=3D 2 && Expr.relative[ parts[0] ] ) {=0A=
			set =3D posProcess( parts[0] + parts[1], context );=0A=
		} else {=0A=
			set =3D Expr.relative[ parts[0] ] ?=0A=
				[ context ] :=0A=
				Sizzle( parts.shift(), context );=0A=
=0A=
			while ( parts.length ) {=0A=
				selector =3D parts.shift();=0A=
=0A=
				if ( Expr.relative[ selector ] ) {=0A=
					selector +=3D parts.shift();=0A=
				}=0A=
				=0A=
				set =3D posProcess( selector, set );=0A=
			}=0A=
		}=0A=
	} else {=0A=
		// Take a shortcut and set the context if the root selector is an ID=0A=
		// (but not if it'll be faster if the inner selector is an ID)=0A=
		if ( !seed && parts.length > 1 && context.nodeType =3D=3D=3D 9 && =
!contextXML &&=0A=
				Expr.match.ID.test(parts[0]) && =
!Expr.match.ID.test(parts[parts.length - 1]) ) {=0A=
			var ret =3D Sizzle.find( parts.shift(), context, contextXML );=0A=
			context =3D ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : =
ret.set[0];=0A=
		}=0A=
=0A=
		if ( context ) {=0A=
			var ret =3D seed ?=0A=
				{ expr: parts.pop(), set: makeArray(seed) } :=0A=
				Sizzle.find( parts.pop(), parts.length =3D=3D=3D 1 && (parts[0] =
=3D=3D=3D "~" || parts[0] =3D=3D=3D "+") && context.parentNode ? =
context.parentNode : context, contextXML );=0A=
			set =3D ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;=0A=
=0A=
			if ( parts.length > 0 ) {=0A=
				checkSet =3D makeArray(set);=0A=
			} else {=0A=
				prune =3D false;=0A=
			}=0A=
=0A=
			while ( parts.length ) {=0A=
				var cur =3D parts.pop(), pop =3D cur;=0A=
=0A=
				if ( !Expr.relative[ cur ] ) {=0A=
					cur =3D "";=0A=
				} else {=0A=
					pop =3D parts.pop();=0A=
				}=0A=
=0A=
				if ( pop =3D=3D null ) {=0A=
					pop =3D context;=0A=
				}=0A=
=0A=
				Expr.relative[ cur ]( checkSet, pop, contextXML );=0A=
			}=0A=
		} else {=0A=
			checkSet =3D parts =3D [];=0A=
		}=0A=
	}=0A=
=0A=
	if ( !checkSet ) {=0A=
		checkSet =3D set;=0A=
	}=0A=
=0A=
	if ( !checkSet ) {=0A=
		Sizzle.error( cur || selector );=0A=
	}=0A=
=0A=
	if ( toString.call(checkSet) =3D=3D=3D "[object Array]" ) {=0A=
		if ( !prune ) {=0A=
			results.push.apply( results, checkSet );=0A=
		} else if ( context && context.nodeType =3D=3D=3D 1 ) {=0A=
			for ( var i =3D 0; checkSet[i] !=3D null; i++ ) {=0A=
				if ( checkSet[i] && (checkSet[i] =3D=3D=3D true || =
checkSet[i].nodeType =3D=3D=3D 1 && contains(context, checkSet[i])) ) {=0A=
					results.push( set[i] );=0A=
				}=0A=
			}=0A=
		} else {=0A=
			for ( var i =3D 0; checkSet[i] !=3D null; i++ ) {=0A=
				if ( checkSet[i] && checkSet[i].nodeType =3D=3D=3D 1 ) {=0A=
					results.push( set[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
	} else {=0A=
		makeArray( checkSet, results );=0A=
	}=0A=
=0A=
	if ( extra ) {=0A=
		Sizzle( extra, origContext, results, seed );=0A=
		Sizzle.uniqueSort( results );=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
Sizzle.uniqueSort =3D function(results){=0A=
	if ( sortOrder ) {=0A=
		hasDuplicate =3D baseHasDuplicate;=0A=
		results.sort(sortOrder);=0A=
=0A=
		if ( hasDuplicate ) {=0A=
			for ( var i =3D 1; i < results.length; i++ ) {=0A=
				if ( results[i] =3D=3D=3D results[i-1] ) {=0A=
					results.splice(i--, 1);=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
Sizzle.matches =3D function(expr, set){=0A=
	return Sizzle(expr, null, null, set);=0A=
};=0A=
=0A=
Sizzle.find =3D function(expr, context, isXML){=0A=
	var set, match;=0A=
=0A=
	if ( !expr ) {=0A=
		return [];=0A=
	}=0A=
=0A=
	for ( var i =3D 0, l =3D Expr.order.length; i < l; i++ ) {=0A=
		var type =3D Expr.order[i], match;=0A=
		=0A=
		if ( (match =3D Expr.leftMatch[ type ].exec( expr )) ) {=0A=
			var left =3D match[1];=0A=
			match.splice(1,1);=0A=
=0A=
			if ( left.substr( left.length - 1 ) !=3D=3D "\\" ) {=0A=
				match[1] =3D (match[1] || "").replace(/\\/g, "");=0A=
				set =3D Expr.find[ type ]( match, context, isXML );=0A=
				if ( set !=3D null ) {=0A=
					expr =3D expr.replace( Expr.match[ type ], "" );=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	if ( !set ) {=0A=
		set =3D context.getElementsByTagName("*");=0A=
	}=0A=
=0A=
	return {set: set, expr: expr};=0A=
};=0A=
=0A=
Sizzle.filter =3D function(expr, set, inplace, not){=0A=
	var old =3D expr, result =3D [], curLoop =3D set, match, anyFound,=0A=
		isXMLFilter =3D set && set[0] && isXML(set[0]);=0A=
=0A=
	while ( expr && set.length ) {=0A=
		for ( var type in Expr.filter ) {=0A=
			if ( (match =3D Expr.leftMatch[ type ].exec( expr )) !=3D null && =
match[2] ) {=0A=
				var filter =3D Expr.filter[ type ], found, item, left =3D match[1];=0A=
				anyFound =3D false;=0A=
=0A=
				match.splice(1,1);=0A=
=0A=
				if ( left.substr( left.length - 1 ) =3D=3D=3D "\\" ) {=0A=
					continue;=0A=
				}=0A=
=0A=
				if ( curLoop =3D=3D=3D result ) {=0A=
					result =3D [];=0A=
				}=0A=
=0A=
				if ( Expr.preFilter[ type ] ) {=0A=
					match =3D Expr.preFilter[ type ]( match, curLoop, inplace, result, =
not, isXMLFilter );=0A=
=0A=
					if ( !match ) {=0A=
						anyFound =3D found =3D true;=0A=
					} else if ( match =3D=3D=3D true ) {=0A=
						continue;=0A=
					}=0A=
				}=0A=
=0A=
				if ( match ) {=0A=
					for ( var i =3D 0; (item =3D curLoop[i]) !=3D null; i++ ) {=0A=
						if ( item ) {=0A=
							found =3D filter( item, match, i, curLoop );=0A=
							var pass =3D not ^ !!found;=0A=
=0A=
							if ( inplace && found !=3D null ) {=0A=
								if ( pass ) {=0A=
									anyFound =3D true;=0A=
								} else {=0A=
									curLoop[i] =3D false;=0A=
								}=0A=
							} else if ( pass ) {=0A=
								result.push( item );=0A=
								anyFound =3D true;=0A=
							}=0A=
						}=0A=
					}=0A=
				}=0A=
=0A=
				if ( found !=3D=3D undefined ) {=0A=
					if ( !inplace ) {=0A=
						curLoop =3D result;=0A=
					}=0A=
=0A=
					expr =3D expr.replace( Expr.match[ type ], "" );=0A=
=0A=
					if ( !anyFound ) {=0A=
						return [];=0A=
					}=0A=
=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		// Improper expression=0A=
		if ( expr =3D=3D=3D old ) {=0A=
			if ( anyFound =3D=3D null ) {=0A=
				Sizzle.error( expr );=0A=
			} else {=0A=
				break;=0A=
			}=0A=
		}=0A=
=0A=
		old =3D expr;=0A=
	}=0A=
=0A=
	return curLoop;=0A=
};=0A=
=0A=
Sizzle.error =3D function( msg ) {=0A=
	throw "Syntax error, unrecognized expression: " + msg;=0A=
};=0A=
=0A=
var Expr =3D Sizzle.selectors =3D {=0A=
	order: [ "ID", "NAME", "TAG" ],=0A=
	match: {=0A=
		ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,=0A=
		CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,=0A=
		NAME: /\[name=3D['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,=0A=
		ATTR: =
/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=3D)\s*(['"]*)(.*?)\3|)\s*\]=
/,=0A=
		TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,=0A=
		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,=0A=
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=3D[^-]|$)/,=0A=
		PSEUDO: =
/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\)=
)?/=0A=
	},=0A=
	leftMatch: {},=0A=
	attrMap: {=0A=
		"class": "className",=0A=
		"for": "htmlFor"=0A=
	},=0A=
	attrHandle: {=0A=
		href: function(elem){=0A=
			return elem.getAttribute("href");=0A=
		}=0A=
	},=0A=
	relative: {=0A=
		"+": function(checkSet, part){=0A=
			var isPartStr =3D typeof part =3D=3D=3D "string",=0A=
				isTag =3D isPartStr && !/\W/.test(part),=0A=
				isPartStrNotTag =3D isPartStr && !isTag;=0A=
=0A=
			if ( isTag ) {=0A=
				part =3D part.toLowerCase();=0A=
			}=0A=
=0A=
			for ( var i =3D 0, l =3D checkSet.length, elem; i < l; i++ ) {=0A=
				if ( (elem =3D checkSet[i]) ) {=0A=
					while ( (elem =3D elem.previousSibling) && elem.nodeType !=3D=3D 1 =
) {}=0A=
=0A=
					checkSet[i] =3D isPartStrNotTag || elem && =
elem.nodeName.toLowerCase() =3D=3D=3D part ?=0A=
						elem || false :=0A=
						elem =3D=3D=3D part;=0A=
				}=0A=
			}=0A=
=0A=
			if ( isPartStrNotTag ) {=0A=
				Sizzle.filter( part, checkSet, true );=0A=
			}=0A=
		},=0A=
		">": function(checkSet, part){=0A=
			var isPartStr =3D typeof part =3D=3D=3D "string";=0A=
=0A=
			if ( isPartStr && !/\W/.test(part) ) {=0A=
				part =3D part.toLowerCase();=0A=
=0A=
				for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
					var elem =3D checkSet[i];=0A=
					if ( elem ) {=0A=
						var parent =3D elem.parentNode;=0A=
						checkSet[i] =3D parent.nodeName.toLowerCase() =3D=3D=3D part ? =
parent : false;=0A=
					}=0A=
				}=0A=
			} else {=0A=
				for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
					var elem =3D checkSet[i];=0A=
					if ( elem ) {=0A=
						checkSet[i] =3D isPartStr ?=0A=
							elem.parentNode :=0A=
							elem.parentNode =3D=3D=3D part;=0A=
					}=0A=
				}=0A=
=0A=
				if ( isPartStr ) {=0A=
					Sizzle.filter( part, checkSet, true );=0A=
				}=0A=
			}=0A=
		},=0A=
		"": function(checkSet, part, isXML){=0A=
			var doneName =3D done++, checkFn =3D dirCheck;=0A=
=0A=
			if ( typeof part =3D=3D=3D "string" && !/\W/.test(part) ) {=0A=
				var nodeCheck =3D part =3D part.toLowerCase();=0A=
				checkFn =3D dirNodeCheck;=0A=
			}=0A=
=0A=
			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);=0A=
		},=0A=
		"~": function(checkSet, part, isXML){=0A=
			var doneName =3D done++, checkFn =3D dirCheck;=0A=
=0A=
			if ( typeof part =3D=3D=3D "string" && !/\W/.test(part) ) {=0A=
				var nodeCheck =3D part =3D part.toLowerCase();=0A=
				checkFn =3D dirNodeCheck;=0A=
			}=0A=
=0A=
			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, =
isXML);=0A=
		}=0A=
	},=0A=
	find: {=0A=
		ID: function(match, context, isXML){=0A=
			if ( typeof context.getElementById !=3D=3D "undefined" && !isXML ) {=0A=
				var m =3D context.getElementById(match[1]);=0A=
				return m ? [m] : [];=0A=
			}=0A=
		},=0A=
		NAME: function(match, context){=0A=
			if ( typeof context.getElementsByName !=3D=3D "undefined" ) {=0A=
				var ret =3D [], results =3D context.getElementsByName(match[1]);=0A=
=0A=
				for ( var i =3D 0, l =3D results.length; i < l; i++ ) {=0A=
					if ( results[i].getAttribute("name") =3D=3D=3D match[1] ) {=0A=
						ret.push( results[i] );=0A=
					}=0A=
				}=0A=
=0A=
				return ret.length =3D=3D=3D 0 ? null : ret;=0A=
			}=0A=
		},=0A=
		TAG: function(match, context){=0A=
			return context.getElementsByTagName(match[1]);=0A=
		}=0A=
	},=0A=
	preFilter: {=0A=
		CLASS: function(match, curLoop, inplace, result, not, isXML){=0A=
			match =3D " " + match[1].replace(/\\/g, "") + " ";=0A=
=0A=
			if ( isXML ) {=0A=
				return match;=0A=
			}=0A=
=0A=
			for ( var i =3D 0, elem; (elem =3D curLoop[i]) !=3D null; i++ ) {=0A=
				if ( elem ) {=0A=
					if ( not ^ (elem.className && (" " + elem.className + " =
").replace(/[\t\n]/g, " ").indexOf(match) >=3D 0) ) {=0A=
						if ( !inplace ) {=0A=
							result.push( elem );=0A=
						}=0A=
					} else if ( inplace ) {=0A=
						curLoop[i] =3D false;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			return false;=0A=
		},=0A=
		ID: function(match){=0A=
			return match[1].replace(/\\/g, "");=0A=
		},=0A=
		TAG: function(match, curLoop){=0A=
			return match[1].toLowerCase();=0A=
		},=0A=
		CHILD: function(match){=0A=
			if ( match[1] =3D=3D=3D "nth" ) {=0A=
				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', =
'-n+6'=0A=
				var test =3D /(-?)(\d*)n((?:\+|-)?\d*)/.exec(=0A=
					match[2] =3D=3D=3D "even" && "2n" || match[2] =3D=3D=3D "odd" && =
"2n+1" ||=0A=
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);=0A=
=0A=
				// calculate the numbers (first)n+(last) including if they are =
negative=0A=
				match[2] =3D (test[1] + (test[2] || 1)) - 0;=0A=
				match[3] =3D test[3] - 0;=0A=
			}=0A=
=0A=
			// TODO: Move to normal caching system=0A=
			match[0] =3D done++;=0A=
=0A=
			return match;=0A=
		},=0A=
		ATTR: function(match, curLoop, inplace, result, not, isXML){=0A=
			var name =3D match[1].replace(/\\/g, "");=0A=
			=0A=
			if ( !isXML && Expr.attrMap[name] ) {=0A=
				match[1] =3D Expr.attrMap[name];=0A=
			}=0A=
=0A=
			if ( match[2] =3D=3D=3D "~=3D" ) {=0A=
				match[4] =3D " " + match[4] + " ";=0A=
			}=0A=
=0A=
			return match;=0A=
		},=0A=
		PSEUDO: function(match, curLoop, inplace, result, not){=0A=
			if ( match[1] =3D=3D=3D "not" ) {=0A=
				// If we're dealing with a complex expression, or a simple one=0A=
				if ( ( chunker.exec(match[3]) || "" ).length > 1 || =
/^\w/.test(match[3]) ) {=0A=
					match[3] =3D Sizzle(match[3], null, null, curLoop);=0A=
				} else {=0A=
					var ret =3D Sizzle.filter(match[3], curLoop, inplace, true ^ not);=0A=
					if ( !inplace ) {=0A=
						result.push.apply( result, ret );=0A=
					}=0A=
					return false;=0A=
				}=0A=
			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( =
match[0] ) ) {=0A=
				return true;=0A=
			}=0A=
			=0A=
			return match;=0A=
		},=0A=
		POS: function(match){=0A=
			match.unshift( true );=0A=
			return match;=0A=
		}=0A=
	},=0A=
	filters: {=0A=
		enabled: function(elem){=0A=
			return elem.disabled =3D=3D=3D false && elem.type !=3D=3D "hidden";=0A=
		},=0A=
		disabled: function(elem){=0A=
			return elem.disabled =3D=3D=3D true;=0A=
		},=0A=
		checked: function(elem){=0A=
			return elem.checked =3D=3D=3D true;=0A=
		},=0A=
		selected: function(elem){=0A=
			// Accessing this property makes selected-by-default=0A=
			// options in Safari work properly=0A=
			elem.parentNode.selectedIndex;=0A=
			return elem.selected =3D=3D=3D true;=0A=
		},=0A=
		parent: function(elem){=0A=
			return !!elem.firstChild;=0A=
		},=0A=
		empty: function(elem){=0A=
			return !elem.firstChild;=0A=
		},=0A=
		has: function(elem, i, match){=0A=
			return !!Sizzle( match[3], elem ).length;=0A=
		},=0A=
		header: function(elem){=0A=
			return /h\d/i.test( elem.nodeName );=0A=
		},=0A=
		text: function(elem){=0A=
			return "text" =3D=3D=3D elem.type;=0A=
		},=0A=
		radio: function(elem){=0A=
			return "radio" =3D=3D=3D elem.type;=0A=
		},=0A=
		checkbox: function(elem){=0A=
			return "checkbox" =3D=3D=3D elem.type;=0A=
		},=0A=
		file: function(elem){=0A=
			return "file" =3D=3D=3D elem.type;=0A=
		},=0A=
		password: function(elem){=0A=
			return "password" =3D=3D=3D elem.type;=0A=
		},=0A=
		submit: function(elem){=0A=
			return "submit" =3D=3D=3D elem.type;=0A=
		},=0A=
		image: function(elem){=0A=
			return "image" =3D=3D=3D elem.type;=0A=
		},=0A=
		reset: function(elem){=0A=
			return "reset" =3D=3D=3D elem.type;=0A=
		},=0A=
		button: function(elem){=0A=
			return "button" =3D=3D=3D elem.type || elem.nodeName.toLowerCase() =
=3D=3D=3D "button";=0A=
		},=0A=
		input: function(elem){=0A=
			return /input|select|textarea|button/i.test(elem.nodeName);=0A=
		}=0A=
	},=0A=
	setFilters: {=0A=
		first: function(elem, i){=0A=
			return i =3D=3D=3D 0;=0A=
		},=0A=
		last: function(elem, i, match, array){=0A=
			return i =3D=3D=3D array.length - 1;=0A=
		},=0A=
		even: function(elem, i){=0A=
			return i % 2 =3D=3D=3D 0;=0A=
		},=0A=
		odd: function(elem, i){=0A=
			return i % 2 =3D=3D=3D 1;=0A=
		},=0A=
		lt: function(elem, i, match){=0A=
			return i < match[3] - 0;=0A=
		},=0A=
		gt: function(elem, i, match){=0A=
			return i > match[3] - 0;=0A=
		},=0A=
		nth: function(elem, i, match){=0A=
			return match[3] - 0 =3D=3D=3D i;=0A=
		},=0A=
		eq: function(elem, i, match){=0A=
			return match[3] - 0 =3D=3D=3D i;=0A=
		}=0A=
	},=0A=
	filter: {=0A=
		PSEUDO: function(elem, match, i, array){=0A=
			var name =3D match[1], filter =3D Expr.filters[ name ];=0A=
=0A=
			if ( filter ) {=0A=
				return filter( elem, i, match, array );=0A=
			} else if ( name =3D=3D=3D "contains" ) {=0A=
				return (elem.textContent || elem.innerText || getText([ elem ]) || =
"").indexOf(match[3]) >=3D 0;=0A=
			} else if ( name =3D=3D=3D "not" ) {=0A=
				var not =3D match[3];=0A=
=0A=
				for ( var i =3D 0, l =3D not.length; i < l; i++ ) {=0A=
					if ( not[i] =3D=3D=3D elem ) {=0A=
						return false;=0A=
					}=0A=
				}=0A=
=0A=
				return true;=0A=
			} else {=0A=
				Sizzle.error( "Syntax error, unrecognized expression: " + name );=0A=
			}=0A=
		},=0A=
		CHILD: function(elem, match){=0A=
			var type =3D match[1], node =3D elem;=0A=
			switch (type) {=0A=
				case 'only':=0A=
				case 'first':=0A=
					while ( (node =3D node.previousSibling) )	 {=0A=
						if ( node.nodeType =3D=3D=3D 1 ) { =0A=
							return false; =0A=
						}=0A=
					}=0A=
					if ( type =3D=3D=3D "first" ) { =0A=
						return true; =0A=
					}=0A=
					node =3D elem;=0A=
				case 'last':=0A=
					while ( (node =3D node.nextSibling) )	 {=0A=
						if ( node.nodeType =3D=3D=3D 1 ) { =0A=
							return false; =0A=
						}=0A=
					}=0A=
					return true;=0A=
				case 'nth':=0A=
					var first =3D match[2], last =3D match[3];=0A=
=0A=
					if ( first =3D=3D=3D 1 && last =3D=3D=3D 0 ) {=0A=
						return true;=0A=
					}=0A=
					=0A=
					var doneName =3D match[0],=0A=
						parent =3D elem.parentNode;=0A=
	=0A=
					if ( parent && (parent.sizcache !=3D=3D doneName || =
!elem.nodeIndex) ) {=0A=
						var count =3D 0;=0A=
						for ( node =3D parent.firstChild; node; node =3D node.nextSibling =
) {=0A=
							if ( node.nodeType =3D=3D=3D 1 ) {=0A=
								node.nodeIndex =3D ++count;=0A=
							}=0A=
						} =0A=
						parent.sizcache =3D doneName;=0A=
					}=0A=
					=0A=
					var diff =3D elem.nodeIndex - last;=0A=
					if ( first =3D=3D=3D 0 ) {=0A=
						return diff =3D=3D=3D 0;=0A=
					} else {=0A=
						return ( diff % first =3D=3D=3D 0 && diff / first >=3D 0 );=0A=
					}=0A=
			}=0A=
		},=0A=
		ID: function(elem, match){=0A=
			return elem.nodeType =3D=3D=3D 1 && elem.getAttribute("id") =3D=3D=3D =
match;=0A=
		},=0A=
		TAG: function(elem, match){=0A=
			return (match =3D=3D=3D "*" && elem.nodeType =3D=3D=3D 1) || =
elem.nodeName.toLowerCase() =3D=3D=3D match;=0A=
		},=0A=
		CLASS: function(elem, match){=0A=
			return (" " + (elem.className || elem.getAttribute("class")) + " ")=0A=
				.indexOf( match ) > -1;=0A=
		},=0A=
		ATTR: function(elem, match){=0A=
			var name =3D match[1],=0A=
				result =3D Expr.attrHandle[ name ] ?=0A=
					Expr.attrHandle[ name ]( elem ) :=0A=
					elem[ name ] !=3D null ?=0A=
						elem[ name ] :=0A=
						elem.getAttribute( name ),=0A=
				value =3D result + "",=0A=
				type =3D match[2],=0A=
				check =3D match[4];=0A=
=0A=
			return result =3D=3D null ?=0A=
				type =3D=3D=3D "!=3D" :=0A=
				type =3D=3D=3D "=3D" ?=0A=
				value =3D=3D=3D check :=0A=
				type =3D=3D=3D "*=3D" ?=0A=
				value.indexOf(check) >=3D 0 :=0A=
				type =3D=3D=3D "~=3D" ?=0A=
				(" " + value + " ").indexOf(check) >=3D 0 :=0A=
				!check ?=0A=
				value && result !=3D=3D false :=0A=
				type =3D=3D=3D "!=3D" ?=0A=
				value !=3D=3D check :=0A=
				type =3D=3D=3D "^=3D" ?=0A=
				value.indexOf(check) =3D=3D=3D 0 :=0A=
				type =3D=3D=3D "$=3D" ?=0A=
				value.substr(value.length - check.length) =3D=3D=3D check :=0A=
				type =3D=3D=3D "|=3D" ?=0A=
				value =3D=3D=3D check || value.substr(0, check.length + 1) =3D=3D=3D =
check + "-" :=0A=
				false;=0A=
		},=0A=
		POS: function(elem, match, i, array){=0A=
			var name =3D match[2], filter =3D Expr.setFilters[ name ];=0A=
=0A=
			if ( filter ) {=0A=
				return filter( elem, i, match, array );=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
var origPOS =3D Expr.match.POS;=0A=
=0A=
for ( var type in Expr.match ) {=0A=
	Expr.match[ type ] =3D new RegExp( Expr.match[ type ].source + =
/(?![^\[]*\])(?![^\(]*\))/.source );=0A=
	Expr.leftMatch[ type ] =3D new RegExp( /(^(?:.|\r|\n)*?)/.source + =
Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){=0A=
		return "\\" + (num - 0 + 1);=0A=
	}));=0A=
}=0A=
=0A=
var makeArray =3D function(array, results) {=0A=
	array =3D Array.prototype.slice.call( array, 0 );=0A=
=0A=
	if ( results ) {=0A=
		results.push.apply( results, array );=0A=
		return results;=0A=
	}=0A=
	=0A=
	return array;=0A=
};=0A=
=0A=
// Perform a simple check to determine if the browser is capable of=0A=
// converting a NodeList to an array using builtin methods.=0A=
// Also verifies that the returned array holds DOM nodes=0A=
// (which is not the case in the Blackberry browser)=0A=
try {=0A=
	Array.prototype.slice.call( document.documentElement.childNodes, 0 =
)[0].nodeType;=0A=
=0A=
// Provide a fallback method if it does not work=0A=
} catch(e){=0A=
	makeArray =3D function(array, results) {=0A=
		var ret =3D results || [];=0A=
=0A=
		if ( toString.call(array) =3D=3D=3D "[object Array]" ) {=0A=
			Array.prototype.push.apply( ret, array );=0A=
		} else {=0A=
			if ( typeof array.length =3D=3D=3D "number" ) {=0A=
				for ( var i =3D 0, l =3D array.length; i < l; i++ ) {=0A=
					ret.push( array[i] );=0A=
				}=0A=
			} else {=0A=
				for ( var i =3D 0; array[i]; i++ ) {=0A=
					ret.push( array[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	};=0A=
}=0A=
=0A=
var sortOrder;=0A=
=0A=
if ( document.documentElement.compareDocumentPosition ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {=0A=
			if ( a =3D=3D b ) {=0A=
				hasDuplicate =3D true;=0A=
			}=0A=
			return a.compareDocumentPosition ? -1 : 1;=0A=
		}=0A=
=0A=
		var ret =3D a.compareDocumentPosition(b) & 4 ? -1 : a =3D=3D=3D b ? 0 =
: 1;=0A=
		if ( ret =3D=3D=3D 0 ) {=0A=
			hasDuplicate =3D true;=0A=
		}=0A=
		return ret;=0A=
	};=0A=
} else if ( "sourceIndex" in document.documentElement ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( !a.sourceIndex || !b.sourceIndex ) {=0A=
			if ( a =3D=3D b ) {=0A=
				hasDuplicate =3D true;=0A=
			}=0A=
			return a.sourceIndex ? -1 : 1;=0A=
		}=0A=
=0A=
		var ret =3D a.sourceIndex - b.sourceIndex;=0A=
		if ( ret =3D=3D=3D 0 ) {=0A=
			hasDuplicate =3D true;=0A=
		}=0A=
		return ret;=0A=
	};=0A=
} else if ( document.createRange ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( !a.ownerDocument || !b.ownerDocument ) {=0A=
			if ( a =3D=3D b ) {=0A=
				hasDuplicate =3D true;=0A=
			}=0A=
			return a.ownerDocument ? -1 : 1;=0A=
		}=0A=
=0A=
		var aRange =3D a.ownerDocument.createRange(), bRange =3D =
b.ownerDocument.createRange();=0A=
		aRange.setStart(a, 0);=0A=
		aRange.setEnd(a, 0);=0A=
		bRange.setStart(b, 0);=0A=
		bRange.setEnd(b, 0);=0A=
		var ret =3D aRange.compareBoundaryPoints(Range.START_TO_END, bRange);=0A=
		if ( ret =3D=3D=3D 0 ) {=0A=
			hasDuplicate =3D true;=0A=
		}=0A=
		return ret;=0A=
	};=0A=
}=0A=
=0A=
// Utility function for retreiving the text value of an array of DOM =
nodes=0A=
function getText( elems ) {=0A=
	var ret =3D "", elem;=0A=
=0A=
	for ( var i =3D 0; elems[i]; i++ ) {=0A=
		elem =3D elems[i];=0A=
=0A=
		// Get the text from text nodes and CDATA nodes=0A=
		if ( elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 4 ) {=0A=
			ret +=3D elem.nodeValue;=0A=
=0A=
		// Traverse everything else, except comment nodes=0A=
		} else if ( elem.nodeType !=3D=3D 8 ) {=0A=
			ret +=3D getText( elem.childNodes );=0A=
		}=0A=
	}=0A=
=0A=
	return ret;=0A=
}=0A=
=0A=
// Check to see if the browser returns elements by name when=0A=
// querying by getElementById (and provide a workaround)=0A=
(function(){=0A=
	// We're going to inject a fake input element with a specified name=0A=
	var form =3D document.createElement("div"),=0A=
		id =3D "script" + (new Date).getTime();=0A=
	form.innerHTML =3D "<a name=3D'" + id + "'/>";=0A=
=0A=
	// Inject it into the root element, check its status, and remove it =
quickly=0A=
	var root =3D document.documentElement;=0A=
	root.insertBefore( form, root.firstChild );=0A=
=0A=
	// The workaround has to do additional checks after a getElementById=0A=
	// Which slows things down for other browsers (hence the branching)=0A=
	if ( document.getElementById( id ) ) {=0A=
		Expr.find.ID =3D function(match, context, isXML){=0A=
			if ( typeof context.getElementById !=3D=3D "undefined" && !isXML ) {=0A=
				var m =3D context.getElementById(match[1]);=0A=
				return m ? m.id =3D=3D=3D match[1] || typeof m.getAttributeNode =
!=3D=3D "undefined" && m.getAttributeNode("id").nodeValue =3D=3D=3D =
match[1] ? [m] : undefined : [];=0A=
			}=0A=
		};=0A=
=0A=
		Expr.filter.ID =3D function(elem, match){=0A=
			var node =3D typeof elem.getAttributeNode !=3D=3D "undefined" && =
elem.getAttributeNode("id");=0A=
			return elem.nodeType =3D=3D=3D 1 && node && node.nodeValue =3D=3D=3D =
match;=0A=
		};=0A=
	}=0A=
=0A=
	root.removeChild( form );=0A=
	root =3D form =3D null; // release memory in IE=0A=
})();=0A=
=0A=
(function(){=0A=
	// Check to see if the browser returns only elements=0A=
	// when doing getElementsByTagName("*")=0A=
=0A=
	// Create a fake element=0A=
	var div =3D document.createElement("div");=0A=
	div.appendChild( document.createComment("") );=0A=
=0A=
	// Make sure no comments are found=0A=
	if ( div.getElementsByTagName("*").length > 0 ) {=0A=
		Expr.find.TAG =3D function(match, context){=0A=
			var results =3D context.getElementsByTagName(match[1]);=0A=
=0A=
			// Filter out possible comments=0A=
			if ( match[1] =3D=3D=3D "*" ) {=0A=
				var tmp =3D [];=0A=
=0A=
				for ( var i =3D 0; results[i]; i++ ) {=0A=
					if ( results[i].nodeType =3D=3D=3D 1 ) {=0A=
						tmp.push( results[i] );=0A=
					}=0A=
				}=0A=
=0A=
				results =3D tmp;=0A=
			}=0A=
=0A=
			return results;=0A=
		};=0A=
	}=0A=
=0A=
	// Check to see if an attribute returns normalized href attributes=0A=
	div.innerHTML =3D "<a href=3D'#'></a>";=0A=
	if ( div.firstChild && typeof div.firstChild.getAttribute !=3D=3D =
"undefined" &&=0A=
			div.firstChild.getAttribute("href") !=3D=3D "#" ) {=0A=
		Expr.attrHandle.href =3D function(elem){=0A=
			return elem.getAttribute("href", 2);=0A=
		};=0A=
	}=0A=
=0A=
	div =3D null; // release memory in IE=0A=
})();=0A=
=0A=
if ( document.querySelectorAll ) {=0A=
	(function(){=0A=
		var oldSizzle =3D Sizzle, div =3D document.createElement("div");=0A=
		div.innerHTML =3D "<p class=3D'TEST'></p>";=0A=
=0A=
		// Safari can't handle uppercase or unicode characters when=0A=
		// in quirks mode.=0A=
		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length =
=3D=3D=3D 0 ) {=0A=
			return;=0A=
		}=0A=
	=0A=
		Sizzle =3D function(query, context, extra, seed){=0A=
			context =3D context || document;=0A=
=0A=
			// Only use querySelectorAll on non-XML documents=0A=
			// (ID selectors don't work in non-HTML documents)=0A=
			if ( !seed && context.nodeType =3D=3D=3D 9 && !isXML(context) ) {=0A=
				try {=0A=
					return makeArray( context.querySelectorAll(query), extra );=0A=
				} catch(e){}=0A=
			}=0A=
		=0A=
			return oldSizzle(query, context, extra, seed);=0A=
		};=0A=
=0A=
		for ( var prop in oldSizzle ) {=0A=
			Sizzle[ prop ] =3D oldSizzle[ prop ];=0A=
		}=0A=
=0A=
		div =3D null; // release memory in IE=0A=
	})();=0A=
}=0A=
=0A=
(function(){=0A=
	var div =3D document.createElement("div");=0A=
=0A=
	div.innerHTML =3D "<div class=3D'test e'></div><div =
class=3D'test'></div>";=0A=
=0A=
	// Opera can't find a second classname (in 9.6)=0A=
	// Also, make sure that getElementsByClassName actually exists=0A=
	if ( !div.getElementsByClassName || =
div.getElementsByClassName("e").length =3D=3D=3D 0 ) {=0A=
		return;=0A=
	}=0A=
=0A=
	// Safari caches class attributes, doesn't catch changes (in 3.2)=0A=
	div.lastChild.className =3D "e";=0A=
=0A=
	if ( div.getElementsByClassName("e").length =3D=3D=3D 1 ) {=0A=
		return;=0A=
	}=0A=
	=0A=
	Expr.order.splice(1, 0, "CLASS");=0A=
	Expr.find.CLASS =3D function(match, context, isXML) {=0A=
		if ( typeof context.getElementsByClassName !=3D=3D "undefined" && =
!isXML ) {=0A=
			return context.getElementsByClassName(match[1]);=0A=
		}=0A=
	};=0A=
=0A=
	div =3D null; // release memory in IE=0A=
})();=0A=
=0A=
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {=0A=
	for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
		var elem =3D checkSet[i];=0A=
		if ( elem ) {=0A=
			elem =3D elem[dir];=0A=
			var match =3D false;=0A=
=0A=
			while ( elem ) {=0A=
				if ( elem.sizcache =3D=3D=3D doneName ) {=0A=
					match =3D checkSet[elem.sizset];=0A=
					break;=0A=
				}=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 && !isXML ){=0A=
					elem.sizcache =3D doneName;=0A=
					elem.sizset =3D i;=0A=
				}=0A=
=0A=
				if ( elem.nodeName.toLowerCase() =3D=3D=3D cur ) {=0A=
					match =3D elem;=0A=
					break;=0A=
				}=0A=
=0A=
				elem =3D elem[dir];=0A=
			}=0A=
=0A=
			checkSet[i] =3D match;=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {=0A=
	for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
		var elem =3D checkSet[i];=0A=
		if ( elem ) {=0A=
			elem =3D elem[dir];=0A=
			var match =3D false;=0A=
=0A=
			while ( elem ) {=0A=
				if ( elem.sizcache =3D=3D=3D doneName ) {=0A=
					match =3D checkSet[elem.sizset];=0A=
					break;=0A=
				}=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
					if ( !isXML ) {=0A=
						elem.sizcache =3D doneName;=0A=
						elem.sizset =3D i;=0A=
					}=0A=
					if ( typeof cur !=3D=3D "string" ) {=0A=
						if ( elem =3D=3D=3D cur ) {=0A=
							match =3D true;=0A=
							break;=0A=
						}=0A=
=0A=
					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {=0A=
						match =3D elem;=0A=
						break;=0A=
					}=0A=
				}=0A=
=0A=
				elem =3D elem[dir];=0A=
			}=0A=
=0A=
			checkSet[i] =3D match;=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
var contains =3D document.compareDocumentPosition ? function(a, b){=0A=
	return !!(a.compareDocumentPosition(b) & 16);=0A=
} : function(a, b){=0A=
	return a !=3D=3D b && (a.contains ? a.contains(b) : true);=0A=
};=0A=
=0A=
var isXML =3D function(elem){=0A=
	// documentElement is verified for cases where it doesn't yet exist=0A=
	// (such as loading iframes in IE - #4833) =0A=
	var documentElement =3D (elem ? elem.ownerDocument || elem : =
0).documentElement;=0A=
	return documentElement ? documentElement.nodeName !=3D=3D "HTML" : =
false;=0A=
};=0A=
=0A=
var posProcess =3D function(selector, context){=0A=
	var tmpSet =3D [], later =3D "", match,=0A=
		root =3D context.nodeType ? [context] : context;=0A=
=0A=
	// Position selectors must be done after the filter=0A=
	// And so must :not(positional) so we move all PSEUDOs to the end=0A=
	while ( (match =3D Expr.match.PSEUDO.exec( selector )) ) {=0A=
		later +=3D match[0];=0A=
		selector =3D selector.replace( Expr.match.PSEUDO, "" );=0A=
	}=0A=
=0A=
	selector =3D Expr.relative[selector] ? selector + "*" : selector;=0A=
=0A=
	for ( var i =3D 0, l =3D root.length; i < l; i++ ) {=0A=
		Sizzle( selector, root[i], tmpSet );=0A=
	}=0A=
=0A=
	return Sizzle.filter( later, tmpSet );=0A=
};=0A=
=0A=
// EXPOSE=0A=
jQuery.find =3D Sizzle;=0A=
jQuery.expr =3D Sizzle.selectors;=0A=
jQuery.expr[":"] =3D jQuery.expr.filters;=0A=
jQuery.unique =3D Sizzle.uniqueSort;=0A=
jQuery.text =3D getText;=0A=
jQuery.isXMLDoc =3D isXML;=0A=
jQuery.contains =3D contains;=0A=
=0A=
return;=0A=
=0A=
window.Sizzle =3D Sizzle;=0A=
=0A=
})();=0A=
var runtil =3D /Until$/,=0A=
	rparentsprev =3D /^(?:parents|prevUntil|prevAll)/,=0A=
	// Note: This RegExp should be improved, or likely pulled from Sizzle=0A=
	rmultiselector =3D /,/,=0A=
	slice =3D Array.prototype.slice;=0A=
=0A=
// Implement the identical functionality for filter and not=0A=
var winnow =3D function( elements, qualifier, keep ) {=0A=
	if ( jQuery.isFunction( qualifier ) ) {=0A=
		return jQuery.grep(elements, function( elem, i ) {=0A=
			return !!qualifier.call( elem, i, elem ) =3D=3D=3D keep;=0A=
		});=0A=
=0A=
	} else if ( qualifier.nodeType ) {=0A=
		return jQuery.grep(elements, function( elem, i ) {=0A=
			return (elem =3D=3D=3D qualifier) =3D=3D=3D keep;=0A=
		});=0A=
=0A=
	} else if ( typeof qualifier =3D=3D=3D "string" ) {=0A=
		var filtered =3D jQuery.grep(elements, function( elem ) {=0A=
			return elem.nodeType =3D=3D=3D 1;=0A=
		});=0A=
=0A=
		if ( isSimple.test( qualifier ) ) {=0A=
			return jQuery.filter(qualifier, filtered, !keep);=0A=
		} else {=0A=
			qualifier =3D jQuery.filter( qualifier, filtered );=0A=
		}=0A=
	}=0A=
=0A=
	return jQuery.grep(elements, function( elem, i ) {=0A=
		return (jQuery.inArray( elem, qualifier ) >=3D 0) =3D=3D=3D keep;=0A=
	});=0A=
};=0A=
=0A=
jQuery.fn.extend({=0A=
	find: function( selector ) {=0A=
		var ret =3D this.pushStack( "", "find", selector ), length =3D 0;=0A=
=0A=
		for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
			length =3D ret.length;=0A=
			jQuery.find( selector, this[i], ret );=0A=
=0A=
			if ( i > 0 ) {=0A=
				// Make sure that the results are unique=0A=
				for ( var n =3D length; n < ret.length; n++ ) {=0A=
					for ( var r =3D 0; r < length; r++ ) {=0A=
						if ( ret[r] =3D=3D=3D ret[n] ) {=0A=
							ret.splice(n--, 1);=0A=
							break;=0A=
						}=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	has: function( target ) {=0A=
		var targets =3D jQuery( target );=0A=
		return this.filter(function() {=0A=
			for ( var i =3D 0, l =3D targets.length; i < l; i++ ) {=0A=
				if ( jQuery.contains( this, targets[i] ) ) {=0A=
					return true;=0A=
				}=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	not: function( selector ) {=0A=
		return this.pushStack( winnow(this, selector, false), "not", selector);=0A=
	},=0A=
=0A=
	filter: function( selector ) {=0A=
		return this.pushStack( winnow(this, selector, true), "filter", =
selector );=0A=
	},=0A=
	=0A=
	is: function( selector ) {=0A=
		return !!selector && jQuery.filter( selector, this ).length > 0;=0A=
	},=0A=
=0A=
	closest: function( selectors, context ) {=0A=
		if ( jQuery.isArray( selectors ) ) {=0A=
			var ret =3D [], cur =3D this[0], match, matches =3D {}, selector;=0A=
=0A=
			if ( cur && selectors.length ) {=0A=
				for ( var i =3D 0, l =3D selectors.length; i < l; i++ ) {=0A=
					selector =3D selectors[i];=0A=
=0A=
					if ( !matches[selector] ) {=0A=
						matches[selector] =3D jQuery.expr.match.POS.test( selector ) ? =0A=
							jQuery( selector, context || this.context ) :=0A=
							selector;=0A=
					}=0A=
				}=0A=
=0A=
				while ( cur && cur.ownerDocument && cur !=3D=3D context ) {=0A=
					for ( selector in matches ) {=0A=
						match =3D matches[selector];=0A=
=0A=
						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) =
) {=0A=
							ret.push({ selector: selector, elem: cur });=0A=
							delete matches[selector];=0A=
						}=0A=
					}=0A=
					cur =3D cur.parentNode;=0A=
				}=0A=
			}=0A=
=0A=
			return ret;=0A=
		}=0A=
=0A=
		var pos =3D jQuery.expr.match.POS.test( selectors ) ? =0A=
			jQuery( selectors, context || this.context ) : null;=0A=
=0A=
		return this.map(function( i, cur ) {=0A=
			while ( cur && cur.ownerDocument && cur !=3D=3D context ) {=0A=
				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {=0A=
					return cur;=0A=
				}=0A=
				cur =3D cur.parentNode;=0A=
			}=0A=
			return null;=0A=
		});=0A=
	},=0A=
	=0A=
	// Determine the position of an element within=0A=
	// the matched set of elements=0A=
	index: function( elem ) {=0A=
		if ( !elem || typeof elem =3D=3D=3D "string" ) {=0A=
			return jQuery.inArray( this[0],=0A=
				// If it receives a string, the selector is used=0A=
				// If it receives nothing, the siblings are used=0A=
				elem ? jQuery( elem ) : this.parent().children() );=0A=
		}=0A=
		// Locate the position of the desired element=0A=
		return jQuery.inArray(=0A=
			// If it receives a jQuery object, the first element is used=0A=
			elem.jquery ? elem[0] : elem, this );=0A=
	},=0A=
=0A=
	add: function( selector, context ) {=0A=
		var set =3D typeof selector =3D=3D=3D "string" ?=0A=
				jQuery( selector, context || this.context ) :=0A=
				jQuery.makeArray( selector ),=0A=
			all =3D jQuery.merge( this.get(), set );=0A=
=0A=
		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( =
all[0] ) ?=0A=
			all :=0A=
			jQuery.unique( all ) );=0A=
	},=0A=
=0A=
	andSelf: function() {=0A=
		return this.add( this.prevObject );=0A=
	}=0A=
});=0A=
=0A=
// A painfully simple check to see if an element is disconnected=0A=
// from a document (should be improved, where feasible).=0A=
function isDisconnected( node ) {=0A=
	return !node || !node.parentNode || node.parentNode.nodeType =3D=3D=3D =
11;=0A=
}=0A=
=0A=
jQuery.each({=0A=
	parent: function( elem ) {=0A=
		var parent =3D elem.parentNode;=0A=
		return parent && parent.nodeType !=3D=3D 11 ? parent : null;=0A=
	},=0A=
	parents: function( elem ) {=0A=
		return jQuery.dir( elem, "parentNode" );=0A=
	},=0A=
	parentsUntil: function( elem, i, until ) {=0A=
		return jQuery.dir( elem, "parentNode", until );=0A=
	},=0A=
	next: function( elem ) {=0A=
		return jQuery.nth( elem, 2, "nextSibling" );=0A=
	},=0A=
	prev: function( elem ) {=0A=
		return jQuery.nth( elem, 2, "previousSibling" );=0A=
	},=0A=
	nextAll: function( elem ) {=0A=
		return jQuery.dir( elem, "nextSibling" );=0A=
	},=0A=
	prevAll: function( elem ) {=0A=
		return jQuery.dir( elem, "previousSibling" );=0A=
	},=0A=
	nextUntil: function( elem, i, until ) {=0A=
		return jQuery.dir( elem, "nextSibling", until );=0A=
	},=0A=
	prevUntil: function( elem, i, until ) {=0A=
		return jQuery.dir( elem, "previousSibling", until );=0A=
	},=0A=
	siblings: function( elem ) {=0A=
		return jQuery.sibling( elem.parentNode.firstChild, elem );=0A=
	},=0A=
	children: function( elem ) {=0A=
		return jQuery.sibling( elem.firstChild );=0A=
	},=0A=
	contents: function( elem ) {=0A=
		return jQuery.nodeName( elem, "iframe" ) ?=0A=
			elem.contentDocument || elem.contentWindow.document :=0A=
			jQuery.makeArray( elem.childNodes );=0A=
	}=0A=
}, function( name, fn ) {=0A=
	jQuery.fn[ name ] =3D function( until, selector ) {=0A=
		var ret =3D jQuery.map( this, fn, until );=0A=
		=0A=
		if ( !runtil.test( name ) ) {=0A=
			selector =3D until;=0A=
		}=0A=
=0A=
		if ( selector && typeof selector =3D=3D=3D "string" ) {=0A=
			ret =3D jQuery.filter( selector, ret );=0A=
		}=0A=
=0A=
		ret =3D this.length > 1 ? jQuery.unique( ret ) : ret;=0A=
=0A=
		if ( (this.length > 1 || rmultiselector.test( selector )) && =
rparentsprev.test( name ) ) {=0A=
			ret =3D ret.reverse();=0A=
		}=0A=
=0A=
		return this.pushStack( ret, name, slice.call(arguments).join(",") );=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	filter: function( expr, elems, not ) {=0A=
		if ( not ) {=0A=
			expr =3D ":not(" + expr + ")";=0A=
		}=0A=
=0A=
		return jQuery.find.matches(expr, elems);=0A=
	},=0A=
	=0A=
	dir: function( elem, dir, until ) {=0A=
		var matched =3D [], cur =3D elem[dir];=0A=
		while ( cur && cur.nodeType !=3D=3D 9 && (until =3D=3D=3D undefined || =
cur.nodeType !=3D=3D 1 || !jQuery( cur ).is( until )) ) {=0A=
			if ( cur.nodeType =3D=3D=3D 1 ) {=0A=
				matched.push( cur );=0A=
			}=0A=
			cur =3D cur[dir];=0A=
		}=0A=
		return matched;=0A=
	},=0A=
=0A=
	nth: function( cur, result, dir, elem ) {=0A=
		result =3D result || 1;=0A=
		var num =3D 0;=0A=
=0A=
		for ( ; cur; cur =3D cur[dir] ) {=0A=
			if ( cur.nodeType =3D=3D=3D 1 && ++num =3D=3D=3D result ) {=0A=
				break;=0A=
			}=0A=
		}=0A=
=0A=
		return cur;=0A=
	},=0A=
=0A=
	sibling: function( n, elem ) {=0A=
		var r =3D [];=0A=
=0A=
		for ( ; n; n =3D n.nextSibling ) {=0A=
			if ( n.nodeType =3D=3D=3D 1 && n !=3D=3D elem ) {=0A=
				r.push( n );=0A=
			}=0A=
		}=0A=
=0A=
		return r;=0A=
	}=0A=
});=0A=
var rinlinejQuery =3D / jQuery\d+=3D"(?:\d+|null)"/g,=0A=
	rleadingWhitespace =3D /^\s+/,=0A=
	rxhtmlTag =3D /(<([\w:]+)[^>]*?)\/>/g,=0A=
	rselfClosing =3D =
/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,=0A=
	rtagName =3D /<([\w:]+)/,=0A=
	rtbody =3D /<tbody/i,=0A=
	rhtml =3D /<|&#?\w+;/,=0A=
	rnocache =3D /<script|<object|<embed|<option|<style/i,=0A=
	rchecked =3D /checked\s*(?:[^=3D]|=3D\s*.checked.)/i,  // =
checked=3D"checked" or checked (html5)=0A=
	fcloseTag =3D function( all, front, tag ) {=0A=
		return rselfClosing.test( tag ) ?=0A=
			all :=0A=
			front + "></" + tag + ">";=0A=
	},=0A=
	wrapMap =3D {=0A=
		option: [ 1, "<select multiple=3D'multiple'>", "</select>" ],=0A=
		legend: [ 1, "<fieldset>", "</fieldset>" ],=0A=
		thead: [ 1, "<table>", "</table>" ],=0A=
		tr: [ 2, "<table><tbody>", "</tbody></table>" ],=0A=
		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],=0A=
		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],=0A=
		area: [ 1, "<map>", "</map>" ],=0A=
		_default: [ 0, "", "" ]=0A=
	};=0A=
=0A=
wrapMap.optgroup =3D wrapMap.option;=0A=
wrapMap.tbody =3D wrapMap.tfoot =3D wrapMap.colgroup =3D wrapMap.caption =
=3D wrapMap.thead;=0A=
wrapMap.th =3D wrapMap.td;=0A=
=0A=
// IE can't serialize <link> and <script> tags normally=0A=
if ( !jQuery.support.htmlSerialize ) {=0A=
	wrapMap._default =3D [ 1, "div<div>", "</div>" ];=0A=
}=0A=
=0A=
jQuery.fn.extend({=0A=
	text: function( text ) {=0A=
		if ( jQuery.isFunction(text) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.text( text.call(this, i, self.text()) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( typeof text !=3D=3D "object" && text !=3D=3D undefined ) {=0A=
			return this.empty().append( (this[0] && this[0].ownerDocument || =
document).createTextNode( text ) );=0A=
		}=0A=
=0A=
		return jQuery.text( this );=0A=
	},=0A=
=0A=
	wrapAll: function( html ) {=0A=
		if ( jQuery.isFunction( html ) ) {=0A=
			return this.each(function(i) {=0A=
				jQuery(this).wrapAll( html.call(this, i) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( this[0] ) {=0A=
			// The elements to wrap the target around=0A=
			var wrap =3D jQuery( html, this[0].ownerDocument ).eq(0).clone(true);=0A=
=0A=
			if ( this[0].parentNode ) {=0A=
				wrap.insertBefore( this[0] );=0A=
			}=0A=
=0A=
			wrap.map(function() {=0A=
				var elem =3D this;=0A=
=0A=
				while ( elem.firstChild && elem.firstChild.nodeType =3D=3D=3D 1 ) {=0A=
					elem =3D elem.firstChild;=0A=
				}=0A=
=0A=
				return elem;=0A=
			}).append(this);=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	wrapInner: function( html ) {=0A=
		if ( jQuery.isFunction( html ) ) {=0A=
			return this.each(function(i) {=0A=
				jQuery(this).wrapInner( html.call(this, i) );=0A=
			});=0A=
		}=0A=
=0A=
		return this.each(function() {=0A=
			var self =3D jQuery( this ), contents =3D self.contents();=0A=
=0A=
			if ( contents.length ) {=0A=
				contents.wrapAll( html );=0A=
=0A=
			} else {=0A=
				self.append( html );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	wrap: function( html ) {=0A=
		return this.each(function() {=0A=
			jQuery( this ).wrapAll( html );=0A=
		});=0A=
	},=0A=
=0A=
	unwrap: function() {=0A=
		return this.parent().each(function() {=0A=
			if ( !jQuery.nodeName( this, "body" ) ) {=0A=
				jQuery( this ).replaceWith( this.childNodes );=0A=
			}=0A=
		}).end();=0A=
	},=0A=
=0A=
	append: function() {=0A=
		return this.domManip(arguments, true, function( elem ) {=0A=
			if ( this.nodeType =3D=3D=3D 1 ) {=0A=
				this.appendChild( elem );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	prepend: function() {=0A=
		return this.domManip(arguments, true, function( elem ) {=0A=
			if ( this.nodeType =3D=3D=3D 1 ) {=0A=
				this.insertBefore( elem, this.firstChild );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	before: function() {=0A=
		if ( this[0] && this[0].parentNode ) {=0A=
			return this.domManip(arguments, false, function( elem ) {=0A=
				this.parentNode.insertBefore( elem, this );=0A=
			});=0A=
		} else if ( arguments.length ) {=0A=
			var set =3D jQuery(arguments[0]);=0A=
			set.push.apply( set, this.toArray() );=0A=
			return this.pushStack( set, "before", arguments );=0A=
		}=0A=
	},=0A=
=0A=
	after: function() {=0A=
		if ( this[0] && this[0].parentNode ) {=0A=
			return this.domManip(arguments, false, function( elem ) {=0A=
				this.parentNode.insertBefore( elem, this.nextSibling );=0A=
			});=0A=
		} else if ( arguments.length ) {=0A=
			var set =3D this.pushStack( this, "after", arguments );=0A=
			set.push.apply( set, jQuery(arguments[0]).toArray() );=0A=
			return set;=0A=
		}=0A=
	},=0A=
	=0A=
	// keepData is for internal use only--do not document=0A=
	remove: function( selector, keepData ) {=0A=
		for ( var i =3D 0, elem; (elem =3D this[i]) !=3D null; i++ ) {=0A=
			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {=0A=
				if ( !keepData && elem.nodeType =3D=3D=3D 1 ) {=0A=
					jQuery.cleanData( elem.getElementsByTagName("*") );=0A=
					jQuery.cleanData( [ elem ] );=0A=
				}=0A=
=0A=
				if ( elem.parentNode ) {=0A=
					 elem.parentNode.removeChild( elem );=0A=
				}=0A=
			}=0A=
		}=0A=
		=0A=
		return this;=0A=
	},=0A=
=0A=
	empty: function() {=0A=
		for ( var i =3D 0, elem; (elem =3D this[i]) !=3D null; i++ ) {=0A=
			// Remove element nodes and prevent memory leaks=0A=
			if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
				jQuery.cleanData( elem.getElementsByTagName("*") );=0A=
			}=0A=
=0A=
			// Remove any remaining nodes=0A=
			while ( elem.firstChild ) {=0A=
				elem.removeChild( elem.firstChild );=0A=
			}=0A=
		}=0A=
		=0A=
		return this;=0A=
	},=0A=
=0A=
	clone: function( events ) {=0A=
		// Do the clone=0A=
		var ret =3D this.map(function() {=0A=
			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {=0A=
				// IE copies events bound via attachEvent when=0A=
				// using cloneNode. Calling detachEvent on the=0A=
				// clone will also remove the events from the orignal=0A=
				// In order to get around this, we use innerHTML.=0A=
				// Unfortunately, this means some modifications to=0A=
				// attributes in IE that are actually only stored=0A=
				// as properties will not be copied (such as the=0A=
				// the name attribute on an input).=0A=
				var html =3D this.outerHTML, ownerDocument =3D this.ownerDocument;=0A=
				if ( !html ) {=0A=
					var div =3D ownerDocument.createElement("div");=0A=
					div.appendChild( this.cloneNode(true) );=0A=
					html =3D div.innerHTML;=0A=
				}=0A=
=0A=
				return jQuery.clean([html.replace(rinlinejQuery, "")=0A=
					// Handle the case in IE 8 where action=3D/test/> self-closes a tag=0A=
					.replace(/=3D([^=3D"'>\s]+\/)>/g, '=3D"$1">')=0A=
					.replace(rleadingWhitespace, "")], ownerDocument)[0];=0A=
			} else {=0A=
				return this.cloneNode(true);=0A=
			}=0A=
		});=0A=
=0A=
		// Copy the events from the original to the clone=0A=
		if ( events =3D=3D=3D true ) {=0A=
			cloneCopyEvent( this, ret );=0A=
			cloneCopyEvent( this.find("*"), ret.find("*") );=0A=
		}=0A=
=0A=
		// Return the cloned set=0A=
		return ret;=0A=
	},=0A=
=0A=
	html: function( value ) {=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			return this[0] && this[0].nodeType =3D=3D=3D 1 ?=0A=
				this[0].innerHTML.replace(rinlinejQuery, "") :=0A=
				null;=0A=
=0A=
		// See if we can take a shortcut and just use innerHTML=0A=
		} else if ( typeof value =3D=3D=3D "string" && !rnocache.test( value ) =
&&=0A=
			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value =
)) &&=0A=
			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {=0A=
=0A=
			value =3D value.replace(rxhtmlTag, fcloseTag);=0A=
=0A=
			try {=0A=
				for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
					// Remove element nodes and prevent memory leaks=0A=
					if ( this[i].nodeType =3D=3D=3D 1 ) {=0A=
						jQuery.cleanData( this[i].getElementsByTagName("*") );=0A=
						this[i].innerHTML =3D value;=0A=
					}=0A=
				}=0A=
=0A=
			// If using innerHTML throws an exception, use the fallback method=0A=
			} catch(e) {=0A=
				this.empty().append( value );=0A=
			}=0A=
=0A=
		} else if ( jQuery.isFunction( value ) ) {=0A=
			this.each(function(i){=0A=
				var self =3D jQuery(this), old =3D self.html();=0A=
				self.empty().append(function(){=0A=
					return value.call( this, i, old );=0A=
				});=0A=
			});=0A=
=0A=
		} else {=0A=
			this.empty().append( value );=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	replaceWith: function( value ) {=0A=
		if ( this[0] && this[0].parentNode ) {=0A=
			// Make sure that the elements are removed from the DOM before they =
are inserted=0A=
			// this can help fix replacing a parent with child elements=0A=
			if ( jQuery.isFunction( value ) ) {=0A=
				return this.each(function(i) {=0A=
					var self =3D jQuery(this), old =3D self.html();=0A=
					self.replaceWith( value.call( this, i, old ) );=0A=
				});=0A=
			}=0A=
=0A=
			if ( typeof value !=3D=3D "string" ) {=0A=
				value =3D jQuery(value).detach();=0A=
			}=0A=
=0A=
			return this.each(function() {=0A=
				var next =3D this.nextSibling, parent =3D this.parentNode;=0A=
=0A=
				jQuery(this).remove();=0A=
=0A=
				if ( next ) {=0A=
					jQuery(next).before( value );=0A=
				} else {=0A=
					jQuery(parent).append( value );=0A=
				}=0A=
			});=0A=
		} else {=0A=
			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : =
value), "replaceWith", value );=0A=
		}=0A=
	},=0A=
=0A=
	detach: function( selector ) {=0A=
		return this.remove( selector, true );=0A=
	},=0A=
=0A=
	domManip: function( args, table, callback ) {=0A=
		var results, first, value =3D args[0], scripts =3D [], fragment, =
parent;=0A=
=0A=
		// We can't cloneNode fragments that contain checked, in WebKit=0A=
		if ( !jQuery.support.checkClone && arguments.length =3D=3D=3D 3 && =
typeof value =3D=3D=3D "string" && rchecked.test( value ) ) {=0A=
			return this.each(function() {=0A=
				jQuery(this).domManip( args, table, callback, true );=0A=
			});=0A=
		}=0A=
=0A=
		if ( jQuery.isFunction(value) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				args[0] =3D value.call(this, i, table ? self.html() : undefined);=0A=
				self.domManip( args, table, callback );=0A=
			});=0A=
		}=0A=
=0A=
		if ( this[0] ) {=0A=
			parent =3D value && value.parentNode;=0A=
=0A=
			// If we're in a fragment, just use that instead of building a new one=0A=
			if ( jQuery.support.parentNode && parent && parent.nodeType =3D=3D=3D =
11 && parent.childNodes.length =3D=3D=3D this.length ) {=0A=
				results =3D { fragment: parent };=0A=
=0A=
			} else {=0A=
				results =3D buildFragment( args, this, scripts );=0A=
			}=0A=
			=0A=
			fragment =3D results.fragment;=0A=
			=0A=
			if ( fragment.childNodes.length =3D=3D=3D 1 ) {=0A=
				first =3D fragment =3D fragment.firstChild;=0A=
			} else {=0A=
				first =3D fragment.firstChild;=0A=
			}=0A=
=0A=
			if ( first ) {=0A=
				table =3D table && jQuery.nodeName( first, "tr" );=0A=
=0A=
				for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
					callback.call(=0A=
						table ?=0A=
							root(this[i], first) :=0A=
							this[i],=0A=
						i > 0 || results.cacheable || this.length > 1  ?=0A=
							fragment.cloneNode(true) :=0A=
							fragment=0A=
					);=0A=
				}=0A=
			}=0A=
=0A=
			if ( scripts.length ) {=0A=
				jQuery.each( scripts, evalScript );=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
=0A=
		function root( elem, cur ) {=0A=
			return jQuery.nodeName(elem, "table") ?=0A=
				(elem.getElementsByTagName("tbody")[0] ||=0A=
				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :=0A=
				elem;=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
function cloneCopyEvent(orig, ret) {=0A=
	var i =3D 0;=0A=
=0A=
	ret.each(function() {=0A=
		if ( this.nodeName !=3D=3D (orig[i] && orig[i].nodeName) ) {=0A=
			return;=0A=
		}=0A=
=0A=
		var oldData =3D jQuery.data( orig[i++] ), curData =3D jQuery.data( =
this, oldData ), events =3D oldData && oldData.events;=0A=
=0A=
		if ( events ) {=0A=
			delete curData.handle;=0A=
			curData.events =3D {};=0A=
=0A=
			for ( var type in events ) {=0A=
				for ( var handler in events[ type ] ) {=0A=
					jQuery.event.add( this, type, events[ type ][ handler ], events[ =
type ][ handler ].data );=0A=
				}=0A=
			}=0A=
		}=0A=
	});=0A=
}=0A=
=0A=
function buildFragment( args, nodes, scripts ) {=0A=
	var fragment, cacheable, cacheresults,=0A=
		doc =3D (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : =
document);=0A=
=0A=
	// Only cache "small" (1/2 KB) strings that are associated with the =
main document=0A=
	// Cloning options loses the selected state, so don't cache them=0A=
	// IE 6 doesn't like it when you put <object> or <embed> elements in a =
fragment=0A=
	// Also, WebKit does not clone 'checked' attributes on cloneNode, so =
don't cache=0A=
	if ( args.length =3D=3D=3D 1 && typeof args[0] =3D=3D=3D "string" && =
args[0].length < 512 && doc =3D=3D=3D document &&=0A=
		!rnocache.test( args[0] ) && (jQuery.support.checkClone || =
!rchecked.test( args[0] )) ) {=0A=
=0A=
		cacheable =3D true;=0A=
		cacheresults =3D jQuery.fragments[ args[0] ];=0A=
		if ( cacheresults ) {=0A=
			if ( cacheresults !=3D=3D 1 ) {=0A=
				fragment =3D cacheresults;=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	if ( !fragment ) {=0A=
		fragment =3D doc.createDocumentFragment();=0A=
		jQuery.clean( args, doc, fragment, scripts );=0A=
	}=0A=
=0A=
	if ( cacheable ) {=0A=
		jQuery.fragments[ args[0] ] =3D cacheresults ? fragment : 1;=0A=
	}=0A=
=0A=
	return { fragment: fragment, cacheable: cacheable };=0A=
}=0A=
=0A=
jQuery.fragments =3D {};=0A=
=0A=
jQuery.each({=0A=
	appendTo: "append",=0A=
	prependTo: "prepend",=0A=
	insertBefore: "before",=0A=
	insertAfter: "after",=0A=
	replaceAll: "replaceWith"=0A=
}, function( name, original ) {=0A=
	jQuery.fn[ name ] =3D function( selector ) {=0A=
		var ret =3D [], insert =3D jQuery( selector ),=0A=
			parent =3D this.length =3D=3D=3D 1 && this[0].parentNode;=0A=
		=0A=
		if ( parent && parent.nodeType =3D=3D=3D 11 && =
parent.childNodes.length =3D=3D=3D 1 && insert.length =3D=3D=3D 1 ) {=0A=
			insert[ original ]( this[0] );=0A=
			return this;=0A=
			=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D insert.length; i < l; i++ ) {=0A=
				var elems =3D (i > 0 ? this.clone(true) : this).get();=0A=
				jQuery.fn[ original ].apply( jQuery(insert[i]), elems );=0A=
				ret =3D ret.concat( elems );=0A=
			}=0A=
		=0A=
			return this.pushStack( ret, name, insert.selector );=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	clean: function( elems, context, fragment, scripts ) {=0A=
		context =3D context || document;=0A=
=0A=
		// !context.createElement fails in IE with an error but returns typeof =
'object'=0A=
		if ( typeof context.createElement =3D=3D=3D "undefined" ) {=0A=
			context =3D context.ownerDocument || context[0] && =
context[0].ownerDocument || document;=0A=
		}=0A=
=0A=
		var ret =3D [];=0A=
=0A=
		for ( var i =3D 0, elem; (elem =3D elems[i]) !=3D null; i++ ) {=0A=
			if ( typeof elem =3D=3D=3D "number" ) {=0A=
				elem +=3D "";=0A=
			}=0A=
=0A=
			if ( !elem ) {=0A=
				continue;=0A=
			}=0A=
=0A=
			// Convert html string into DOM nodes=0A=
			if ( typeof elem =3D=3D=3D "string" && !rhtml.test( elem ) ) {=0A=
				elem =3D context.createTextNode( elem );=0A=
=0A=
			} else if ( typeof elem =3D=3D=3D "string" ) {=0A=
				// Fix "XHTML"-style tags in all browsers=0A=
				elem =3D elem.replace(rxhtmlTag, fcloseTag);=0A=
=0A=
				// Trim whitespace, otherwise indexOf won't work as expected=0A=
				var tag =3D (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),=0A=
					wrap =3D wrapMap[ tag ] || wrapMap._default,=0A=
					depth =3D wrap[0],=0A=
					div =3D context.createElement("div");=0A=
=0A=
				// Go to html and back, then peel off extra wrappers=0A=
				div.innerHTML =3D wrap[1] + elem + wrap[2];=0A=
=0A=
				// Move to the right depth=0A=
				while ( depth-- ) {=0A=
					div =3D div.lastChild;=0A=
				}=0A=
=0A=
				// Remove IE's autoinserted <tbody> from table fragments=0A=
				if ( !jQuery.support.tbody ) {=0A=
=0A=
					// String was a <table>, *may* have spurious <tbody>=0A=
					var hasBody =3D rtbody.test(elem),=0A=
						tbody =3D tag =3D=3D=3D "table" && !hasBody ?=0A=
							div.firstChild && div.firstChild.childNodes :=0A=
=0A=
							// String was a bare <thead> or <tfoot>=0A=
							wrap[1] =3D=3D=3D "<table>" && !hasBody ?=0A=
								div.childNodes :=0A=
								[];=0A=
=0A=
					for ( var j =3D tbody.length - 1; j >=3D 0 ; --j ) {=0A=
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j =
].childNodes.length ) {=0A=
							tbody[ j ].parentNode.removeChild( tbody[ j ] );=0A=
						}=0A=
					}=0A=
=0A=
				}=0A=
=0A=
				// IE completely kills leading whitespace when innerHTML is used=0A=
				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( =
elem ) ) {=0A=
					div.insertBefore( context.createTextNode( =
rleadingWhitespace.exec(elem)[0] ), div.firstChild );=0A=
				}=0A=
=0A=
				elem =3D div.childNodes;=0A=
			}=0A=
=0A=
			if ( elem.nodeType ) {=0A=
				ret.push( elem );=0A=
			} else {=0A=
				ret =3D jQuery.merge( ret, elem );=0A=
			}=0A=
		}=0A=
=0A=
		if ( fragment ) {=0A=
			for ( var i =3D 0; ret[i]; i++ ) {=0A=
				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type =
|| ret[i].type.toLowerCase() =3D=3D=3D "text/javascript") ) {=0A=
					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( =
ret[i] ) : ret[i] );=0A=
				=0A=
				} else {=0A=
					if ( ret[i].nodeType =3D=3D=3D 1 ) {=0A=
						ret.splice.apply( ret, [i + 1, =
0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );=0A=
					}=0A=
					fragment.appendChild( ret[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
	=0A=
	cleanData: function( elems ) {=0A=
		var data, id, cache =3D jQuery.cache,=0A=
			special =3D jQuery.event.special,=0A=
			deleteExpando =3D jQuery.support.deleteExpando;=0A=
		=0A=
		for ( var i =3D 0, elem; (elem =3D elems[i]) !=3D null; i++ ) {=0A=
			id =3D elem[ jQuery.expando ];=0A=
			=0A=
			if ( id ) {=0A=
				data =3D cache[ id ];=0A=
				=0A=
				if ( data.events ) {=0A=
					for ( var type in data.events ) {=0A=
						if ( special[ type ] ) {=0A=
							jQuery.event.remove( elem, type );=0A=
=0A=
						} else {=0A=
							removeEvent( elem, type, data.handle );=0A=
						}=0A=
					}=0A=
				}=0A=
				=0A=
				if ( deleteExpando ) {=0A=
					delete elem[ jQuery.expando ];=0A=
=0A=
				} else if ( elem.removeAttribute ) {=0A=
					elem.removeAttribute( jQuery.expando );=0A=
				}=0A=
				=0A=
				delete cache[ id ];=0A=
			}=0A=
		}=0A=
	}=0A=
});=0A=
// exclude the following css properties to add px=0A=
var rexclude =3D /z-?index|font-?weight|opacity|zoom|line-?height/i,=0A=
	ralpha =3D /alpha\([^)]*\)/,=0A=
	ropacity =3D /opacity=3D([^)]*)/,=0A=
	rfloat =3D /float/i,=0A=
	rdashAlpha =3D /-([a-z])/ig,=0A=
	rupper =3D /([A-Z])/g,=0A=
	rnumpx =3D /^-?\d+(?:px)?$/i,=0A=
	rnum =3D /^-?\d/,=0A=
=0A=
	cssShow =3D { position: "absolute", visibility: "hidden", =
display:"block" },=0A=
	cssWidth =3D [ "Left", "Right" ],=0A=
	cssHeight =3D [ "Top", "Bottom" ],=0A=
=0A=
	// cache check for defaultView.getComputedStyle=0A=
	getComputedStyle =3D document.defaultView && =
document.defaultView.getComputedStyle,=0A=
	// normalize float css property=0A=
	styleFloat =3D jQuery.support.cssFloat ? "cssFloat" : "styleFloat",=0A=
	fcamelCase =3D function( all, letter ) {=0A=
		return letter.toUpperCase();=0A=
	};=0A=
=0A=
jQuery.fn.css =3D function( name, value ) {=0A=
	return access( this, name, value, true, function( elem, name, value ) {=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			return jQuery.curCSS( elem, name );=0A=
		}=0A=
		=0A=
		if ( typeof value =3D=3D=3D "number" && !rexclude.test(name) ) {=0A=
			value +=3D "px";=0A=
		}=0A=
=0A=
		jQuery.style( elem, name, value );=0A=
	});=0A=
};=0A=
=0A=
jQuery.extend({=0A=
	style: function( elem, name, value ) {=0A=
		// don't set styles on text and comment nodes=0A=
		if ( !elem || elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) =
{=0A=
			return undefined;=0A=
		}=0A=
=0A=
		// ignore negative width and height values #1599=0A=
		if ( (name =3D=3D=3D "width" || name =3D=3D=3D "height") && =
parseFloat(value) < 0 ) {=0A=
			value =3D undefined;=0A=
		}=0A=
=0A=
		var style =3D elem.style || elem, set =3D value !=3D=3D undefined;=0A=
=0A=
		// IE uses filters for opacity=0A=
		if ( !jQuery.support.opacity && name =3D=3D=3D "opacity" ) {=0A=
			if ( set ) {=0A=
				// IE has trouble with opacity if it does not have layout=0A=
				// Force it by setting the zoom level=0A=
				style.zoom =3D 1;=0A=
=0A=
				// Set the alpha filter to set the opacity=0A=
				var opacity =3D parseInt( value, 10 ) + "" =3D=3D=3D "NaN" ? "" : =
"alpha(opacity=3D" + value * 100 + ")";=0A=
				var filter =3D style.filter || jQuery.curCSS( elem, "filter" ) || "";=0A=
				style.filter =3D ralpha.test(filter) ? filter.replace(ralpha, =
opacity) : opacity;=0A=
			}=0A=
=0A=
			return style.filter && style.filter.indexOf("opacity=3D") >=3D 0 ?=0A=
				(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":=0A=
				"";=0A=
		}=0A=
=0A=
		// Make sure we're using the right name for getting the float value=0A=
		if ( rfloat.test( name ) ) {=0A=
			name =3D styleFloat;=0A=
		}=0A=
=0A=
		name =3D name.replace(rdashAlpha, fcamelCase);=0A=
=0A=
		if ( set ) {=0A=
			style[ name ] =3D value;=0A=
		}=0A=
=0A=
		return style[ name ];=0A=
	},=0A=
=0A=
	css: function( elem, name, force, extra ) {=0A=
		if ( name =3D=3D=3D "width" || name =3D=3D=3D "height" ) {=0A=
			var val, props =3D cssShow, which =3D name =3D=3D=3D "width" ? =
cssWidth : cssHeight;=0A=
=0A=
			function getWH() {=0A=
				val =3D name =3D=3D=3D "width" ? elem.offsetWidth : =
elem.offsetHeight;=0A=
=0A=
				if ( extra =3D=3D=3D "border" ) {=0A=
					return;=0A=
				}=0A=
=0A=
				jQuery.each( which, function() {=0A=
					if ( !extra ) {=0A=
						val -=3D parseFloat(jQuery.curCSS( elem, "padding" + this, true)) =
|| 0;=0A=
					}=0A=
=0A=
					if ( extra =3D=3D=3D "margin" ) {=0A=
						val +=3D parseFloat(jQuery.curCSS( elem, "margin" + this, true)) =
|| 0;=0A=
					} else {=0A=
						val -=3D parseFloat(jQuery.curCSS( elem, "border" + this + =
"Width", true)) || 0;=0A=
					}=0A=
				});=0A=
			}=0A=
=0A=
			if ( elem.offsetWidth !=3D=3D 0 ) {=0A=
				getWH();=0A=
			} else {=0A=
				jQuery.swap( elem, props, getWH );=0A=
			}=0A=
=0A=
			return Math.max(0, Math.round(val));=0A=
		}=0A=
=0A=
		return jQuery.curCSS( elem, name, force );=0A=
	},=0A=
=0A=
	curCSS: function( elem, name, force ) {=0A=
		var ret, style =3D elem.style, filter;=0A=
=0A=
		// IE uses filters for opacity=0A=
		if ( !jQuery.support.opacity && name =3D=3D=3D "opacity" && =
elem.currentStyle ) {=0A=
			ret =3D ropacity.test(elem.currentStyle.filter || "") ?=0A=
				(parseFloat(RegExp.$1) / 100) + "" :=0A=
				"";=0A=
=0A=
			return ret =3D=3D=3D "" ?=0A=
				"1" :=0A=
				ret;=0A=
		}=0A=
=0A=
		// Make sure we're using the right name for getting the float value=0A=
		if ( rfloat.test( name ) ) {=0A=
			name =3D styleFloat;=0A=
		}=0A=
=0A=
		if ( !force && style && style[ name ] ) {=0A=
			ret =3D style[ name ];=0A=
=0A=
		} else if ( getComputedStyle ) {=0A=
=0A=
			// Only "float" is needed here=0A=
			if ( rfloat.test( name ) ) {=0A=
				name =3D "float";=0A=
			}=0A=
=0A=
			name =3D name.replace( rupper, "-$1" ).toLowerCase();=0A=
=0A=
			var defaultView =3D elem.ownerDocument.defaultView;=0A=
=0A=
			if ( !defaultView ) {=0A=
				return null;=0A=
			}=0A=
=0A=
			var computedStyle =3D defaultView.getComputedStyle( elem, null );=0A=
=0A=
			if ( computedStyle ) {=0A=
				ret =3D computedStyle.getPropertyValue( name );=0A=
			}=0A=
=0A=
			// We should always get a number back from opacity=0A=
			if ( name =3D=3D=3D "opacity" && ret =3D=3D=3D "" ) {=0A=
				ret =3D "1";=0A=
			}=0A=
=0A=
		} else if ( elem.currentStyle ) {=0A=
			var camelCase =3D name.replace(rdashAlpha, fcamelCase);=0A=
=0A=
			ret =3D elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];=0A=
=0A=
			// From the awesome hack by Dean Edwards=0A=
			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291=0A=
=0A=
			// If we're not dealing with a regular pixel number=0A=
			// but a number that has a weird ending, we need to convert it to =
pixels=0A=
			if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {=0A=
				// Remember the original values=0A=
				var left =3D style.left, rsLeft =3D elem.runtimeStyle.left;=0A=
=0A=
				// Put in the new values to get a computed value out=0A=
				elem.runtimeStyle.left =3D elem.currentStyle.left;=0A=
				style.left =3D camelCase =3D=3D=3D "fontSize" ? "1em" : (ret || 0);=0A=
				ret =3D style.pixelLeft + "px";=0A=
=0A=
				// Revert the changed values=0A=
				style.left =3D left;=0A=
				elem.runtimeStyle.left =3D rsLeft;=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	// A method for quickly swapping in/out CSS properties to get correct =
calculations=0A=
	swap: function( elem, options, callback ) {=0A=
		var old =3D {};=0A=
=0A=
		// Remember the old values, and insert the new ones=0A=
		for ( var name in options ) {=0A=
			old[ name ] =3D elem.style[ name ];=0A=
			elem.style[ name ] =3D options[ name ];=0A=
		}=0A=
=0A=
		callback.call( elem );=0A=
=0A=
		// Revert the old values=0A=
		for ( var name in options ) {=0A=
			elem.style[ name ] =3D old[ name ];=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
if ( jQuery.expr && jQuery.expr.filters ) {=0A=
	jQuery.expr.filters.hidden =3D function( elem ) {=0A=
		var width =3D elem.offsetWidth, height =3D elem.offsetHeight,=0A=
			skip =3D elem.nodeName.toLowerCase() =3D=3D=3D "tr";=0A=
=0A=
		return width =3D=3D=3D 0 && height =3D=3D=3D 0 && !skip ?=0A=
			true :=0A=
			width > 0 && height > 0 && !skip ?=0A=
				false :=0A=
				jQuery.curCSS(elem, "display") =3D=3D=3D "none";=0A=
	};=0A=
=0A=
	jQuery.expr.filters.visible =3D function( elem ) {=0A=
		return !jQuery.expr.filters.hidden( elem );=0A=
	};=0A=
}=0A=
var jsc =3D now(),=0A=
	rscript =3D /<script(.|\s)*?\/script>/gi,=0A=
	rselectTextarea =3D /select|textarea/i,=0A=
	rinput =3D =
/color|date|datetime|email|hidden|month|number|password|range|search|tel|=
text|time|url|week/i,=0A=
	jsre =3D /=3D\?(&|$)/,=0A=
	rquery =3D /\?/,=0A=
	rts =3D /(\?|&)_=3D.*?(&|$)/,=0A=
	rurl =3D /^(\w+:)?\/\/([^\/?#]+)/,=0A=
	r20 =3D /%20/g,=0A=
=0A=
	// Keep a copy of the old load method=0A=
	_load =3D jQuery.fn.load;=0A=
=0A=
jQuery.fn.extend({=0A=
	load: function( url, params, callback ) {=0A=
		if ( typeof url !=3D=3D "string" ) {=0A=
			return _load.call( this, url );=0A=
=0A=
		// Don't do a request if no elements are being requested=0A=
		} else if ( !this.length ) {=0A=
			return this;=0A=
		}=0A=
=0A=
		var off =3D url.indexOf(" ");=0A=
		if ( off >=3D 0 ) {=0A=
			var selector =3D url.slice(off, url.length);=0A=
			url =3D url.slice(0, off);=0A=
		}=0A=
=0A=
		// Default to a GET request=0A=
		var type =3D "GET";=0A=
=0A=
		// If the second parameter was provided=0A=
		if ( params ) {=0A=
			// If it's a function=0A=
			if ( jQuery.isFunction( params ) ) {=0A=
				// We assume that it's the callback=0A=
				callback =3D params;=0A=
				params =3D null;=0A=
=0A=
			// Otherwise, build a param string=0A=
			} else if ( typeof params =3D=3D=3D "object" ) {=0A=
				params =3D jQuery.param( params, jQuery.ajaxSettings.traditional );=0A=
				type =3D "POST";=0A=
			}=0A=
		}=0A=
=0A=
		var self =3D this;=0A=
=0A=
		// Request the remote document=0A=
		jQuery.ajax({=0A=
			url: url,=0A=
			type: type,=0A=
			dataType: "html",=0A=
			data: params,=0A=
			complete: function( res, status ) {=0A=
				// If successful, inject the HTML into all the matched elements=0A=
				if ( status =3D=3D=3D "success" || status =3D=3D=3D "notmodified" ) {=0A=
					// See if a selector was specified=0A=
					self.html( selector ?=0A=
						// Create a dummy div to hold the results=0A=
						jQuery("<div />")=0A=
							// inject the contents of the document in, removing the scripts=0A=
							// to avoid any 'Permission Denied' errors in IE=0A=
							.append(res.responseText.replace(rscript, ""))=0A=
=0A=
							// Locate the specified elements=0A=
							.find(selector) :=0A=
=0A=
						// If not, just inject the full result=0A=
						res.responseText );=0A=
				}=0A=
=0A=
				if ( callback ) {=0A=
					self.each( callback, [res.responseText, status, res] );=0A=
				}=0A=
			}=0A=
		});=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	serialize: function() {=0A=
		return jQuery.param(this.serializeArray());=0A=
	},=0A=
	serializeArray: function() {=0A=
		return this.map(function() {=0A=
			return this.elements ? jQuery.makeArray(this.elements) : this;=0A=
		})=0A=
		.filter(function() {=0A=
			return this.name && !this.disabled &&=0A=
				(this.checked || rselectTextarea.test(this.nodeName) ||=0A=
					rinput.test(this.type));=0A=
		})=0A=
		.map(function( i, elem ) {=0A=
			var val =3D jQuery(this).val();=0A=
=0A=
			return val =3D=3D null ?=0A=
				null :=0A=
				jQuery.isArray(val) ?=0A=
					jQuery.map( val, function( val, i ) {=0A=
						return { name: elem.name, value: val };=0A=
					}) :=0A=
					{ name: elem.name, value: val };=0A=
		}).get();=0A=
	}=0A=
});=0A=
=0A=
// Attach a bunch of functions for handling common AJAX events=0A=
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess =
ajaxSend".split(" "), function( i, o ) {=0A=
	jQuery.fn[o] =3D function( f ) {=0A=
		return this.bind(o, f);=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
=0A=
	get: function( url, data, callback, type ) {=0A=
		// shift arguments if data argument was omited=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			type =3D type || callback;=0A=
			callback =3D data;=0A=
			data =3D null;=0A=
		}=0A=
=0A=
		return jQuery.ajax({=0A=
			type: "GET",=0A=
			url: url,=0A=
			data: data,=0A=
			success: callback,=0A=
			dataType: type=0A=
		});=0A=
	},=0A=
=0A=
	getScript: function( url, callback ) {=0A=
		return jQuery.get(url, null, callback, "script");=0A=
	},=0A=
=0A=
	getJSON: function( url, data, callback ) {=0A=
		return jQuery.get(url, data, callback, "json");=0A=
	},=0A=
=0A=
	post: function( url, data, callback, type ) {=0A=
		// shift arguments if data argument was omited=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			type =3D type || callback;=0A=
			callback =3D data;=0A=
			data =3D {};=0A=
		}=0A=
=0A=
		return jQuery.ajax({=0A=
			type: "POST",=0A=
			url: url,=0A=
			data: data,=0A=
			success: callback,=0A=
			dataType: type=0A=
		});=0A=
	},=0A=
=0A=
	ajaxSetup: function( settings ) {=0A=
		jQuery.extend( jQuery.ajaxSettings, settings );=0A=
	},=0A=
=0A=
	ajaxSettings: {=0A=
		url: location.href,=0A=
		global: true,=0A=
		type: "GET",=0A=
		contentType: "application/x-www-form-urlencoded",=0A=
		processData: true,=0A=
		async: true,=0A=
		/*=0A=
		timeout: 0,=0A=
		data: null,=0A=
		username: null,=0A=
		password: null,=0A=
		traditional: false,=0A=
		*/=0A=
		// Create the request object; Microsoft failed to properly=0A=
		// implement the XMLHttpRequest in IE7 (can't request local files),=0A=
		// so we use the ActiveXObject when it is available=0A=
		// This function can be overriden by calling jQuery.ajaxSetup=0A=
		xhr: window.XMLHttpRequest && (window.location.protocol !=3D=3D =
"file:" || !window.ActiveXObject) ?=0A=
			function() {=0A=
				return new window.XMLHttpRequest();=0A=
			} :=0A=
			function() {=0A=
				try {=0A=
					return new window.ActiveXObject("Microsoft.XMLHTTP");=0A=
				} catch(e) {}=0A=
			},=0A=
		accepts: {=0A=
			xml: "application/xml, text/xml",=0A=
			html: "text/html",=0A=
			script: "text/javascript, application/javascript",=0A=
			json: "application/json, text/javascript",=0A=
			text: "text/plain",=0A=
			_default: "*/*"=0A=
		}=0A=
	},=0A=
=0A=
	// Last-Modified header cache for next request=0A=
	lastModified: {},=0A=
	etag: {},=0A=
=0A=
	ajax: function( origSettings ) {=0A=
		var s =3D jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);=0A=
		=0A=
		var jsonp, status, data,=0A=
			callbackContext =3D origSettings && origSettings.context || s,=0A=
			type =3D s.type.toUpperCase();=0A=
=0A=
		// convert data if not already a string=0A=
		if ( s.data && s.processData && typeof s.data !=3D=3D "string" ) {=0A=
			s.data =3D jQuery.param( s.data, s.traditional );=0A=
		}=0A=
=0A=
		// Handle JSONP Parameter Callbacks=0A=
		if ( s.dataType =3D=3D=3D "jsonp" ) {=0A=
			if ( type =3D=3D=3D "GET" ) {=0A=
				if ( !jsre.test( s.url ) ) {=0A=
					s.url +=3D (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || =
"callback") + "=3D?";=0A=
				}=0A=
			} else if ( !s.data || !jsre.test(s.data) ) {=0A=
				s.data =3D (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + =
"=3D?";=0A=
			}=0A=
			s.dataType =3D "json";=0A=
		}=0A=
=0A=
		// Build temporary JSONP function=0A=
		if ( s.dataType =3D=3D=3D "json" && (s.data && jsre.test(s.data) || =
jsre.test(s.url)) ) {=0A=
			jsonp =3D s.jsonpCallback || ("jsonp" + jsc++);=0A=
=0A=
			// Replace the =3D? sequence both in the query string and the data=0A=
			if ( s.data ) {=0A=
				s.data =3D (s.data + "").replace(jsre, "=3D" + jsonp + "$1");=0A=
			}=0A=
=0A=
			s.url =3D s.url.replace(jsre, "=3D" + jsonp + "$1");=0A=
=0A=
			// We need to make sure=0A=
			// that a JSONP style response is executed properly=0A=
			s.dataType =3D "script";=0A=
=0A=
			// Handle JSONP-style loading=0A=
			window[ jsonp ] =3D window[ jsonp ] || function( tmp ) {=0A=
				data =3D tmp;=0A=
				success();=0A=
				complete();=0A=
				// Garbage collect=0A=
				window[ jsonp ] =3D undefined;=0A=
=0A=
				try {=0A=
					delete window[ jsonp ];=0A=
				} catch(e) {}=0A=
=0A=
				if ( head ) {=0A=
					head.removeChild( script );=0A=
				}=0A=
			};=0A=
		}=0A=
=0A=
		if ( s.dataType =3D=3D=3D "script" && s.cache =3D=3D=3D null ) {=0A=
			s.cache =3D false;=0A=
		}=0A=
=0A=
		if ( s.cache =3D=3D=3D false && type =3D=3D=3D "GET" ) {=0A=
			var ts =3D now();=0A=
=0A=
			// try replacing _=3D if it is there=0A=
			var ret =3D s.url.replace(rts, "$1_=3D" + ts + "$2");=0A=
=0A=
			// if nothing was replaced, add timestamp to the end=0A=
			s.url =3D ret + ((ret =3D=3D=3D s.url) ? (rquery.test(s.url) ? "&" : =
"?") + "_=3D" + ts : "");=0A=
		}=0A=
=0A=
		// If data is available, append data to url for get requests=0A=
		if ( s.data && type =3D=3D=3D "GET" ) {=0A=
			s.url +=3D (rquery.test(s.url) ? "&" : "?") + s.data;=0A=
		}=0A=
=0A=
		// Watch for a new set of requests=0A=
		if ( s.global && ! jQuery.active++ ) {=0A=
			jQuery.event.trigger( "ajaxStart" );=0A=
		}=0A=
=0A=
		// Matches an absolute URL, and saves the domain=0A=
		var parts =3D rurl.exec( s.url ),=0A=
			remote =3D parts && (parts[1] && parts[1] !=3D=3D location.protocol =
|| parts[2] !=3D=3D location.host);=0A=
=0A=
		// If we're requesting a remote document=0A=
		// and trying to load JSON or Script with a GET=0A=
		if ( s.dataType =3D=3D=3D "script" && type =3D=3D=3D "GET" && remote ) =
{=0A=
			var head =3D document.getElementsByTagName("head")[0] || =
document.documentElement;=0A=
			var script =3D document.createElement("script");=0A=
			script.src =3D s.url;=0A=
			if ( s.scriptCharset ) {=0A=
				script.charset =3D s.scriptCharset;=0A=
			}=0A=
=0A=
			// Handle Script loading=0A=
			if ( !jsonp ) {=0A=
				var done =3D false;=0A=
=0A=
				// Attach handlers for all browsers=0A=
				script.onload =3D script.onreadystatechange =3D function() {=0A=
					if ( !done && (!this.readyState ||=0A=
							this.readyState =3D=3D=3D "loaded" || this.readyState =3D=3D=3D =
"complete") ) {=0A=
						done =3D true;=0A=
						success();=0A=
						complete();=0A=
=0A=
						// Handle memory leak in IE=0A=
						script.onload =3D script.onreadystatechange =3D null;=0A=
						if ( head && script.parentNode ) {=0A=
							head.removeChild( script );=0A=
						}=0A=
					}=0A=
				};=0A=
			}=0A=
=0A=
			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.=0A=
			// This arises when a base node is used (#2709 and #4378).=0A=
			head.insertBefore( script, head.firstChild );=0A=
=0A=
			// We handle everything using the script element injection=0A=
			return undefined;=0A=
		}=0A=
=0A=
		var requestDone =3D false;=0A=
=0A=
		// Create the request object=0A=
		var xhr =3D s.xhr();=0A=
=0A=
		if ( !xhr ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// Open the socket=0A=
		// Passing null username, generates a login popup on Opera (#2865)=0A=
		if ( s.username ) {=0A=
			xhr.open(type, s.url, s.async, s.username, s.password);=0A=
		} else {=0A=
			xhr.open(type, s.url, s.async);=0A=
		}=0A=
=0A=
		// Need an extra try/catch for cross domain requests in Firefox 3=0A=
		try {=0A=
			// Set the correct header, if data is being sent=0A=
			if ( s.data || origSettings && origSettings.contentType ) {=0A=
				xhr.setRequestHeader("Content-Type", s.contentType);=0A=
			}=0A=
=0A=
			// Set the If-Modified-Since and/or If-None-Match header, if in =
ifModified mode.=0A=
			if ( s.ifModified ) {=0A=
				if ( jQuery.lastModified[s.url] ) {=0A=
					xhr.setRequestHeader("If-Modified-Since", =
jQuery.lastModified[s.url]);=0A=
				}=0A=
=0A=
				if ( jQuery.etag[s.url] ) {=0A=
					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);=0A=
				}=0A=
			}=0A=
=0A=
			// Set header so the called script knows that it's an XMLHttpRequest=0A=
			// Only send the header if it's not a remote XHR=0A=
			if ( !remote ) {=0A=
				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");=0A=
			}=0A=
=0A=
			// Set the Accepts header for the server, depending on the dataType=0A=
			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?=0A=
				s.accepts[ s.dataType ] + ", */*" :=0A=
				s.accepts._default );=0A=
		} catch(e) {}=0A=
=0A=
		// Allow custom headers/mimetypes and early abort=0A=
		if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) =
=3D=3D=3D false ) {=0A=
			// Handle the global AJAX counter=0A=
			if ( s.global && ! --jQuery.active ) {=0A=
				jQuery.event.trigger( "ajaxStop" );=0A=
			}=0A=
=0A=
			// close opended socket=0A=
			xhr.abort();=0A=
			return false;=0A=
		}=0A=
=0A=
		if ( s.global ) {=0A=
			trigger("ajaxSend", [xhr, s]);=0A=
		}=0A=
=0A=
		// Wait for a response to come back=0A=
		var onreadystatechange =3D xhr.onreadystatechange =3D function( =
isTimeout ) {=0A=
			// The request was aborted=0A=
			if ( !xhr || xhr.readyState =3D=3D=3D 0 || isTimeout =3D=3D=3D =
"abort" ) {=0A=
				// Opera doesn't call onreadystatechange before this point=0A=
				// so we simulate the call=0A=
				if ( !requestDone ) {=0A=
					complete();=0A=
				}=0A=
=0A=
				requestDone =3D true;=0A=
				if ( xhr ) {=0A=
					xhr.onreadystatechange =3D jQuery.noop;=0A=
				}=0A=
=0A=
			// The transfer is complete and the data is available, or the request =
timed out=0A=
			} else if ( !requestDone && xhr && (xhr.readyState =3D=3D=3D 4 || =
isTimeout =3D=3D=3D "timeout") ) {=0A=
				requestDone =3D true;=0A=
				xhr.onreadystatechange =3D jQuery.noop;=0A=
=0A=
				status =3D isTimeout =3D=3D=3D "timeout" ?=0A=
					"timeout" :=0A=
					!jQuery.httpSuccess( xhr ) ?=0A=
						"error" :=0A=
						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?=0A=
							"notmodified" :=0A=
							"success";=0A=
=0A=
				var errMsg;=0A=
=0A=
				if ( status =3D=3D=3D "success" ) {=0A=
					// Watch for, and catch, XML document parse errors=0A=
					try {=0A=
						// process the data (runs the xml through httpData regardless of =
callback)=0A=
						data =3D jQuery.httpData( xhr, s.dataType, s );=0A=
					} catch(err) {=0A=
						status =3D "parsererror";=0A=
						errMsg =3D err;=0A=
					}=0A=
				}=0A=
=0A=
				// Make sure that the request was successful or notmodified=0A=
				if ( status =3D=3D=3D "success" || status =3D=3D=3D "notmodified" ) {=0A=
					// JSONP handles its own success callback=0A=
					if ( !jsonp ) {=0A=
						success();=0A=
					}=0A=
				} else {=0A=
					jQuery.handleError(s, xhr, status, errMsg);=0A=
				}=0A=
=0A=
				// Fire the complete handlers=0A=
				complete();=0A=
=0A=
				if ( isTimeout =3D=3D=3D "timeout" ) {=0A=
					xhr.abort();=0A=
				}=0A=
=0A=
				// Stop memory leaks=0A=
				if ( s.async ) {=0A=
					xhr =3D null;=0A=
				}=0A=
			}=0A=
		};=0A=
=0A=
		// Override the abort handler, if we can (IE doesn't allow it, but =
that's OK)=0A=
		// Opera doesn't fire onreadystatechange at all on abort=0A=
		try {=0A=
			var oldAbort =3D xhr.abort;=0A=
			xhr.abort =3D function() {=0A=
				if ( xhr ) {=0A=
					oldAbort.call( xhr );=0A=
				}=0A=
=0A=
				onreadystatechange( "abort" );=0A=
			};=0A=
		} catch(e) { }=0A=
=0A=
		// Timeout checker=0A=
		if ( s.async && s.timeout > 0 ) {=0A=
			setTimeout(function() {=0A=
				// Check to see if the request is still happening=0A=
				if ( xhr && !requestDone ) {=0A=
					onreadystatechange( "timeout" );=0A=
				}=0A=
			}, s.timeout);=0A=
		}=0A=
=0A=
		// Send the data=0A=
		try {=0A=
			xhr.send( type =3D=3D=3D "POST" || type =3D=3D=3D "PUT" || type =
=3D=3D=3D "DELETE" ? s.data : null );=0A=
		} catch(e) {=0A=
			jQuery.handleError(s, xhr, null, e);=0A=
			// Fire the complete handlers=0A=
			complete();=0A=
		}=0A=
=0A=
		// firefox 1.5 doesn't fire statechange for sync requests=0A=
		if ( !s.async ) {=0A=
			onreadystatechange();=0A=
		}=0A=
=0A=
		function success() {=0A=
			// If a local callback was specified, fire it and pass it the data=0A=
			if ( s.success ) {=0A=
				s.success.call( callbackContext, data, status, xhr );=0A=
			}=0A=
=0A=
			// Fire the global callback=0A=
			if ( s.global ) {=0A=
				trigger( "ajaxSuccess", [xhr, s] );=0A=
			}=0A=
		}=0A=
=0A=
		function complete() {=0A=
			// Process result=0A=
			if ( s.complete ) {=0A=
				s.complete.call( callbackContext, xhr, status);=0A=
			}=0A=
=0A=
			// The request was completed=0A=
			if ( s.global ) {=0A=
				trigger( "ajaxComplete", [xhr, s] );=0A=
			}=0A=
=0A=
			// Handle the global AJAX counter=0A=
			if ( s.global && ! --jQuery.active ) {=0A=
				jQuery.event.trigger( "ajaxStop" );=0A=
			}=0A=
		}=0A=
		=0A=
		function trigger(type, args) {=0A=
			(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);=0A=
		}=0A=
=0A=
		// return XMLHttpRequest to allow aborting the request etc.=0A=
		return xhr;=0A=
	},=0A=
=0A=
	handleError: function( s, xhr, status, e ) {=0A=
		// If a local callback was specified, fire it=0A=
		if ( s.error ) {=0A=
			s.error.call( s.context || s, xhr, status, e );=0A=
		}=0A=
=0A=
		// Fire the global callback=0A=
		if ( s.global ) {=0A=
			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", =
[xhr, s, e] );=0A=
		}=0A=
	},=0A=
=0A=
	// Counter for holding the number of active queries=0A=
	active: 0,=0A=
=0A=
	// Determines if an XMLHttpRequest was successful or not=0A=
	httpSuccess: function( xhr ) {=0A=
		try {=0A=
			// IE error sometimes returns 1223 when it should be 204 so treat it =
as success, see #1450=0A=
			return !xhr.status && location.protocol =3D=3D=3D "file:" ||=0A=
				// Opera returns 0 when status is 304=0A=
				( xhr.status >=3D 200 && xhr.status < 300 ) ||=0A=
				xhr.status =3D=3D=3D 304 || xhr.status =3D=3D=3D 1223 || xhr.status =
=3D=3D=3D 0;=0A=
		} catch(e) {}=0A=
=0A=
		return false;=0A=
	},=0A=
=0A=
	// Determines if an XMLHttpRequest returns NotModified=0A=
	httpNotModified: function( xhr, url ) {=0A=
		var lastModified =3D xhr.getResponseHeader("Last-Modified"),=0A=
			etag =3D xhr.getResponseHeader("Etag");=0A=
=0A=
		if ( lastModified ) {=0A=
			jQuery.lastModified[url] =3D lastModified;=0A=
		}=0A=
=0A=
		if ( etag ) {=0A=
			jQuery.etag[url] =3D etag;=0A=
		}=0A=
=0A=
		// Opera returns 0 when status is 304=0A=
		return xhr.status =3D=3D=3D 304 || xhr.status =3D=3D=3D 0;=0A=
	},=0A=
=0A=
	httpData: function( xhr, type, s ) {=0A=
		var ct =3D xhr.getResponseHeader("content-type") || "",=0A=
			xml =3D type =3D=3D=3D "xml" || !type && ct.indexOf("xml") >=3D 0,=0A=
			data =3D xml ? xhr.responseXML : xhr.responseText;=0A=
=0A=
		if ( xml && data.documentElement.nodeName =3D=3D=3D "parsererror" ) {=0A=
			jQuery.error( "parsererror" );=0A=
		}=0A=
=0A=
		// Allow a pre-filtering function to sanitize the response=0A=
		// s is checked to keep backwards compatibility=0A=
		if ( s && s.dataFilter ) {=0A=
			data =3D s.dataFilter( data, type );=0A=
		}=0A=
=0A=
		// The filter can actually parse the response=0A=
		if ( typeof data =3D=3D=3D "string" ) {=0A=
			// Get the JavaScript object, if JSON is used.=0A=
			if ( type =3D=3D=3D "json" || !type && ct.indexOf("json") >=3D 0 ) {=0A=
				data =3D jQuery.parseJSON( data );=0A=
=0A=
			// If the type is "script", eval it in global context=0A=
			} else if ( type =3D=3D=3D "script" || !type && =
ct.indexOf("javascript") >=3D 0 ) {=0A=
				jQuery.globalEval( data );=0A=
			}=0A=
		}=0A=
=0A=
		return data;=0A=
	},=0A=
=0A=
	// Serialize an array of form elements or a set of=0A=
	// key/values into a query string=0A=
	param: function( a, traditional ) {=0A=
		var s =3D [];=0A=
		=0A=
		// Set traditional to true for jQuery <=3D 1.3.2 behavior.=0A=
		if ( traditional =3D=3D=3D undefined ) {=0A=
			traditional =3D jQuery.ajaxSettings.traditional;=0A=
		}=0A=
		=0A=
		// If an array was passed in, assume that it is an array of form =
elements.=0A=
		if ( jQuery.isArray(a) || a.jquery ) {=0A=
			// Serialize the form elements=0A=
			jQuery.each( a, function() {=0A=
				add( this.name, this.value );=0A=
			});=0A=
			=0A=
		} else {=0A=
			// If traditional, encode the "old" way (the way 1.3.2 or older=0A=
			// did it), otherwise encode params recursively.=0A=
			for ( var prefix in a ) {=0A=
				buildParams( prefix, a[prefix] );=0A=
			}=0A=
		}=0A=
=0A=
		// Return the resulting serialization=0A=
		return s.join("&").replace(r20, "+");=0A=
=0A=
		function buildParams( prefix, obj ) {=0A=
			if ( jQuery.isArray(obj) ) {=0A=
				// Serialize array item.=0A=
				jQuery.each( obj, function( i, v ) {=0A=
					if ( traditional || /\[\]$/.test( prefix ) ) {=0A=
						// Treat each array item as a scalar.=0A=
						add( prefix, v );=0A=
					} else {=0A=
						// If array item is non-scalar (array or object), encode its=0A=
						// numeric index to resolve deserialization ambiguity issues.=0A=
						// Note that rack (as of 1.0.0) can't currently deserialize=0A=
						// nested arrays properly, and attempting to do so may cause=0A=
						// a server error. Possible fixes are to modify rack's=0A=
						// deserialization algorithm or to provide an option or flag=0A=
						// to force array serialization to be shallow.=0A=
						buildParams( prefix + "[" + ( typeof v =3D=3D=3D "object" || =
jQuery.isArray(v) ? i : "" ) + "]", v );=0A=
					}=0A=
				});=0A=
					=0A=
			} else if ( !traditional && obj !=3D null && typeof obj =3D=3D=3D =
"object" ) {=0A=
				// Serialize object item.=0A=
				jQuery.each( obj, function( k, v ) {=0A=
					buildParams( prefix + "[" + k + "]", v );=0A=
				});=0A=
					=0A=
			} else {=0A=
				// Serialize scalar item.=0A=
				add( prefix, obj );=0A=
			}=0A=
		}=0A=
=0A=
		function add( key, value ) {=0A=
			// If value is a function, invoke it and return its value=0A=
			value =3D jQuery.isFunction(value) ? value() : value;=0A=
			s[ s.length ] =3D encodeURIComponent(key) + "=3D" + =
encodeURIComponent(value);=0A=
		}=0A=
	}=0A=
});=0A=
var elemdisplay =3D {},=0A=
	rfxtypes =3D /toggle|show|hide/,=0A=
	rfxnum =3D /^([+-]=3D)?([\d+-.]+)(.*)$/,=0A=
	timerId,=0A=
	fxAttrs =3D [=0A=
		// height animations=0A=
		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" =
],=0A=
		// width animations=0A=
		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" =
],=0A=
		// opacity animations=0A=
		[ "opacity" ]=0A=
	];=0A=
=0A=
jQuery.fn.extend({=0A=
	show: function( speed, callback ) {=0A=
		if ( speed || speed =3D=3D=3D 0) {=0A=
			return this.animate( genFx("show", 3), speed, callback);=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				var old =3D jQuery.data(this[i], "olddisplay");=0A=
=0A=
				this[i].style.display =3D old || "";=0A=
=0A=
				if ( jQuery.css(this[i], "display") =3D=3D=3D "none" ) {=0A=
					var nodeName =3D this[i].nodeName, display;=0A=
=0A=
					if ( elemdisplay[ nodeName ] ) {=0A=
						display =3D elemdisplay[ nodeName ];=0A=
=0A=
					} else {=0A=
						var elem =3D jQuery("<" + nodeName + " />").appendTo("body");=0A=
=0A=
						display =3D elem.css("display");=0A=
=0A=
						if ( display =3D=3D=3D "none" ) {=0A=
							display =3D "block";=0A=
						}=0A=
=0A=
						elem.remove();=0A=
=0A=
						elemdisplay[ nodeName ] =3D display;=0A=
					}=0A=
=0A=
					jQuery.data(this[i], "olddisplay", display);=0A=
				}=0A=
			}=0A=
=0A=
			// Set the display of the elements in a second loop=0A=
			// to avoid the constant reflow=0A=
			for ( var j =3D 0, k =3D this.length; j < k; j++ ) {=0A=
				this[j].style.display =3D jQuery.data(this[j], "olddisplay") || "";=0A=
			}=0A=
=0A=
			return this;=0A=
		}=0A=
	},=0A=
=0A=
	hide: function( speed, callback ) {=0A=
		if ( speed || speed =3D=3D=3D 0 ) {=0A=
			return this.animate( genFx("hide", 3), speed, callback);=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				var old =3D jQuery.data(this[i], "olddisplay");=0A=
				if ( !old && old !=3D=3D "none" ) {=0A=
					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));=0A=
				}=0A=
			}=0A=
=0A=
			// Set the display of the elements in a second loop=0A=
			// to avoid the constant reflow=0A=
			for ( var j =3D 0, k =3D this.length; j < k; j++ ) {=0A=
				this[j].style.display =3D "none";=0A=
			}=0A=
=0A=
			return this;=0A=
		}=0A=
	},=0A=
=0A=
	// Save the old toggle function=0A=
	_toggle: jQuery.fn.toggle,=0A=
=0A=
	toggle: function( fn, fn2 ) {=0A=
		var bool =3D typeof fn =3D=3D=3D "boolean";=0A=
=0A=
		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {=0A=
			this._toggle.apply( this, arguments );=0A=
=0A=
		} else if ( fn =3D=3D null || bool ) {=0A=
			this.each(function() {=0A=
				var state =3D bool ? fn : jQuery(this).is(":hidden");=0A=
				jQuery(this)[ state ? "show" : "hide" ]();=0A=
			});=0A=
=0A=
		} else {=0A=
			this.animate(genFx("toggle", 3), fn, fn2);=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	fadeTo: function( speed, to, callback ) {=0A=
		return this.filter(":hidden").css("opacity", 0).show().end()=0A=
					.animate({opacity: to}, speed, callback);=0A=
	},=0A=
=0A=
	animate: function( prop, speed, easing, callback ) {=0A=
		var optall =3D jQuery.speed(speed, easing, callback);=0A=
=0A=
		if ( jQuery.isEmptyObject( prop ) ) {=0A=
			return this.each( optall.complete );=0A=
		}=0A=
=0A=
		return this[ optall.queue =3D=3D=3D false ? "each" : "queue" =
](function() {=0A=
			var opt =3D jQuery.extend({}, optall), p,=0A=
				hidden =3D this.nodeType =3D=3D=3D 1 && jQuery(this).is(":hidden"),=0A=
				self =3D this;=0A=
=0A=
			for ( p in prop ) {=0A=
				var name =3D p.replace(rdashAlpha, fcamelCase);=0A=
=0A=
				if ( p !=3D=3D name ) {=0A=
					prop[ name ] =3D prop[ p ];=0A=
					delete prop[ p ];=0A=
					p =3D name;=0A=
				}=0A=
=0A=
				if ( prop[p] =3D=3D=3D "hide" && hidden || prop[p] =3D=3D=3D "show" =
&& !hidden ) {=0A=
					return opt.complete.call(this);=0A=
				}=0A=
=0A=
				if ( ( p =3D=3D=3D "height" || p =3D=3D=3D "width" ) && this.style ) =
{=0A=
					// Store display property=0A=
					opt.display =3D jQuery.css(this, "display");=0A=
=0A=
					// Make sure that nothing sneaks out=0A=
					opt.overflow =3D this.style.overflow;=0A=
				}=0A=
=0A=
				if ( jQuery.isArray( prop[p] ) ) {=0A=
					// Create (if needed) and add to specialEasing=0A=
					(opt.specialEasing =3D opt.specialEasing || {})[p] =3D prop[p][1];=0A=
					prop[p] =3D prop[p][0];=0A=
				}=0A=
			}=0A=
=0A=
			if ( opt.overflow !=3D null ) {=0A=
				this.style.overflow =3D "hidden";=0A=
			}=0A=
=0A=
			opt.curAnim =3D jQuery.extend({}, prop);=0A=
=0A=
			jQuery.each( prop, function( name, val ) {=0A=
				var e =3D new jQuery.fx( self, opt, name );=0A=
=0A=
				if ( rfxtypes.test(val) ) {=0A=
					e[ val =3D=3D=3D "toggle" ? hidden ? "show" : "hide" : val ]( prop =
);=0A=
=0A=
				} else {=0A=
					var parts =3D rfxnum.exec(val),=0A=
						start =3D e.cur(true) || 0;=0A=
=0A=
					if ( parts ) {=0A=
						var end =3D parseFloat( parts[2] ),=0A=
							unit =3D parts[3] || "px";=0A=
=0A=
						// We need to compute starting value=0A=
						if ( unit !=3D=3D "px" ) {=0A=
							self.style[ name ] =3D (end || 1) + unit;=0A=
							start =3D ((end || 1) / e.cur(true)) * start;=0A=
							self.style[ name ] =3D start + unit;=0A=
						}=0A=
=0A=
						// If a +=3D/-=3D token was provided, we're doing a relative =
animation=0A=
						if ( parts[1] ) {=0A=
							end =3D ((parts[1] =3D=3D=3D "-=3D" ? -1 : 1) * end) + start;=0A=
						}=0A=
=0A=
						e.custom( start, end, unit );=0A=
=0A=
					} else {=0A=
						e.custom( start, val, "" );=0A=
					}=0A=
				}=0A=
			});=0A=
=0A=
			// For JS strict compliance=0A=
			return true;=0A=
		});=0A=
	},=0A=
=0A=
	stop: function( clearQueue, gotoEnd ) {=0A=
		var timers =3D jQuery.timers;=0A=
=0A=
		if ( clearQueue ) {=0A=
			this.queue([]);=0A=
		}=0A=
=0A=
		this.each(function() {=0A=
			// go in reverse order so anything added to the queue during the loop =
is ignored=0A=
			for ( var i =3D timers.length - 1; i >=3D 0; i-- ) {=0A=
				if ( timers[i].elem =3D=3D=3D this ) {=0A=
					if (gotoEnd) {=0A=
						// force the next step to be the last=0A=
						timers[i](true);=0A=
					}=0A=
=0A=
					timers.splice(i, 1);=0A=
				}=0A=
			}=0A=
		});=0A=
=0A=
		// start the next in the queue if the last step wasn't forced=0A=
		if ( !gotoEnd ) {=0A=
			this.dequeue();=0A=
		}=0A=
=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
// Generate shortcuts for custom animations=0A=
jQuery.each({=0A=
	slideDown: genFx("show", 1),=0A=
	slideUp: genFx("hide", 1),=0A=
	slideToggle: genFx("toggle", 1),=0A=
	fadeIn: { opacity: "show" },=0A=
	fadeOut: { opacity: "hide" }=0A=
}, function( name, props ) {=0A=
	jQuery.fn[ name ] =3D function( speed, callback ) {=0A=
		return this.animate( props, speed, callback );=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	speed: function( speed, easing, fn ) {=0A=
		var opt =3D speed && typeof speed =3D=3D=3D "object" ? speed : {=0A=
			complete: fn || !fn && easing ||=0A=
				jQuery.isFunction( speed ) && speed,=0A=
			duration: speed,=0A=
			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing=0A=
		};=0A=
=0A=
		opt.duration =3D jQuery.fx.off ? 0 : typeof opt.duration =3D=3D=3D =
"number" ? opt.duration :=0A=
			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;=0A=
=0A=
		// Queueing=0A=
		opt.old =3D opt.complete;=0A=
		opt.complete =3D function() {=0A=
			if ( opt.queue !=3D=3D false ) {=0A=
				jQuery(this).dequeue();=0A=
			}=0A=
			if ( jQuery.isFunction( opt.old ) ) {=0A=
				opt.old.call( this );=0A=
			}=0A=
		};=0A=
=0A=
		return opt;=0A=
	},=0A=
=0A=
	easing: {=0A=
		linear: function( p, n, firstNum, diff ) {=0A=
			return firstNum + diff * p;=0A=
		},=0A=
		swing: function( p, n, firstNum, diff ) {=0A=
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;=0A=
		}=0A=
	},=0A=
=0A=
	timers: [],=0A=
=0A=
	fx: function( elem, options, prop ) {=0A=
		this.options =3D options;=0A=
		this.elem =3D elem;=0A=
		this.prop =3D prop;=0A=
=0A=
		if ( !options.orig ) {=0A=
			options.orig =3D {};=0A=
		}=0A=
	}=0A=
=0A=
});=0A=
=0A=
jQuery.fx.prototype =3D {=0A=
	// Simple function for setting a style value=0A=
	update: function() {=0A=
		if ( this.options.step ) {=0A=
			this.options.step.call( this.elem, this.now, this );=0A=
		}=0A=
=0A=
		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );=0A=
=0A=
		// Set display property to block for height/width animations=0A=
		if ( ( this.prop =3D=3D=3D "height" || this.prop =3D=3D=3D "width" ) =
&& this.elem.style ) {=0A=
			this.elem.style.display =3D "block";=0A=
		}=0A=
	},=0A=
=0A=
	// Get the current size=0A=
	cur: function( force ) {=0A=
		if ( this.elem[this.prop] !=3D null && (!this.elem.style || =
this.elem.style[this.prop] =3D=3D null) ) {=0A=
			return this.elem[ this.prop ];=0A=
		}=0A=
=0A=
		var r =3D parseFloat(jQuery.css(this.elem, this.prop, force));=0A=
		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, =
this.prop)) || 0;=0A=
	},=0A=
=0A=
	// Start an animation from one number to another=0A=
	custom: function( from, to, unit ) {=0A=
		this.startTime =3D now();=0A=
		this.start =3D from;=0A=
		this.end =3D to;=0A=
		this.unit =3D unit || this.unit || "px";=0A=
		this.now =3D this.start;=0A=
		this.pos =3D this.state =3D 0;=0A=
=0A=
		var self =3D this;=0A=
		function t( gotoEnd ) {=0A=
			return self.step(gotoEnd);=0A=
		}=0A=
=0A=
		t.elem =3D this.elem;=0A=
=0A=
		if ( t() && jQuery.timers.push(t) && !timerId ) {=0A=
			timerId =3D setInterval(jQuery.fx.tick, 13);=0A=
		}=0A=
	},=0A=
=0A=
	// Simple 'show' function=0A=
	show: function() {=0A=
		// Remember where we started, so that we can go back to it later=0A=
		this.options.orig[this.prop] =3D jQuery.style( this.elem, this.prop );=0A=
		this.options.show =3D true;=0A=
=0A=
		// Begin the animation=0A=
		// Make sure that we start at a small width/height to avoid any=0A=
		// flash of content=0A=
		this.custom(this.prop =3D=3D=3D "width" || this.prop =3D=3D=3D =
"height" ? 1 : 0, this.cur());=0A=
=0A=
		// Start by showing the element=0A=
		jQuery( this.elem ).show();=0A=
	},=0A=
=0A=
	// Simple 'hide' function=0A=
	hide: function() {=0A=
		// Remember where we started, so that we can go back to it later=0A=
		this.options.orig[this.prop] =3D jQuery.style( this.elem, this.prop );=0A=
		this.options.hide =3D true;=0A=
=0A=
		// Begin the animation=0A=
		this.custom(this.cur(), 0);=0A=
	},=0A=
=0A=
	// Each step of an animation=0A=
	step: function( gotoEnd ) {=0A=
		var t =3D now(), done =3D true;=0A=
=0A=
		if ( gotoEnd || t >=3D this.options.duration + this.startTime ) {=0A=
			this.now =3D this.end;=0A=
			this.pos =3D this.state =3D 1;=0A=
			this.update();=0A=
=0A=
			this.options.curAnim[ this.prop ] =3D true;=0A=
=0A=
			for ( var i in this.options.curAnim ) {=0A=
				if ( this.options.curAnim[i] !=3D=3D true ) {=0A=
					done =3D false;=0A=
				}=0A=
			}=0A=
=0A=
			if ( done ) {=0A=
				if ( this.options.display !=3D null ) {=0A=
					// Reset the overflow=0A=
					this.elem.style.overflow =3D this.options.overflow;=0A=
=0A=
					// Reset the display=0A=
					var old =3D jQuery.data(this.elem, "olddisplay");=0A=
					this.elem.style.display =3D old ? old : this.options.display;=0A=
=0A=
					if ( jQuery.css(this.elem, "display") =3D=3D=3D "none" ) {=0A=
						this.elem.style.display =3D "block";=0A=
					}=0A=
				}=0A=
=0A=
				// Hide the element if the "hide" operation was done=0A=
				if ( this.options.hide ) {=0A=
					jQuery(this.elem).hide();=0A=
				}=0A=
=0A=
				// Reset the properties, if the item has been hidden or shown=0A=
				if ( this.options.hide || this.options.show ) {=0A=
					for ( var p in this.options.curAnim ) {=0A=
						jQuery.style(this.elem, p, this.options.orig[p]);=0A=
					}=0A=
				}=0A=
=0A=
				// Execute the complete function=0A=
				this.options.complete.call( this.elem );=0A=
			}=0A=
=0A=
			return false;=0A=
=0A=
		} else {=0A=
			var n =3D t - this.startTime;=0A=
			this.state =3D n / this.options.duration;=0A=
=0A=
			// Perform the easing function, defaults to swing=0A=
			var specialEasing =3D this.options.specialEasing && =
this.options.specialEasing[this.prop];=0A=
			var defaultEasing =3D this.options.easing || (jQuery.easing.swing ? =
"swing" : "linear");=0A=
			this.pos =3D jQuery.easing[specialEasing || =
defaultEasing](this.state, n, 0, 1, this.options.duration);=0A=
			this.now =3D this.start + ((this.end - this.start) * this.pos);=0A=
=0A=
			// Perform the next step of the animation=0A=
			this.update();=0A=
		}=0A=
=0A=
		return true;=0A=
	}=0A=
};=0A=
=0A=
jQuery.extend( jQuery.fx, {=0A=
	tick: function() {=0A=
		var timers =3D jQuery.timers;=0A=
=0A=
		for ( var i =3D 0; i < timers.length; i++ ) {=0A=
			if ( !timers[i]() ) {=0A=
				timers.splice(i--, 1);=0A=
			}=0A=
		}=0A=
=0A=
		if ( !timers.length ) {=0A=
			jQuery.fx.stop();=0A=
		}=0A=
	},=0A=
		=0A=
	stop: function() {=0A=
		clearInterval( timerId );=0A=
		timerId =3D null;=0A=
	},=0A=
	=0A=
	speeds: {=0A=
		slow: 600,=0A=
 		fast: 200,=0A=
 		// Default speed=0A=
 		_default: 400=0A=
	},=0A=
=0A=
	step: {=0A=
		opacity: function( fx ) {=0A=
			jQuery.style(fx.elem, "opacity", fx.now);=0A=
		},=0A=
=0A=
		_default: function( fx ) {=0A=
			if ( fx.elem.style && fx.elem.style[ fx.prop ] !=3D null ) {=0A=
				fx.elem.style[ fx.prop ] =3D (fx.prop =3D=3D=3D "width" || fx.prop =
=3D=3D=3D "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;=0A=
			} else {=0A=
				fx.elem[ fx.prop ] =3D fx.now;=0A=
			}=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
if ( jQuery.expr && jQuery.expr.filters ) {=0A=
	jQuery.expr.filters.animated =3D function( elem ) {=0A=
		return jQuery.grep(jQuery.timers, function( fn ) {=0A=
			return elem =3D=3D=3D fn.elem;=0A=
		}).length;=0A=
	};=0A=
}=0A=
=0A=
function genFx( type, num ) {=0A=
	var obj =3D {};=0A=
=0A=
	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() =
{=0A=
		obj[ this ] =3D type;=0A=
	});=0A=
=0A=
	return obj;=0A=
}=0A=
if ( "getBoundingClientRect" in document.documentElement ) {=0A=
	jQuery.fn.offset =3D function( options ) {=0A=
		var elem =3D this[0];=0A=
=0A=
		if ( options ) { =0A=
			return this.each(function( i ) {=0A=
				jQuery.offset.setOffset( this, options, i );=0A=
			});=0A=
		}=0A=
=0A=
		if ( !elem || !elem.ownerDocument ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		if ( elem =3D=3D=3D elem.ownerDocument.body ) {=0A=
			return jQuery.offset.bodyOffset( elem );=0A=
		}=0A=
=0A=
		var box =3D elem.getBoundingClientRect(), doc =3D elem.ownerDocument, =
body =3D doc.body, docElem =3D doc.documentElement,=0A=
			clientTop =3D docElem.clientTop || body.clientTop || 0, clientLeft =
=3D docElem.clientLeft || body.clientLeft || 0,=0A=
			top  =3D box.top  + (self.pageYOffset || jQuery.support.boxModel && =
docElem.scrollTop  || body.scrollTop ) - clientTop,=0A=
			left =3D box.left + (self.pageXOffset || jQuery.support.boxModel && =
docElem.scrollLeft || body.scrollLeft) - clientLeft;=0A=
=0A=
		return { top: top, left: left };=0A=
	};=0A=
=0A=
} else {=0A=
	jQuery.fn.offset =3D function( options ) {=0A=
		var elem =3D this[0];=0A=
=0A=
		if ( options ) { =0A=
			return this.each(function( i ) {=0A=
				jQuery.offset.setOffset( this, options, i );=0A=
			});=0A=
		}=0A=
=0A=
		if ( !elem || !elem.ownerDocument ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		if ( elem =3D=3D=3D elem.ownerDocument.body ) {=0A=
			return jQuery.offset.bodyOffset( elem );=0A=
		}=0A=
=0A=
		jQuery.offset.initialize();=0A=
=0A=
		var offsetParent =3D elem.offsetParent, prevOffsetParent =3D elem,=0A=
			doc =3D elem.ownerDocument, computedStyle, docElem =3D =
doc.documentElement,=0A=
			body =3D doc.body, defaultView =3D doc.defaultView,=0A=
			prevComputedStyle =3D defaultView ? defaultView.getComputedStyle( =
elem, null ) : elem.currentStyle,=0A=
			top =3D elem.offsetTop, left =3D elem.offsetLeft;=0A=
=0A=
		while ( (elem =3D elem.parentNode) && elem !=3D=3D body && elem =
!=3D=3D docElem ) {=0A=
			if ( jQuery.offset.supportsFixedPosition && =
prevComputedStyle.position =3D=3D=3D "fixed" ) {=0A=
				break;=0A=
			}=0A=
=0A=
			computedStyle =3D defaultView ? defaultView.getComputedStyle(elem, =
null) : elem.currentStyle;=0A=
			top  -=3D elem.scrollTop;=0A=
			left -=3D elem.scrollLeft;=0A=
=0A=
			if ( elem =3D=3D=3D offsetParent ) {=0A=
				top  +=3D elem.offsetTop;=0A=
				left +=3D elem.offsetLeft;=0A=
=0A=
				if ( jQuery.offset.doesNotAddBorder && =
!(jQuery.offset.doesAddBorderForTableAndCells && =
/^t(able|d|h)$/i.test(elem.nodeName)) ) {=0A=
					top  +=3D parseFloat( computedStyle.borderTopWidth  ) || 0;=0A=
					left +=3D parseFloat( computedStyle.borderLeftWidth ) || 0;=0A=
				}=0A=
=0A=
				prevOffsetParent =3D offsetParent, offsetParent =3D =
elem.offsetParent;=0A=
			}=0A=
=0A=
			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && =
computedStyle.overflow !=3D=3D "visible" ) {=0A=
				top  +=3D parseFloat( computedStyle.borderTopWidth  ) || 0;=0A=
				left +=3D parseFloat( computedStyle.borderLeftWidth ) || 0;=0A=
			}=0A=
=0A=
			prevComputedStyle =3D computedStyle;=0A=
		}=0A=
=0A=
		if ( prevComputedStyle.position =3D=3D=3D "relative" || =
prevComputedStyle.position =3D=3D=3D "static" ) {=0A=
			top  +=3D body.offsetTop;=0A=
			left +=3D body.offsetLeft;=0A=
		}=0A=
=0A=
		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position =
=3D=3D=3D "fixed" ) {=0A=
			top  +=3D Math.max( docElem.scrollTop, body.scrollTop );=0A=
			left +=3D Math.max( docElem.scrollLeft, body.scrollLeft );=0A=
		}=0A=
=0A=
		return { top: top, left: left };=0A=
	};=0A=
}=0A=
=0A=
jQuery.offset =3D {=0A=
	initialize: function() {=0A=
		var body =3D document.body, container =3D =
document.createElement("div"), innerDiv, checkDiv, table, td, =
bodyMarginTop =3D parseFloat( jQuery.curCSS(body, "marginTop", true) ) =
|| 0,=0A=
			html =3D "<div =
style=3D'position:absolute;top:0;left:0;margin:0;border:5px solid =
#000;padding:0;width:1px;height:1px;'><div></div></div><table =
style=3D'position:absolute;top:0;left:0;margin:0;border:5px solid =
#000;padding:0;width:1px;height:1px;' cellpadding=3D'0' =
cellspacing=3D'0'><tr><td></td></tr></table>";=0A=
=0A=
		jQuery.extend( container.style, { position: "absolute", top: 0, left: =
0, margin: 0, border: 0, width: "1px", height: "1px", visibility: =
"hidden" } );=0A=
=0A=
		container.innerHTML =3D html;=0A=
		body.insertBefore( container, body.firstChild );=0A=
		innerDiv =3D container.firstChild;=0A=
		checkDiv =3D innerDiv.firstChild;=0A=
		td =3D innerDiv.nextSibling.firstChild.firstChild;=0A=
=0A=
		this.doesNotAddBorder =3D (checkDiv.offsetTop !=3D=3D 5);=0A=
		this.doesAddBorderForTableAndCells =3D (td.offsetTop =3D=3D=3D 5);=0A=
=0A=
		checkDiv.style.position =3D "fixed", checkDiv.style.top =3D "20px";=0A=
		// safari subtracts parent border width here which is 5px=0A=
		this.supportsFixedPosition =3D (checkDiv.offsetTop =3D=3D=3D 20 || =
checkDiv.offsetTop =3D=3D=3D 15);=0A=
		checkDiv.style.position =3D checkDiv.style.top =3D "";=0A=
=0A=
		innerDiv.style.overflow =3D "hidden", innerDiv.style.position =3D =
"relative";=0A=
		this.subtractsBorderForOverflowNotVisible =3D (checkDiv.offsetTop =
=3D=3D=3D -5);=0A=
=0A=
		this.doesNotIncludeMarginInBodyOffset =3D (body.offsetTop !=3D=3D =
bodyMarginTop);=0A=
=0A=
		body.removeChild( container );=0A=
		body =3D container =3D innerDiv =3D checkDiv =3D table =3D td =3D null;=0A=
		jQuery.offset.initialize =3D jQuery.noop;=0A=
	},=0A=
=0A=
	bodyOffset: function( body ) {=0A=
		var top =3D body.offsetTop, left =3D body.offsetLeft;=0A=
=0A=
		jQuery.offset.initialize();=0A=
=0A=
		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {=0A=
			top  +=3D parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;=0A=
			left +=3D parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;=0A=
		}=0A=
=0A=
		return { top: top, left: left };=0A=
	},=0A=
	=0A=
	setOffset: function( elem, options, i ) {=0A=
		// set position first, in-case top/left are set even on static elem=0A=
		if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {=0A=
			elem.style.position =3D "relative";=0A=
		}=0A=
		var curElem   =3D jQuery( elem ),=0A=
			curOffset =3D curElem.offset(),=0A=
			curTop    =3D parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || =
0,=0A=
			curLeft   =3D parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || =
0;=0A=
=0A=
		if ( jQuery.isFunction( options ) ) {=0A=
			options =3D options.call( elem, i, curOffset );=0A=
		}=0A=
=0A=
		var props =3D {=0A=
			top:  (options.top  - curOffset.top)  + curTop,=0A=
			left: (options.left - curOffset.left) + curLeft=0A=
		};=0A=
		=0A=
		if ( "using" in options ) {=0A=
			options.using.call( elem, props );=0A=
		} else {=0A=
			curElem.css( props );=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
=0A=
jQuery.fn.extend({=0A=
	position: function() {=0A=
		if ( !this[0] ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		var elem =3D this[0],=0A=
=0A=
		// Get *real* offsetParent=0A=
		offsetParent =3D this.offsetParent(),=0A=
=0A=
		// Get correct offsets=0A=
		offset       =3D this.offset(),=0A=
		parentOffset =3D /^body|html$/i.test(offsetParent[0].nodeName) ? { =
top: 0, left: 0 } : offsetParent.offset();=0A=
=0A=
		// Subtract element margins=0A=
		// note: when an element has margin: auto the offsetLeft and marginLeft=0A=
		// are the same in Safari causing offset.left to incorrectly be 0=0A=
		offset.top  -=3D parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) =
|| 0;=0A=
		offset.left -=3D parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) =
|| 0;=0A=
=0A=
		// Add offsetParent borders=0A=
		parentOffset.top  +=3D parseFloat( jQuery.curCSS(offsetParent[0], =
"borderTopWidth",  true) ) || 0;=0A=
		parentOffset.left +=3D parseFloat( jQuery.curCSS(offsetParent[0], =
"borderLeftWidth", true) ) || 0;=0A=
=0A=
		// Subtract the two offsets=0A=
		return {=0A=
			top:  offset.top  - parentOffset.top,=0A=
			left: offset.left - parentOffset.left=0A=
		};=0A=
	},=0A=
=0A=
	offsetParent: function() {=0A=
		return this.map(function() {=0A=
			var offsetParent =3D this.offsetParent || document.body;=0A=
			while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) =
&& jQuery.css(offsetParent, "position") =3D=3D=3D "static") ) {=0A=
				offsetParent =3D offsetParent.offsetParent;=0A=
			}=0A=
			return offsetParent;=0A=
		});=0A=
	}=0A=
});=0A=
=0A=
=0A=
// Create scrollLeft and scrollTop methods=0A=
jQuery.each( ["Left", "Top"], function( i, name ) {=0A=
	var method =3D "scroll" + name;=0A=
=0A=
	jQuery.fn[ method ] =3D function(val) {=0A=
		var elem =3D this[0], win;=0A=
		=0A=
		if ( !elem ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		if ( val !=3D=3D undefined ) {=0A=
			// Set the scroll offset=0A=
			return this.each(function() {=0A=
				win =3D getWindow( this );=0A=
=0A=
				if ( win ) {=0A=
					win.scrollTo(=0A=
						!i ? val : jQuery(win).scrollLeft(),=0A=
						 i ? val : jQuery(win).scrollTop()=0A=
					);=0A=
=0A=
				} else {=0A=
					this[ method ] =3D val;=0A=
				}=0A=
			});=0A=
		} else {=0A=
			win =3D getWindow( elem );=0A=
=0A=
			// Return the scroll offset=0A=
			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : =
"pageXOffset" ] :=0A=
				jQuery.support.boxModel && win.document.documentElement[ method ] ||=0A=
					win.document.body[ method ] :=0A=
				elem[ method ];=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
function getWindow( elem ) {=0A=
	return ("scrollTo" in elem && elem.document) ?=0A=
		elem :=0A=
		elem.nodeType =3D=3D=3D 9 ?=0A=
			elem.defaultView || elem.parentWindow :=0A=
			false;=0A=
}=0A=
// Create innerHeight, innerWidth, outerHeight and outerWidth methods=0A=
jQuery.each([ "Height", "Width" ], function( i, name ) {=0A=
=0A=
	var type =3D name.toLowerCase();=0A=
=0A=
	// innerHeight and innerWidth=0A=
	jQuery.fn["inner" + name] =3D function() {=0A=
		return this[0] ?=0A=
			jQuery.css( this[0], type, false, "padding" ) :=0A=
			null;=0A=
	};=0A=
=0A=
	// outerHeight and outerWidth=0A=
	jQuery.fn["outer" + name] =3D function( margin ) {=0A=
		return this[0] ?=0A=
			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :=0A=
			null;=0A=
	};=0A=
=0A=
	jQuery.fn[ type ] =3D function( size ) {=0A=
		// Get window width or height=0A=
		var elem =3D this[0];=0A=
		if ( !elem ) {=0A=
			return size =3D=3D null ? null : this;=0A=
		}=0A=
		=0A=
		if ( jQuery.isFunction( size ) ) {=0A=
			return this.each(function( i ) {=0A=
				var self =3D jQuery( this );=0A=
				self[ type ]( size.call( this, i, self[ type ]() ) );=0A=
			});=0A=
		}=0A=
=0A=
		return ("scrollTo" in elem && elem.document) ? // does it walk and =
quack like a window?=0A=
			// Everyone else use document.documentElement or document.body =
depending on Quirks vs Standards mode=0A=
			elem.document.compatMode =3D=3D=3D "CSS1Compat" && =
elem.document.documentElement[ "client" + name ] ||=0A=
			elem.document.body[ "client" + name ] :=0A=
=0A=
			// Get document width or height=0A=
			(elem.nodeType =3D=3D=3D 9) ? // is it a document=0A=
				// Either scroll[Width/Height] or offset[Width/Height], whichever is =
greater=0A=
				Math.max(=0A=
					elem.documentElement["client" + name],=0A=
					elem.body["scroll" + name], elem.documentElement["scroll" + name],=0A=
					elem.body["offset" + name], elem.documentElement["offset" + name]=0A=
				) :=0A=
=0A=
				// Get or set width or height on the element=0A=
				size =3D=3D=3D undefined ?=0A=
					// Get width or height on the element=0A=
					jQuery.css( elem, type ) :=0A=
=0A=
					// Set the width or height on the element (default to pixels if =
value is unitless)=0A=
					this.css( type, typeof size =3D=3D=3D "string" ? size : size + "px" =
);=0A=
	};=0A=
=0A=
});=0A=
// Expose jQuery to the global object=0A=
window.jQuery =3D window.$ =3D jQuery;=0A=
=0A=
})(window);=0A=

------=_NextPart_000_0000_01CB1DE2.850A4BD0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.surveygold.com/js/WebSurveyRecordResponseSinglePage.js

/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function( window, undefined ) {

// Define a local copy of jQuery
var jQuery =3D function( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		return new jQuery.fn.init( selector, context );
	},

	// Map over jQuery in case of overwrite
	_jQuery =3D window.jQuery,

	// Map over the $ in case of overwrite
	_$ =3D window.$,

	// Use the correct document accordingly with window argument (sandbox)
	document =3D window.document,

	// A central reference to the root jQuery(document)
	rootjQuery,

	// A simple way to check for HTML strings or ID strings
	// (both of which we optimize for)
	quickExpr =3D /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,

	// Is it a simple selector
	isSimple =3D /^.[^:#\[\.,]*$/,

	// Check if a string has a non-whitespace character in it
	rnotwhite =3D /\S/,

	// Used for trimming whitespace
	rtrim =3D /^(\s|\u00A0)+|(\s|\u00A0)+$/g,

	// Match a standalone tag
	rsingleTag =3D /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

	// Keep a UserAgent string for use with jQuery.browser
	userAgent =3D navigator.userAgent,

	// For matching the engine and version of the browser
	browserMatch,
=09
	// Has the ready events already been bound?
	readyBound =3D false,
=09
	// The functions to execute on DOM ready
	readyList =3D [],

	// The ready event handler
	DOMContentLoaded,

	// Save a reference to some core methods
	toString =3D Object.prototype.toString,
	hasOwnProperty =3D Object.prototype.hasOwnProperty,
	push =3D Array.prototype.push,
	slice =3D Array.prototype.slice,
	indexOf =3D Array.prototype.indexOf;

jQuery.fn =3D jQuery.prototype =3D {
	init: function( selector, context ) {
		var match, elem, ret, doc;

		// Handle $(""), $(null), or $(undefined)
		if ( !selector ) {
			return this;
		}

		// Handle $(DOMElement)
		if ( selector.nodeType ) {
			this.context =3D this[0] =3D selector;
			this.length =3D 1;
			return this;
		}
	=09
		// The body element only exists once, optimize finding it
		if ( selector =3D=3D=3D "body" && !context ) {
			this.context =3D document;
			this[0] =3D document.body;
			this.selector =3D "body";
			this.length =3D 1;
			return this;
		}

		// Handle HTML strings
		if ( typeof selector =3D=3D=3D "string" ) {
			// Are we dealing with HTML string or an ID?
			match =3D quickExpr.exec( selector );

			// Verify a match, and that no context was specified for #id
			if ( match && (match[1] || !context) ) {

				// HANDLE: $(html) -> $(array)
				if ( match[1] ) {
					doc =3D (context ? context.ownerDocument || context : document);

					// If a single string is passed in and it's a single tag
					// just do a createElement and skip the rest
					ret =3D rsingleTag.exec( selector );

					if ( ret ) {
						if ( jQuery.isPlainObject( context ) ) {
							selector =3D [ document.createElement( ret[1] ) ];
							jQuery.fn.attr.call( selector, context, true );

						} else {
							selector =3D [ doc.createElement( ret[1] ) ];
						}

					} else {
						ret =3D buildFragment( [ match[1] ], [ doc ] );
						selector =3D (ret.cacheable ? ret.fragment.cloneNode(true) : =
ret.fragment).childNodes;
					}
				=09
					return jQuery.merge( this, selector );
				=09
				// HANDLE: $("#id")
				} else {
					elem =3D document.getElementById( match[2] );

					if ( elem ) {
						// Handle the case where IE and Opera return items
						// by name instead of ID
						if ( elem.id !=3D=3D match[2] ) {
							return rootjQuery.find( selector );
						}

						// Otherwise, we inject the element directly into the jQuery =
object
						this.length =3D 1;
						this[0] =3D elem;
					}

					this.context =3D document;
					this.selector =3D selector;
					return this;
				}

			// HANDLE: $("TAG")
			} else if ( !context && /^\w+$/.test( selector ) ) {
				this.selector =3D selector;
				this.context =3D document;
				selector =3D document.getElementsByTagName( selector );
				return jQuery.merge( this, selector );

			// HANDLE: $(expr, $(...))
			} else if ( !context || context.jquery ) {
				return (context || rootjQuery).find( selector );

			// HANDLE: $(expr, context)
			// (which is just equivalent to: $(context).find(expr)
			} else {
				return jQuery( context ).find( selector );
			}

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( jQuery.isFunction( selector ) ) {
			return rootjQuery.ready( selector );
		}

		if (selector.selector !=3D=3D undefined) {
			this.selector =3D selector.selector;
			this.context =3D selector.context;
		}

		return jQuery.makeArray( selector, this );
	},

	// Start with an empty selector
	selector: "",

	// The current version of jQuery being used
	jquery: "1.4.2",

	// The default length of a jQuery object is 0
	length: 0,

	// The number of elements contained in the matched element set
	size: function() {
		return this.length;
	},

	toArray: function() {
		return slice.call( this, 0 );
	},

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
		return num =3D=3D null ?

			// Return a 'clean' array
			this.toArray() :

			// Return just the object
			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
	},

	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems, name, selector ) {
		// Build a new jQuery matched element set
		var ret =3D jQuery();

		if ( jQuery.isArray( elems ) ) {
			push.apply( ret, elems );
	=09
		} else {
			jQuery.merge( ret, elems );
		}

		// Add the old object onto the stack (as a reference)
		ret.prevObject =3D this;

		ret.context =3D this.context;

		if ( name =3D=3D=3D "find" ) {
			ret.selector =3D this.selector + (this.selector ? " " : "") + =
selector;
		} else if ( name ) {
			ret.selector =3D this.selector + "." + name + "(" + selector + ")";
		}

		// Return the newly-formed element set
		return ret;
	},

	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},
=09
	ready: function( fn ) {
		// Attach the listeners
		jQuery.bindReady();

		// If the DOM is already ready
		if ( jQuery.isReady ) {
			// Execute the function immediately
			fn.call( document, jQuery );

		// Otherwise, remember the function for later
		} else if ( readyList ) {
			// Add the function to the wait list
			readyList.push( fn );
		}

		return this;
	},
=09
	eq: function( i ) {
		return i =3D=3D=3D -1 ?
			this.slice( i ) :
			this.slice( i, +i + 1 );
	},

	first: function() {
		return this.eq( 0 );
	},

	last: function() {
		return this.eq( -1 );
	},

	slice: function() {
		return this.pushStack( slice.apply( this, arguments ),
			"slice", slice.call(arguments).join(",") );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function( elem, i ) {
			return callback.call( elem, i, elem );
		}));
	},
=09
	end: function() {
		return this.prevObject || jQuery(null);
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: push,
	sort: [].sort,
	splice: [].splice
};

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype =3D jQuery.fn;

jQuery.extend =3D jQuery.fn.extend =3D function() {
	// copy reference to target object
	var target =3D arguments[0] || {}, i =3D 1, length =3D =
arguments.length, deep =3D false, options, name, src, copy;

	// Handle a deep copy situation
	if ( typeof target =3D=3D=3D "boolean" ) {
		deep =3D target;
		target =3D arguments[1] || {};
		// skip the boolean and the target
		i =3D 2;
	}

	// Handle case when target is a string or something (possible in deep =
copy)
	if ( typeof target !=3D=3D "object" && !jQuery.isFunction(target) ) {
		target =3D {};
	}

	// extend jQuery itself if only one argument is passed
	if ( length =3D=3D=3D i ) {
		target =3D this;
		--i;
	}

	for ( ; i < length; i++ ) {
		// Only deal with non-null/undefined values
		if ( (options =3D arguments[ i ]) !=3D null ) {
			// Extend the base object
			for ( name in options ) {
				src =3D target[ name ];
				copy =3D options[ name ];

				// Prevent never-ending loop
				if ( target =3D=3D=3D copy ) {
					continue;
				}

				// Recurse if we're merging object literal values or arrays
				if ( deep && copy && ( jQuery.isPlainObject(copy) || =
jQuery.isArray(copy) ) ) {
					var clone =3D src && ( jQuery.isPlainObject(src) || =
jQuery.isArray(src) ) ? src
						: jQuery.isArray(copy) ? [] : {};

					// Never move original objects, clone them
					target[ name ] =3D jQuery.extend( deep, clone, copy );

				// Don't bring in undefined values
				} else if ( copy !=3D=3D undefined ) {
					target[ name ] =3D copy;
				}
			}
		}
	}

	// Return the modified object
	return target;
};

jQuery.extend({
	noConflict: function( deep ) {
		window.$ =3D _$;

		if ( deep ) {
			window.jQuery =3D _jQuery;
		}

		return jQuery;
	},
=09
	// Is the DOM ready to be used? Set to true once it occurs.
	isReady: false,
=09
	// Handle when the DOM is ready
	ready: function() {
		// Make sure that the DOM is not already loaded
		if ( !jQuery.isReady ) {
			// Make sure body exists, at least, in case IE gets a little =
overzealous (ticket #5443).
			if ( !document.body ) {
				return setTimeout( jQuery.ready, 13 );
			}

			// Remember that the DOM is ready
			jQuery.isReady =3D true;

			// If there are functions bound, to execute
			if ( readyList ) {
				// Execute all of them
				var fn, i =3D 0;
				while ( (fn =3D readyList[ i++ ]) ) {
					fn.call( document, jQuery );
				}

				// Reset the list of functions
				readyList =3D null;
			}

			// Trigger any bound ready events
			if ( jQuery.fn.triggerHandler ) {
				jQuery( document ).triggerHandler( "ready" );
			}
		}
	},
=09
	bindReady: function() {
		if ( readyBound ) {
			return;
		}

		readyBound =3D true;

		// Catch cases where $(document).ready() is called after the
		// browser event has already occurred.
		if ( document.readyState =3D=3D=3D "complete" ) {
			return jQuery.ready();
		}

		// Mozilla, Opera and webkit nightlies currently support this event
		if ( document.addEventListener ) {
			// Use the handy event callback
			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, =
false );
		=09
			// A fallback to window.onload, that will always work
			window.addEventListener( "load", jQuery.ready, false );

		// If IE event model is used
		} else if ( document.attachEvent ) {
			// ensure firing before onload,
			// maybe late but safe also for iframes
			document.attachEvent("onreadystatechange", DOMContentLoaded);
		=09
			// A fallback to window.onload, that will always work
			window.attachEvent( "onload", jQuery.ready );

			// If IE and not a frame
			// continually check to see if the document is ready
			var toplevel =3D false;

			try {
				toplevel =3D window.frameElement =3D=3D null;
			} catch(e) {}

			if ( document.documentElement.doScroll && toplevel ) {
				doScrollCheck();
			}
		}
	},

	// See test/unit/core.js for details concerning isFunction.
	// Since version 1.3, DOM methods and functions like alert
	// aren't supported. They return false on IE (#2968).
	isFunction: function( obj ) {
		return toString.call(obj) =3D=3D=3D "[object Function]";
	},

	isArray: function( obj ) {
		return toString.call(obj) =3D=3D=3D "[object Array]";
	},

	isPlainObject: function( obj ) {
		// Must be an Object.
		// Because of IE, we also have to check the presence of the =
constructor property.
		// Make sure that DOM nodes and window objects don't pass through, as =
well
		if ( !obj || toString.call(obj) !=3D=3D "[object Object]" || =
obj.nodeType || obj.setInterval ) {
			return false;
		}
	=09
		// Not own constructor property must be Object
		if ( obj.constructor
			&& !hasOwnProperty.call(obj, "constructor")
			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) =
{
			return false;
		}
	=09
		// Own properties are enumerated firstly, so to speed up,
		// if last one is own, then all properties are own.
=09
		var key;
		for ( key in obj ) {}
	=09
		return key =3D=3D=3D undefined || hasOwnProperty.call( obj, key );
	},

	isEmptyObject: function( obj ) {
		for ( var name in obj ) {
			return false;
		}
		return true;
	},
=09
	error: function( msg ) {
		throw msg;
	},
=09
	parseJSON: function( data ) {
		if ( typeof data !=3D=3D "string" || !data ) {
			return null;
		}

		// Make sure leading/trailing whitespace is removed (IE can't handle =
it)
		data =3D jQuery.trim( data );
	=09
		// Make sure the incoming data is actual JSON
		// Logic borrowed from http://json.org/json2.js
		if ( =
/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, =
"@")
			=
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?=
/g, "]")
			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

			// Try to use the native JSON parser first
			return window.JSON && window.JSON.parse ?
				window.JSON.parse( data ) :
				(new Function("return " + data))();

		} else {
			jQuery.error( "Invalid JSON: " + data );
		}
	},

	noop: function() {},

	// Evalulates a script in a global context
	globalEval: function( data ) {
		if ( data && rnotwhite.test(data) ) {
			// Inspired by code by Andrea Giammarchi
			// =
http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom=
.html
			var head =3D document.getElementsByTagName("head")[0] || =
document.documentElement,
				script =3D document.createElement("script");

			script.type =3D "text/javascript";

			if ( jQuery.support.scriptEval ) {
				script.appendChild( document.createTextNode( data ) );
			} else {
				script.text =3D data;
			}

			// Use insertBefore instead of appendChild to circumvent an IE6 bug.
			// This arises when a base node is used (#2709).
			head.insertBefore( script, head.firstChild );
			head.removeChild( script );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName && elem.nodeName.toUpperCase() =3D=3D=3D =
name.toUpperCase();
	},

	// args is for internal usage only
	each: function( object, callback, args ) {
		var name, i =3D 0,
			length =3D object.length,
			isObj =3D length =3D=3D=3D undefined || jQuery.isFunction(object);

		if ( args ) {
			if ( isObj ) {
				for ( name in object ) {
					if ( callback.apply( object[ name ], args ) =3D=3D=3D false ) {
						break;
					}
				}
			} else {
				for ( ; i < length; ) {
					if ( callback.apply( object[ i++ ], args ) =3D=3D=3D false ) {
						break;
					}
				}
			}

		// A special, fast, case for the most common use of each
		} else {
			if ( isObj ) {
				for ( name in object ) {
					if ( callback.call( object[ name ], name, object[ name ] ) =
=3D=3D=3D false ) {
						break;
					}
				}
			} else {
				for ( var value =3D object[0];
					i < length && callback.call( value, i, value ) !=3D=3D false; value =
=3D object[++i] ) {}
			}
		}

		return object;
	},

	trim: function( text ) {
		return (text || "").replace( rtrim, "" );
	},

	// results is for internal usage only
	makeArray: function( array, results ) {
		var ret =3D results || [];

		if ( array !=3D null ) {
			// The window, strings (and functions) also have 'length'
			// The extra typeof function check is to prevent crashes
			// in Safari 2 (See: #3039)
			if ( array.length =3D=3D null || typeof array =3D=3D=3D "string" || =
jQuery.isFunction(array) || (typeof array !=3D=3D "function" && =
array.setInterval) ) {
				push.call( ret, array );
			} else {
				jQuery.merge( ret, array );
			}
		}

		return ret;
	},

	inArray: function( elem, array ) {
		if ( array.indexOf ) {
			return array.indexOf( elem );
		}

		for ( var i =3D 0, length =3D array.length; i < length; i++ ) {
			if ( array[ i ] =3D=3D=3D elem ) {
				return i;
			}
		}

		return -1;
	},

	merge: function( first, second ) {
		var i =3D first.length, j =3D 0;

		if ( typeof second.length =3D=3D=3D "number" ) {
			for ( var l =3D second.length; j < l; j++ ) {
				first[ i++ ] =3D second[ j ];
			}
	=09
		} else {
			while ( second[j] !=3D=3D undefined ) {
				first[ i++ ] =3D second[ j++ ];
			}
		}

		first.length =3D i;

		return first;
	},

	grep: function( elems, callback, inv ) {
		var ret =3D [];

		// Go through the array, only saving the items
		// that pass the validator function
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {
			if ( !inv !=3D=3D !callback( elems[ i ], i ) ) {
				ret.push( elems[ i ] );
			}
		}

		return ret;
	},

	// arg is for internal usage only
	map: function( elems, callback, arg ) {
		var ret =3D [], value;

		// Go through the array, translating each of the items to their
		// new value (or values).
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {
			value =3D callback( elems[ i ], i, arg );

			if ( value !=3D null ) {
				ret[ ret.length ] =3D value;
			}
		}

		return ret.concat.apply( [], ret );
	},

	// A global GUID counter for objects
	guid: 1,

	proxy: function( fn, proxy, thisObject ) {
		if ( arguments.length =3D=3D=3D 2 ) {
			if ( typeof proxy =3D=3D=3D "string" ) {
				thisObject =3D fn;
				fn =3D thisObject[ proxy ];
				proxy =3D undefined;

			} else if ( proxy && !jQuery.isFunction( proxy ) ) {
				thisObject =3D proxy;
				proxy =3D undefined;
			}
		}

		if ( !proxy && fn ) {
			proxy =3D function() {
				return fn.apply( thisObject || this, arguments );
			};
		}

		// Set the guid of unique handler to the same of original handler, so =
it can be removed
		if ( fn ) {
			proxy.guid =3D fn.guid =3D fn.guid || proxy.guid || jQuery.guid++;
		}

		// So proxy can be declared as an argument
		return proxy;
	},

	// Use of jQuery.browser is frowned upon.
	// More details: http://docs.jquery.com/Utilities/jQuery.browser
	uaMatch: function( ua ) {
		ua =3D ua.toLowerCase();

		var match =3D /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
			/(msie) ([\w.]+)/.exec( ua ) ||
			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua =
) ||
		  	[];

		return { browser: match[1] || "", version: match[2] || "0" };
	},

	browser: {}
});

browserMatch =3D jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) {
	jQuery.browser[ browserMatch.browser ] =3D true;
	jQuery.browser.version =3D browserMatch.version;
}

// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
	jQuery.browser.safari =3D true;
}

if ( indexOf ) {
	jQuery.inArray =3D function( elem, array ) {
		return indexOf.call( array, elem );
	};
}

// All jQuery objects should point back to these
rootjQuery =3D jQuery(document);

// Cleanup functions for the document ready method
if ( document.addEventListener ) {
	DOMContentLoaded =3D function() {
		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, =
false );
		jQuery.ready();
	};

} else if ( document.attachEvent ) {
	DOMContentLoaded =3D function() {
		// Make sure body exists, at least, in case IE gets a little =
overzealous (ticket #5443).
		if ( document.readyState =3D=3D=3D "complete" ) {
			document.detachEvent( "onreadystatechange", DOMContentLoaded );
			jQuery.ready();
		}
	};
}

// The DOM ready check for Internet Explorer
function doScrollCheck() {
	if ( jQuery.isReady ) {
		return;
	}

	try {
		// If IE is used, use the trick by Diego Perini
		// http://javascript.nwbox.com/IEContentLoaded/
		document.documentElement.doScroll("left");
	} catch( error ) {
		setTimeout( doScrollCheck, 1 );
		return;
	}

	// and execute any waiting functions
	jQuery.ready();
}

function evalScript( i, elem ) {
	if ( elem.src ) {
		jQuery.ajax({
			url: elem.src,
			async: false,
			dataType: "script"
		});
	} else {
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || =
"" );
	}

	if ( elem.parentNode ) {
		elem.parentNode.removeChild( elem );
	}
}

// Mutifunctional method to get and set values to a collection
// The value/s can be optionally by executed if its a function
function access( elems, key, value, exec, fn, pass ) {
	var length =3D elems.length;
=09
	// Setting many attributes
	if ( typeof key =3D=3D=3D "object" ) {
		for ( var k in key ) {
			access( elems, k, key[k], exec, fn, value );
		}
		return elems;
	}
=09
	// Setting one attribute
	if ( value !=3D=3D undefined ) {
		// Optionally, function values get executed if exec is true
		exec =3D !pass && exec && jQuery.isFunction(value);
	=09
		for ( var i =3D 0; i < length; i++ ) {
			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key =
) ) : value, pass );
		}
	=09
		return elems;
	}
=09
	// Getting an attribute
	return length ? fn( elems[0], key ) : undefined;
}

function now() {
	return (new Date).getTime();
}
(function() {

	jQuery.support =3D {};

	var root =3D document.documentElement,
		script =3D document.createElement("script"),
		div =3D document.createElement("div"),
		id =3D "script" + now();

	div.style.display =3D "none";
	div.innerHTML =3D "   <link/><table></table><a href=3D'/a' =
style=3D'color:red;float:left;opacity:.55;'>a</a><input =
type=3D'checkbox'/>";

	var all =3D div.getElementsByTagName("*"),
		a =3D div.getElementsByTagName("a")[0];

	// Can't get basic test support
	if ( !all || !all.length || !a ) {
		return;
	}

	jQuery.support =3D {
		// IE strips leading whitespace when .innerHTML is used
		leadingWhitespace: div.firstChild.nodeType =3D=3D=3D 3,

		// Make sure that tbody elements aren't automatically inserted
		// IE will insert them into empty tables
		tbody: !div.getElementsByTagName("tbody").length,

		// Make sure that link elements get serialized correctly by innerHTML
		// This requires a wrapper element in IE
		htmlSerialize: !!div.getElementsByTagName("link").length,

		// Get the style information from getAttribute
		// (IE uses .cssText insted)
		style: /red/.test( a.getAttribute("style") ),

		// Make sure that URLs aren't manipulated
		// (IE normalizes it by default)
		hrefNormalized: a.getAttribute("href") =3D=3D=3D "/a",

		// Make sure that element opacity exists
		// (IE uses filter instead)
		// Use a regex to work around a WebKit issue. See #5145
		opacity: /^0.55$/.test( a.style.opacity ),

		// Verify style float existence
		// (IE uses styleFloat instead of cssFloat)
		cssFloat: !!a.style.cssFloat,

		// Make sure that if no value is specified for a checkbox
		// that it defaults to "on".
		// (WebKit defaults to "" instead)
		checkOn: div.getElementsByTagName("input")[0].value =3D=3D=3D "on",

		// Make sure that a selected-by-default option has a working selected =
property.
		// (WebKit defaults to false instead of true, IE too, if it's in an =
optgroup)
		optSelected: document.createElement("select").appendChild( =
document.createElement("option") ).selected,

		parentNode: div.removeChild( div.appendChild( =
document.createElement("div") ) ).parentNode =3D=3D=3D null,

		// Will be defined later
		deleteExpando: true,
		checkClone: false,
		scriptEval: false,
		noCloneEvent: true,
		boxModel: null
	};

	script.type =3D "text/javascript";
	try {
		script.appendChild( document.createTextNode( "window." + id + "=3D1;" =
) );
	} catch(e) {}

	root.insertBefore( script, root.firstChild );

	// Make sure that the execution of code works by injecting a script
	// tag with appendChild/createTextNode
	// (IE doesn't support this, fails, and uses .text instead)
	if ( window[ id ] ) {
		jQuery.support.scriptEval =3D true;
		delete window[ id ];
	}

	// Test to see if it's possible to delete an expando from an element
	// Fails in Internet Explorer
	try {
		delete script.test;
=09
	} catch(e) {
		jQuery.support.deleteExpando =3D false;
	}

	root.removeChild( script );

	if ( div.attachEvent && div.fireEvent ) {
		div.attachEvent("onclick", function click() {
			// Cloning a node shouldn't copy over any
			// bound event handlers (IE does this)
			jQuery.support.noCloneEvent =3D false;
			div.detachEvent("onclick", click);
		});
		div.cloneNode(true).fireEvent("onclick");
	}

	div =3D document.createElement("div");
	div.innerHTML =3D "<input type=3D'radio' name=3D'radiotest' =
checked=3D'checked'/>";

	var fragment =3D document.createDocumentFragment();
	fragment.appendChild( div.firstChild );

	// WebKit doesn't clone checked state correctly in fragments
	jQuery.support.checkClone =3D =
fragment.cloneNode(true).cloneNode(true).lastChild.checked;

	// Figure out if the W3C box model works as expected
	// document.body must exist before we can do this
	jQuery(function() {
		var div =3D document.createElement("div");
		div.style.width =3D div.style.paddingLeft =3D "1px";

		document.body.appendChild( div );
		jQuery.boxModel =3D jQuery.support.boxModel =3D div.offsetWidth =
=3D=3D=3D 2;
		document.body.removeChild( div ).style.display =3D 'none';

		div =3D null;
	});

	// Technique from Juriy Zaytsev
	// =
http://thinkweb2.com/projects/prototype/detecting-event-support-without-b=
rowser-sniffing/
	var eventSupported =3D function( eventName ) {=20
		var el =3D document.createElement("div");=20
		eventName =3D "on" + eventName;=20

		var isSupported =3D (eventName in el);=20
		if ( !isSupported ) {=20
			el.setAttribute(eventName, "return;");=20
			isSupported =3D typeof el[eventName] =3D=3D=3D "function";=20
		}=20
		el =3D null;=20

		return isSupported;=20
	};
=09
	jQuery.support.submitBubbles =3D eventSupported("submit");
	jQuery.support.changeBubbles =3D eventSupported("change");

	// release memory in IE
	root =3D script =3D div =3D all =3D a =3D null;
})();

jQuery.props =3D {
	"for": "htmlFor",
	"class": "className",
	readonly: "readOnly",
	maxlength: "maxLength",
	cellspacing: "cellSpacing",
	rowspan: "rowSpan",
	colspan: "colSpan",
	tabindex: "tabIndex",
	usemap: "useMap",
	frameborder: "frameBorder"
};
var expando =3D "jQuery" + now(), uuid =3D 0, windowData =3D {};

jQuery.extend({
	cache: {},
=09
	expando:expando,

	// The following elements throw uncatchable exceptions if you
	// attempt to add expando properties to them.
	noData: {
		"embed": true,
		"object": true,
		"applet": true
	},

	data: function( elem, name, data ) {
		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
			return;
		}

		elem =3D elem =3D=3D window ?
			windowData :
			elem;

		var id =3D elem[ expando ], cache =3D jQuery.cache, thisCache;

		if ( !id && typeof name =3D=3D=3D "string" && data =3D=3D=3D undefined =
) {
			return null;
		}

		// Compute a unique ID for the element
		if ( !id ) {=20
			id =3D ++uuid;
		}

		// Avoid generating a new cache unless none exists and we
		// want to manipulate it.
		if ( typeof name =3D=3D=3D "object" ) {
			elem[ expando ] =3D id;
			thisCache =3D cache[ id ] =3D jQuery.extend(true, {}, name);

		} else if ( !cache[ id ] ) {
			elem[ expando ] =3D id;
			cache[ id ] =3D {};
		}

		thisCache =3D cache[ id ];

		// Prevent overriding the named cache with undefined values
		if ( data !=3D=3D undefined ) {
			thisCache[ name ] =3D data;
		}

		return typeof name =3D=3D=3D "string" ? thisCache[ name ] : thisCache;
	},

	removeData: function( elem, name ) {
		if ( elem.nodeName && jQ
