From: <Saved by Windows Internet Explorer 8>
Subject: BSF Leadership Programme
Date: Tue, 17 Nov 2009 09:06:53 -0000
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CA6765.4E044160"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://bsf.ncsl.org.uk/News.aspx?ID=120

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML=20
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>BSF Leadership =
Programme</TITLE>
<META content=3D"text/html; charset=3Dutf-8" =
http-equiv=3DContent-Type><LINK=20
rel=3Dstylesheet type=3Dtext/css =
href=3D"http://bsf.ncsl.org.uk/css/bsf.css"><LINK=20
title=3D"BSF News RSS Feed" rel=3Dalternate type=3Dapplication/rss+xml=20
href=3D"RSS/News.xml"><LINK title=3D"BSF Events RSS Feed" =
rel=3Dalternate=20
type=3Dapplication/rss+xml href=3D"RSS/Events.xml"><LINK =
title=3D"Telerik stylesheet"=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://bsf.ncsl.org.uk/WebResource.axd?d=3D93JB5Q_ZsDmp5a2aSVvPy5=
-OBqUaI3qm8btzCVBDn7hW3YLpgNzL1K0V2g64prmKJ6OyTs9u8mDMeh9-hSuSd_9x6F7XI2z=
j5tQn8oAIq-01&amp;t=3D633783421398003246">
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18852"></HEAD>
<BODY>
<FORM id=3DaspnetForm method=3Dpost name=3DaspnetForm =
action=3DNews.aspx?ID=3D120>
<DIV><INPUT id=3D__EVENTTARGET type=3Dhidden name=3D__EVENTTARGET> =
<INPUT=20
id=3D__EVENTARGUMENT type=3Dhidden name=3D__EVENTARGUMENT> <INPUT =
id=3D__VIEWSTATE=20
value=3D57xtCN/5AzmZSY7ni99ribtlJZ6LD/QHD88h5adA0VW8uoRMDVBcb+tNr9bANlSCM=
UQVuSLI573a/aoi8OtGkc5rzYMXOiZT4VYISTO7yzOREwoAwMOpzUans/tcjJ1YlwWiWldwcl=
1gsQ4xKmRVrG4eTYED7gmabK4t9V4wl2Fh6+xvpoAZnn860cPjBb0gD5et1YpsNNCfus99Gtd=
1WOs56ls9kFf0X4wd9hXJ3gMSuZta+JLMGCvcg/tLfYOa0Xbxc7k36L94btq+3yLpnIM2hbRY=
gtnwApT1U85XtUNYTzeuVXGYpEeoMSI3q4xUhdaDKro/m3GW7bFUnc7YgUgDpGwbJgk8XG5pS=
ErG8iwfHYCcoTDqZZ9WAfVlg1DNsDhV1F7WekHc4K8mzvRixbxr+nwVuEYYAqHcflwLaJU6ml=
MmJmMuB3pahMMT5bSPYGdmfJBJ0a4Qifjrf+cZKH9wHG0J5tHNvhl1dXQLtS4GtXD+am6aixj=
yZk6GgtvtMr8gwTuzG9qdk+MpMxslXI3ljpYB6+9BGtWBw7OCIKPm11F2oql8XZ1FN/8CyOk3=
l0K1EmxjGwODJR4aZiAVyuNojiq3o5ta4I4yMdKKe5qUfhpkD6IB3yTA7MDWW+HANBJzyXSRw=
muYRjSDY4z1FWA2vFodzPilIUUTR4iSrmZaWtFIEBZBBQ66fah7sVMTfTpSX/kyiCWz60Gmwk=
W07BiV/6+yqDsDVEsFXU1OfiNwYmoR702/zzBikarPk0/EUrqs8Qfkcw9nXdD3elrvxSfPK8l=
r4qEhA0rpL0MFRWGBLKIyDqa8xoL17vPyABxxHLkw2D6fLhjbulUVMOlXpKn3KmwYhz/F+KPV=
KOTAARhsPExSPeP72VoOnMBOl20M51+KdrzWWmYVz0O2lo25UrgmUunIr8eBZEVFGGDlWIYA+=
9prKthqcYXJDZR6yNzDHNHWlohtT45BX2D8YCjyphO0ybkGiIc+VfaZ0F1ggu5jU9/YW/PkeT=
aRKTf3izqhBuJDIfQTyF8VCiXlV1jFxbC43G7CR1FAXlJ4An3djW6YQButuIMB+2C92JE1ojb=
2QFAZuQkeYcjgAIBJPw9+XEZQlvwXPirFPX0yMFtoxInWNNsYCag8G75dMjrXYrCuV9gu5svI=
1X/Y3xudDCyw8ceFBn0u0hrtkHzOYDA2HIIMpS/uFTmHSYVIknzUe+Jt+tLdk1HiqoWZv+tj5=
9Z1TbdZH9yIZCDE7CJKuExacZlkU4vHiBYu0TMh5k/AAofWQVHha418vPrrZCDkd/ario2N9E=
s+hcnC04PepkI3OS2Z2iOSJkanvp43gCW4pkWKih3piIjIROh/26RJyVmWxxoLXgDb/X2fAeS=
obAFdI8/jd868C1OikflYZfQZ7At+0qu5gyGzThKPi3gq+S3p09tn3KqhT3pNvlXXgsatY2PQ=
IE6dlsrPGYCuYQhQATW4KM2//6e7sSXOlgK2udKqWTJHcKg0mV0MHxNjyjigiye84tabDdMZ3=
ZbZhv3NEoLGUqVjwToQWQypZT49iRIL4RqMAgRquvpjLFQHJdwIU2j6EiHO3ryyx05bkt+y/6=
BKqRjYh14y8jNneXcK+m+kTXDBfelrWIP6Rsz5CGtutAhlEVzXwStGe5lK+KADG8Uf7BoTAew=
iowjp7MjN4utQMXItPl7GyutLpkC0MqbAMiHpyhiVyHw8vMueVO6f7XuG/Q+we75lKUjpFwLd=
aBFVpHipFyWWnmlRDgatuso6AtRICAMFWrYeKspK2onVV1Pa+h3IWZN2RSjc7qiLzk0fTu2TK=
2GaoIqobOHp5rR31mz7vkHAenuPd1tXn4EgQlmSiGkERjd33AwdtuDR/3IPb7Of6QDF2WdxRE=
5Tg0YHxb5yiMmYlie4mUz6aJbOWFlKskv8sZUCMFrd2dIarx3JDk1HcjIIQLT6vXywEraABQE=
jgabaC1EkP4djTDR2LZEnjA2ONdvNaI5bGIIXjQv/u3UsSnqAzv11Lj6yJ0XKh2tYIh7UIAlJ=
RZaNifL4wRobg7OBZexwV06E6GZrc4XkidcHy7/p4n8+u/LcjfDx4pQkUNe+fiDaHGLc6HqzU=
OQ6Jjs0z+zDLFVv5tve+D4zUYPVC3ybEbSoWLA67ASHiqS2jasuvrhia+3ZTQRIaHq+f64dDT=
jp7jc5CgQFb4w+7SFXVx0NW0L1CNKBYi9zBpKGIUyC0WBB8Cnaas10OcC6tiJ/YSMhsAUO3/H=
xF56m52TBJowcbQKJITGlDFpdc845I3KgJK/z/qbDr7TnbhmQ6aLvPqAk82n4iCenUTkDGx/y=
vKZGLVBxUbycSn6mW5ETK0p62nSfdI4VCqL+qc5W+7S2z8nbvais/A8dSReRpk9ReaqMMqZyd=
b93ixDHAmy7vKO6gyRE+8bIwqTmVojhq2deey1dPUazD6xkABFb6QfZRT4bYAI7+X6Ukuikrx=
luR9lEhxBFFTXKduFBbZHtVMXgS5xdsgutmI0zhH34KpgFNswOvbWAzuG8q2ijBko2CifGJWo=
F/69Ny83U+/BT+KzuJ0hzMRWG/G5jRhSbPbsb5NfNJZt+DdR9qt6hsTH/yVOq3m/Uhh+t09Xf=
J4f8qHVskwgLa00ht7ashb0H2idklV3aRN+w8OAu+M8rXozh2dd/qIaDnKvqk1e2ei4KISeJo=
pn+Od5O/Gt5iHf09vgMc7mDZvjhFng/xHc8OWNDg/8GRwJRpMVxiChFLYNdEV3w6ow9xOv3xk=
mAHx7K8AC/RXEwAIUlAyvGLQdUDQXYA/WHRxdvbgGvaCa5Ib0u6AnG0+K2XJeh2itSG2Bcup0=
NwORGejGQfPgGjfFj3cqNR5EsZPxi9944mVImbr4VFLiTYMF30wtmQ0C0Fv1SzqGWHQ4OUbCd=
TSFSCsNAxfbAmKMqptoMBu10LgYv3POQ+/RqIR0jFSfpJ6Di8y4QB6sjj/6WZi4xx/meG1kPZ=
fd1TBcMZYXQvRz7AtMmDtGi2+CaGUDQGjqnqXE7/dG/y3a7IetpLqvpLM7FjIe03g4dwBYN5f=
H3gzytZ9vA6PDfVx/yc0E+eNKYQrspt7oq9T2MeMHKJza/cdk9dy1NCbcLzpNbfzWg5qkQfkO=
fdqoZ5T9bGJPIFikai05LofHqi+tH/Xgpt/U2QekGIe6h5y45HyxpOz6u4wT9g28jri1mlWKV=
g5mFgD7hYmBTld5wFh4fNvtreK7WxG0bYOpVG9q7zSeyaSCZ9Rb6OCs8HhHkLN6LXtmk5nJ8R=
bYty+FER2vCSCJfO/1DOg+pwlOtPs8NW4FnZcHoKbJGjYpapNIH4Gh/5WzI03tbwCKlrw6RIm=
3S6axomgryTp2w+fc7cNoOKxzqS+qTxAmjsquelJGGQS4SxVtiLx9P2hXPG9/viTii7adQtHA=
hnPFKUBVOrXA+XWwPS9WBCCNs+pO2Why95ZY3NuXYmUY4PH0eFw8cAJFHODwx+i7P2LvCF6OK=
rHJSuzc7Eg1kP9zcmO6xh5O7ak/nMBUoXdt0T0OoWsH4jHi0AFyKfVGHV3zrYy7DmniEYV2l5=
gYRmYSpAzSBsxQ7XofRV6OiV60Xe3azOFjd7DK7e3+t4V7SZ5wS8x0SHDC1eywVNQyGysTBe1=
dvPTbMRceKxghYDEhzErp9rS9E+FEHN6ntnpOeu9Kdo9XQ7qQOEzZHbJzjrka3CjQWvRb8ALK=
4B0wfaFhJ2/SLmVj/R07d5ZB+In2dqr7sbMIx+WfNFVewPfZoTsU/AmZ+yhjlj5mmSasMBDI6=
+TqpHyLAwc0ZaR+BamiGBdNcDUCGEexqTxPZfBUMC1i3LkQIw/XgadinvPvgaiAHQKXjlHF8l=
CYu5sGZOlxl5CcpGprigp9f7ZzZ8LpFk3NCxpRbyAvk97A3J3tXum/jzN7KiKI5QPGj+Yn6kI=
ThRJIDflvhRE3FVt3eAXFAobQtj7QCKszEwr88t7XRsfBJOgWeyUKe9giAb0NB6Wf3IpTqc4V=
uRCHskqaMD6oomfCXslL2YPOBc8TAhnlGup97V0GJsr6RVGPgVYRo37jqSy52lHktQ2HWH6EU=
P2KbvdJCSWtAJ18ywR680lJFhzHgXKiCnByEj/qbafQgWSYTMkQ2Cbf7m/bCHM4rSuskb4tSC=
EA7XjG/uw4ni167B1htSitGCzid4RKT2UwpXjnstmUJBneH+/06nrObTyiOj6iRm9JLQM4XoF=
Rrf8RPj+7LqZHT3uxhVCyQNLS2luhwj0wZo5yD/+0YWJBiffu9Va9hSuvkCK3Bc/9IhHkwlDF=
nz4uZnx2IctJs5W1xJAKX3priXUQ263AkauPLUEETW3tJLpATHTKKPoEKoI1vH+nIhicBFHQE=
JVtYvTH5IZ8bHzQwRfyyC979oijHxvLuF3IwDUJw4qosBylGAaGuSZvhSzTcARdQbDNmmKH+h=
WBKDdnrUtkpijLk2n0U3D8Y8+B9OtzFauN5FoLr4WyMXzGgbOIxrY8MxiyOMU1XxPqywXcRBA=
cZFkOzCJmtJ1lRbPdpAVJQUbdLnDcVN4bDxd3puvJo02KWynZEJj3cT0e7JczQhtmhza+B7OA=
0g8BRtRhlg96TIX46s4MKaFm2s0pFPEJbz8+muLojTOv8/mn7hsrh0At4CAgVyRfCEuRRtZnp=
kuTkwCTp0EWVY6CFxv7T3ZNurLwN+fyzBJtwfofQDnOaRIDuzIYQFoppnW32/y+aKXcr9eaKy=
AvyW8w+M6iA2GBfKAMsOgGU5vA6T6Bu5VSu1YMAEhtpPzUSAVY6HbRkkjmGt1kttSXYMOl46Q=
SyN+be1i67BsjiQ13ZGCpdXmx4PbX3XiwCeg8nQ5r4gZ6tbRWTjDnxBvxjnp7/ryQbdPM2bYA=
7lAE8w5PWhZNbYAkiyHFONO0QWC2us/1qPKDs8nZWcyKmhGRpGtTgmqbREx25JtY2Y42Scsoo=
8QuDpuKCZK7OskKTbWvYPh1msWeZt5CZ+D8ZF+0ijD2zRTL4C/B4vm9edyNAXOAPOjnikfnF2=
o06oNWqHzq6hKEiOrsPQ2hIC8YZDN3eBRu63HQk2IMLiFFt47Kt4+LQScUdX5/JWw40+KYrPH=
q9H7CaR0kP7YbiEBPQzoS2a8J2Xs+NoF+MIjJJfQQOvLXDcVm8ucMX4xote7yRnaNrE/n153l=
CugksGV/hy6np0MT03HksKaYGFMyNAb4mT5F6wBbiUCwHRlOwoc1Y2oOsIApFgDPuvRKzHWIh=
KF9wHojFQHg+O8dCUL2kTtUFZNOgELZ9NWsksMNUS/RfdbTfKG35Lw3eoTCXnr6KuWmPFQsFr=
G3gBkBmWsStWyZ1lt7m+FCjI2NNuV3a4Sy2uUx3XoEao6Xj60Z30H1R+1sMR9E0358KLbbnOM=
jxH042unsICUB8hdPl4u8BONzoS+2c3OF6oNMsHZ12DDxrYOjFzcD4zLw3GYzRuD6pokBVNVE=
mu+ZuDC8R8+JKNUPK4tMF0x++u5O4CCZjowlgdW33BjhwIzUAHfmznyWnYxHecHYFq6qENf78=
W0BPvnD0iFljAA/OSofVP/yH3LnlYKQ19YpeZjLh42e5AR0iRbALG1aSaKKsVaGl1Mv3bULBS=
9zwQ55HD+lAehxlxvP35a+Wi8Zs+uGKtYy4t7Gw2mge+Ef/Z+Bm98jGsw3Do5yxm4F2yKpNLS=
K29JrTDTmRIWRF7xu0zdhwHMiuQ5BlCZNutXKtSFwQAtIJrYI0z+TSUWsCizwjiIQDq4couBp=
/t2WGsoq/EV84pWm1hWldrZehCwqj9ikjanwtIo1icyt3TuDFwV2777FUlQACv9+x7UJkDTJ6=
egBiA64ED89DPwPo104qwWax+JmQy7aBsS/f+OY1IRe/DGbZHL9dNaZ/fyXwDHP8Q4tYZHUBh=
J+8tmaAsz/3Twqq12sHmRUx3ddsgnLa/PTwSaU6d1KHMktoAYw1TgpmexFcif650pg7BuurSK=
bTPflX+RgXSd2hBKIPUDA0KlURKD1YHKg+dzAPKR7POyg4BbeubZzvrXVOyCB6UmbM/imcHVa=
r8E2VXYCyMtU/v6hdZJCVdhoKirXpgFGBJwLDc6Lo6gr/UkNzb3wl00jrdRBBpCs8RbJ20btK=
RakHwiMMbFJ1BSmQ/62Xdl5Aa/N7lTmus2ZPvYIZTuf7/olj3AoyEyv0X8eMjIedWmqVZTmFG=
2FibwMSF+lzhR40GQ5MPpzdAA+JKG6lGNyFggUsina9E7MvvkdthS9xHMRzUpuUsrz5ko9w1p=
TcjHRc4MXT8848AEf+kZXeIucnGMWfo3xh41r5JNTLaBAw3MZcCE12v90ExCCC83hi48PzxQq=
jwwdtRZ/PdCXfdIbVN1e6puhA+NpG2bcH+3yH5Lgfj42K50/Hi5pp7iOeTiBCufuZMvlZhHEu=
f26dqzkOlis8evW0bIzkJ28HzOL4JBeloFWDZuYm1Nwi8vL+++pzvaxgnxAijdzDVW/Yc27DO=
mCO3DlLUQ2xdjl+yVLF7HSQdhUhWo3HOugJ9cQAHJ3aNfSsw5QwptPiR2DYi+CIh83oLPWGEr=
1srMpTHn6w3+hBV8br0UFHYH2PiFWZZyvk9adpOLmfd6buWC0RntWVkCA0kS7ck4MVN9Vq/iv=
eWWiOSlk9oH0nHLjl8WBB7r0aFGxm/M0UuHv4IJXJEAuOE2BpT5YWOPcbdeqRCCjBB6N89Z1h=
Itx3ZwGLdJOmqPw/xDI5J0KDpP0veX6vryb7dq4WMle4c5KwQ4T1oBmCGrVQenc+trPdA/ZOX=
/1lcMBIEO/r7e7GWzvUpIuqF1GUYA8TLvgHfkJWFJJqJAQReZMgAh2JXkl6TswhUSmp+EHDd6=
G1A/inz2T6YJXHGfE96GpI0dsB13VI6Gn8fLVM0GlogSoT9Yr7JCyBPttPOMZqowKmB0jQPHF=
T9BJtvOcSJOLaFUDD+Tkq62wBsfp5CrmcSgRawZF7vyo+ji4kjBXBLW3hgtFGZCvWLbTYCfIN=
T9i7/hYnNoq3vJP9EcXvcqDoltEKDnQSeXZl9PXM+i20LQYjZLwuhzp2Q9CjNH5lYyWQLDr5S=
fRL6VFNFGP2A51rodWwN8DD9Pl4TLDanSDonLQh2qBxKpJvE42TxcQSkEQMCqjDma3N39pk5/=
Akq1O1Mv7TeTR1l6/p9KDnlST8Qs3oj0dFciahRjoNmXytT7BOA7fqOum+pCkuU2+cn3YFbY5=
0BcWJ257KKXSjDzaPJhboej3MlkwX3Ng+HGUFLxVeMUIbd3W4Y+Z2EjKe8LmMQ5GM40kJz8Hz=
sfInzpc1OCFK6ejflox5oH3ShpwqLeI6Vlu42oIf8UT1lI013CwzKbzZ/lfWvliH48LCPTR+b=
W0g65Dc/AU7QgDVLXNOGO8J8bOtHwMyCaLxHJJDT/iOmeaBD3tA/En2AcHqpousoZhZf9xB6N=
SLBy1QAfJcWXy3El36Uwlghij5kdiu5q1gcVOGXo1w3NFHkVan2V3Vkss0Yif4dRys78SFCSw=
Zz8ctiscOUjjeIF9JARGMTw4pBYEoGcXcYRREtkiX3FDT8S+whhyCqR4w7AEqv7EOpmAQPhYl=
XZEdR8+s8Aqn+5CHD6Ix5q+Pcqq7nTKh0vy/FfRBP6QeMHYmIYvKRS3uTAL3SUJgPH7cWZaQk=
0gCk8NszhZpYPW6fj/epBqBQD0sh31pnfRJy1esO+QhQWN3ofU+fBG/ZjZbjBps/vmqMdMFQ8=
BINwg52bKwvz7f+ol50AH2S2f00TonLwUOStlzmxH0ONyIkcb73EYTXI5L9wqXH4yGKuSy4EN=
OXto2HAPayrpdBs3SrfDnpYoIXU6o+ODtAR8rYZh1Y4UD5eNSxHqnv2J5wYlUG17dAu6hyAYa=
bvFfYlZGiwo+arc3RH5oYP0lj1uYt26au95xA7X9NpfvROFBT2b7MKD6+RqFma3+1JwITr4Ih=
yBSpGitS3VTlr1tL+XPvi26X1szAyVrIBolTpEetBbgmT/b8MVkiwRAKQPRogFCaPcl8U+VZi=
MZn3x74I0T80P3yamVxh4Yy++k0xr9qMGWzQ4twz7TIRgSu4aibNi+PUEYgkuuu85MQIvFV+h=
aOiGfJPShH9t+dsR1rU2dMlVAK6c4vdlLawN+woQ0kfBOt+i0ubXc7HyQtQ6cUfXzODbKDLci=
piEru2BFwt22KlATbvA1zlRYRouzDAZ5zvokMHSfTSS/s7RvvG3olw5OJKGksQ2oFo/xKFnvJ=
0N69Es8P20PmGmlgq5L5bUo+b7ywbqNcTWFDCEWcK3zklXjtA4bvYSk6TEc+DVcvtPrQsuYOA=
Yr8jpj5ZUkPih62F5Kap55SMV/s9zZDZVgFBRZuaLiJJmKAS0POmy4jHnD6awu6xM79/1C6oq=
jtbYc/SWl/Li0dUV3pdAqucNNvbNjtVUc5Al+aePCpQDmAJHZXt8D0nIdfq5OAs4unId7RV6m=
2EIcip+srXbOPjIKMrMuuwKNObKC3728Ui48gu2fX33kRd4r97TsTKmndQfuvvrMxsaXlOz3L=
H+56jy4DYGgZn6XDfeIuhv2y+XyadqggQhzOOsxWsaCCkIJd8BL3WuoHHy4+5duGNDnWcHRFH=
kL/nhiJ33BmHHzKG/YeHU6n0VsqaLfoAHQ70nP349vRuczE+YwDzdF6cPBinbvuA07lYmX2mT=
9Mw48Gz1882Pc4Qmw8TCSAbRNSGgoj6svl210mvpUdBpBMlYKdgbx4V/be7qCOczpR+ZVeAVl=
v8yLEKSdlsGsN/TeXHS5QvfUHHXe9WJPDnWQN5IZS0hwgk+dKQePJZwM9ywgsbP0E+pEUdBkX=
htIX+6AJpnwJnVxmYZzSLI+AhqNQrC6yxdcPVRicCgHF/pfHUbescQoKe81TcY/lRCdEtPb/Y=
B1y3GLFC6PEv5MLlkcer7sl43S0ZojlhorWO2YdXsCPtjbU9JRCXyEqFHrzTb6eOjz5u7COvi=
E9iZRsoS1MZNLZZitXb+Tp1lxV4kVznpFsbW1kqOw+FOmVBKaXG+kxKGWq7fHfObQMiQkexDx=
eu7Cgef2k0i5CKbPv77xmb8wOcaK9P2JeFuvKLbpG+erVeWPiusMED+tZ8U6UisgAHdpWnd9U=
QGZmpN0ETBRUIK0fKlvmtY+GjVRYpb3meoJjoRjP2tHTFDY776iqgTYsjMblJPCzM6clqV6VV=
O4t/B6gP+i45eeTGV8JK9Dh2ceZQ+Mzen6cL3RO+N91XmPUbJLmyVXbHsflAt1SLILItwbli+=
T6IxM33EG8CjCLNeHeXHIxnGXyqTD7X2g1NuRqPYcebo+wcn3QZMsSjgqgsAbS3IbM3X0RRDj=
W+M88hfVuvft0vn+0qRY/nl8gXbeZnGsWkT+P6EVTm90026S6EFLcSsqUTE4ET+5/vp2zqXy8=
0Qci5Xyr8l5Aw3fbsnXM2dgwaj6TOLXzKP+sB/ISwtSoCFHAR8USJw8tjvtNUzikx8RJFEuAy=
Y9Y9O3x/qC7F/QZ8w1pgpdqQ2cIE8cTvNOpDHCdWWYqdftPNW49w3yWIOso570FyAfl+dzUGa=
vwnBREuFu6ABPRNB4qVaYTEMs+hqFPBPB/TQjPEbvdaEyuvX/0AdEIMeKCUgO4dCxfAqvgjpu=
DLN8dqec/TvaFxPKOtECGeW+ZZ7qTZq0DRg4UDx56XF+76yeE1vJ/DuvQcK01JgKgSDNRq4qs=
fcrSrT3UX7DrcInlwuAwOagYb3jqegBySwvkwKP72Xxzz79caP2xXddGmHuSQ/h0TzkzLr16x=
RuIAxjvOLbCd7Jj+qHXns8VIiBQg3dDSjBeItvd/5oBr32tie5tMuMVTHNFItgbBPOrL8uprx=
ZFRI7FeBrp0xy+zxfjXBb0yUvA97pmk6CRW6QgZKil6Yu6iis4Z4+DAjOUz6P73vmPk7ub3hp=
StgpmTC1VBgRbQCi6J/mc4efXL899monxwBnDtYuSi/lUE3QKsnL71oxmZ5GJN4ZPPxl9QzZg=
YirgYGBlOp5jsE2E9vlcuE9wdbd11Z4gglcJ4kvfqJPGgmzHljOElNjIdEFeNNARcPiNw9Y/P=
J420TRXMRZrfj0Mx1lDaCuYtt8jiLAeXjWyPhAsMoMiK44v1nWYYI13W8JE7HNTeLQLgWIOiN=
AWHSDwz4eTxK9jbA7N0Gl78kPvpQGpDaGDb3+6bXOLJT0yOOm5teHCxGDgHtEbws9TNGLzG62=
pg/6DVqcDVybvR682zmbJPfKhhKQ3OtXUMVFGk71maURzfWRplCIsrhYq4IzQltQgzG44PoJq=
wdPXfKgY7tBiS0wUZSt2RB3xDGMU7zKAhnEDVdyRJuklkZPmijuIKb4a0eFPPtZkHGXX49cJk=
f3urUOx+0yUoTjie/ABTVQf5Yrv+Y4NfoGbbdgAPw05KmnTglubhE0IMDUdHAttYFnJIgUfeH=
wKsRTyIzm+CBdZJEp2vLfyCn0aiXHIhVnvhwYYGSUJgjYahlaHgT6LEUR7LzVSu5H9o/iV73S=
82M+1xh5CbkeSFi07wk29VO72Y2vd/H+yiMvVUmGHbHnoED4SraAO2gzzKsb8ODl5gI7d4ufW=
HFk+zrMrxaSJBeG3bKCwFLjjEM4Gj5+7y5uK2BkXgwAu/2Q/izJmQ0CzSVKKrputNjhDQO311=
3VZetrVFrWwIU8NF1G76EW0UqCaZrpcJTg1BoW9lXX0jzXj5fw6oCO+bt8cjR1SLUWqmRLWTx=
YnqRErIL2imhQgSIZhwCEPeyIjY+DGaL84WhTDKSYK3lT20l0YLhnWFcGB3+TEGW1HRjH5B4a=
SUYfhxFZxx5SiltcHTN5ANDJWH31wUsMAGAh9GPS2G/wvqLoTqF+VkT8PNfTHL8Sfot5zfymi=
w+EhMUPDwK8ivdb0bWyIkgqS84U9dfrpbYTecatiDmAQ1DlG6zoRbJJUYZ8vJ5jfiSenAxd3g=
dLHnXleeqXiCFhNHG8fuF6dBI0DmQwlBuwSZWsgKPSVk0Hgtcy4KPJvwb/jf1w0z21I5CeBfe=
qBIzZGWg2H03yD+TaRi8nRm4FVZwpdSf4W023yiL99jck8LvsVbTZHIbAKOEYaBmaBU3l+xnK=
GY572jT1m41/bGe6FhUKe8PjlXEQvrOTjozOcgD9tdD0/xDlmuZn87DNGOXr/t05bF3ZGoM+2=
+mQfTqOxVDu6ar+8L0ma7ODtqLKhdklgq7SzuRhYzJphAL5RvS5vuemkmKpZ1z4/uyxbYDjM4=
BR72kyyp837eFdeSYPjUj4o+e2slDoH7MrNd5dnEr3Pd5LCMqDAvVsud2lr8XQYM4hSzDNWYN=
iCSc146FxGPbxgXT6RMOJbHT36jeC+9fDoOqrUIRo/pmriWAJYNGRiH5ahNkPaF8+Gd4Ejl2c=
RGIyhTNK1iSgb4LE9+cWMhT8wB3uNtCu16Zl++GJWn06qLnVuipJ0oUxvXVrqVukpUAG7aqtE=
nMXKnr4rSg097fNEXZE5zcRHAoglTyNiwtQPOcxKFWVJv+qQ0cLmU1S37ImNEXbvT9zLbSbK6=
wC/JF/WHKFFqiaFLWmYLgfOw0R3deZdm9aj/GvRdGNZLkZyQ8h/QJ8qvNeW3H+IahJeCIA5RE=
xCDj4Aj5k7rAQ4PZ/qAprwJ6LgUEtNhIUKdgF4lgFwgqUgsJtSF+noJs0pbQN3t8Qx6Ea2chT=
jdvAaHd+WFfDVp4Nk4o1utMsYeU5dB845BPQmtfvUwmI9QnIvRp3Gi/3/NdIoAOiHTpNAdla6=
12Yz+ASxJEXtWEm4/G25ULIrO2UNDWfytK1xKIMGa/oRP1O7ZTHRjLonFNBGBJo1WcrdZ7lIs=
Vlt4ajOhUauxfG3sza3kTfzaZ9/9d34K1AwWl2ioXh8CVrAaRnO/kEZUQ179ZTJuHnqX3kc+d=
oTP65CLCdBZJKWgtuQL9yduRV52LFsvWuwXJWzULqJMUNAVZrbeoFwIV6FMCaib6dPhiFQ9MC=
dpY1SVk5KhK0S953Wc22y8ElQFkltd41grlY0bE59xhllzfQ9dkwyc0FUaqL4RkMLvN98yS3g=
bL2Y3aNPrPugLHwtEQAUjnVd2Tc9gPCCoyc+B0E6/yvuLgW8IZvH8vE86oqjHk+7aFNMJ1I3k=
NS5El1JhHQ9ICWUjupLqp6Z1PUJrsqU674Sor3zGGfrNfmKylwB67L+cA9V0+defrK3NP5raA=
3ubbU92p0ZWIfw7sS5/t3yAAC9U+jkObNki1xCI5IQONT1aIMNXTzma8MGfeHIkNonwupJrdz=
GwmkgohHK4F2Dhwd1MMHvnHXvQ2rAiariHOjw0NBKeVC2l9I2HjP8RATGpmqbI0adzkWEN+/r=
occloB35hxnf0iODzsPxIgHEPrZx2h78gKbcFCkDs4AfeUq4wV4Ip6QpxGMuCXTjSt1FJuG4h=
p+CZjxkUxb11OBvGbUpYy71Nf218PJsBi50IT1Dia6DgwmFfCrjgrHoS+u7WI4kkLwMFTykD/=
jCcAHSQcnE3WqWpyApEPc1pa3OlX9bXTT+MNmPR4r1ZgBS6oF+ihImn9o+Z0B90FTWZJmWWTA=
7GyRTPU6NVsk8q6FzKh45/PGUUdcS68c+VCL/mbkZBuRPpjJE+0TXU3dNWL6dh5+bxgAIkbfO=
+kznlgIyCvIOyakzJt8pLWb/NgFzlQQCPKBGROWmsOrOW2pjwt154D03lDYzB19KuIVLKIEyc=
nzIJksgp2qSdcrQQ6J6iZZmXUtra7wYvEi2sxc06miYNVZXEfQDmc+HxsiRgWn6pKS/Pc8Pup=
lf7BlIj9x5dX83wBaSVtbaY9LBAf6G+OretyjC5K5zFL1Zf4qCxXM9psrf60d18V5RyziFs1p=
FtgEY6lM+z5LgeoNY2ewi235TeB6+okdzq/hV8rZMscCm8eqlGbE6CiSdHBH6BUXfKn04ak70=
QB2cXr9lJUSMRyhMgYqdgwmca4u+id61EDw2Tm5zhnFsyQFUVBcaED6lA9u17S/34+US6yV3p=
ugBuRa3Pn96eF7NRAOqVFLrIx7n45bOJj3POmqlNvppnlf01Jxoqucs9/Pos8tsDAgGNjDAJb=
+taTZjRz1G42THb4FBzAHb28HalLcViNMBeBr7nEzXyuR23fPfqeGIZW2qq4MfX32N0zUtc3L=
DFC4KFgoejkQ0exoZ6yZKf7siuRzycy3SJktz1yH7FHKkuaKqo7T902t6IQE3H/SMoBM/4v+N=
TfYjCATMkHt1FSv7JR9eGe4uoQON2TCc1/hk2Wq60kPYOakPBausO/GXJvwatEymajcCu3VlY=
rSHCFY0cv7cFHCy83Ew8IeEyUuInKmVOABeL0k1zm6jvWiWNEIwYgb+3vy56ewawO1ZeECTeV=
qh/2UVb2i45JigS7wH/BVqABWs4X7LFIPlzr3KbNf/yFfl5ZNLkZGv97JQmSMBQNiCfsicXqQ=
0jZfj+WNFpJ7wuF/44JqGshKRmF4GngQT/r0XqP2Tpv0v4I75yikfasfh3FWL9zxlh2Lmkj+K=
rhgF/eN5Vfl7yvh+U/2XaQT+Wwst5ue3bLC+BQCOtkv3fISyCxZgz4chtbDXy9s7tJ/X/XLGf=
g0zqxLxUOTJvaI9j2tHqfdKdHjd9jdrCNcLjmTF1IwsPL+wajriIkhEueKp/AG2VlauTYpWff=
dT9JbNg2RkXNoi9q4NSobQnKtT/NE/ZpE/qP7k9manYD6KtOKfzt1k0SC98UhzEVDOd2W6vl0=
Cmtc1ZTFjr0RgFmf2XKeNd2BNtgf/K1IfZ/8LC4xmnPZey83Z/sHEVXsq1p9YRnOfpfskv5ZD=
iMlINa6tdtM1I0=3D=20
type=3Dhidden name=3D__VIEWSTATE> </DIV>
<SCRIPT type=3Dtext/javascript>
//<![CDATA[
var theForm =3D document.forms['aspnetForm'];
if (!theForm) {
    theForm =3D document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() !=3D false)) {
        theForm.__EVENTTARGET.value =3D eventTarget;
        theForm.__EVENTARGUMENT.value =3D eventArgument;
        theForm.submit();
    }
}
//]]>
</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/WebResource.axd?d=3DjI8EcXek-wztdYq032pg9Q2=
&amp;t=3D633464941826699775"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/ScriptResource.axd?d=3DzKJOX5ywFa7Fh3bUN8Vt=
qfBSxWEyT84BElKUVp0gjJvUruyDRF8p4R7KQ8_jr9Aa4WEYt3-2yoZcDwrRB4wR7ceJl-GLm=
FC3x-tzaRS5Yes1&amp;t=3D633608030687243693"></SCRIPT>

<SCRIPT type=3Dtext/javascript>
//<![CDATA[
if (typeof(Sys) =3D=3D=3D 'undefined') throw new Error('ASP.NET Ajax =
client-side framework failed to load.');
//]]>
</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/ScriptResource.axd?d=3DzKJOX5ywFa7Fh3bUN8Vt=
qfBSxWEyT84BElKUVp0gjJvUruyDRF8p4R7KQ8_jr9AaFlL3bLZsMstbWc4WRY2t9gtYuNtzI=
G5Cnpuvqx3j7I9Y0XWc8bA6igvdBzIvFOEa0&amp;t=3D633608030687243693"></SCRIPT=
>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/ScriptResource.axd?d=3DYj63ghxfhHzzsQL9_Th6=
pfCcT5KFZ6kuK0fMkexzh0uhwq4GYPiA-FgRGfl9PW0F0&amp;t=3D633783421398003246"=
></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/ScriptResource.axd?d=3DYj63ghxfhHzzsQL9_Th6=
pfCcT5KFZ6kuK0fMkexzh0vYUicRjrdVaSwR60q_TmkR6-vxAUdH6V2oZoep0Xb5NoWbK2xZi=
CMsP-CdmMWaV2E1&amp;t=3D633783421398003246"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/ScriptResource.axd?d=3DYj63ghxfhHzzsQL9_Th6=
pfCcT5KFZ6kuK0fMkexzh0swxUdjSD14pffADayVe-99ew1g_-sPfb68Fe75fXmCHeh9VxyZu=
mZYc4rIkv1Lsrg1&amp;t=3D633783421398003246"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://bsf.ncsl.org.uk/ScriptResource.axd?d=3DYj63ghxfhHzzsQL9_Th6=
pfCcT5KFZ6kuK0fMkexzh0vFbFS087QCMqAPD9XkuLyDzmZrMVWKPoWOwjPKph97qA2&amp;t=
=3D633783421398003246"></SCRIPT>

<DIV id=3Dheader>
<DIV class=3Dbanners><IMG=20
style=3D"BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"=20
id=3Dctl00_BannerLeft class=3Dleft title=3D"Future Logo" alt=3D"Future =
Logo"=20
src=3D"http://bsf.ncsl.org.uk/images/BannerLeftBoth.jpg"> <IMG =
class=3Dright alt=3D""=20
src=3D"http://bsf.ncsl.org.uk/images/BannerRight.jpg"> </DIV>
<DIV class=3Dloginbox><A id=3Dctl00_LoginButton class=3Dlogin=20
href=3D"http://www.ncsl.org.uk/uaamanager.htm?act=3Dr&amp;Target_Server_I=
D=3D23"><IMG=20
style=3D"BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"=20
alt=3DLogin src=3D"http://bsf.ncsl.org.uk/images/Login.gif"></A>=20
<DIV class=3Dtextboxes><BR><LABEL id=3Dctl00_lblEmail>All phases - Rest =
of=20
England</LABEL> </DIV></DIV>
<DIV id=3Dsubheader>
<DIV style=3D"PADDING-RIGHT: 40px" class=3Dleft><A=20
href=3D"http://bsf.ncsl.org.uk/Default.aspx">Home</A> | <A=20
href=3D"http://bsf.ncsl.org.uk/Personalise.aspx">Personalise</A> <SPAN=20
style=3D"FONT-WEIGHT: normal" id=3Dctl00_Encourage1>| </SPAN><SPAN=20
style=3D"FONT-WEIGHT: bold" id=3Dctl00_Encourage2>Login or click =
personalise to make=20
this site more relevant to you!</SPAN> </DIV>
<DIV id=3DNewsFeedsDiv class=3Dright><A id=3Dctl00_NewsFeeds=20
href=3D"http://bsf.ncsl.org.uk/RSS/news.xml">News feeds</A> | <A=20
style=3D"VERTICAL-ALIGN: middle; MARGIN-RIGHT: 3px" =
id=3Dctl00_NewsFeedIcon=20
href=3D"http://bsf.ncsl.org.uk/RSS/news.xml"><IMG=20
style=3D"BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"=20
alt=3D"RSS News Feeds" =
src=3D"http://bsf.ncsl.org.uk/images/rssicon.jpg"></A>=20
</DIV></DIV></DIV>
<SCRIPT language=3Djavascript type=3Dtext/javascript>
        var BrowserDetect =3D {
	        init: function () {
		        this.browser =3D this.searchString(this.dataBrowser) || "An =
unknown browser";
		        this.version =3D this.searchVersion(navigator.userAgent)
			        || this.searchVersion(navigator.appVersion)
			        || "an unknown version";
		        this.OS =3D this.searchString(this.dataOS) || "an unknown OS";
	        },
	        searchString: function (data) {
		        for (var i=3D0;i<data.length;i++)	{
			        var dataString =3D data[i].string;
			        var dataProp =3D data[i].prop;
			        this.versionSearchString =3D data[i].versionSearch || =
data[i].identity;
			        if (dataString) {
				        if (dataString.indexOf(data[i].subString) !=3D -1)
					        return data[i].identity;
			        }
			        else if (dataProp)
				        return data[i].identity;
		        }
	        },
	        searchVersion: function (dataString) {
		        var index =3D dataString.indexOf(this.versionSearchString);
		        if (index =3D=3D -1) return;
		        return =
parseFloat(dataString.substring(index+this.versionSearchString.length+1))=
;
	        },
	        dataBrowser: [
		        {
			        string: navigator.userAgent,
			        subString: "Chrome",
			        identity: "Chrome"
		        },
		        { 	string: navigator.userAgent,
			        subString: "OmniWeb",
			        versionSearch: "OmniWeb/",
			        identity: "OmniWeb"
		        },
		        {
			        string: navigator.vendor,
			        subString: "Apple",
			        identity: "Safari",
			        versionSearch: "Version"
		        },
		        {
			        prop: window.opera,
			        identity: "Opera"
		        },
		        {
			        string: navigator.vendor,
			        subString: "iCab",
			        identity: "iCab"
		        },
		        {
			        string: navigator.vendor,
			        subString: "KDE",
			        identity: "Konqueror"
		        },
		        {
			        string: navigator.userAgent,
			        subString: "Firefox",
			        identity: "Firefox"
		        },
		        {
			        string: navigator.vendor,
			        subString: "Camino",
			        identity: "Camino"
		        },
		        {		// for newer Netscapes (6+)
			        string: navigator.userAgent,
			        subString: "Netscape",
			        identity: "Netscape"
		        },
		        {
			        string: navigator.userAgent,
			        subString: "MSIE",
			        identity: "Explorer",
			        versionSearch: "MSIE"
		        },
		        {
			        string: navigator.userAgent,
			        subString: "Gecko",
			        identity: "Mozilla",
			        versionSearch: "rv"
		        },
		        { 		// for older Netscapes (4-)
			        string: navigator.userAgent,
			        subString: "Mozilla",
			        identity: "Netscape",
			        versionSearch: "Mozilla"
		        }
	        ],
	        dataOS : [
		        {
			        string: navigator.platform,
			        subString: "Win",
			        identity: "Windows"
		        },
		        {
			        string: navigator.platform,
			        subString: "Mac",
			        identity: "Mac"
		        },
		        {
			           string: navigator.userAgent,
			           subString: "iPhone",
			           identity: "iPhone/iPod"
	            },
		        {
			        string: navigator.platform,
			        subString: "Linux",
			        identity: "Linux"
		        }
	        ]

        };
        BrowserDetect.init();
        var disableRSS =3D false;
        if (BrowserDetect.browser=3D=3D"Explorer" && =
BrowserDetect.version < 7) disableRSS=3Dtrue;
        if (BrowserDetect.browser=3D=3D"Safari" && BrowserDetect.version =
< 2) disableRSS=3Dtrue;
        if (BrowserDetect.browser=3D=3D"Firefox" && =
BrowserDetect.version < 2) disableRSS=3Dtrue;
       =20
        if (disableRSS)
        {
            var theDiv =3D document.getElementById("NewsFeedsDiv");
            theDiv.innerHTML=3D"RSS Feeds are not supported by your =
browser";
        }
       =20
    </SCRIPT>

<DIV id=3Dwrapper><!-- CENTRAL SECTION -->
<DIV id=3Dcontent>
<SCRIPT type=3Dtext/javascript>
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ctl00$ScriptManager1', =
document.getElementById('aspnetForm'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls([], [], =
[], 90);
//]]>
</SCRIPT>
<INPUT id=3DhdnTarget type=3Dhidden name=3DhdnTarget>=20
<DIV class=3DtopMenu>
<UL class=3Dpipe>
  <LI class=3Dfirst><A id=3Dctl00_ContentPlaceHolder1_Printable1=20
  title=3D"Printable version" =
href=3D"http://bsf.ncsl.org.uk/PrintNews.aspx?ID=3D120"=20
  target=3D_blank>Printable version</A></LI>
  <LI><A id=3Dctl00_ContentPlaceHolder1_SendToFriend1=20
  =
href=3D"javascript:__doPostBack('ctl00$ContentPlaceHolder1$SendToFriend1'=
,'')">Share=20
  link</A></LI></UL></DIV>
<H2 id=3Dctl00_ContentPlaceHolder1_MainNewsHeader>Gerald Haigh's Five =
Things To=20
Think About</H2>
<DIV id=3Dctl00_ContentPlaceHolder1_MainNewsBody>
<P><B>Gerald Haigh's popular TES column finds a new home with Future. In =
the=20
first of this fortnightly series, Gerald touches on student voice, ECM,=20
permanent exclusions - and more...</B></P><STRONG><IMG=20
style=3D"WIDTH: 110px; HEIGHT: 134px" border=3D1 hspace=3D2 =
alt=3D"Gerald a" vspace=3D1=20
align=3Dright=20
src=3D"http://bsf.ncsl.org.uk/Uploads/ImageLibrary/geraldhaighleft.jpg"><=
BR><IMG=20
style=3D"WIDTH: 53px; HEIGHT: 48px" hspace=3D1 vspace=3D1 align=3Dleft=20
src=3D"http://bsf.ncsl.org.uk/Uploads/ImageLibrary/one.gif"><BR>S</STRONG=
><STRONG>t</STRONG><STRONG>udent=20
voice speaks volumes on ICT</STRONG><BR><BR><BR>Are you, like many =
others, in=20
the middle of choosing a learning platform? Schools are expected to have =
them in=20
place, but they are still relatively unknown. Where they=E2=80=99re well =
established,=20
though, they=E2=80=99re found to be powerful tools for curriculum =
transformation and=20
essential for managing the 14-19 agenda.<BR><BR>Herschel Grammar, in =
Slough, is=20
one school where they were glad they=E2=80=99d had students on the panel =
when companies=20
did their presentations. =E2=80=9CIt certainly wasn=E2=80=99t tokenism; =
they were really=20
helpful,=E2=80=9D says e-learning manager Laura Regazzacci. =
=E2=80=9CThey asked questions that=20
hadn=E2=80=99t been obvious to us.=E2=80=9D<BR><BR>The panel chose the =
Studywiz learning=20
platform, and the school continues to use students to monitor its =
development,=20
passing on their comments to the company.<BR><A=20
href=3D"http://www.herschel.slough.sch.uk/">www.herschel.slough.sch.uk/</=
A><BR><A=20
href=3D"http://www.studywiz.com/">http://www.studywiz.com/</A><BR><STRONG=
><BR><BR><IMG=20
style=3D"WIDTH: 53px; HEIGHT: 48px" hspace=3D1 vspace=3D1 align=3Dleft=20
src=3D"http://bsf.ncsl.org.uk/Uploads/ImageLibrary/two.gif"><BR>Meeting =
Ofsted on=20
=E2=80=98five things for ECM=E2=80=99</STRONG><BR><BR><BR>When Ofsted =
comes, they=E2=80=99ll want know=20
you=E2=80=99re addressing the five outcomes of the Every Child Matters =
(ECM) agenda (Be=20
Healthy. Stay Safe. Enjoy and Achieve. Make a Positive Contribution. =
Achieve=20
Economic Well-Being)<BR><BR>It=E2=80=99s not good enough to be =
personally convinced=20
you=E2=80=99re doing the right thing. Evidence is what counts, and =
there=E2=80=99s real help=20
available from the School Improvement Planning Framework produced =
jointly by TDA=20
and NCSL. <BR><BR>For 2009, it has been revised and simplified with a =
greater=20
emphasis on leadership, and there=E2=80=99s a DVD with illustrations of =
the process, all=20
particularly useful as schools look again at teaching and learning and =
the=20
curriculum. <BR><A=20
href=3D"http://www.tda.gov.uk/schoolimprovement">www.tda.gov.uk/schoolimp=
rovement</A><BR><BR>(There=E2=80=99s=20
also a good blog, by a Senco, on Ofsted, ECM and vulnerable groups, at =
the <A=20
href=3D"http://www.teachingexpertise.com/blog/ofsted-inspection-addressin=
g-ecm-agenda-vulnerable-groups-3935">Teaching=20
Expertise</A> site)<BR><BR><STRONG><BR><IMG style=3D"WIDTH: 53px; =
HEIGHT: 48px"=20
hspace=3D1 vspace=3D1 align=3Dleft=20
src=3D"http://bsf.ncsl.org.uk/Uploads/ImageLibrary/three.gif"><BR>Looking=
 for=20
learning as it moves to centre stage</STRONG><BR><BR><BR>When I was an =
external=20
examiner to a teaching degree course, I was taken to see a student in =
danger of=20
failing.&nbsp; =E2=80=9CHe's a super guy,=E2=80=9D said the head. =
=E2=80=9CThe kids love him, but=20
there=E2=80=99s no evidence that they=E2=80=99re learning =
anything.=E2=80=9D <BR><BR>Maybe as a=20
profession we=E2=80=99re hung up on the idea of teaching as a =
performance skill rather=20
than as a means of promoting learning. If that=E2=80=99s something that =
worries you, or=20
you are developing your =E2=80=98vision for learning=E2=80=99, Fieldwork =
Education=E2=80=99s =E2=80=9CLooking=20
for Learning=E2=80=9D toolkit may well help. It provides a step-by-step =
guide to moving=20
the school culture from teaching to learning, and has already worked =
wonders in=20
some schools.&nbsp; Robin Bosher, head of Fairlawn Primary in Lewisham =
describes=20
it as a =E2=80=9CWake up call=E2=80=9D and says, =E2=80=9CYou =
can=E2=80=99t underestimate the change that it=20
made to us.=E2=80=9D&nbsp; &nbsp;<BR><A=20
href=3D"http://www.lookingforlearning.co.uk/">http://www.lookingforlearni=
ng.co.uk/</A><BR><BR><STRONG><IMG=20
style=3D"WIDTH: 53px; HEIGHT: 48px" hspace=3D1 vspace=3D1 align=3Dleft=20
src=3D"http://bsf.ncsl.org.uk/Uploads/ImageLibrary/four.gif"><BR>When a =
new=20
culture encounters the ultimate sanction</STRONG><BR><BR><BR>Sooner or =
later,=20
most new heads are going to come up against the issue of whether or not =
to=20
permanently exclude a pupil. Leaders try hard to avoid it, but as =
Richard Bird,=20
ASCL=E2=80=99s legal expert, a former principal, points out, =
it=E2=80=99s when permanent=20
exclusions are very rare that procedural mistakes are most likely to be=20
made.<BR><BR>=E2=80=9CExclusions may seem simple but they=E2=80=99re a =
legal minefield,=E2=80=9D he=20
says. As it does so often, the Association of School and College Leaders =

(ASCL)has come up with a well-aimed course run by the right people. =
=E2=80=9CManaging=20
Exclusions Successfully=E2=80=9D, running in March in London and June in =
Coventry, will=20
tackle all the legal, practical and ethical issues. It=E2=80=99s led by =
Richard Bird,=20
and Sue Kirkham, ASCL policy specialist. <BR><A=20
href=3D"http://www.ascl.org.uk/">http://www.ascl.org.uk/</A><BR><BR><STRO=
NG><IMG=20
style=3D"WIDTH: 53px; HEIGHT: 48px" hspace=3D1 vspace=3D0 align=3Dleft=20
src=3D"http://bsf.ncsl.org.uk/Uploads/ImageLibrary/five.gif"><BR>=E2=80=98=
Policy is made=20
by people who want to be informed=E2=80=99</STRONG><BR><BR><BR>New =
schools, new=20
curricula, new kinds of learning.&nbsp; Are you on the front foot, =
working to=20
influence policy? Or are you, as head teacher Jeremy Taylor puts it, =
=E2=80=9CA passive=20
recipient of change=E2=80=9D?<BR><BR>Having worked for a term seconded =
to=20
PricewaterhouseCoopers, taking part in research to inform government =
policy,=20
Jeremy has concluded that policy is made by people who want to be =
informed. So=20
he makes sure that key policy makers know about his school and, if =
possible,=20
have visited it and heard his views. <BR><BR>=E2=80=9CInstead of =
wondering what the=20
future will bring, we=E2=80=99ll play our part in shaping it. =
We=E2=80=99ve applied for funding=20
to set up an advisory service to mainstream schools, for example. You =
don=E2=80=99t sit=20
and wait for things to happen, you play your part in =
it.=E2=80=9D<BR><BR>Jeremy=E2=80=99s=20
secondment was managed in Northern Ireland by HTI National =
Leadership.<BR><A=20
href=3D"http://www.hti.org.uk/">http://www.hti.org.uk/</A><BR><BR><EM>Ger=
ald=20
Haigh=E2=80=99s new =E2=80=98Five Things To Think About=E2=80=99 column =
for the National College for=20
School Leadership builds on his highly popular work with </EM><A=20
href=3D"http://www.tes.co.uk/">The Times Educational Supplement</A><EM> =
and=20
highlights important issues for school leaders engaged in Building =
Schools for=20
the Future and the Primary Capital Programme</EM><BR><BR><EM>Gerald =
Haigh=20
welcomes feedback and suggestions - <A=20
href=3D"mailto:gerald.haigh@btinternet.com">gerald.haigh@btinternet.com</=
A></EM><BR></DIV>
<H3>Comments</H3>
<P>I can see that this is going to be a useful series - looking forward =
to=20
future ones.<BR><B>STEVE LEPPER</B> - <I>30/01/2009</I></P>
<DIV style=3D"BACKGROUND-COLOR: #336633; WIDTH: 100%; HEIGHT: =
1px"></DIV>
<P>I agree, particularly with point 1. There is a clear change in =
emphasis=20
towards recognising student voice not just outside school but inside as =
well!=20
Given voice to students via your Learning Platform or VLE is a clear =
reason to=20
develop this technology.<BR><B>GARETH DAVIES</B> - <I>02/02/2009</I></P>
<DIV style=3D"BACKGROUND-COLOR: #336633; WIDTH: 100%; HEIGHT: =
1px"></DIV>
<H3>Bookmark with:</H3>
<TABLE>
  <TBODY>
  <TR>
    <TD style=3D"WIDTH: 150px; HEIGHT: 50px" vAlign=3Dcenter =
align=3Dmiddle><IMG=20
      alt=3DDelicious =
src=3D"http://static.delicious.com/img/delicious.small.gif"=20
      width=3D10 height=3D10> <A=20
      =
onclick=3D"window.open('http://delicious.com/save?v=3D5&amp;noui&amp;jump=
=3Dclose&amp;url=3D'+encodeURIComponent(location.href)+'&amp;title=3D'+en=
codeURIComponent(document.title), =
'delicious','toolbar=3Dno,width=3D550,height=3D550'); return false;"=20
      href=3D"http://delicious.com/save">Bookmark</A> </TD>
    <TD style=3D"WIDTH: 150px; HEIGHT: 50px" vAlign=3Dcenter =
align=3Dmiddle>
      <SCRIPT type=3Dtext/javascript>
                digg_url =3D =
'http://future.ncsl.org.uk/ShowResource.aspx?ID=3D120';
                digg_skin =3D 'compact';
                digg_window =3D 'new';
            </SCRIPT>

      <SCRIPT type=3Dtext/javascript=20
      src=3D"http://digg.com/tools/diggthis.js"></SCRIPT>
    </TD>
    <TD style=3D"WIDTH: 150px; HEIGHT: 50px" vAlign=3Dcenter =
align=3Dmiddle>
      <SCRIPT type=3Dtext/javascript=20
      src=3D"http://www.reddit.com/button.js?t=3D1"></SCRIPT>
    </TD>
    <TD style=3D"WIDTH: 150px; HEIGHT: 50px" vAlign=3Dcenter =
align=3Dmiddle>
      <SCRIPT type=3Dtext/javascript>function fbs_click() =
{u=3Dlocation.href;t=3Ddocument.title;window.open('http://www.facebook.co=
m/sharer.php?u=3D'+encodeURIComponent(u)+'&t=3D'+encodeURIComponent(t),'s=
harer','toolbar=3D0,status=3D0,width=3D626,height=3D436');return =
false;}</SCRIPT>

      <STYLE>HTML .fb_share_button {
	BORDER-BOTTOM: #d8dfea 1px solid; BORDER-LEFT: #d8dfea 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 20px; DISPLAY: =
inline-block; BACKGROUND: =
url(http://static.ak.facebook.com/images/share/facebook_share_icon.gif?6:=
26981) no-repeat right top; HEIGHT: 15px; BORDER-TOP: #d8dfea 1px solid; =
BORDER-RIGHT: #d8dfea 1px solid; PADDING-TOP: 1px
}
HTML .fb_share_button:hover {
	BORDER-BOTTOM-COLOR: #295582; BORDER-TOP-COLOR: #295582; BACKGROUND: =
url(http://static.ak.facebook.com/images/share/facebook_share_icon.gif?6:=
26981) #3b5998 no-repeat right top; COLOR: #fff; BORDER-RIGHT-COLOR: =
#295582; BORDER-LEFT-COLOR: #295582; TEXT-DECORATION: none
}
</STYLE>
      <A style=3D"TEXT-DECORATION: none" class=3Dfb_share_button=20
      onclick=3D"return fbs_click()"=20
      href=3D"http://www.facebook.com/share.php?u=3D<url>" =
rel=3Dnofollow=20
      target=3D_blank>Share</A> </TD>
    <TD style=3D"WIDTH: 100px; HEIGHT: 50px" vAlign=3Dcenter =
align=3Dmiddle><A=20
      id=3Dctl00_ContentPlaceHolder1_StumbleUponLink title=3D"Stumble =
upon"=20
      =
href=3D"http://www.stumbleupon.com/submit?url=3Dhttp%3a%2f%2ffuture.ncsl.=
org.uk%2fNews.aspx%3fID%3d120%26title%3DGerald+Haigh's+Five+Things+To+Thi=
nk+About"=20
      target=3D_blank><IMG=20
      style=3D"BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"=20
      title=3D"Stumble upon"=20
      src=3D"http://cdn.stumble-upon.com/images/24x24_su.gif"></A>=20
</TD></TR></TBODY></TABLE>
<DIV class=3DbottomMenu>
<UL class=3Dpipe>
  <LI class=3Dfirst><A id=3Dctl00_ContentPlaceHolder1_Printable2=20
  title=3D"Printable version" =
href=3D"http://bsf.ncsl.org.uk/PrintNews.aspx?ID=3D120"=20
  target=3D_blank>Printable Version</A></LI>
  <LI><A id=3Dctl00_ContentPlaceHolder1_SendToFriend2=20
  =
href=3D"javascript:__doPostBack('ctl00$ContentPlaceHolder1$SendToFriend2'=
,'')">Share=20
  link</A></LI></UL></DIV></DIV><!-- END CENTRAL SECTION --><!-- LEFT =
COLUMN -->
<DIV id=3Dleftmenu>
<DL id=3Dctl00_leftList>
  <DT>Themes</DT>
  <DD><A href=3D"http://bsf.ncsl.org.uk/Themes.aspx?ID=3D1">Getting =
started</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/Themes.aspx?ID=3D2">Vision</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/Themes.aspx?ID=3D3">Design</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/Themes.aspx?ID=3D4">Managing =
change</A></DD>
  <DT>Resources</DT>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/Themes.aspx?ID=3D5">Videos</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/CaseList.aspx">Case =
studies</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/Tools.aspx">Tools</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/LinksList.aspx">Links</A></DD>
  <DT>NCSL programmes</DT>
  <DD><A href=3D"http://www.ncsl.org.uk/bsf" =
target=3D_blank>BSF</A></DD>
  <DD><A href=3D"http://www.ncsl.org.uk/pcp" =
target=3D_blank>PCP</A></DD>
  <DD><A href=3D"http://talk2learn.ncsl.org.uk/"=20
target=3D_blank>talk2learn</A></DD></DL><LABEL>Search</LABEL>=20
<DIV style=3D"WIDTH: 140px; ZOOM: 1; DISPLAY: inline" =
id=3Dctl00_programme=20
class=3D"RadComboBox RadComboBox_Default ">
<TABLE=20
style=3D"BORDER-RIGHT-WIDTH: 0px; WIDTH: 100%; BORDER-COLLAPSE: =
collapse; BORDER-TOP-WIDTH: 0px; TABLE-LAYOUT: fixed; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"=20
border=3D0 cellSpacing=3D0 cellPadding=3D0>
  <TBODY>
  <TR>
    <TD style=3D"MARGIN-TOP: -1px; WIDTH: 100%; MARGIN-BOTTOM: -1px"=20
    class=3D"rcbInputCell rcbInputCellLeft"><INPUT style=3D"DISPLAY: =
block"=20
      id=3Dctl00_programme_Input class=3DrcbInput value=3D"All =
programmes" readOnly=20
      type=3Dtext name=3Dctl00$programme_Input></INPUT></TD>
    <TD style=3D"MARGIN-TOP: -1px; MARGIN-BOTTOM: -1px"=20
    class=3D"rcbArrowCell rcbArrowCellRight"><A=20
      style=3D"POSITION: relative; OUTLINE-STYLE: none; OUTLINE-COLOR: =
invert; OUTLINE-WIDTH: medium; DISPLAY: block; OVERFLOW: hidden"=20
      =
id=3Dctl00_programme_Arrow>select</A></TD></TR></TBODY></TABLE><!-- =
2008.1.415.35 -->
<DIV style=3D"Z-INDEX: 6000" class=3DrcbSlide>
<DIV style=3D"DISPLAY: none; FLOAT: left" id=3Dctl00_programme_DropDown=20
class=3DRadComboBoxDropDown_Default>
<DIV style=3D"WIDTH: 100%" class=3D"rcbScroll rcbWidth">
<UL=20
style=3D"PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; ZOOM: 1; LIST-STYLE-IMAGE: none; =
PADDING-TOP: 0px"=20
class=3DrcbList>
  <LI class=3D"rcbItem ">All programmes</LI>
  <LI class=3D"rcbItem ">BSF leadership programme</LI>
  <LI class=3D"rcbItem ">PCP leadership programme</LI>
  <LI class=3D"rcbItem ">BSF general</LI>
  <LI class=3D"rcbItem ">PCP general</LI></UL></DIV></DIV></DIV><INPUT=20
id=3Dctl00_programme_ClientState type=3Dhidden =
name=3Dctl00_programme_ClientState>=20
</DIV><LABEL>For</LABEL> <INPUT style=3D"WIDTH: 138px" =
id=3Dctl00_QuickSearch=20
class=3Dtextbox type=3Dtext name=3Dctl00$QuickSearch><BR><INPUT=20
style=3D"BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"=20
id=3Dctl00_QuickSearchButton =
src=3D"http://bsf.ncsl.org.uk/images/search.gif"=20
type=3Dimage name=3Dctl00$QuickSearchButton Text=3D"search"> </DIV><!-- =
END LEFT COLUMN --><!-- RIGHT HAND COLUMN -->
<DIV id=3Drightlinks>
<DL>
  <DT><A href=3D"http://bsf.ncsl.org.uk/AllNews.aspx">Latest</A></DT>
  <DD><A href=3D"http://bsf.ncsl.org.uk/News.aspx?ID=3D189">Take Your =
Partners 4 -=20
  Governors</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/News.aspx?ID=3D195">Gerald =
Haigh's Five=20
  Things to Think About - 21</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/News.aspx?ID=3D194">Harnessing =
Technology:=20
  where we are =E2=80=93 where do we want to be?</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/News.aspx?ID=3D192">Gerald =
Haigh's Five=20
  Things To Think About - 20</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/News.aspx?ID=3D191">Here is =
today's lesson -=20
  lights, camera, action!</A></DD></DL><A=20
id=3Dctl00_ContentPlaceHolder2_MoreNewsLink=20
href=3D"http://bsf.ncsl.org.uk/AllNews.aspx">View all current news</A>=20
<DL>
  <DT>Most recommended</DT>
  <DD><A href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D914">'A =
Perfect=20
  Storm' - global turbulence and Education 3.0</A></DD>
  <DD><A href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D911">'We =
are the=20
  people we've been waiting for'</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D909">Transforming=20
  learning at Robin Hood Primary, Birmingham</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D908">Transforming=20
  learning with Esme Capp (podcast)</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D907">Transforming=20
  Learning with Esme Capp</A></DD>
  <DT><A href=3D"http://bsf.ncsl.org.uk/Personalise.aspx">My =
future</A></DT>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D346">Futurelab -=20
  Vision: Looking at the Future of Learning</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D314">Minster =
School:=20
  From Vision to Reality</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D313">Talking Heads =
-=20
  Djanogly Academy 7: Reactions and reflections</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D312">Talking heads =
-=20
  Djanogly Academy 6: Design issues</A></DD>
  <DD><A =
href=3D"http://bsf.ncsl.org.uk/ShowResource.aspx?ID=3D311">Talking Heads =
-=20
  Djanogly Academy 5: Changing the culture</A></DD></DL>
<DIV id=3Dctl00_ContentPlaceHolder2_favouritesArea></DIV><A=20
id=3Dctl00_ContentPlaceHolder2_LoginMessage=20
href=3D"http://www.ncsl.org.uk/uaamanager.htm?act=3Dr&amp;Target_Server_I=
D=3D23">NCSL=20
talk2learn account holders can login to personalise 'Future', comment on =
stories=20
and access extra resources</A> </DIV><!-- END RIGHT HAND COLUMM =
--></DIV><!-- FOOTER -->
<DIV id=3Dfooter>
<DIV class=3Dlinks><A href=3D"http://www.ncsl.org.uk/">NCSL</A> | <A=20
href=3D"http://bsf.ncsl.org.uk/ContactUs.aspx">Contact us</A> | <A=20
href=3D"http://bsf.ncsl.org.uk/Feedback.aspx">Feedback</A> | <A=20
href=3D"http://bsf.ncsl.org.uk/Legal.aspx">Legal</A> | <A=20
href=3D"http://bsf.ncsl.org.uk/SiteMap.aspx">Site map</A> </DIV>
<DIV class=3Dcopyright>=C2=A9 National College for School Leadership =
</DIV></DIV>
<DIV><INPUT id=3D__VIEWSTATEENCRYPTED type=3Dhidden =
name=3D__VIEWSTATEENCRYPTED>=20
<INPUT id=3D__EVENTVALIDATION=20
value=3DPc9AXXNL1PNFrS2eYT0ZECw5OpAPJZV1iTCX1M46HydZg/twZ3K3r/r+0CH4/jcw =

type=3Dhidden name=3D__EVENTVALIDATION> </DIV>
<SCRIPT type=3Dtext/javascript>
//<![CDATA[
Sys.Application.initialize();

WebForm_InitCallback();Sys.Application.add_init(function() {
    $create(Telerik.Web.UI.RadComboBox, =
{"_dropDownWidth":0,"_height":0,"_skin":"Default","_text":"All =
programmes","_uniqueId":"ctl00$programme","_value":"0","_virtualScroll":f=
alse,"clientStateFieldID":"ctl00_programme_ClientState","collapseAnimatio=
n":"{\"type\":12,\"duration\":200}","itemData":[{"value":"0","selected":t=
rue},{"value":"4"},{"value":"12"},{"value":"13"},{"value":"14"}],"selecte=
dIndex":0}, null, null, $get("ctl00_programme"));
});
//]]>
</SCRIPT>
</FORM><!-- END FOOTER -->
<SCRIPT type=3Dtext/javascript>
var gaJsHost =3D (("https:" =3D=3D document.location.protocol) ? =
"https://ssl." : "http://www.");
document.write(unescape("%3Cscript src=3D'" + gaJsHost + =
"google-analytics.com/ga.js' =
type=3D'text/javascript'%3E%3C/script%3E"));
</SCRIPT>

<SCRIPT type=3Dtext/javascript>
var pageTracker =3D _gat._getTracker("UA-5200148-2");
pageTracker._trackPageview();
</SCRIPT>
</BODY></HTML>

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/images/BannerLeftBoth.jpg

/9j/4AAQSkZJRgABAgEASABIAAD/4QjURXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp
AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dz
ADIwMDk6MDM6MTIgMTQ6MDk6NDEAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAABsaADAAQAAAAB
AAAAQQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA
AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAeeAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG
AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL
CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN
Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwM/8AAEQgAGACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH
CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh
EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi
ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE
BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy
gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX
Z3eHl6e3x//aAAwDAQACEQMRAD8A9U2t8B9yba3wH3KSHdTVfU6m1u+t4hzT3CSnO6RlZec+zIsN
bcdpLG0hmsw17XepP5rXItvVMerKfRZWQGgbXAGXO/cDNo/N/wALv9NZn1arYcmy4ibANgdJ+iW1
v2x9H6Sr5bracx+VaHOxjXtNkztILd25s7/3foIYjxTjHuSP8VgjMjGJH7S7P7ThrbLMZzaXGG2A
gz/ZhX2em9oe2C1wBB8QVg4zs/PysjBGRX9lwxVLfTO6Xs9RjN+5v83+/wDnrbxKXUY7KnO3Fs6j
TkkqWYA8+3gWSBJ8u/is/Iw67BVZbWywxDHOaHHcdrfafd7kba3wH3Kjl9ON/UMbLBYGUNtbZWWy
X+q1jG+8OG3Z6X7r1Tq6H1CtmM09Qe80VBl0m0m15rtx7bXufkP2te6ynIbX/grqP+E/RRWey7Xs
7W1vgPuQ6bcbIZ6lD2W1yW72EOEtOx7dzf3HDasqnomfW5hs6g+0NOrHby1zTTRRax7XWu+ndj2Z
LLN36L7Tf/OepZ6ga/q71CrC+y1dRewtxxRW5oc0NLaasVjmMbZ7a67aftrPf6/rW+n9o9H+cVns
iz2d/a3wH3KFb6LWl1RbY0OcwlpBAcwmuxmn51djXMf/AC1k5HRM57r/ALPnvpbZu9IF1ryya6qm
e51/v9O+n7T/ANcTjo/UW2iwZziRabA0myC05Ls30f53Zt+z2fs/f6f81+Z/gErPZNns6tr8elu+
5zK2yBueQ0SfoiXKW1vgPuWDi9I6lb0o4ma/bccjHvFlj3XE+gcbIcwtc/2brMZ1fst/Se/N9Ov1
fQVt/S8622+5+Yd120Ma02CutgNfrVMqZaxj/Vrq9mQ/9JVdbd/gLPs6Vnsqz2dTa3wH3KDX47rH
1Ncx1lceowEFzd30N7fzdyyKeh5zGAWdQsstb9liwutEig0/at9fr+nuz/s/v/0frW/z36T1YfsH
qZqZWepPltbGOcPVBc5tOTiutd+sbtz35OPkf8Zif6X9NWrPZFns7m1g7D7lGp+Pc3fU5ljZjcwh
wkdvasenpnUrLc6vLIspyaX0tNrnvZr7BuxBZtsryN1j7ffjWUM/Vf039IUG9E6jXmU11ZVzcVgd
Y602F5BbdiW1Yp3v9XJ/QY+TR9qyfVt9G/0fexKz2VZ7O9tb4D7ktrfAfcsajofUGFhu6jZYGlzi
GmxsPczHDbG7rrXO9K/HusbRd6tNleZbVd6n07C4vSczHsxHnNsf6AIyA8veLSW7XP222P8ARc6w
Mubt/mv0tP6T1P0as9k2ez//0PVUy+VkklP0xh9FZiAiu6wlxlx0B42R7QpZPSKMjDtxXOcBYZa4
RLT5fvL5lSTcde4OD579P95j/V8B/co3/d6v0pjdKz6G2VjL9lry9zg2DJAa7bt+h9H99ajGlrGt
Li4gAFx5MfnL5XSU2Tiv1Vfhw/8Acqx8Fem68eL/ALp+nczpgysgXmzbDDXtAOoO4H3Ncx/5/wCa
os6Wa8e6pl5bZcWzeGgPAa2uv27Nrfd6W/8ArvXzIkm6rvS/TdfTHtyK77Mh9vpPc9rHSQC5jqvb
uc7/AEiC3oNTMf0RYTNbWFzhuIc0y62rc79F63+Fa3/g181JJepXpfpt3S/0k1XOorLamFrJDi2n
fsb627f7vU9ygekWOeLH5dheNw3DQgPeLX11mf0bPbs/qL5nSS9SvS/TL+k2P2zlWEtIcCZdDgbf
ezc79G7Zd6fsT1dNyGV3VnJeGu2iraXe1rdp4n2b3b2/o/8ABr5lSS9SvS/TDuk2OduOU9xG7Y5w
Jc3cWn2v3e3+bb9FWMTDsx3uc/Isv3AAB5MNAJPtEn/ya+X0kjdKFW/VSS+VUk1c/VSS+VUklP8A
/9n/7RPQUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAgACADhCSU0EJQAAAAAAEEYM8okm
uFbasJwBobCnkHc4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAA
AAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAA
AAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2Zm
AAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEA
LQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////
////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP//////
//////////////////////8D6AAAOEJJTQQIAAAAAAApAAAAAQAAAkAAAAJAAAAABQAATqAAAAAA
wAEAABQgAQAABUABAAAGogEAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAAC9gAAAAgAAAAQAAAA
AQAAAAAAAG51bGwAAAADAAAACGJhc2VOYW1lVEVYVAAAAAUAVQBzAGUAcgAAAAAABmJvdW5kc09i
amMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABC
dG9tbG9uZwAAAEEAAAAAUmdodGxvbmcAAAGxAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAA
AAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmln
aW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVT
bGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBs
b25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAABBAAAAAFJnaHRsb25nAAABsQAA
AAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFs
dFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAAB
AAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0
QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51
bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxl
ZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxv
bmcAAAAAOEJJTQQoAAAAAAAMAAAAAT/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAXjhCSU0EDAAAAAAH
ugAAAAEAAACgAAAAGAAAAeAAAC0AAAAHngAYAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9i
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
Gu2iraXe1rdp4n2b3b2/o/8ABr5lSS9SvS/TDuk2OduOU9xG7Y5wJc3cWn2v3e3+bb9FWMTDsx3u
c/Isv3AAB5MNAJPtEn/ya+X0kjdKFW/VSS+VUk1c/VSS+VUklP8A/9k4QklNBCEAAAAAAFUAAAAB
AQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABv
AHQAbwBzAGgAbwBwACAAQwBTADMAAAABADhCSU0PoAAAAAAGKm1vcHQAAAADAAAAAQAAAAAAAAAH
AAAAAQEAAAAAAQAA//////////8AAABkAAAAAf////8AAAAAAAAAAQAAAAAAAAABAAAAAP////8A
AAAABP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAGoAAAAEAAA
AAEAAAAAAA5UYXJnZXRTZXR0aW5ncwAAAAoAAAAATXR0Q09iamMAAAABAAAAAAAKTmF0aXZlUXVh
ZAAAAAMAAAAAQmwgIGxvbmcAAAD/AAAAAEdybiBsb25nAAAA/wAAAABSZCAgbG9uZwAAAP8AAAAA
T3B0bWJvb2wBAAAAAFFsdHlsb25nAAAAZAAAAAthZGRNZXRhZGF0YWJvb2wBAAAACmJsdXJBbW91
bnRkb3ViAAAAAAAAAAAAAAAPZW1iZWRJQ0NQcm9maWxlYm9vbAAAAAAKZmlsZUZvcm1hdGVudW0A
AAAKRmlsZUZvcm1hdAAAAABKUEVHAAAADG5vTWF0dGVDb2xvcmJvb2wAAAAAC3Byb2dyZXNzaXZl
Ym9vbAEAAAAMem9uZWRRdWFsaXR5T2JqYwAAAAEAAAAAAAlab25lZEluZm8AAAAEAAAACWNoYW5u
ZWxJRGxvbmf/////AAAADWVtcGhhc2l6ZVRleHRib29sAAAAABBlbXBoYXNpemVWZWN0b3JzYm9v
bAAAAAAFZmxvb3Jsb25nAAAAADhCSU0PoQAAAAAALW1zZXQAAAAQAAAAAQAAAAAABG51bGwAAAAB
AAAAB1ZlcnNpb25sb25nAAAAAAA4QklND6IAAAAAAAhtczR3AAAAAjhCSU0EBgAAAAAABwAEAAAA
AQEA/+EPtmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78i
IGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i
ZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBN
b24gRmViIDE5IDIwMDcgMjI6NDA6MDggICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRp
b24gcmRmOmFib3V0PSIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAv
IiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eGFwPSJo
dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2Jl
LmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu
MC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVu
dHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8x
LjAvIiBleGlmOkNvbG9yU3BhY2U9Ii0xIiBleGlmOlBpeGVsWERpbWVuc2lvbj0iNDMzIiBleGlm
OlBpeGVsWURpbWVuc2lvbj0iNjUiIGV4aWY6TmF0aXZlRGlnZXN0PSIzNjg2NCw0MDk2MCw0MDk2
MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2NywzNjg2OCwzMzQzNCwz
MzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4
MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0MTQ4NCw0MTQ4Niw0
MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTczMCw0MTk4NSw0MTk4
Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0MTk5NCw0MTk5NSw0
MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAs
MjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7MTJCQ0M0MjU1QkZDNzYwN0MzQTY3NTM0NTEwODk0MEQi
IHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlm
ZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiB0aWZm
Ok5hdGl2ZURpZ2VzdD0iMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4
MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0
MzI7QkNCMzI4RkY2RTg3OTZGNUZEQzIxRkFDNDdCMkNENzIiIHhhcDpDcmVhdGVEYXRlPSIyMDA5
LTAzLTEyVDE0OjA5OjQxWiIgeGFwOk1vZGlmeURhdGU9IjIwMDktMDMtMTJUMTQ6MDk6NDFaIiB4
YXA6TWV0YWRhdGFEYXRlPSIyMDA5LTAzLTEyVDE0OjA5OjQxWiIgeGFwOkNyZWF0b3JUb29sPSJB
ZG9iZSBQaG90b3Nob3AgQ1MzIFdpbmRvd3MiIHhhcE1NOkRvY3VtZW50SUQ9InV1aWQ6MUYzRDU2
MEQwRjBGREUxMUE5OUI4QjQ5OTlDMTQ5RDUiIHhhcE1NOkluc3RhbmNlSUQ9InV1aWQ6MjAzRDU2
MEQwRjBGREUxMUE5OUI4QjQ5OTlDMTQ5RDUiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgcGhvdG9z
aG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9Ik5TVjExMDdLIiBwaG90b3No
b3A6SGlzdG9yeT0iIj4gPHhhcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InV1aWQ6
ODM4MzExNEYwRDVFREQxMTlCNzZEOTQwMkM1RkY4RTIiIHN0UmVmOmRvY3VtZW50SUQ9InV1aWQ6
ODI4MzExNEYwRDVFREQxMTlCNzZEOTQwMkM1RkY4RTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwv
cmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/iA+BJQ0NfUFJPRklMRQABAQAA
A9BhcHBsAgAAAG1udHJSR0IgWFlaIAfYAAYABgAKACwADGFjc3BBUFBMAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAD21gABAAAAANMtYXBwbOw71mh1n4XOCCVTyFLihuUAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAADnJYWVoAAAEsAAAAFGdYWVoAAAFAAAAAFGJYWVoAAAFUAAAAFHd0cHQA
AAFoAAAAFGNoYWQAAAF8AAAALHJUUkMAAAGoAAAADmdUUkMAAAG4AAAADmJUUkMAAAHIAAAADnZj
Z3QAAAHYAAAAMG5kaW4AAAIIAAAAOGRlc2MAAAJAAAAAY2RzY20AAAKkAAAA1G1tb2QAAAN4AAAA
KGNwcnQAAAOgAAAALVhZWiAAAAAAAABsEgAAOfEAAAKjWFlaIAAAAAAAAF+ZAACuZwAAE75YWVog
AAAAAAAAKyoAABfNAAC8wlhZWiAAAAAAAAD0NgABAAAAAWobc2YzMgAAAAAAARj9AAAK3///6VMA
AA4pAAD9d///+D////viAAAGrAAAk1tjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAGN1
cnYAAAAAAAAAAQHNAAB2Y2d0AAAAAAAAAAEAANF0AAAAAAABAAAAANF0AAAAAAABAAAAANF0AAAA
AAABAABuZGluAAAAAAAAADAAAKCAAABXQAAASsAAAJsAAAAm9wAAExsAAEiAAABMAAACMzMAAjMz
AAIzM2Rlc2MAAAAAAAAACU5TVjExMDdLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAA
AA8AAAAMaXRJVAAAABAAAADEZnJGUgAAABAAAADEbmJOTwAAABAAAADEZXNFUwAAABAAAADEZmlG
SQAAABAAAADEcHRQVAAAABAAAADEemhUVwAAABAAAADEamFKUAAAABAAAADEbmxOTAAAABAAAADE
ZGVERQAAABAAAADEa29LUgAAABAAAADEZW5VUwAAABAAAADEc3ZTRQAAABAAAADEZGFESwAAABAA
AADEemhDTgAAABAAAADEAE4AUwBWADEAMQAwADcAS21tb2QAAAAAAAA0rAAARIAAADritxuWAAAA
AAAAAAAAAAAAAAAAAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAw
NQAAAAD/7gAOQWRvYmUAZAAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwM
DAwMDBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQcHBw0MDRgQEBgUDg4OFBQODg4OFBEM
DAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCABBAbEDAREAAhEB
AxEB/90ABAA3/8QBogAAAAcBAQEBAQAAAAAAAAAABAUDAgYBAAcICQoLAQACAgMBAQEBAQAAAAAA
AAABAAIDBAUGBwgJCgsQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFBUQYTYSJxgRQykaEHFbFC
I8FS0eEzFmLwJHKC8SVDNFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkKGBmElEVGpLRW01UoGvLj
88TU5PRldYWVpbXF1eX1ZnaGlqa2xtbm9jdHV2d3h5ent8fX5/c4SFhoeIiYqLjI2Oj4KTlJWWl5
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

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/images/BannerRight.jpg

/9j/4AAQSkZJRgABAgEASABIAAD/4QvzRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp
AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dz
ADIwMDg6MDc6MzAgMDk6MDM6NDMAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAAAk6ADAAQAAAAB
AAAAQQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA
AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAq9AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG
AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL
CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN
Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwM/8AAEQgAQQCTAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH
CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh
EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi
ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE
BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy
gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX
Z3eHl6e3x//aAAwDAQACEQMRAD8A9S9Kr9xv3BL0qv3G/cFNJJTD0qv3G/cEvSq/cb9wU0klMPSq
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
OPk15DHXF1L2voa5w2sDbbsv0mQwOdX6+TY79L6ln/CIvUvqxhdRvyrbr72V59VdGZRW5rWWMqNh
qa53pnIZ/P2fzN9e9bCSSnnMv6jdLzrqLs/Iysp+OwVNNj2asaLGNa5zKWP+hfZv9PZ63+G9Sxil
i/UvAxL68qjLy25dTpbkl9ZftNVOG6lzTT6L6vQxMf6VW/8AR/TXQpJKt5/J+pPSMrDxsK193oYh
tNYBZum4vfYfW9L1m/zrvbU+tj/8N6qr9U+omBlYuUMax9eVfS+mt1hBYC6ijp8va1m7+ZxKv7a6
hJJVtLpfSqOmU210vstdfa++620hz32Pjc92xrGfRa1vsYrqSSSlJJJJKf/T9VSXyqkkp+qkl8qp
JKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkk
p//Z/+0YClBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAHHAIAAAIAAgA4QklNBCUAAAAAABBGDPKJ
JrhW2rCcAaGwp5B3OEJJTQPtAAAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EJgAAAAAADgAAAAAA
AAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAA
AAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9m
ZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAAB
AC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA////
/////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////
////////////////////////A+gAADhCSU0EAAAAAAAAAgA7OEJJTQQCAAAAAACWAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEJJTQQwAAAAAABLAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
ADhCSU0ELQAAAAAABgABAAAAQjhCSU0ECAAAAAAAKQAAAAEAAAJAAAACQAAAAAUAAAAAAAAAAMAB
AAAUIAEAAAVAAQAABqIBADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAAvYAAAAIAAAAEAAAAAEA
AAAAAABudWxsAAAAAwAAAAhiYXNlTmFtZVRFWFQAAAAFAFUAcwBlAHIAAAAAAAZib3VuZHNPYmpj
AAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRv
bWxvbmcAAABBAAAAAFJnaHRsb25nAAAAkwAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAF
c2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2lu
ZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xp
Y2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9u
ZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAQQAAAABSZ2h0bG9uZwAAAJMAAAAD
dXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRU
YWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAA
AAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFs
aWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0A
AAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0
T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25n
AAAAADhCSU0EKAAAAAAADAAAAAE/8AAAAAAAADhCSU0EFAAAAAAABAAAAF04QklNBAwAAAAACtkA
AAABAAAAkwAAAEEAAAG8AABwvAAACr0AGAAB/9j/4AAQSkZJRgABAgAASABIAAD/7QAMQWRvYmVf
Q00AAf/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwM
DAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwM
DAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAEEAkwMBIgACEQED
EQH/3QAEAAr/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAA
AAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQV
UsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0
pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRB
UWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKz
hMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/
APUvSq/cb9wS9Kr9xv3BTSSUw9Kr9xv3BL0qv3G/cFNJJTD0qv3G/cEvSq/cb9wUbsrGo1vtZV/X
cG/9UU1OXi3/AMxdXbH7jg7/AKkocQur1Rpsz9Kr9xv3BL0qv3G/cFNJFLD0qv3G/cEvSq/cb9wU
0klMPSq/cb9wS9Kr9xv3BTSSUw9Kr9xv3BL0qv3G/cFNJJTD0qv3G/cEvSq/cb9wU0klMPSq/cb9
wS9Kr9xv3BTSSUx2N8BxHHbwSUkklP8A/9D1VJJcNn9T6hjfW3K62L3/ALI6ZbjdMy6ZPphl7PVu
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
/Deqq/VPqJgZWLlDGsfXlX0vprdYQWAuoo6fL2tZu/mcSr+2uoSSVbS6X0qjplNtdL7LXX2vvutt
Ic99j43Pdsaxn0Wtb7GK6kkkpSSSSSn/0/VUl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfK
qSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKf/2QA4QklNBCEAAAAAAFUAAAAB
AQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABv
AHQAbwBzAGgAbwBwACAAQwBTADMAAAABADhCSU0PoAAAAAAGKm1vcHQAAAADAAAAAQAAAAAAAAAH
AAAAAQEAAAAAAQAA//////////8AAABkAAAAAf////8AAAAAAAAAAQAAAAAAAAABAAAAAP////8A
AAAABP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAGoAAAAEAAA
AAEAAAAAAA5UYXJnZXRTZXR0aW5ncwAAAAoAAAAATXR0Q09iamMAAAABAAAAAAAKTmF0aXZlUXVh
ZAAAAAMAAAAAQmwgIGxvbmcAAAD/AAAAAEdybiBsb25nAAAA/wAAAABSZCAgbG9uZwAAAP8AAAAA
T3B0bWJvb2wBAAAAAFFsdHlsb25nAAAAZAAAAAthZGRNZXRhZGF0YWJvb2wBAAAACmJsdXJBbW91
bnRkb3ViAAAAAAAAAAAAAAAPZW1iZWRJQ0NQcm9maWxlYm9vbAAAAAAKZmlsZUZvcm1hdGVudW0A
AAAKRmlsZUZvcm1hdAAAAABKUEVHAAAADG5vTWF0dGVDb2xvcmJvb2wAAAAAC3Byb2dyZXNzaXZl
Ym9vbAEAAAAMem9uZWRRdWFsaXR5T2JqYwAAAAEAAAAAAAlab25lZEluZm8AAAAEAAAACWNoYW5u
ZWxJRGxvbmf/////AAAADWVtcGhhc2l6ZVRleHRib29sAAAAABBlbXBoYXNpemVWZWN0b3JzYm9v
bAAAAAAFZmxvb3Jsb25nAAAAADhCSU0PoQAAAAAALW1zZXQAAAAQAAAAAQAAAAAABG51bGwAAAAB
AAAAB1ZlcnNpb25sb25nAAAAAAA4QklND6IAAAAAAAhtczR3AAAAAjhCSU0EBgAAAAAABwAEAAAA
AQEA/+EP3mh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78i
IGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i
ZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBN
b24gRmViIDE5IDIwMDcgMjI6NDA6MDggICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRp
b24gcmRmOmFib3V0PSIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAv
IiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eGFwPSJo
dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2Jl
LmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu
MC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVu
dHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8x
LjAvIiBleGlmOkNvbG9yU3BhY2U9Ii0xIiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTQ3IiBleGlm
OlBpeGVsWURpbWVuc2lvbj0iNjUiIGV4aWY6TmF0aXZlRGlnZXN0PSIzNjg2NCw0MDk2MCw0MDk2
MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2NywzNjg2OCwzMzQzNCwz
MzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4
MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0MTQ4NCw0MTQ4Niw0
MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTczMCw0MTk4NSw0MTk4
Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0MTk5NCw0MTk5NSw0
MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAs
MjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7QzcwNDY0QTY0RjAzQzgxRjczMzQxMTA0M0NBQjYyMDMi
IHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlm
ZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiB0aWZm
Ok5hdGl2ZURpZ2VzdD0iMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4
MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0
MzI7MzA5OUY0MUU4RDJGMzk0NzI4MzBDOEE1M0Q3MkNCNDUiIHhhcDpDcmVhdGVEYXRlPSIyMDA4
LTA3LTMwVDA5OjAzOjQzKzAxOjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAwOC0wNy0zMFQwOTowMzo0
MyswMTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAwOC0wNy0zMFQwOTowMzo0MyswMTowMCIgeGFw
OkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1MzIFdpbmRvd3MiIHhhcE1NOkRvY3VtZW50
SUQ9InV1aWQ6Qjc0NDkxQjQwRDVFREQxMTlCNzZEOTQwMkM1RkY4RTIiIHhhcE1NOkluc3RhbmNl
SUQ9InV1aWQ6Qjg0NDkxQjQwRDVFREQxMTlCNzZEOTQwMkM1RkY4RTIiIGRjOmZvcm1hdD0iaW1h
Z2UvanBlZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9Ik5T
VjExMDdLIiBwaG90b3Nob3A6SGlzdG9yeT0iIj4gPHhhcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmlu
c3RhbmNlSUQ9InV1aWQ6MzI0OWI2MWEtNWU0Ny0xMWRkLWI4ZjUtYjA1NWI3OGU5ZTBiIiBzdFJl
Zjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZDZmNzY5YzYtNWUzZi0xMWRkLTgy
M2ItZmY5MDJkMzRkZjM5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBt
ZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDw/eHBhY2tldCBlbmQ9InciPz7/4gPgSUNDX1BST0ZJTEUAAQEAAAPQYXBwbAIAAABtbnRyUkdC
IFhZWiAH2AAGAAYACgAsAAxhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAA
AADTLWFwcGzsO9ZodZ+FzgglU8hS4oblAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5y
WFlaAAABLAAAABRnWFlaAAABQAAAABRiWFlaAAABVAAAABR3dHB0AAABaAAAABRjaGFkAAABfAAA
ACxyVFJDAAABqAAAAA5nVFJDAAABuAAAAA5iVFJDAAAByAAAAA52Y2d0AAAB2AAAADBuZGluAAAC
CAAAADhkZXNjAAACQAAAAGNkc2NtAAACpAAAANRtbW9kAAADeAAAAChjcHJ0AAADoAAAAC1YWVog
AAAAAAAAbBIAADnxAAACo1hZWiAAAAAAAABfmQAArmcAABO+WFlaIAAAAAAAACsqAAAXzQAAvMJY
WVogAAAAAAAA9DYAAQAAAAFqG3NmMzIAAAAAAAEY/QAACt///+lTAAAOKQAA/Xf///g////74gAA
BqwAAJNbY3VydgAAAAAAAAABAc0AAGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAdmNn
dAAAAAAAAAABAADRdAAAAAAAAQAAAADRdAAAAAAAAQAAAADRdAAAAAAAAQAAbmRpbgAAAAAAAAAw
AACggAAAV0AAAErAAACbAAAAJvcAABMbAABIgAAATAAAAjMzAAIzMwACMzNkZXNjAAAAAAAAAAlO
U1YxMTA3SwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAPAAAADGl0SVQAAAAQAAAA
xGZyRlIAAAAQAAAAxG5iTk8AAAAQAAAAxGVzRVMAAAAQAAAAxGZpRkkAAAAQAAAAxHB0UFQAAAAQ
AAAAxHpoVFcAAAAQAAAAxGphSlAAAAAQAAAAxG5sTkwAAAAQAAAAxGRlREUAAAAQAAAAxGtvS1IA
AAAQAAAAxGVuVVMAAAAQAAAAxHN2U0UAAAAQAAAAxGRhREsAAAAQAAAAxHpoQ04AAAAQAAAAxABO
AFMAVgAxADEAMAA3AEttbW9kAAAAAAAANKwAAESAAAA64rcblgAAAAAAAAAAAAAAAAAAAAAAdGV4
dAAAAABDb3B5cmlnaHQgQXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAA/+4ADkFkb2JlAGQA
AAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAEHBwcNDA0YEBAYFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAQQCTAwERAAIRAQMRAf/dAAQAE//EAaIAAAAH
AQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAAC
AQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRT
kqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2
hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqq
usra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEz
JDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWV
pbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkq
OkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9SfU7T/fEf8AwK/0w2UUHfU7T/fEf/Ar/TGytB31
O0/3xH/wK/0xsrQd9TtP98R/8Cv9MbK0HfU7T/fEf/Ar/TGytB31O0/3xH/wK/0xsrQd9TtP98R/
8Cv9MbK0HfU7T/fEf/Ar/TGytB31O0/3xH/wK/0xsrQd9TtP98R/8Cv9MbK0HfU7T/fEf/Ar/TGy
tB31O0/3xH/wK/0xsrQd9TtP98R/8Cv9MbK0HfU7T/fEf/Ar/TGytB31O0/3xH/wK/0xsrQd9TtP
98R/8Cv9MbK0HfU7T/fEf/Ar/TGytB31O0/3xH/wK/0xsrQXejD/ACL9nh0H2f5fl7YEv//Q9U4q
7FXYq7FULfatpVgAb68gtAdwZ5Uj9v2iMhLJGPMgMZTA5mltjrOj35Isb63uyNyIJUk/4iTjHLGX
IgrGcZcjaMybJ2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//9H1TirsVdirE/Pdx56aBbLyvZcjKtZ7
/wBSFCgrThGsjqeXi/H/AFfi+zh6o5qrGP8AO2cbUHJVQH+cwjy7+TmrahPJe+ariSBmarQpIss8
h/maWsij/h2/1cwMPZ0pG8hr/dOJi0MpG5ll6/lF5LQAwwzwzLulxHPIJFYftDciv+xzN/k7F0v5
uV+TxjkPtTbTV1fR5o7LULltR0+VhHa38gAnjc7LHcU2fl0Sb+f4H+0uWw4oGpHij/O/i/zv+KbY
gx2J4gn2ZLa7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0vVOKvB9f80+YNO/N3VvOQvpP8HeXLvTfLmr
2gY/VxBewmSe6ZdxztLu4teRVPU9Pmv2MCUf+bXnrUtA89yXtoXnTyz5eku7exV2EU2p6vex2Fmk
6KVDheLycW+JU5MnHlyxUJ5ZfkZo93pwn81anqer+ap153OuJf3UDQzn4v8AQ4onjggiievoJ6P+
vy+zitr0j87aN5V0bS/Meoi91GFJI73UbcsROFlYQlmZYmaT6v6fqVHxS8/t/bwoKb+XDINRaa11
L1rKNS08ExcScePXgQV+Fv2lbFV3lEz6lcag91I8kDJwMbMxUeqSfh32oFwEAikc2YKCFAJqQNz0
qcKW8VdirsVdirsVdirsVdirsVdirsVf/9P1FbXPqSTQvQTQt8Sj+RqmNhXsV2r/ADq/8uRjK7CA
WB+RvIdxL5J8xad5rs/q9z5u1DVL3VbIPHIY0vZGjjVZIzInJbZISjcm4f6y5JkwbRPyi/MXUPJv
m6DzDJFb+aZ5NMg0G7LrLHKnl5UNpcsUZ2QXcnqep6n71PUdmiwLbLdQ86fmvqeiNpOmeR7vSvM9
yhgk1G7ubM6ZaM44tcJNHK80/p15pGtvybCqdponmrSbHTrRbuTXI7a2hhupLo82nljjCSSSByWP
qsPU+03xYoK2z8u6xW9vTbLbySxukFqhVd5RxNN6KqgnqcVa0vT/ADlpkbx2tqgWQ8m5NETUCn8+
KE188X2rad5B1vUbK5+rarp+nT3cM4RHAmt4TLQo4ZSjsnF/8hvg4t8WKXlk3/OQup6Kt7FrOmJc
arpFvDBrGmxy+iY72D6893LF8Ess0U8FtazwcU9KKKdXnniTnJgtlSJ1j86/M2jSfpHVrG3XTbW+
1u0e1spTI8/6NIihR2mij9H94VYyoz8/99J9jG1ARf8A0MBcrr1xo7eW+T6dcNbatPHegpEU1GLT
2aLlChnHO5ikX+6/bRuDJja0o+Wvzs1HzV5/8v6VZW506wlnvI7+EPHcpcxfUWubaRZfTQrxZP8A
dDtE/L+9mXG1I2Rl5+YfmG0/xX5mn1BV0vytq76WfLaQRH6xGYoUhdrhis0EklxcCT1fjhWBf953
+3itMT1/89vMlr50dVkktdL0y7t7bWdKjSC5UvDNqMV2ttO0UU0iSpZQvEz+nIr8l+D7ONqAn8//
ADkPqMOnQXT+U3jkms49TVZb5UjexnmtbaGWJxAzSM097wkQxR+n6Lsryco+Ta0zD8vfzG1Lzpp9
7qFtoL2VmqudKup5wYrl0llhaOQiPnA6PEvqcY5+KyftOvDFBDzzy5+evmTSvL0Nz5jtl1meaDTL
mWdJY4DG+sWMlzbQxpHboJI/9GYysfjt/X4crpIWmxtNW9f8k+YL/wAxeV9P1y9079FvqMKXMVp6
y3BEMqh4mLqqCrIwYrx+HCxKeYq//9T0trOlXF1wutPuPqeqQAiGcryRlO5imX9uJv8Agk+0mU5c
ZO8TwyH44ZMJxJ5bFjV7598x6QDHrHlm4Z12+tWLetbv7g8fg/1X+LMWWrnD6oH/ADfpaJaiUfqi
f831MR1v8xvO3mFGsNB0q4s4pPheSFXknI/4yBVEQ8afF/l5h5dbly7QBj/unFyanJPaMSGSeQfI
/mW0nTU/MepXDyJvDp31h3UN/NKeRVqfyD4cytJpZg8Uyf6tt+mwTG8yf6tvQs2TmuxV2KpH561e
HR/J2s6nPpraxBa2krzaWih/Xj40eNlIcemVP7z4H/d8vgb7OKh5vrnn38qL7y9ca5qmj6Frmt3F
m2ox28EbahDOkKyxw+tfNY/uHYRzW6fWoY/Tf1IcCaTG38+/kXc2b6pPb2Mct6ZjqJbTJWcNJHCL
l7hjb8vReO8t1kupuNvNHMn7xlxXdbJ5v/KmO90rT/L2i6bfNeX0OnSotqLQRwTXch+sQc7fhdwp
f2hLei3p/WFWX1OfHFNFMdKufIeh+ZvM8L+W9L0C38p21rqX6Zt4oVLRXsU4kk4xwo8LotvJG3F5
GlV8KEDP54/5x91u8/Sd5Hpt5dXQaGXUbzTHJ/dxyAxT3E1v+7PpRS8I5nRpI/7tWVsC0Up0v80f
yTiu7htQ0rT9Ht7C6ih0O6Ony+pPGIUvFnWE2kU1osbagTV14cp3lSXjNyZXdJPOF1+Qur6X9d0e
Bnk0+C8u7PRrKwmsLa5eykimuH9RrCX6u3O3jt5b2H0vh5W8k38ikWyfSvzi/K7Tfq+qWljDpQ1i
KW78xXMVlcwzRywW8V0TIqWivefBeK/r/Z9KT105o+KKZfoNn+Wnma2TUNM0mxuV0zlpKNNp4hmt
Vt1MbWvpzxRzQJGkjL6XBE9OT4fgfCrKba2trW2itbWJILaBFiggiUJGkaDiqIq0VVVRRVGKFTFX
/9X1TirsVdirsVdirsVdiqG1Kye9sZbVLqayeQUW6tiqzRkEEMhdZE7fto6/zLirAoPyM8r29zqV
3bahqMF5rcF1ba9cJJbj69HeMzSetGYDDGyl29NraKDh/wAFim195+Rvk66kvHaa+jOomVb8RyoP
WgnjtY5bZ/3ZPov+j7dvg4y8vU4y8X44KW1TTvyT8n2GpWuoRS3jyWEyS6fG8iFIFjuprz0UpGrN
GZ7mRm9VpJfsL6vFcaXiRnmX8rNF8wX+q3N3f38Nvrltb2esWFtJFHDcQ2hkMSsxia4SnrycvRnj
9T7L8lwraT6v+QnlXW7uxu9c1PVNUlsIEtYzcy29WhjWRVVmSBH+zO4dkZGm+F5vUkRXwUtq2l/k
foGl31tqdlrGrR6vaOTDqRmt2l9M2sNmYWUwGF4jBawL8UXPlHzV+WNLbtT/ACK8naloemaJcT3n
1DSjdNbBWtxLyvHkeQmYwmZfilb4InjjdeKzJLjS2l/mv8gdB1LTdR/Rt1PDq1zZSWlrJcOrQKXs
INPBdVTmR6NpEdj/AHnNv8jGltnXlPylp/lmyura0nuLqS+u5b+9u7t1eaa4npzdiixoPhVVCoir
xXCpKd4odir/AP/W9U4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//X9U4q7FXY
q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//Z

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/images/Login.gif

R0lGODlhNgAWANUAAPj4+cHGzrrAycHHz8DGzrnAyba9xrS7xMDHz77Fzb3EzLzDy8HHzsDGzbG6
w7e/x8HIz8DHzr/GzaanqKChovj5+vf4+fLz9Ozt7uHi49vc3dXW18/Q0cPExb2+v7e4ubKztKyt
rrjAx7W9xMDHzfj5+f7+/v39/f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAAAAA2ABYAAAb/wJPw
ZDIRj8Xi8LhsIp1I5fNEkBqJSeNVKB1mr8outClhmACAinrNbrvf8LjaEmlATvK8fp+uABoRdyV9
e4WGJRYVJQ0SCHiJcR0fhhsUhmpoEg0DJ4RwkpeXJaMldZx+cqAVHhQUHxdqHK0flpUVGBQdrRxw
aGoSEQF4eaAdIRgXIB4VGRQZybWWuJOysG+Jf3UmiqmTE7wVGhQXHcvh0bfO6RlvABZpJIzD3RUU
G2rNGB8d+Oi47P/ySCCR4EQJYt7AiSNnTlwFWwEDurFAkU4DBdsQVjCGDMSkZs9A+FMn0Q2AgxEi
KDgBKdKkVbOsyaIAYsJDaSTVtYPXYME2c0+h1nh4eSnNQUAC5gVlNqEVCAxBDx5tUIDl0qsmUTES
0aklVqzuSsR7YNDr16AUR8UzcObs1z4WGjQYYUJuSkCAImiKJ1eTJrmM8tbRWwdwhHiEAWkarJfR
AQl+8ypeDIhvXhKF78olYfnv4cGAQ+N1EAQAOw==

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/images/rssicon.jpg

/9j/4AAQSkZJRgABAgEASABIAAD/4QQARXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp
AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dz
ADIwMDg6MDc6MzAgMDk6MDQ6NDEAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAAAE6ADAAQAAAAB
AAAAEQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA
AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAALKAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG
AAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL
CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN
Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwM/8AAEQgAEQATAwEiAAIRAQMRAf/dAAQAAv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH
CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh
EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi
ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE
BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy
gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX
Z3eHl6e3x//aAAwDAQACEQMRAD8A7S66/I6jkssyraK6Ttr9Odo/r7ELJGfiAPdkvsqd9Cxr3Qfx
RvUFGfm2m70SHEtb2ef3Sh5OdgWUXV+o1jb6vUDP3bh2H9ZZMxxifrMZ8U6PFW0jX6TpRsGNRuFR
v0+Gv6KT9p5Xo79+v2T1Pn6vpbv8xJZ0v+zfRM/s2eP+7CSs8U+5/wBz8X+H+9/eYeCPYf7o4P8A
B7P/0PVUl8qpJKfqpJfKqSSn/9n/7RAWUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAgAC
ADhCSU0EJQAAAAAAEEYM8okmuFbasJwBobCnkHc4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQAC
OEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAA
HjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAA
AAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEA
WgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP//////////////////
//////////8D6AAAAAD/////////////////////////////A+gAAAAA////////////////////
/////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQAAAAAAAACADs4QklN
BAIAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNBDAAAAAAAEsB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEAOEJJTQQtAAAAAAAGAAEAAABCOEJJTQQIAAAAAAApAAAAAQAAAkAA
AAJAAAAABf//8GAA///zIAEAAAaAAf//96AB///5AgEAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAA
AAAC9gAAAAgAAAAQAAAAAQAAAAAAAG51bGwAAAADAAAACGJhc2VOYW1lVEVYVAAAAAUAVQBzAGUA
cgAAAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExl
ZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAABEAAAAAUmdodGxvbmcAAAATAAAABnNsaWNlc1ZsTHMA
AAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURs
b25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAA
AFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJj
dDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAARAAAA
AFJnaHRsb25nAAAAEwAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VU
RVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhj
ZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAH
ZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAA
C2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNl
dGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAA
AAtyaWdodE91dHNldGxvbmcAAAAAOEJJTQQoAAAAAAAMAAAAAT/wAAAAAAAAOEJJTQQUAAAAAAAE
AAAAXThCSU0EDAAAAAAC5gAAAAEAAAATAAAAEQAAADwAAAP8AAACygAYAAH/2P/gABBKRklGAAEC
AABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsR
FQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0Q
Dg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
/8AAEQgAEQATAwEiAAIRAQMRAf/dAAQAAv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkK
CwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEF
QVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKz
hMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAME
BQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcm
NcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eH
l6e3x//aAAwDAQACEQMRAD8A7S66/I6jkssyraK6Ttr9Odo/r7ELJGfiAPdkvsqd9Cxr3QfxRvUF
Gfm2m70SHEtb2ef3Sh5OdgWUXV+o1jb6vUDP3bh2H9ZZMxxifrMZ8U6PFW0jX6TpRsGNRuFRv0+G
v6KT9p5Xo79+v2T1Pn6vpbv8xJZ0v+zfRM/s2eP+7CSs8U+5/wBz8X+H+9/eYeCPYf7o4P8AB7P/
0PVUl8qpJKfqpJfKqSSn/9k4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8A
dABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADMAAAAB
ADhCSU0PoAAAAAAGKm1vcHQAAAADAAAAAQAAAAAAAAAHAAAAAQEAAAAAAQAA//////////8AAABk
AAAAAf////8AAAAAAAAAAQAAAAAAAAABAAAAAP////8AAAAABP////8AAAAA/////wAAAAD/////
AAAAAP////8AAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAGoAAAAEAAAAAEAAAAAAA5UYXJnZXRTZXR0aW5ncwAA
AAoAAAAATXR0Q09iamMAAAABAAAAAAAKTmF0aXZlUXVhZAAAAAMAAAAAQmwgIGxvbmcAAAD/AAAA
AEdybiBsb25nAAAA/wAAAABSZCAgbG9uZwAAAP8AAAAAT3B0bWJvb2wBAAAAAFFsdHlsb25nAAAA
ZAAAAAthZGRNZXRhZGF0YWJvb2wBAAAACmJsdXJBbW91bnRkb3ViAAAAAAAAAAAAAAAPZW1iZWRJ
Q0NQcm9maWxlYm9vbAAAAAAKZmlsZUZvcm1hdGVudW0AAAAKRmlsZUZvcm1hdAAAAABKUEVHAAAA
DG5vTWF0dGVDb2xvcmJvb2wAAAAAC3Byb2dyZXNzaXZlYm9vbAEAAAAMem9uZWRRdWFsaXR5T2Jq
YwAAAAEAAAAAAAlab25lZEluZm8AAAAEAAAACWNoYW5uZWxJRGxvbmf/////AAAADWVtcGhhc2l6
ZVRleHRib29sAAAAABBlbXBoYXNpemVWZWN0b3JzYm9vbAAAAAAFZmxvb3Jsb25nAAAAADhCSU0P
oQAAAAAALW1zZXQAAAAQAAAAAQAAAAAABG51bGwAAAABAAAAB1ZlcnNpb25sb25nAAAAAAA4QklN
D6IAAAAAAAhtczR3AAAAAjhCSU0EBgAAAAAABwAEAAAAAQEA/+EP3Wh0dHA6Ly9ucy5hZG9iZS5j
b20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRj
emtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRv
YmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6NDA6MDgg
ICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y
Mi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOmV4
aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMu
YWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x
LjAvIiB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6
c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHht
bG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9w
PSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiBleGlmOkNvbG9yU3BhY2U9Ii0x
IiBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTkiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxNyIgZXhp
ZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYz
LDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0
ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1
LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQx
NDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkw
LDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgs
OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtE
MTlCODhDQUY3NTU3NjREOTk5NTIyNjE1MDgxMUE5QiIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlm
ZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAw
MDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRpZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1
OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5
LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjtCMkZFRjZDMUQ5NkQ0MkJCNjBBMEJB
QzEyRkQzNjRGMiIgeGFwOkNyZWF0ZURhdGU9IjIwMDgtMDctMzBUMDk6MDQ6NDErMDE6MDAiIHhh
cDpNb2RpZnlEYXRlPSIyMDA4LTA3LTMwVDA5OjA0OjQxKzAxOjAwIiB4YXA6TWV0YWRhdGFEYXRl
PSIyMDA4LTA3LTMwVDA5OjA0OjQxKzAxOjAwIiB4YXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rv
c2hvcCBDUzMgV2luZG93cyIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDpCQjQ0OTFCNDBENUVERDEx
OUI3NkQ5NDAyQzVGRjhFMiIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDpCQzQ0OTFCNDBENUVERDEx
OUI3NkQ5NDAyQzVGRjhFMiIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JN
b2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iTlNWMTEwN0siIHBob3Rvc2hvcDpIaXN0b3J5
PSIiPiA8eGFwTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0idXVpZDozMjQ5YjYxYS01
ZTQ3LTExZGQtYjhmNS1iMDU1Yjc4ZTllMGIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lk
OnBob3Rvc2hvcDpkNmY3NjljNi01ZTNmLTExZGQtODIzYi1mZjkwMmQzNGRmMzkiLz4gPC9yZGY6
RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/iA+BJ
Q0NfUFJPRklMRQABAQAAA9BhcHBsAgAAAG1udHJSR0IgWFlaIAfYAAYABgAKACwADGFjc3BBUFBM
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbOw71mh1n4XOCCVTyFLihuUA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnJYWVoAAAEsAAAAFGdYWVoAAAFAAAAAFGJY
WVoAAAFUAAAAFHd0cHQAAAFoAAAAFGNoYWQAAAF8AAAALHJUUkMAAAGoAAAADmdUUkMAAAG4AAAA
DmJUUkMAAAHIAAAADnZjZ3QAAAHYAAAAMG5kaW4AAAIIAAAAOGRlc2MAAAJAAAAAY2RzY20AAAKk
AAAA1G1tb2QAAAN4AAAAKGNwcnQAAAOgAAAALVhZWiAAAAAAAABsEgAAOfEAAAKjWFlaIAAAAAAA
AF+ZAACuZwAAE75YWVogAAAAAAAAKyoAABfNAAC8wlhZWiAAAAAAAAD0NgABAAAAAWobc2YzMgAA
AAAAARj9AAAK3///6VMAAA4pAAD9d///+D////viAAAGrAAAk1tjdXJ2AAAAAAAAAAEBzQAAY3Vy
dgAAAAAAAAABAc0AAGN1cnYAAAAAAAAAAQHNAAB2Y2d0AAAAAAAAAAEAANF0AAAAAAABAAAAANF0
AAAAAAABAAAAANF0AAAAAAABAABuZGluAAAAAAAAADAAAKCAAABXQAAASsAAAJsAAAAm9wAAExsA
AEiAAABMAAACMzMAAjMzAAIzM2Rlc2MAAAAAAAAACU5TVjExMDdLAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABtbHVjAAAAAAAAAA8AAAAMaXRJVAAAABAAAADEZnJGUgAAABAAAADEbmJOTwAAABAAAADE
ZXNFUwAAABAAAADEZmlGSQAAABAAAADEcHRQVAAAABAAAADEemhUVwAAABAAAADEamFKUAAAABAA
AADEbmxOTAAAABAAAADEZGVERQAAABAAAADEa29LUgAAABAAAADEZW5VUwAAABAAAADEc3ZTRQAA
ABAAAADEZGFESwAAABAAAADEemhDTgAAABAAAADEAE4AUwBWADEAMQAwADcAS21tb2QAAAAAAAA0
rAAARIAAADritxuWAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21w
dXRlciwgSW5jLiwgMjAwNQAAAAD/7gAOQWRvYmUAZAAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkL
CAYGCAsMCgoLCgoMEAwMDAwMDBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQcHBw0MDRgQ
EBgUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/
wAARCAARABMDAREAAhEBAxEB/90ABAAD/8QBogAAAAcBAQEBAQAAAAAAAAAABAUDAgYBAAcICQoL
AQACAgMBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFB
UQYTYSJxgRQykaEHFbFCI8FS0eEzFmLwJHKC8SVDNFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkK
GBmElEVGpLRW01UoGvLj88TU5PRldYWVpbXF1eX1ZnaGlqa2xtbm9jdHV2d3h5ent8fX5/c4SFho
eIiYqLjI2Oj4KTlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+hEAAgIBAgMFBQQFBgQIAwNtAQAC
EQMEIRIxQQVRE2EiBnGBkTKhsfAUwdHhI0IVUmJy8TMkNEOCFpJTJaJjssIHc9I14kSDF1STCAkK
GBkmNkUaJ2R0VTfyo7PDKCnT4/OElKS0xNTk9GV1hZWltcXV5fVGVmZ2hpamtsbW5vZHV2d3h5en
t8fX5/c4SFhoeIiYqLjI2Oj4OUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6/9oADAMBAAIRAxEA
PwDrt7e6hqHmfVYLjVrqwt7R/Tt/qwf0wB3kCfrznM2aU80wZyxiHLgvh/zuF6XFihDBAiEckp/V
x1xf5vEhdVXzDpSpLJqs9xay7w3Mc8hRvbrsfbNfqpanFR45ShL6Zxl6XK04wZbHBGMh9UJRCP8A
8V6t9Q9b6wef6I+sV/y/rno8/wDW4d8z/wA9l4bv/Icf+f4nBxf6Vw/yOPiqv8twf5vhcf8Aun//
0OwC5Sw8xa7dNfGydZGaOMiqzEdFIPXOVlk4NRkPF4ZH0/7Y9OMfHgxx4fE/3iH1TX/L1xYX1v8A
WYoob60+srDU0ivEP2VHbl4Zbx4pRkLAGSPHw/zMycWnzRnE0Scc+Di/n4Ui5z/omnptX/DXOlD1
/SVf1ZXw+j/kh/0+crbxP+tn/pw//9H1TirsVdir/9k=

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/Uploads/ImageLibrary/geraldhaighleft.jpg

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

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/Uploads/ImageLibrary/one.gif

R0lGODlhNQAwALMAAK3Yr4XFhqDSoWm4bEGkQ9bs17vfvHe+efH58pLLlOTy5E6rUTOeNv///wAA
AAAAACH5BAAAAAAALAAAAAA1ADAAAAStsMlJq7046827/2AojmRpnmiqrmyrCQwDuCIQyzRo33Pe
wTecT4M4BGO94cVAOCKVFoXR+YRKEAlqMAkNaLdWifdbtY5jBMC53L0FxEeu0jsoTNZCq8BQwcvD
d3GAF36DFoWGFIiJcGCMjTyPkGyJi4yWlYKSmIacg56AoBUFUwQCK6ITBU4DKqkSA1R8KK8NC1Sn
tJoasU6zJ7UFTUGtKbUNBWOmkszNzs/QiREAOw==

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/Uploads/ImageLibrary/two.gif

R0lGODlhNQAwALMAAPH58qDSoeTy5E6rUUGkQ8nlydbs15LLlGm4bK3Yr4XFhrvfvHe+eVyxXjOe
Nv///yH5BAAAAAAALAAAAAA1ADAAAATm8MlJq7046827/2AojmRpnmiqrmwrAQHizHMQuBug0Dyv
CDiLYdAr0grBicHInCGDAEKTSQAEdz2FYZJoFG84gOxoARB5jeTjMFtgAkX1Y8HIFIpWuR2vz8B5
BH0ZYzR1ghYCRQmHFlg0VYwUiT0HkRQMPQRAlg8JX5wPAlI8A6APXj1Pln88lZxLPQN5lmc8qpFs
lKALRbKcZkW3jJi6nJ6xs4yiwSIGxARgIqitzUUIIqxTRpsThDxuH7DaTNwStTzRHefjPeUP3jTg
Hcfs2xUGozTXH/T17UJYoJkaSLCgwYOWIgAAOw==

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/Uploads/ImageLibrary/three.gif

R0lGODlhNQAwALMAAKDSocnlydbs11yxXmm4bEGkQ06rUa3Yr/H58rvfvOTy5He+eYXFhpLLlDOe
Nv///yH5BAAAAAAALAAAAAA1ADAAAATx8MlJq7046827/2AojmRpnmiqrmwrAYAjywOQuBrSzDxf
HDhLoNArzgiI4ORgbDoIysnCaQRGEQYZQLEcFAdRiQB58fa44UygGEhnEGx3Ji4XFpP1ivmYpwD2
MwJ5a04AfYRGhodNiotNC30PiEYDeJEAWT1gkRMMRVacDwQ9BqESkzKCpkU3ppkzoJxEPLF9CqxR
C5YWMT2qODEGvxSoDqUYAlMOBY0ftzMMbac7Rc0UAkVQIKNURccX3D2tHUzdPQXDFa881hoCgN0D
aBjhPOMeALNOzBwC+jLaRCT404OAjQ8CPC1rZ6qhw4cQI6aJAAA7

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/Uploads/ImageLibrary/four.gif

R0lGODlhNQAwALMAAE6rUYXFhmm4bKDSoUGkQ9bs1/H58q3Yr+Ty5FyxXrvfvMnlyXe+eZLLlDOe
Nv///yH5BAAAAAAALAAAAAA1ADAAAATN8MlJq7046827/2AojmRpnmiqrmzbIYTjuKIByDMNJniu
d4ye76dpCIfEy+CITFIUzKbzUYhKkzDrlGKzXn+CnuDW20oCvUS3vF3iAIgHGbc99AgFyVw2XQgX
E3tfKwUxOAcUglh7AxWKPwY8OAEWjzphOAIXli5oOGqbQjpuXqWUKn6lqqcpdqqmK66vVqwosrNM
tWacZomivZW/GAVBDgSNLrwUVUKaLcoTmEIKz8LBR8gr0BLSPdQs21SGmcnWFgWex8Dr7O3u7/Aj
EQA7

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/Uploads/ImageLibrary/five.gif

R0lGODlhNQAwALMAAMnlyaDSoU6rUWm4bNbs10GkQ5LLlK3Yr/H58ne+eeTy5LvfvFyxXoXFhjOe
Nv///yH5BAAAAAAALAAAAAA1ADAAAATn8MlJq7046827/2AojmRpnmiqruwKOHAszzHQUi+ty/Yt
5btdzwcM0oa3opHn+80GTY8SGuVMq9YndnPdZpSCwMwQ8D6UxjIWbaRG2cZEFW48vGcBxCQgoAmi
Cn0OA3oVCAw0C1UGbhYENAZmGIgyjZITBjN/lxViMpucEweaoRSeMaClpzAMpRMJM3KuDwV4UQgD
ChmrMARRnnaOtZ8ZBLAOBWohgg5hhQSZNMGONJYco0ukGAM6ih/M2ci6GOAxyh28RgK+GdyJIQoN
2ZEbBMMx1h8B0THJ5/XykP2bRbCgwYMIvUQAADs=

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://static.delicious.com/img/delicious.small.gif

R0lGODlhCgAKAJEAAAAAAP///zJ00NPS0iH5BAAAAAAALAAAAAAKAAoAAAIXjC2Zhyoc3GMSSoDx
2DtrPngAGHqkSBYAOw==

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://cdn.stumble-upon.com/images/24x24_su.gif

R0lGODlhGAAYAPcAAP7+/v3+/gDNVPv+/P7+//7////+/wbLWCuo1Pz9/fv8/LjsyPr7/QXLV9Dr
6/f6+mjSk5bcrDms1Pz9/tLn79Dn8tHn8C7EbiTLZjShxCHKZADIS93u9R2hz/P59iqm0ez2+O35
8NDo8oTH4x2/YMLg7QCVyACXy8vm8cjs1czn9Pr9/L/g7ybUatny4JXhr+r27wWZzO758kjKfjut
1CKfxwO2SYjgruT17NLw3yiawJ/mt/f6+xnHYr7py0202QDDSZXerUnSfBG6VpzdtOz19FDZiev2
8ADJUdDm7zqr0pHK4B+hzUOw2Kza61e42ySYwSekz7LoyNzq8g/MXOjy+Pb5+7XnxfT4+wXRWqzV
57fd7R25UonXoxuRu2mxzrzc6uz38QDNUwSFtI7O5krHeDefxS+cwy6cwgSazTqs1bbrx/r7/P39
/RG8TADMTKLgteTw9sHj7iuq1Oz0+YHH4tns9d/u9NPo8vr8/dno8QDPVQaczej47T6u1vj7/eT2
6QW/SGS723HYltXt7QaYyjrGdpbjsPr8+yen05vP5ASUxRmbx8Xk8ACXyLvg7Y/brPX6+c7p7Q7R
XWS72iyfyM7m7mbSkmXclAHKVHa82Jjdr9Hq7uLw9hydyWrTlK/pyNvt9XS61dnr9YPiq4C/1+L0
6uv19djx48Xo1JflsXDfm7Xrxvf7+bjX5p3kuxK5S/r8/j6v1YjZpVK12+7z+JHis7rrzvH39Zbo
svz+/ZHirADKVC/VcLzszPX5/LHowvP79/39/kWgwwDQVwGWya/a7CzHbqbR41Gz1gCYy6eprP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAYABgA
AAj/AJkJXEawoMGDBQUOXKawocOHBAc+nDiRIUOKAALoClDAQMWLDQFEQgXqBilbt0whKuAwYkhc
Uoy0yEJsUi9MORS0BMmMAI5Ve8QIGDr0TS4ebBq6ZGbgwSsqmRocONCAF5INqgbo0blQYZtUGITs
WLNgAatdGoAcGvBlisKlrSD18AWCQhILd4INCvRiwDBXALoKDDPjWB8wGbyM0REHmJsgA9CUmiCY
GYwLJFKcsoTMDJRQV2BFGHBGVJ7KRwzZGFKmSwgtNez44AJnRSVNsSp7IALh0qdNMhQxYgFolgsO
npYEqJygCCEHDiQ5UbIo2SNOcigxKUGgcoFaI/zIZJLQoZgJR1FofCgkiM5bngy2IFBGvz79GE1E
CHvvEIsxNWnYdwIftDSSgFI8MQOAFSjU8QMCiczxBBmjMLDTRAH80kkFKuBRxR+BXUhRTwF0R5FF
I6bIzEVLqYggggjFmJBAAQEAOw==

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://bsf.ncsl.org.uk/images/search.gif

R0lGODlhPwAWAOYAAGAANV8ANVkAMlgAMV4ANVcAMVYAMTIAMjEAMTIAWTEAWDEAVzEAVgAAXgAA
WQAAWAAAVwAAVgAAMQAxel6o61ec2laZ1lmd3TF7vDWEyTJ9vgBeqABZnQBXmnq52IbO74XM7YTK
7Hu8232+3Xu72nm41jFWVp3d3Zzb25rY2Kjr65za2pnW1rnY2ImKil5eNd3dne/vqu3tqezsqNvb
nNjYmoSEXuvrqNranNbWmevrydvbvNjYud3dvtbWuOvJhNu8e92+fdq7e9i5ep1ZAJpXAL59Mrl6
Mbh5MeuoXtaZVtiaV92dWYQ1AH0yAHoxAHkxAHsxAF4AAFkAAFgAAFcAADUAADEAAP////z8/Pv7
+/r6+vb29vX19fT09PPz8/Ly8vHx8fDw8O/v7+3t7ezs7Ovr6+rq6ujo6OTk5OLi4t3d3dvb29ra
2tjY2NbW1tTU1NLS0tHR0c/Pz5OTk5GRkY+Pj4qKioiIiHd3d3V1dXBwcAAAAP///wAAAAAAACH5
BAEAAH0ALAAAAAA/ABYAAAf/gFh0eXuFhoeIiYqLjI2FeXRYLnVoWZaXmJmam5ydnpZodS56Z1tg
p6ipqqusra6vp1tnentZsLe4ua5ZhVphv8DBwsPExcbHwVq9YszNzs/Q0dLT1M7Ke1pj2tvc3d7f
4N8xAB/h3NdbZOrr7O3u7/DvMgEg8exbhVtl+/z9/v8AAwKcQSCEwH749mwxw7ChwyR8IlJgqKNJ
xA0Nf1iJyGfiDQIvGqi4IUWimY82ImZwyNJMQi5rYsqUGSTBiTVMHNwkoiGmEQ5rYEy5EDPnCaE9
ezgBGuTACKFMbc6cyqUQzKkykc6EIWBEzJo3Z4Ll6pXs1q5B0WKNWXUPFzZw/+PKpUElIgY2QK5w
5CNBBJsdUTg+QEFjgF8gClDMNcymsF+5cttyaUO5suXKQhCQwFGAxGUcVSpQFrJgBWfPpy2nTn25
ctsubmLLlr1kQgs3QxakcFOkQ+wlEFLUKOAh9pHgw4vzeOJ7CAIPyd1Enz27S6Eub7Jr346Eo4Xs
PqBEjMAiuxKOJhiwyGGgBHjxfL6zdz9/u33re7zA2c+/v///AAYo4ID9eVGIF3EkqOCCDDbo4IMQ
RriggXt8IceFGGao4YYcdujhhxl+sYceapQxx4kopqjiiiy26OKLJ5ahhh532JHGFzjmqOOOPPbo
449A4piGHXdggQctjiSp5AiSieiBBxaBAAA7

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://bsf.ncsl.org.uk/css/bsf.css

BODY {
	MIN-WIDTH: 1023px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; FONT-FAMILY: verdana, arial, helvetica, sans-serif; =
FONT-SIZE: smaller; PADDING-TOP: 0px
}
#wrapper {
	PADDING-LEFT: 155px; PADDING-RIGHT: 165px
}
#wrapper2 {
	PADDING-LEFT: 10px; PADDING-RIGHT: 10px
}
#header {
	WIDTH: 100%
}
#header .banners {
	MARGIN-TOP: 5px; HEIGHT: 71px; CLEAR: both; BORDER-TOP: gray 1px solid
}
#header .loginbox {
	WIDTH: 100%; BACKGROUND: #a0a6b1; HEIGHT: 50px; COLOR: white; CLEAR: =
both; FONT-SIZE: 0.8em
}
#header .loginbox .textboxes {
	WIDTH: 20em; FLOAT: left; MARGIN-LEFT: 10px
}
#header .loginbox .textboxes LABEL {
	TEXT-ALIGN: left; MARGIN-TOP: 4px; WIDTH: 20em; DISPLAY: block; FLOAT: =
left; CLEAR: left
}
#header .loginbox .textboxes INPUT {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; MARGIN-TOP: 4px; =
WIDTH: 10em; BACKGROUND: #cad0db; HEIGHT: 15px; COLOR: black; =
BORDER-TOP: medium none; BORDER-RIGHT: medium none
}
#header .loginbox .login IMG {
	MARGIN-TOP: 1em; FLOAT: left; MARGIN-LEFT: 10px
}
#header .left {
	FLOAT: left
}
#header .right {
	FLOAT: right
}
#header #subheader {
	PADDING-LEFT: 5px; HEIGHT: 20px
}
#header #subheader A {
	COLOR: black; TEXT-DECORATION: none
}
#header #subheader A:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
#leftmenu {
	POSITION: relative; PADDING-BOTTOM: 10px; PADDING-LEFT: 5px; WIDTH: =
150px; FLOAT: left; MARGIN-LEFT: -100%; RIGHT: 155px
}
#wrapper > #leftmenu {
	LEFT: -150px
}
#leftmenu DT {
	BORDER-BOTTOM: #336633 1px solid; MARGIN: 17px 0px 5px; WIDTH: 140px; =
DISPLAY: block; COLOR: #336633; BORDER-TOP: #336633 1px solid; =
FONT-WEIGHT: bold
}
#leftmenu DD {
	MARGIN-LEFT: 0px; FONT-WEIGHT: bold
}
#leftmenu DD A {
	COLOR: black; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
#leftmenu DD A:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
#leftmenu LABEL {
	DISPLAY: block; FONT-WEIGHT: bold
}
#leftmenu SELECT {
	BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: =
140px; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid
}
#leftmenu INPUT.textbox {
	BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; MARGIN-TOP: =
3px; WIDTH: 70px; HEIGHT: 15px; COLOR: black; BORDER-TOP: gray 1px =
solid; BORDER-RIGHT: gray 1px solid
}
#rightlinks {
	POSITION: relative; PADDING-LEFT: 10px; WIDTH: 150px; PADDING-RIGHT: =
5px; FLOAT: left; MARGIN-RIGHT: -165px
}
#rightlinks DT {
	MARGIN: 20px 0px 3px; WIDTH: 140px; DISPLAY: block; COLOR: black; =
FONT-WEIGHT: bold
}
#rightlinks DT A {
	COLOR: black; TEXT-DECORATION: none
}
#rightlinks DT A:hover {
	COLOR: #929292; TEXT-DECORATION: none
}
#rightlinks DD {
	BACKGROUND-IMAGE: url(../images/arrow.gif); MARGIN: 0px 0px 5px; =
PADDING-LEFT: 10px; BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: =
left 0.4em
}
#rightlinks DD A {
	COLOR: #0000aa; TEXT-DECORATION: underline
}
#rightlinks DD A:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
#sitemap {
	POSITION: relative; PADDING-LEFT: 10px; WIDTH: 150px; PADDING-RIGHT: =
5px; FLOAT: left; MARGIN-RIGHT: -165px
}
#sitemap DT {
	MARGIN: 20px 0px 3px; WIDTH: 140px; DISPLAY: block; COLOR: black; =
FONT-WEIGHT: bold
}
#sitemap DD {
	BACKGROUND-IMAGE: url(../images/arrow.gif); MARGIN: 0px 0px 5px; =
PADDING-LEFT: 10px; BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: =
left 0.4em
}
#sitemap DD A {
	COLOR: #0000aa; TEXT-DECORATION: underline
}
#sitemap DD A:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
#content {
	POSITION: relative; MIN-WIDTH: 703px; WIDTH: 100%; FLOAT: left
}
#content H2 {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #336633; =
FONT-SIZE: 1.45em; FONT-WEIGHT: bold
}
#content H3 {
	FONT-FAMILY: georgia; COLOR: #336633; FONT-SIZE: 1.2em; FONT-WEIGHT: =
bold
}
#content H3 A {
	FONT-FAMILY: georgia; COLOR: #336633; FONT-SIZE: 1.2em; FONT-WEIGHT: =
bold; TEXT-DECORATION: none
}
#content H3 A:hover {
	COLOR: #929292; TEXT-DECORATION: none
}
#content IMG.right {
	FLOAT: right
}
#content A {
	COLOR: #0000aa; TEXT-DECORATION: underline
}
#content A:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
#content .article {
	BORDER-BOTTOM: gray 2px solid; MIN-HEIGHT: 95px; MARGIN-BOTTOM: 5px
}
#content .article IMG {
	FLOAT: left; MARGIN-RIGHT: 10px
}
#content .article .details {
	MARGIN-LEFT: 117px
}
#content .article .details H4 {
	MARGIN: 0px; FONT-SIZE: 100%; FONT-WEIGHT: bold; TEXT-DECORATION: =
underline
}
#content .article .details A.titleLink {
	MARGIN: 0px; COLOR: black; FONT-SIZE: 100%; FONT-WEIGHT: bold; =
TEXT-DECORATION: none
}
#content .article .details A.titleLink:hover {
	COLOR: #929292
}
#content .article .details2 .morelink {
	PADDING-LEFT: 10px; BACKGROUND: url(../images/arrow.gif) no-repeat left =
3px
}
#content .article .details2 {
=09
}
#content .article .details2 H4 {
	MARGIN: 0px; FONT-SIZE: 100%; FONT-WEIGHT: bold; TEXT-DECORATION: =
underline
}
#content .article .details2 A.titleLink {
	MARGIN: 0px; COLOR: black; FONT-SIZE: 100%; FONT-WEIGHT: bold; =
TEXT-DECORATION: underline
}
#content .article .details2 A.titleLink:hover {
	COLOR: #929292
}
#content .article .details2 .morelink {
	PADDING-LEFT: 10px; BACKGROUND: url(../images/arrow.gif) no-repeat left =
3px
}
#footer {
	PADDING-BOTTOM: 3px; MARGIN: 10px 10px 20px; PADDING-LEFT: 3px; =
PADDING-RIGHT: 3px; BACKGROUND: #a0a6b1; HEIGHT: 20px; COLOR: white; =
CLEAR: both; FONT-SIZE: 90%; PADDING-TOP: 3px
}
#footer A {
	COLOR: white
}
#footer .links {
	FLOAT: left
}
#footer .copyright {
	FLOAT: right
}
* HTML #leftmenu {
	LEFT: 165px
}
.searchresult {
=09
}
.searchresult IMG {
	FLOAT: left; MARGIN-RIGHT: 10px
}
.searchresult H3 {
	MARGIN: 0px 0px 0px 80px; FONT-SIZE: 1em; FONT-WEIGHT: bold
}
.searchresult .notes {
	FONT-STYLE: italic; MARGIN: 2px 0px; CLEAR: left
}
.searchresult P {
	MARGIN: 0px; COLOR: #333333
}
SPAN.highlight {
	BACKGROUND-COLOR: yellow
}
.searchresult .download {
	MARGIN-LEFT: 10px; FONT-WEIGHT: bold
}
#content A.ResTitle {
	MARGIN-TOP: 0px; FONT-FAMILY: Georgia; COLOR: black; FONT-SIZE: 1em; =
FONT-WEIGHT: bold; TEXT-DECORATION: none
}
#content A.ResTitle:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
#content A.DownloadLink {
	COLOR: #333333; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
#content A.DownloadLink:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}
.showResourceTitle {
	FONT-SIZE: 1.2em; FONT-WEIGHT: bold
}
.video {
	WIDTH: 500px
}
.notes {
	FONT-STYLE: italic; MARGIN: 2px 0px; CLEAR: left
}
.showResourceText {
	MARGIN: 0px
}
.download {
	TEXT-ALIGN: right; MARGIN-LEFT: 10px; FONT-WEIGHT: bold
}
#content .topMenu {
	BORDER-BOTTOM: gray 2px solid; TEXT-ALIGN: right; MARGIN-BOTTOM: 5px
}
#content .mailToFriend {
	BORDER-BOTTOM: gray 2px solid; TEXT-ALIGN: right; MARGIN-BOTTOM: 5px; =
HEIGHT: 28px
}
#content .bottomMenu {
	TEXT-ALIGN: right; MARGIN-TOP: 5px; HEIGHT: 18px; BORDER-TOP: gray 2px =
solid; FONT-WEIGHT: bold
}
UL.pipe {
	PADDING-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px
}
UL.pipe LI {
	BORDER-LEFT: gray 2px solid; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: =
none; PADDING-LEFT: 15px; PADDING-RIGHT: 15px; DISPLAY: inline; =
MARGIN-BOTTOM: 3px; MARGIN-LEFT: 0px; LIST-STYLE-IMAGE: none; =
PADDING-TOP: 0px
}
UL.pipe LI.first {
	BORDER-LEFT: medium none; LIST-STYLE-TYPE: none; DISPLAY: inline; =
MARGIN-BOTTOM: 3px; MARGIN-LEFT: 0px; LIST-STYLE-IMAGE: none
}
#content UL.pipe LI A {
	COLOR: #333333; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
#content UL.pipe LI A:hover {
	COLOR: #929292; TEXT-DECORATION: underline
}

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://bsf.ncsl.org.uk/WebResource.axd?d=93JB5Q_ZsDmp5a2aSVvPy5-OBqUaI3qm8btzCVBDn7hW3YLpgNzL1K0V2g64prmKJ6OyTs9u8mDMeh9-hSuSd_9x6F7XI2zj5tQn8oAIq-01&t=633783421398003246

.RadComboBox_Default * {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.RadComboBox_Default {
	TEXT-ALIGN: left; FONT: 12px arial, verdana, sans-serif; COLOR: #000
}
.RadComboBox_Default INPUT {
	TEXT-ALIGN: left; FONT: 12px arial, verdana, sans-serif; COLOR: #000
}
.RadComboBoxDropDown_Default {
	TEXT-ALIGN: left; FONT: 12px arial, verdana, sans-serif; COLOR: #000
}
.RadComboBox_Default_rtl {
	TEXT-ALIGN: right
}
.RadComboBox_Default_rtl INPUT {
	TEXT-ALIGN: right
}
.RadComboBoxDropDown_Default_rtl {
	TEXT-ALIGN: right
}
.RadComboBox_Default {
	VERTICAL-ALIGN: bottom
}
.RadComboBox_Default TABLE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
.RadComboBox_Default .rcbInputCell {
	BORDER-BOTTOM: #7d7d7d 1px solid; BORDER-LEFT: #7d7d7d 1px solid; =
PADDING-BOTTOM: 0px; LINE-HEIGHT: 20px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; BACKGROUND: #fff; HEIGHT: 21px; VERTICAL-ALIGN: top; =
BORDER-TOP: #7d7d7d 1px solid; BORDER-RIGHT: #7d7d7d 1px solid; =
PADDING-TOP: 0px
}
.RadComboBox_Default .rcbInputCell INPUT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BACKGROUND: none =
transparent scroll repeat 0% 0%; COLOR: #373737; VERTICAL-ALIGN: top; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 3px
}
.RadComboBox_Default .rcbInputCell .rcbEmptyMessage {
	FONT-STYLE: italic; COLOR: #666
}
.RadComboBox_Default .rcbInputCell {
	PADDING-LEFT: 2px
}
.RadComboBox_Default .rcbInputCell INPUT {
	PADDING-LEFT: 2px
}
.RadComboBox_Default_rtl .rcbInputCell {
	PADDING-LEFT: 0px; PADDING-RIGHT: 2px
}
.RadComboBox_Default_rtl .rcbInputCell INPUT {
	PADDING-LEFT: 0px; PADDING-RIGHT: 2px
}
.RadComboBox_Default .rcbHovered .rcbInputCell {
	BACKGROUND: #efefef
}
.RadComboBox_Default .rcbFocused .rcbInputCell {
	BORDER-BOTTOM-COLOR: #1d1d1d; BORDER-TOP-COLOR: #1d1d1d; BACKGROUND: =
#efefef; BORDER-RIGHT-COLOR: #1d1d1d; BORDER-LEFT-COLOR: #1d1d1d
}
.RadComboBox_Default .rcbFocused .rcbInputCell INPUT {
	COLOR: #1d1d1d
}
.RadComboBox_Default .rcbDisabled .rcbInputCell {
	BORDER-BOTTOM-COLOR: #a1a1a1; BORDER-TOP-COLOR: #a1a1a1; =
BORDER-RIGHT-COLOR: #a1a1a1; BORDER-LEFT-COLOR: #a1a1a1
}
.RadComboBox_Default .rcbDisabled .rcbInputCell INPUT {
	COLOR: #9b9b9b
}
.RadComboBox_Default .rcbArrowCell {
	BORDER-BOTTOM: #7d7d7d 1px solid; BORDER-LEFT: #7d7d7d 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: 27px; PADDING-RIGHT: 0px; =
BACKGROUND: =
url(WebResource.axd?d=3D93JB5Q_ZsDmp5a2aSVvPy5-OBqUaI3qm8btzCVBDn7hW3YLpg=
NzL1K0V2g64prmKUcLsYFD0bRrwkqBw3nSh04TlCJm5B6LXM5ADPsBuC-A1&t=3D633783421=
398003246) no-repeat 0px 0px; BORDER-TOP: #7d7d7d 1px solid; =
BORDER-RIGHT: #7d7d7d 1px solid; PADDING-TOP: 0px
}
.RadComboBox_Default .rcbDisabled .rcbArrowCell {
	BORDER-BOTTOM-COLOR: #878787; BORDER-TOP-COLOR: #878787; =
BACKGROUND-POSITION: 0px -23px; BORDER-RIGHT-COLOR: #878787; =
BORDER-LEFT-COLOR: #878787
}
.RadComboBox_Default .rcbArrowCellLeft {
	BORDER-RIGHT-WIDTH: 0px
}
.RadComboBox_Default .rcbArrowCellRight {
	BORDER-LEFT-WIDTH: 0px
}
.RadComboBox_Default .rcbArrowCell A {
	LINE-HEIGHT: 21px; TEXT-INDENT: -9999px; WIDTH: 27px; HEIGHT: 21px; =
FONT-SIZE: 0px; TEXT-DECORATION: none
}
.RadComboBox_Default .rcbDisabled .rcbArrowCell A {
	CURSOR: no-drop
}
.RadComboBox_Default .rcbDisabled .rcbArrowCellHidden A {
	CURSOR: default
}
.rcbSlide {
	POSITION: absolute; DISPLAY: none; FLOAT: left; OVERFLOW: hidden; =
_height: 1px
}
.RadComboBoxDropDown_Default {
	BORDER-BOTTOM: #626262 1px solid; POSITION: absolute; BORDER-LEFT: =
#626262 1px solid; BACKGROUND: #fff; FONT-SIZE: 11px; BORDER-TOP: =
#626262 1px solid; CURSOR: default; BORDER-RIGHT: #626262 1px solid
}
.RadComboBoxDropDown_Default .rcbScroll {
	OVERFLOW: auto
}
.RadComboBoxDropDown_Default .rcbList {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; ZOOM: 1; LIST-STYLE-IMAGE: none; PADDING-TOP: =
0px
}
.RadComboBoxDropDown_Default .rcbHeader {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 4px; BACKGROUND: =
#929292; COLOR: #fff; PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default .rcbNoWrap .rcbItem {
	WHITE-SPACE: nowrap
}
.RadComboBoxDropDown_Default .rcbNoWrap .rcbHovered {
	WHITE-SPACE: nowrap
}
.RadComboBoxDropDown_Default .rcbNoWrap .rcbDisabled {
	WHITE-SPACE: nowrap
}
.RadComboBoxDropDown_Default .rcbNoWrap .rcbLoading {
	WHITE-SPACE: nowrap
}
.RadComboBoxDropDown_Default .rcbItem {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 20px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default .rcbHovered {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 20px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default .rcbDisabled {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 20px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default .rcbLoading {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 20px; =
PADDING-TOP: 4px
}
* HTML .RadComboBoxDropDown_Default .rcbItem {
	ZOOM: 1
}
* HTML .RadComboBoxDropDown_Default .rcbHovered {
	ZOOM: 1
}
* HTML .RadComboBoxDropDown_Default .rcbDisabled {
	ZOOM: 1
}
* HTML .RadComboBoxDropDown_Default .rcbLoading {
	ZOOM: 1
}
.RadComboBoxDropDown_Default_rtl .rcbItem {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 20px; PADDING-RIGHT: 4px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default_rtl .rcbHovered {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 20px; PADDING-RIGHT: 4px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default_rtl .rcbDisabled {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 20px; PADDING-RIGHT: 4px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default_rtl .rcbLoading {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 20px; PADDING-RIGHT: 4px; =
PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default .rcbHovered {
	BACKGROUND: #4c4c4c; COLOR: #fff
}
.RadComboBoxDropDown_Default .rcbDisabled {
	COLOR: #ccc; CURSOR: no-drop
}
.RadComboBoxDropDown_Default .rcbLoading {
	TEXT-ALIGN: center; BACKGROUND: #f0f0f0
}
.RadComboBoxDropDown_Default .rcbMoreResults {
	TEXT-ALIGN: center; PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; =
PADDING-RIGHT: 4px; BACKGROUND: #f3f3f3; CLEAR: both; PADDING-TOP: 4px
}
.RadComboBoxDropDown_Default .rcbMoreResults A {
	TEXT-INDENT: -3333px; MARGIN: 0px auto 4px; WIDTH: 15px; DISPLAY: =
block; BACKGROUND: =
url(WebResource.axd?d=3D93JB5Q_ZsDmp5a2aSVvPy5-OBqUaI3qm8btzCVBDn7hW3YLpg=
NzL1K0V2g64prmKUYL52qgWBc-OCwpOgglwY4yleKBu0g_3pPT0pjJj4c41&t=3D633783421=
398003246) no-repeat; HEIGHT: 14px; OVERFLOW: hidden; CURSOR: pointer; =
TEXT-DECORATION: none
}
.RadComboBoxDropDown_Default .rcbMoreResults A:hover {
	BACKGROUND-POSITION: 0px 100%
}
.RadComboBoxDropDown_Default .rcbMoreResults SPAN {
	TEXT-ALIGN: center; DISPLAY: block
}
.RadComboBoxDropDown_Default .rcbScroll {
	SCROLLBAR-ARROW-COLOR: #787878; SCROLLBAR-FACE-COLOR: #e9e9e9; =
SCROLLBAR-DARKSHADOW-COLOR: #aeaeae; SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; =
SCROLLBAR-SHADOW-COLOR: #e9e9e9; SCROLLBAR-TRACK-COLOR: #f5f5f5; =
SCROLLBAR-3DLIGHT-COLOR: #dbdbdb
}

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://bsf.ncsl.org.uk/WebResource.axd?d=jI8EcXek-wztdYq032pg9Q2&t=633464941826699775

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, =
validationGroup, actionUrl, trackFocus, clientSubmit) {
    this.eventTarget =3D eventTarget;
    this.eventArgument =3D eventArgument;
    this.validation =3D validation;
    this.validationGroup =3D validationGroup;
    this.actionUrl =3D actionUrl;
    this.trackFocus =3D trackFocus;
    this.clientSubmit =3D clientSubmit;
}
function WebForm_DoPostBackWithOptions(options) {
    var validationResult =3D true;
    if (options.validation) {
        if (typeof(Page_ClientValidate) =3D=3D 'function') {
            validationResult =3D =
Page_ClientValidate(options.validationGroup);
        }
    }
    if (validationResult) {
        if ((typeof(options.actionUrl) !=3D "undefined") && =
(options.actionUrl !=3D null) && (options.actionUrl.length > 0)) {
            theForm.action =3D options.actionUrl;
        }
        if (options.trackFocus) {
            var lastFocus =3D theForm.elements["__LASTFOCUS"];
            if ((typeof(lastFocus) !=3D "undefined") && (lastFocus !=3D =
null)) {
                if (typeof(document.activeElement) =3D=3D "undefined") {
                    lastFocus.value =3D options.eventTarget;
                }
                else {
                    var active =3D document.activeElement;
                    if ((typeof(active) !=3D "undefined") && (active =
!=3D null)) {
                        if ((typeof(active.id) !=3D "undefined") && =
(active.id !=3D null) && (active.id.length > 0)) {
                            lastFocus.value =3D active.id;
                        }
                        else if (typeof(active.name) !=3D "undefined") {
                            lastFocus.value =3D active.name;
                        }
                    }
                }
            }
        }
    }
    if (options.clientSubmit) {
        __doPostBack(options.eventTarget, options.eventArgument);
    }
}
var __pendingCallbacks =3D new Array();
var __synchronousCallBackIndex =3D -1;
function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, =
context, errorCallback, useAsync) {
    var postData =3D __theFormPostData +
                "__CALLBACKID=3D" + WebForm_EncodeCallback(eventTarget) =
+
                "&__CALLBACKPARAM=3D" + =
WebForm_EncodeCallback(eventArgument);
    if (theForm["__EVENTVALIDATION"]) {
        postData +=3D "&__EVENTVALIDATION=3D" + =
WebForm_EncodeCallback(theForm["__EVENTVALIDATION"].value);
    }
    var xmlRequest,e;
    try {
        xmlRequest =3D new XMLHttpRequest();
    }
    catch(e) {
        try {
            xmlRequest =3D new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
        }
    }
    var setRequestHeaderMethodExists =3D true;
    try {
        setRequestHeaderMethodExists =3D (xmlRequest && =
xmlRequest.setRequestHeader);
    }
    catch(e) {}
    var callback =3D new Object();
    callback.eventCallback =3D eventCallback;
    callback.context =3D context;
    callback.errorCallback =3D errorCallback;
    callback.async =3D useAsync;
    var callbackIndex =3D =
WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
    if (!useAsync) {
        if (__synchronousCallBackIndex !=3D -1) {
            __pendingCallbacks[__synchronousCallBackIndex] =3D null;
        }
        __synchronousCallBackIndex =3D callbackIndex;
    }
    if (setRequestHeaderMethodExists) {
        xmlRequest.onreadystatechange =3D WebForm_CallbackComplete;
        callback.xmlRequest =3D xmlRequest;
        xmlRequest.open("POST", theForm.action, true);
        xmlRequest.setRequestHeader("Content-Type", =
"application/x-www-form-urlencoded");
        xmlRequest.send(postData);
        return;
    }
    callback.xmlRequest =3D new Object();
    var callbackFrameID =3D "__CALLBACKFRAME" + callbackIndex;
    var xmlRequestFrame =3D document.frames[callbackFrameID];
    if (!xmlRequestFrame) {
        xmlRequestFrame =3D document.createElement("IFRAME");
        xmlRequestFrame.width =3D "1";
        xmlRequestFrame.height =3D "1";
        xmlRequestFrame.frameBorder =3D "0";
        xmlRequestFrame.id =3D callbackFrameID;
        xmlRequestFrame.name =3D callbackFrameID;
        xmlRequestFrame.style.position =3D "absolute";
        xmlRequestFrame.style.top =3D "-100px"
        xmlRequestFrame.style.left =3D "-100px";
        try {
            if (callBackFrameUrl) {
                xmlRequestFrame.src =3D callBackFrameUrl;
            }
        }
        catch(e) {}
        document.body.appendChild(xmlRequestFrame);
    }
    var interval =3D window.setInterval(function() {
        xmlRequestFrame =3D document.frames[callbackFrameID];
        if (xmlRequestFrame && xmlRequestFrame.document) {
            window.clearInterval(interval);
            xmlRequestFrame.document.write("");
            xmlRequestFrame.document.close();
            xmlRequestFrame.document.write('<html><body><form =
method=3D"post"><input type=3D"hidden" name=3D"__CALLBACKLOADSCRIPT" =
value=3D"t"></form></body></html>');
            xmlRequestFrame.document.close();
            xmlRequestFrame.document.forms[0].action =3D theForm.action;
            var count =3D __theFormPostCollection.length;
            var element;
            for (var i =3D 0; i < count; i++) {
                element =3D __theFormPostCollection[i];
                if (element) {
                    var fieldElement =3D =
xmlRequestFrame.document.createElement("INPUT");
                    fieldElement.type =3D "hidden";
                    fieldElement.name =3D element.name;
                    fieldElement.value =3D element.value;
                    =
xmlRequestFrame.document.forms[0].appendChild(fieldElement);
                }
            }
            var callbackIdFieldElement =3D =
xmlRequestFrame.document.createElement("INPUT");
            callbackIdFieldElement.type =3D "hidden";
            callbackIdFieldElement.name =3D "__CALLBACKID";
            callbackIdFieldElement.value =3D eventTarget;
            =
xmlRequestFrame.document.forms[0].appendChild(callbackIdFieldElement);
            var callbackParamFieldElement =3D =
xmlRequestFrame.document.createElement("INPUT");
            callbackParamFieldElement.type =3D "hidden";
            callbackParamFieldElement.name =3D "__CALLBACKPARAM";
            callbackParamFieldElement.value =3D eventArgument;
            =
xmlRequestFrame.document.forms[0].appendChild(callbackParamFieldElement);=

            if (theForm["__EVENTVALIDATION"]) {
                var callbackValidationFieldElement =3D =
xmlRequestFrame.document.createElement("INPUT");
                callbackValidationFieldElement.type =3D "hidden";
                callbackValidationFieldElement.name =3D =
"__EVENTVALIDATION";
                callbackValidationFieldElement.value =3D =
theForm["__EVENTVALIDATION"].value;
                =
xmlRequestFrame.document.forms[0].appendChild(callbackValidationFieldElem=
ent);
            }
            var callbackIndexFieldElement =3D =
xmlRequestFrame.document.createElement("INPUT");
            callbackIndexFieldElement.type =3D "hidden";
            callbackIndexFieldElement.name =3D "__CALLBACKINDEX";
            callbackIndexFieldElement.value =3D callbackIndex;
            =
xmlRequestFrame.document.forms[0].appendChild(callbackIndexFieldElement);=

            xmlRequestFrame.document.forms[0].submit();
        }
    }, 10);
}
function WebForm_CallbackComplete() {
    for (i =3D 0; i < __pendingCallbacks.length; i++) {
        callbackObject =3D __pendingCallbacks[i];
        if (callbackObject && callbackObject.xmlRequest && =
(callbackObject.xmlRequest.readyState =3D=3D 4)) {
            WebForm_ExecuteCallback(callbackObject);
            if (!__pendingCallbacks[i].async) {
                __synchronousCallBackIndex =3D -1;
            }
            __pendingCallbacks[i] =3D null;
            var callbackFrameID =3D "__CALLBACKFRAME" + i;
            var xmlRequestFrame =3D =
document.getElementById(callbackFrameID);
            if (xmlRequestFrame) {
                xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);
            }
        }
    }
}
function WebForm_ExecuteCallback(callbackObject) {
    var response =3D callbackObject.xmlRequest.responseText;
    if (response.charAt(0) =3D=3D "s") {
        if ((typeof(callbackObject.eventCallback) !=3D "undefined") && =
(callbackObject.eventCallback !=3D null)) {
            callbackObject.eventCallback(response.substring(1), =
callbackObject.context);
        }
    }
    else if (response.charAt(0) =3D=3D "e") {
        if ((typeof(callbackObject.errorCallback) !=3D "undefined") && =
(callbackObject.errorCallback !=3D null)) {
            callbackObject.errorCallback(response.substring(1), =
callbackObject.context);
        }
    }
    else {
        var separatorIndex =3D response.indexOf("|");
        if (separatorIndex !=3D -1) {
            var validationFieldLength =3D parseInt(response.substring(0, =
separatorIndex));
            if (!isNaN(validationFieldLength)) {
                var validationField =3D =
response.substring(separatorIndex + 1, separatorIndex + =
validationFieldLength + 1);
                if (validationField !=3D "") {
                    var validationFieldElement =3D =
theForm["__EVENTVALIDATION"];
                    if (!validationFieldElement) {
                        validationFieldElement =3D =
document.createElement("INPUT");
                        validationFieldElement.type =3D "hidden";
                        validationFieldElement.name =3D =
"__EVENTVALIDATION";
                        theForm.appendChild(validationFieldElement);
                    }
                    validationFieldElement.value =3D validationField;
                }
                if ((typeof(callbackObject.eventCallback) !=3D =
"undefined") && (callbackObject.eventCallback !=3D null)) {
                    =
callbackObject.eventCallback(response.substring(separatorIndex + =
validationFieldLength + 1), callbackObject.context);
                }
            }
        }
    }
}
function WebForm_FillFirstAvailableSlot(array, element) {
    var i;
    for (i =3D 0; i < array.length; i++) {
        if (!array[i]) break;
    }
    array[i] =3D element;
    return i;
}
var __nonMSDOMBrowser =3D =
(window.navigator.appName.toLowerCase().indexOf('explorer') =3D=3D -1);
var __theFormPostData =3D "";
var __theFormPostCollection =3D new Array();
function WebForm_InitCallback() {
    var count =3D theForm.elements.length;
    var element;
    for (var i =3D 0; i < count; i++) {
        element =3D theForm.elements[i];
        var tagName =3D element.tagName.toLowerCase();
        if (tagName =3D=3D "input") {
            var type =3D element.type;
            if ((type =3D=3D "text" || type =3D=3D "hidden" || type =
=3D=3D "password" ||
                ((type =3D=3D "checkbox" || type =3D=3D "radio") && =
element.checked)) &&
                (element.id !=3D "__EVENTVALIDATION")) {
                WebForm_InitCallbackAddField(element.name, =
element.value);
            }
        }
        else if (tagName =3D=3D "select") {
            var selectCount =3D element.options.length;
            for (var j =3D 0; j < selectCount; j++) {
                var selectChild =3D element.options[j];
                if (selectChild.selected =3D=3D true) {
                    WebForm_InitCallbackAddField(element.name, =
element.value);
                }
            }
        }
        else if (tagName =3D=3D "textarea") {
            WebForm_InitCallbackAddField(element.name, element.value);
        }
    }
}
function WebForm_InitCallbackAddField(name, value) {
    var nameValue =3D new Object();
    nameValue.name =3D name;
    nameValue.value =3D value;
    __theFormPostCollection[__theFormPostCollection.length] =3D =
nameValue;
    __theFormPostData +=3D name + "=3D" + WebForm_EncodeCallback(value) =
+ "&";
}
function WebForm_EncodeCallback(parameter) {
    if (encodeURIComponent) {
        return encodeURIComponent(parameter);
    }
    else {
        return escape(parameter);
    }
}
var __disabledControlArray =3D new Array();
function WebForm_ReEnableControls() {
    if (typeof(__enabledControlArray) =3D=3D 'undefined') {
        return false;
    }
    var disabledIndex =3D 0;
    for (var i =3D 0; i < __enabledControlArray.length; i++) {
        var c;
        if (__nonMSDOMBrowser) {
            c =3D document.getElementById(__enabledControlArray[i]);
        }
        else {
            c =3D document.all[__enabledControlArray[i]];
        }
        if ((typeof(c) !=3D "undefined") && (c !=3D null) && (c.disabled =
=3D=3D true)) {
            c.disabled =3D false;
            __disabledControlArray[disabledIndex++] =3D c;
        }
    }
    setTimeout("WebForm_ReDisableControls()", 0);
    return true;
}
function WebForm_ReDisableControls() {
    for (var i =3D 0; i < __disabledControlArray.length; i++) {
        __disabledControlArray[i].disabled =3D true;
    }
}
function WebForm_FireDefaultButton(event, target) {
        if (event.keyCode =3D=3D 13 && !(event.srcElement && =
(event.srcElement.tagName.toLowerCase() =3D=3D "textarea"))) {
        var defaultButton;
        if (__nonMSDOMBrowser) {
            defaultButton =3D document.getElementById(target);
        }
        else {
            defaultButton =3D document.all[target];
        }
        if (defaultButton && typeof(defaultButton.click) !=3D =
"undefined") {
            defaultButton.click();
            event.cancelBubble =3D true;
            if (event.stopPropagation) event.stopPropagation();
            return false;
        }
    }
    return true;
}
function WebForm_GetScrollX() {
    if (__nonMSDOMBrowser) {
        return window.pageXOffset;
    }
    else {
        if (document.documentElement && =
document.documentElement.scrollLeft) {
            return document.documentElement.scrollLeft;
        }
        else if (document.body) {
            return document.body.scrollLeft;
        }
    }
    return 0;
}
function WebForm_GetScrollY() {
    if (__nonMSDOMBrowser) {
        return window.pageYOffset;
    }
    else {
        if (document.documentElement && =
document.documentElement.scrollTop) {
            return document.documentElement.scrollTop;
        }
        else if (document.body) {
            return document.body.scrollTop;
        }
    }
    return 0;
}
function WebForm_SaveScrollPositionSubmit() {
    if (__nonMSDOMBrowser) {
        theForm.elements['__SCROLLPOSITIONY'].value =3D =
window.pageYOffset;
        theForm.elements['__SCROLLPOSITIONX'].value =3D =
window.pageXOffset;
    }
    else {
        theForm.__SCROLLPOSITIONX.value =3D WebForm_GetScrollX();
        theForm.__SCROLLPOSITIONY.value =3D WebForm_GetScrollY();
    }
    if ((typeof(this.oldSubmit) !=3D "undefined") && (this.oldSubmit =
!=3D null)) {
        return this.oldSubmit();
    }
    return true;
}
function WebForm_SaveScrollPositionOnSubmit() {
    theForm.__SCROLLPOSITIONX.value =3D WebForm_GetScrollX();
    theForm.__SCROLLPOSITIONY.value =3D WebForm_GetScrollY();
    if ((typeof(this.oldOnSubmit) !=3D "undefined") && (this.oldOnSubmit =
!=3D null)) {
        return this.oldOnSubmit();
    }
    return true;
}
function WebForm_RestoreScrollPosition() {
    if (__nonMSDOMBrowser) {
        window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, =
theForm.elements['__SCROLLPOSITIONY'].value);
    }
    else {
        window.scrollTo(theForm.__SCROLLPOSITIONX.value, =
theForm.__SCROLLPOSITIONY.value);
    }
    if ((typeof(theForm.oldOnLoad) !=3D "undefined") && =
(theForm.oldOnLoad !=3D null)) {
        return theForm.oldOnLoad();
    }
    return true;
}
function WebForm_TextBoxKeyHandler(event) {
    if (event.keyCode =3D=3D 13) {
        var target;
        if (__nonMSDOMBrowser) {
            target =3D event.target;
        }
        else {
            target =3D event.srcElement;
        }
        if ((typeof(target) !=3D "undefined") && (target !=3D null)) {
            if (typeof(target.onchange) !=3D "undefined") {
                target.onchange();
                event.cancelBubble =3D true;
                if (event.stopPropagation) event.stopPropagation();
                return false;
            }
        }
    }
    return true;
}
function WebForm_AppendToClassName(element, className) {
    var current =3D element.className;
    if (current) {
        if (current.charAt(current.length - 1) !=3D ' ') {
            current +=3D ' ';
        }
        current +=3D className;
    }
    else {
        current =3D className;
    }
    element.className =3D current;
}
function WebForm_RemoveClassName(element, className) {
    var current =3D element.className;
    if (current) {
        if (current.substring(current.length - className.length - 1, =
current.length) =3D=3D ' ' + className) {
            element.className =3D current.substring(0, current.length - =
className.length - 1);
            return;
        }
        if (current =3D=3D className) {
            element.className =3D "";
            return;
        }
        var index =3D current.indexOf(' ' + className + ' ');
        if (index !=3D -1) {
            element.className =3D current.substring(0, index) + =
current.substring(index + className.length + 2, current.length);
            return;
        }
        if (current.substring(0, className.length) =3D=3D className + ' =
') {
            element.className =3D current.substring(className.length + =
1, current.length);
        }
    }
}
function WebForm_GetElementById(elementId) {
    if (document.getElementById) {
        return document.getElementById(elementId);
    }
    else if (document.all) {
        return document.all[elementId];
    }
    else return null;
}
function WebForm_GetElementByTagName(element, tagName) {
    var elements =3D WebForm_GetElementsByTagName(element, tagName);
    if (elements && elements.length > 0) {
        return elements[0];
    }
    else return null;
}
function WebForm_GetElementsByTagName(element, tagName) {
    if (element && tagName) {
        if (element.getElementsByTagName) {
            return element.getElementsByTagName(tagName);
        }
        if (element.all && element.all.tags) {
            return element.all.tags(tagName);
        }
    }
    return null;
}
function WebForm_GetElementDir(element) {
    if (element) {
        if (element.dir) {
            return element.dir;
        }
        return WebForm_GetElementDir(element.parentNode);
    }
    return "ltr";
}
function WebForm_GetElementPosition(element) {
    var result =3D new Object();
    result.x =3D 0;
    result.y =3D 0;
    result.width =3D 0;
    result.height =3D 0;
    if (element.offsetParent) {
        result.x =3D element.offsetLeft;
        result.y =3D element.offsetTop;
        var parent =3D element.offsetParent;
        while (parent) {
            result.x +=3D parent.offsetLeft;
            result.y +=3D parent.offsetTop;
            var parentTagName =3D parent.tagName.toLowerCase();
            if (parentTagName !=3D "table" &&
                parentTagName !=3D "body" &&=20
                parentTagName !=3D "html" &&=20
                parentTagName !=3D "div" &&=20
                parent.clientTop &&=20
                parent.clientLeft) {
                result.x +=3D parent.clientLeft;
                result.y +=3D parent.clientTop;
            }
            parent =3D parent.offsetParent;
        }
    }
    else if (element.left && element.top) {
        result.x =3D element.left;
        result.y =3D element.top;
    }
    else {
        if (element.x) {
            result.x =3D element.x;
        }
        if (element.y) {
            result.y =3D element.y;
        }
    }
    if (element.offsetWidth && element.offsetHeight) {
        result.width =3D element.offsetWidth;
        result.height =3D element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && =
element.style.pixelHeight) {
        result.width =3D element.style.pixelWidth;
        result.height =3D element.style.pixelHeight;
    }
    return result;
}
function WebForm_GetParentByTagName(element, tagName) {
    var parent =3D element.parentNode;
    var upperTagName =3D tagName.toUpperCase();
    while (parent && (parent.tagName.toUpperCase() !=3D upperTagName)) {
        parent =3D parent.parentNode ? parent.parentNode : =
parent.parentElement;
    }
    return parent;
}
function WebForm_SetElementHeight(element, height) {
    if (element && element.style) {
        element.style.height =3D height + "px";
    }
}
function WebForm_SetElementWidth(element, width) {
    if (element && element.style) {
        element.style.width =3D width + "px";
    }
}
function WebForm_SetElementX(element, x) {
    if (element && element.style) {
        element.style.left =3D x + "px";
    }
}
function WebForm_SetElementY(element, y) {
    if (element && element.style) {
        element.style.top =3D y + "px";
    }
}

------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://bsf.ncsl.org.uk/ScriptResource.axd?d=zKJOX5ywFa7Fh3bUN8VtqfBSxWEyT84BElKUVp0gjJvUruyDRF8p4R7KQ8_jr9Aa4WEYt3-2yoZcDwrRB4wR7ceJl-GLmFC3x-tzaRS5Yes1&t=633608030687243693

=EF=BB=BF// Name:        MicrosoftAjax.debug.js
// Assembly:    System.Web.Extensions
// Version:     3.5.0.0
// FileVersion: 3.5.21022.8
//!----------------------------------------------------------------------=
-
//! Copyright (C) Microsoft Corporation. All rights reserved.
//!----------------------------------------------------------------------=
-
//! MicrosoftAjax.js
//! Microsoft AJAX Framework.

// JavaScript Extensions and Type System

=20
Function.__typeName =3D 'Function';
Function.__class =3D true;

Function.createCallback =3D function Function$createCallback(method, =
context) {
    /// <summary locid=3D"M:J#Function.createCallback" />
    /// <param name=3D"method" type=3D"Function"></param>
    /// <param name=3D"context" mayBeNull=3D"true"></param>
    /// <returns type=3D"Function"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "method", type: Function},
        {name: "context", mayBeNull: true}
    ]);
    if (e) throw e;

    // The method still makes sense for null context, but not if the =
context is omitted altogether
    // (omitted context makes the callback equivalent to the method =
itself, with one more level of indirection).

    return function() {
        var l =3D arguments.length;
        if (l > 0) {
            // arguments is not a real array, need to build a real one =
from it so we can add
            var args =3D [];
            for (var i =3D 0; i < l; i++) {
                args[i] =3D arguments[i];
            }
            args[l] =3D context;
            return method.apply(this, args);
        }
        return method.call(this, context);
    }
}

Function.createDelegate =3D function Function$createDelegate(instance, =
method) {
    /// <summary locid=3D"M:J#Function.createDelegate" />
    /// <param name=3D"instance" mayBeNull=3D"true"></param>
    /// <param name=3D"method" type=3D"Function"></param>
    /// <returns type=3D"Function"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance", mayBeNull: true},
        {name: "method", type: Function}
    ]);
    if (e) throw e;

    // The method still makes some sense with a null instance, in the =
same way that createCallback still
    // makes sense with a null context.

    return function() {
        return method.apply(instance, arguments);
    }
}

Function.emptyFunction =3D Function.emptyMethod =3D function =
Function$emptyMethod() {
    /// <summary locid=3D"M:J#Function.emptyMethod" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
}

Function._validateParams =3D function Function$_validateParams(params, =
expectedParams) {
    // *DO NOT* triple-slash comment those. The double-slashes here are =
on purpose.
    // We don't need to document private functions and those will induce =
infinite loops
    // if the preprocessor generates validation code for these.
    // <summary>
    //     Validates the parameters to a method.
    // </summary>
    // <example>
    //     function foo(anyParam, stringParam, anyArrayParam, =
stringArrayParam,
    //                  interfaceParam, optionalStringParam) {
    //         #if DEBUG
    //         var e =3D Function._validateParams(arguments, [
    //             { name: "anyParam" },
    //             { name: "mayBeNullParam", mayBeNull: true },
    //             { name: "stringParam", type: String },
    //             { name: "floatParam", type: Number },
    //             { name: "intParam", type: Number, integer: true },
    //             { name: "domParam", domElement: true },
    //             { name: "anyArrayParam", type: Array },
    //             { name: "mayBeNullArrayParam", type: Array, =
elementMayBeNull: true },
    //             { name: "stringArrayParam", type: Array, elementType: =
String },
    //             { name: "intArrayParam", type: Array, elementType: =
Number, elementInteger: true },
    //             { name: "domElementArrayParam", type: Array, =
elementDomElement: true },
    //             { name: "interfaceParam", type: Sys.IFoo }
    //             { name: "optionalStringParam", type: String, =
optional: true }
    //             { name: "stringParamArray", type: String, =
parameterArray: true }
    //             { name: "mayBeNullParamArray", parameterArray: true, =
mayBeNull: true }
    //         ]);
    //         if (e) throw e;
    //         #endif
    //     }
    // </example>
    // <param name=3D"params" type=3D"Array">Array of parameter values =
passed to the method.</param>
    // <param name=3D"expectedParams" type=3D"Array" =
optional=3D"true">Array of JSON objects describing the expected =
parameters.</param>

    var e;

    e =3D Function._validateParameterCount(params, expectedParams);
    if (e) {
        e.popStackFrame();
        return e;
    }

    for (var i=3D0; i < params.length; i++) {
        // If there are more params than expectedParams, then the last =
expectedParam
        // must be a paramArray.  Use the last expectedParam to validate =
the remaining
        // params.
        var expectedParam =3D expectedParams[Math.min(i, =
expectedParams.length - 1)];

        var paramName =3D expectedParam.name;
        if (expectedParam.parameterArray) {
            // Append index of parameter in parameterArray
            paramName +=3D "[" + (i - expectedParams.length + 1) + "]";
        }

        e =3D Function._validateParameter(params[i], expectedParam, =
paramName);
        if (e) {
            e.popStackFrame();
            return e;
        }
    }


    return null;
}

Function._validateParameterCount =3D function =
Function$_validateParameterCount(params, expectedParams) {
    var maxParams =3D expectedParams.length;
    var minParams =3D 0;
    for (var i=3D0; i < expectedParams.length; i++) {
        if (expectedParams[i].parameterArray) {
            maxParams =3D Number.MAX_VALUE;
        }
        else if (!expectedParams[i].optional) {
            minParams++;
        }
    }

    if (params.length < minParams || params.length > maxParams) {
        var e =3D Error.parameterCount();
        e.popStackFrame();
        return e;
    }

    return null;
}

Function._validateParameter =3D function =
Function$_validateParameter(param, expectedParam, paramName) {
    var e;

    var expectedType =3D expectedParam.type;
    var expectedInteger =3D !!expectedParam.integer;
    var expectedDomElement =3D !!expectedParam.domElement;
    var mayBeNull =3D !!expectedParam.mayBeNull;

    e =3D Function._validateParameterType(param, expectedType, =
expectedInteger, expectedDomElement, mayBeNull, paramName);
    if (e) {
        e.popStackFrame();
        return e;
    }

    // If parameter is an array, and not undefined or null, validate the =
type of its elements
    var expectedElementType =3D expectedParam.elementType;
    var elementMayBeNull =3D !!expectedParam.elementMayBeNull;
    if (expectedType =3D=3D=3D Array && typeof(param) !=3D=3D =
"undefined" && param !=3D=3D null &&
        (expectedElementType || !elementMayBeNull)) {
        var expectedElementInteger =3D !!expectedParam.elementInteger;
        var expectedElementDomElement =3D =
!!expectedParam.elementDomElement;
        for (var i=3D0; i < param.length; i++) {
            var elem =3D param[i];
            e =3D Function._validateParameterType(elem, =
expectedElementType,
                expectedElementInteger, expectedElementDomElement, =
elementMayBeNull,
                paramName + "[" + i + "]");
            if (e) {
                e.popStackFrame();
                return e;
            }
        }
    }

    return null;
}

Function._validateParameterType =3D function =
Function$_validateParameterType(param, expectedType, expectedInteger, =
expectedDomElement, mayBeNull, paramName) {
    var e;

    if (typeof(param) =3D=3D=3D "undefined") {
        if (mayBeNull) {
            return null;
        }
        else {
            e =3D Error.argumentUndefined(paramName);
            e.popStackFrame();
            return e;
        }
    }

    if (param =3D=3D=3D null) {
        if (mayBeNull) {
            return null;
        }
        else {
            e =3D Error.argumentNull(paramName);
            e.popStackFrame();
            return e;
        }
    }

    if (expectedType && expectedType.__enum) {
        if (typeof(param) !=3D=3D 'number') {
            e =3D Error.argumentType(paramName, Object.getType(param), =
expectedType);
            e.popStackFrame();
            return e;
        }
        if ((param % 1) =3D=3D=3D 0) {
            var values =3D expectedType.prototype;
            if (!expectedType.__flags || (param =3D=3D=3D 0)) {
                for (var i in values) {
                    if (values[i] =3D=3D=3D param) return null;
                }
            }
            else {
                var v =3D param;
                for (var i in values) {
                    var vali =3D values[i];
                    if (vali =3D=3D=3D 0) continue;
                    if ((vali & param) =3D=3D=3D vali) {
                        v -=3D vali;
                    }
                    if (v =3D=3D=3D 0) return null;
                }
            }
        }
        e =3D Error.argumentOutOfRange(paramName, param, =
String.format(Sys.Res.enumInvalidValue, param, expectedType.getName()));
        e.popStackFrame();
        return e;
    }

    // Using nodeType to check this is a DOM element for lack of a =
better test on IE and Safari.
    // This is not entirely foolproof ({nodeType: 1} would seem to be of =
type Sys.UI.DomElement)
    // but we need something that works cross-browser.
    // Opera and Firefox both have an HTMLElement type of which DOM =
elements are instances but
    // we're not using it here for consistency.
    // Text nodes are not considered elements.
    if (expectedDomElement) {
        var val;
        if (typeof(param.nodeType) !=3D=3D 'number') {
            // Windows and documents are considered elements even though =
they are not strictly speaking.
            // No node type may still be window or document.
            // Try to get the document for the element, revert to param =
if not found:
            var doc =3D param.ownerDocument || param.document || param;
            if (doc !=3D param) {
                // The parameter is not the document, but it may be =
window.
                // Try to get the window for the document:
                var w =3D doc.defaultView || doc.parentWindow;
                // On Safari 2, defaultView is not the same object as =
window but they have the same document.
                val =3D (w !=3D param) && !(w.document && param.document =
&& (w.document =3D=3D=3D param.document));
            }
            else {
                // doc is equal to param, but we still need to check =
that it's really a document.
                // Using the body property for lack of a better =
cross-browser test.
                val =3D (typeof(doc.body) =3D=3D=3D 'undefined');
            }
        }
        else {
            // Text nodes have a node type but are not considered DOM =
elements here.
            val =3D (param.nodeType =3D=3D=3D 3);
        }
        if (val) {
            e =3D Error.argument(paramName, Sys.Res.argumentDomElement);
            e.popStackFrame();
            return e;
        }
    }

    // If there is no expected type, any type is allowed.
    if (expectedType && !expectedType.isInstanceOfType(param)) {
        e =3D Error.argumentType(paramName, Object.getType(param), =
expectedType);
        e.popStackFrame();
        return e;
    }

    if (expectedType =3D=3D=3D Number && expectedInteger) {
        // Modulo operator is 5x faster than Math.round().
        // Modulo returns Number.NaN for Number.NaN, =
Number.POSITIVE_INFINITY, and Number.NEGATIVE_INFINITY.
        if ((param % 1) !=3D=3D 0) {
            e =3D Error.argumentOutOfRange(paramName, param, =
Sys.Res.argumentInteger);
            e.popStackFrame();
            return e;
        }
    }

    return null;
}
=20
Error.__typeName =3D 'Error';
Error.__class =3D true;

Error.create =3D function Error$create(message, errorInfo) {
    /// <summary locid=3D"M:J#Error.create" />
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"errorInfo" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"Error"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "message", type: String, mayBeNull: true, optional: =
true},
        {name: "errorInfo", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    // If message string can be converted to a number, IE sets e.message =
to the number, not the string.
    // Workaround this issue by explicitly setting e.message to the =
string.
    var e =3D new Error(message);
    e.message =3D message;

    if (errorInfo) {
        for (var v in errorInfo) {
            e[v] =3D errorInfo[v];
        }
    }

    e.popStackFrame();
    return e;
}

// The ArgumentException ctor in .NET has the message *before* =
paramName.  This
// is inconsistent with all the other Argument*Exception ctors in .NET.
// We feel the paramName is more important than the message, and we want =
all our
// argument errors to be consistent, so our Error.argument() takes the =
paramName
// before the message.  This is inconsistent with .NET, but overall we =
feel
// it is the better design.
Error.argument =3D function Error$argument(paramName, message) {
    /// <summary locid=3D"M:J#Error.argument" />
    /// <param name=3D"paramName" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "paramName", type: String, mayBeNull: true, optional: =
true},
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    var displayMessage =3D "Sys.ArgumentException: " + (message ? =
message : Sys.Res.argument);
    if (paramName) {
        displayMessage +=3D "\n" + String.format(Sys.Res.paramName, =
paramName);
    }

    var e =3D Error.create(displayMessage, { name: =
"Sys.ArgumentException", paramName: paramName });
    e.popStackFrame();
    return e;
}

Error.argumentNull =3D function Error$argumentNull(paramName, message) {
    /// <summary locid=3D"M:J#Error.argumentNull" />
    /// <param name=3D"paramName" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "paramName", type: String, mayBeNull: true, optional: =
true},
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    var displayMessage =3D "Sys.ArgumentNullException: " + (message ? =
message : Sys.Res.argumentNull);
    if (paramName) {
        displayMessage +=3D "\n" + String.format(Sys.Res.paramName, =
paramName);
    }

    var e =3D Error.create(displayMessage, { name: =
"Sys.ArgumentNullException", paramName: paramName });
    e.popStackFrame();
    return e;
}

Error.argumentOutOfRange =3D function =
Error$argumentOutOfRange(paramName, actualValue, message) {
    /// <summary locid=3D"M:J#Error.argumentOutOfRange" />
    /// <param name=3D"paramName" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"actualValue" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "paramName", type: String, mayBeNull: true, optional: =
true},
        {name: "actualValue", mayBeNull: true, optional: true},
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    var displayMessage =3D "Sys.ArgumentOutOfRangeException: " + =
(message ? message : Sys.Res.argumentOutOfRange);
    if (paramName) {
        displayMessage +=3D "\n" + String.format(Sys.Res.paramName, =
paramName);
    }

    // .NET implementation of ArgumentOutOfRangeException does not =
display actualValue if it is null.
    // For parity with .NET, we do not display if actualValue is null or =
undefined.  This is OK,
    // since more specific exceptions exist for null and undefined.
    if (typeof(actualValue) !=3D=3D "undefined" && actualValue !=3D=3D =
null) {
        displayMessage +=3D "\n" + String.format(Sys.Res.actualValue, =
actualValue);
    }

    var e =3D Error.create(displayMessage, {
        name: "Sys.ArgumentOutOfRangeException",
        paramName: paramName,
        actualValue: actualValue
    });
    e.popStackFrame();
    return e;
}

Error.argumentType =3D function Error$argumentType(paramName, =
actualType, expectedType, message) {
    /// <summary locid=3D"M:J#Error.argumentType" />
    /// <param name=3D"paramName" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"actualType" type=3D"Type" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"expectedType" type=3D"Type" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "paramName", type: String, mayBeNull: true, optional: =
true},
        {name: "actualType", type: Type, mayBeNull: true, optional: =
true},
        {name: "expectedType", type: Type, mayBeNull: true, optional: =
true},
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    var displayMessage =3D "Sys.ArgumentTypeException: ";
    if (message) {
        displayMessage +=3D message;
    }
    else if (actualType && expectedType) {
        displayMessage +=3D
            String.format(Sys.Res.argumentTypeWithTypes, =
actualType.getName(), expectedType.getName());
    }
    else {
        displayMessage +=3D Sys.Res.argumentType;
    }

    if (paramName) {
        displayMessage +=3D "\n" + String.format(Sys.Res.paramName, =
paramName);
    }

    var e =3D Error.create(displayMessage, {
        name: "Sys.ArgumentTypeException",
        paramName: paramName,
        actualType: actualType,
        expectedType: expectedType
    });
    e.popStackFrame();
    return e;
}

Error.argumentUndefined =3D function Error$argumentUndefined(paramName, =
message) {
    /// <summary locid=3D"M:J#Error.argumentUndefined" />
    /// <param name=3D"paramName" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "paramName", type: String, mayBeNull: true, optional: =
true},
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    var displayMessage =3D "Sys.ArgumentUndefinedException: " + (message =
? message : Sys.Res.argumentUndefined);
    if (paramName) {
        displayMessage +=3D "\n" + String.format(Sys.Res.paramName, =
paramName);
    }

    var e =3D Error.create(displayMessage, { name: =
"Sys.ArgumentUndefinedException", paramName: paramName });
    e.popStackFrame();
    return e;
}

Error.format =3D function Error$format(message) {
    /// <summary locid=3D"M:J#Error.format" />
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    var displayMessage =3D "Sys.FormatException: " + (message ? message =
: Sys.Res.format);
    var e =3D Error.create(displayMessage, {name: =
'Sys.FormatException'});
    e.popStackFrame();
    return e;
}

Error.invalidOperation =3D function Error$invalidOperation(message) {
    /// <summary locid=3D"M:J#Error.invalidOperation" />
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    var displayMessage =3D "Sys.InvalidOperationException: " + (message =
? message : Sys.Res.invalidOperation);

    var e =3D Error.create(displayMessage, {name: =
'Sys.InvalidOperationException'});
    e.popStackFrame();
    return e;
}

Error.notImplemented =3D function Error$notImplemented(message) {
    /// <summary locid=3D"M:J#Error.notImplemented" />
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    var displayMessage =3D "Sys.NotImplementedException: " + (message ? =
message : Sys.Res.notImplemented);

    var e =3D Error.create(displayMessage, {name: =
'Sys.NotImplementedException'});
    e.popStackFrame();
    return e;
}

Error.parameterCount =3D function Error$parameterCount(message) {
    /// <summary locid=3D"M:J#Error.parameterCount" />
    /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "message", type: String, mayBeNull: true, optional: true}
    ]);
    if (e) throw e;

    var displayMessage =3D "Sys.ParameterCountException: " + (message ? =
message : Sys.Res.parameterCount);
    var e =3D Error.create(displayMessage, {name: =
'Sys.ParameterCountException'});
    e.popStackFrame();
    return e;
}

Error.prototype.popStackFrame =3D function Error$popStackFrame() {
    /// <summary locid=3D"M:J#checkParam" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();

    // Example stack frame
    // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
    // Error("test error")@:0
    // createError()@http://localhost/app/Error.js:2
    // throwError()@http://localhost/app/Error.js:6
    // callThrowError()@http://localhost/app/Error.js:10
    // @http://localhost/app/Error:js:14

    if (typeof(this.stack) =3D=3D=3D "undefined" || this.stack =3D=3D=3D =
null ||
        typeof(this.fileName) =3D=3D=3D "undefined" || this.fileName =
=3D=3D=3D null ||
        typeof(this.lineNumber) =3D=3D=3D "undefined" || this.lineNumber =
=3D=3D=3D null) {
        return;
    }

    var stackFrames =3D this.stack.split("\n");

    // Find current stack frame.  It may not be the first stack frame, =
since the very
    // first frame when the Error is constructed does not correspond to =
any actual file
    // or line number.  See example stack frame above.
    var currentFrame =3D stackFrames[0];
    var pattern =3D this.fileName + ":" + this.lineNumber;
    while(typeof(currentFrame) !=3D=3D "undefined" &&
          currentFrame !=3D=3D null &&
          currentFrame.indexOf(pattern) =3D=3D=3D -1) {
        stackFrames.shift();
        currentFrame =3D stackFrames[0];
    }

    var nextFrame =3D stackFrames[1];

    // Special-case last stack frame, to stop shifting frames off the =
stack.
    if (typeof(nextFrame) =3D=3D=3D "undefined" || nextFrame =3D=3D=3D =
null) {
        return;
    }

    // Update fields to correspond with next stack frame
    var nextFrameParts =3D nextFrame.match(/@(.*):(\d+)$/);
    if (typeof(nextFrameParts) =3D=3D=3D "undefined" || nextFrameParts =
=3D=3D=3D null) {
        return;
    }

    this.fileName =3D nextFrameParts[1];

    // This should always succeed, since the regex matches "\d+"
    this.lineNumber =3D parseInt(nextFrameParts[2]);

    stackFrames.shift();
    this.stack =3D stackFrames.join("\n");
}
=20
Object.__typeName =3D 'Object';
Object.__class =3D true;

Object.getType =3D function Object$getType(instance) {
    /// <summary locid=3D"M:J#Object.getType" />
    /// <param name=3D"instance"></param>
    /// <returns type=3D"Type"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance"}
    ]);
    if (e) throw e;
    var ctor =3D instance.constructor;
    if (!ctor || (typeof(ctor) !=3D=3D "function") || !ctor.__typeName =
|| (ctor.__typeName =3D=3D=3D 'Object')) {
        return Object;
    }
    return ctor;
}

Object.getTypeName =3D function Object$getTypeName(instance) {
    /// <summary locid=3D"M:J#Object.getTypeName" />
    /// <param name=3D"instance"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance"}
    ]);
    if (e) throw e;
    return Object.getType(instance).getName();
}
=20
String.__typeName =3D 'String';
String.__class =3D true;

String.prototype.endsWith =3D function String$endsWith(suffix) {
    /// <summary locid=3D"M:J#String.endsWith" />
    /// <param name=3D"suffix" type=3D"String"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "suffix", type: String}
    ]);
    if (e) throw e;
    return (this.substr(this.length - suffix.length) =3D=3D=3D suffix);
}

String.prototype.startsWith =3D function String$startsWith(prefix) {
    /// <summary locid=3D"M:J#String.startsWith" />
    /// <param name=3D"prefix" type=3D"String"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "prefix", type: String}
    ]);
    if (e) throw e;
    return (this.substr(0, prefix.length) =3D=3D=3D prefix);
}

String.prototype.trim =3D function String$trim() {
    /// <summary locid=3D"M:J#String.trim" />
    /// <returns type=3D"String"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    return this.replace(/^\s+|\s+$/g, '');
}

String.prototype.trimEnd =3D function String$trimEnd() {
    /// <summary locid=3D"M:J#String.trimEnd" />
    /// <returns type=3D"String"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    return this.replace(/\s+$/, '');
}

String.prototype.trimStart =3D function String$trimStart() {
    /// <summary locid=3D"M:J#String.trimStart" />
    /// <returns type=3D"String"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    return this.replace(/^\s+/, '');
}

String.format =3D function String$format(format, args) {
    /// <summary locid=3D"M:J#String.format" />
    /// <param name=3D"format" type=3D"String"></param>
    /// <param name=3D"args" parameterArray=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "format", type: String},
        {name: "args", mayBeNull: true, parameterArray: true}
    ]);
    if (e) throw e;
    return String._toFormattedString(false, arguments);
}

String.localeFormat =3D function String$localeFormat(format, args) {
    /// <summary locid=3D"M:J#String.localeFormat" />
    /// <param name=3D"format" type=3D"String"></param>
    /// <param name=3D"args" parameterArray=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "format", type: String},
        {name: "args", mayBeNull: true, parameterArray: true}
    ]);
    if (e) throw e;
    return String._toFormattedString(true, arguments);
}

String._toFormattedString =3D function =
String$_toFormattedString(useLocale, args) {
    var result =3D '';
    var format =3D args[0];

    for (var i=3D0;;) {
        // Find the next opening or closing brace
        var open =3D format.indexOf('{', i);
        var close =3D format.indexOf('}', i);
        if ((open < 0) && (close < 0)) {
            // Not found: copy the end of the string and break
            result +=3D format.slice(i);
            break;
        }
        if ((close > 0) && ((close < open) || (open < 0))) {
            // Closing brace before opening is an error
            if (format.charAt(close + 1) !=3D=3D '}') {
                throw Error.argument('format', =
Sys.Res.stringFormatBraceMismatch);
            }
            result +=3D format.slice(i, close + 1);
            i =3D close + 2;
            continue;
        }

        // Copy the string before the brace
        result +=3D format.slice(i, open);
        i =3D open + 1;

        // Check for double braces (which display as one and are not =
arguments)
        if (format.charAt(i) =3D=3D=3D '{') {
            result +=3D '{';
            i++;
            continue;
        }

        // at this point we have a valid opening brace, which should be =
matched by a closing brace.
        if (close < 0) throw Error.argument('format', =
Sys.Res.stringFormatBraceMismatch);

        // Find the closing brace

        // Get the string between the braces, and split it around the =
':' (if any)
        var brace =3D format.substring(i, close);
        var colonIndex =3D brace.indexOf(':');
        var argNumber =3D parseInt((colonIndex < 0)? brace : =
brace.substring(0, colonIndex), 10) + 1;
        if (isNaN(argNumber)) throw Error.argument('format', =
Sys.Res.stringFormatInvalid);
        var argFormat =3D (colonIndex < 0)? '' : =
brace.substring(colonIndex + 1);

        var arg =3D args[argNumber];
        if (typeof(arg) =3D=3D=3D "undefined" || arg =3D=3D=3D null) {
            arg =3D '';
        }

        // If it has a toFormattedString method, call it.  Otherwise, =
call toString()
        if (arg.toFormattedString) {
            result +=3D arg.toFormattedString(argFormat);
        }
        else if (useLocale && arg.localeFormat) {
            result +=3D arg.localeFormat(argFormat);
        }
        else if (arg.format) {
            result +=3D arg.format(argFormat);
        }
        else
            result +=3D arg.toString();

        i =3D close + 1;
    }

    return result;
}
=20
Boolean.__typeName =3D 'Boolean';
Boolean.__class =3D true;

Boolean.parse =3D function Boolean$parse(value) {
    /// <summary locid=3D"M:J#Boolean.parse" />
    /// <param name=3D"value" type=3D"String"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String}
    ]);
    if (e) throw e;
    var v =3D value.trim().toLowerCase();
    if (v =3D=3D=3D 'false') return false;
    if (v =3D=3D=3D 'true') return true;
    throw Error.argumentOutOfRange('value', value, =
Sys.Res.boolTrueOrFalse);
}
=20
Date.__typeName =3D 'Date';
Date.__class =3D true;

Date._appendPreOrPostMatch =3D function =
Date$_appendPreOrPostMatch(preMatch, strBuilder) {
    // appends pre- and post- token match strings while removing escaped =
characters.
    // Returns a single quote count which is used to determine if the =
token occurs
    // in a string literal.
    var quoteCount =3D 0;
    var escaped =3D false;
    for (var i =3D 0, il =3D preMatch.length; i < il; i++) {
        var c =3D preMatch.charAt(i);
        switch (c) {
        case '\'':
            if (escaped) strBuilder.append("'");
            else quoteCount++;
            escaped =3D false;
            break;
        case '\\':
            if (escaped) strBuilder.append("\\");
            escaped =3D !escaped;
            break;
        default:
            strBuilder.append(c);
            escaped =3D false;
            break;
        }
    }
    return quoteCount;
}

Date._expandFormat =3D function Date$_expandFormat(dtf, format) {
    // expands unspecified or single character date formats into the =
full pattern.
    if (!format) {
        format =3D "F";
    }
    if (format.length =3D=3D=3D 1) {
        switch (format) {
        case "d":
            return dtf.ShortDatePattern;
        case "D":
            return dtf.LongDatePattern;
        case "t":
            return dtf.ShortTimePattern;
        case "T":
            return dtf.LongTimePattern;
        case "F":
            return dtf.FullDateTimePattern;
        case "M": case "m":
            return dtf.MonthDayPattern;
        case "s":
            return dtf.SortableDateTimePattern;
        case "Y": case "y":
            return dtf.YearMonthPattern;
        default:
            throw Error.format(Sys.Res.formatInvalidString);
        }
    }
    return format;
}

Date._expandYear =3D function Date$_expandYear(dtf, year) {
    // expands 2-digit year into 4 digits.
    if (year < 100) {
        var curr =3D new Date().getFullYear();
        year +=3D curr - (curr % 100);
        if (year > dtf.Calendar.TwoDigitYearMax) {
            return year - 100;
        }
    }
    return year;
}

Date._getParseRegExp =3D function Date$_getParseRegExp(dtf, format) {
    // converts a format string into a regular expression with groups =
that
    // can be used to extract date fields from a date string.
    // check for a cached parse regex.
    if (!dtf._parseRegExp) {
        dtf._parseRegExp =3D {};
    }
    else if (dtf._parseRegExp[format]) {
        return dtf._parseRegExp[format];
    }

    // expand single digit formats, then escape regular expression =
characters.
    var expFormat =3D Date._expandFormat(dtf, format);
    expFormat =3D expFormat.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, =
"\\\\$1");

    var regexp =3D new Sys.StringBuilder("^");
    var groups =3D [];
    var index =3D 0;
    var quoteCount =3D 0;
    var tokenRegExp =3D Date._getTokenRegExp();
    var match;

    // iterate through each date token found.
    while ((match =3D tokenRegExp.exec(expFormat)) !=3D=3D null) {
        var preMatch =3D expFormat.slice(index, match.index);
        index =3D tokenRegExp.lastIndex;

        // don't replace any matches that occur inside a string literal.
        quoteCount +=3D Date._appendPreOrPostMatch(preMatch, regexp);
        if ((quoteCount%2) =3D=3D=3D 1) {
            regexp.append(match[0]);
            continue;
        }

        // add a regex group for the token.
        switch (match[0]) {
            case 'dddd': case 'ddd':
            case 'MMMM': case 'MMM':
                regexp.append("(\\D+)");
                break;
            case 'tt': case 't':
                regexp.append("(\\D*)");
                break;
            case 'yyyy':
                regexp.append("(\\d{4})");
                break;
            case 'fff':
                regexp.append("(\\d{3})");
                break;
            case 'ff':
                regexp.append("(\\d{2})");
                break;
            case 'f':
                regexp.append("(\\d)");
                break;
            case 'dd': case 'd':
            case 'MM': case 'M':
            case 'yy': case 'y':
            case 'HH': case 'H':
            case 'hh': case 'h':
            case 'mm': case 'm':
            case 'ss': case 's':
                regexp.append("(\\d\\d?)");
                break;
            case 'zzz':
                regexp.append("([+-]?\\d\\d?:\\d{2})");
                break;
            case 'zz': case 'z':
                regexp.append("([+-]?\\d\\d?)");
                break;
        }
        Array.add(groups, match[0]);
    }
    Date._appendPreOrPostMatch(expFormat.slice(index), regexp);
    regexp.append("$");
    // allow whitespace to differ when matching formats.
    var regexpStr =3D regexp.toString().replace(/\s+/g, "\\s+");
    var parseRegExp =3D {'regExp': regexpStr, 'groups': groups};
    // cache the regex for this format.
    dtf._parseRegExp[format] =3D parseRegExp;
    return parseRegExp;
}

Date._getTokenRegExp =3D function Date$_getTokenRegExp() {
    // regular expression for matching dateTime tokens in format =
strings.
    return =
/dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|=
zzz|zz|z/g;
}

Date.parseLocale =3D function Date$parseLocale(value, formats) {
    /// <summary locid=3D"M:J#Date.parseLocale" />
    /// <param name=3D"value" type=3D"String"></param>
    /// <param name=3D"formats" parameterArray=3D"true" =
optional=3D"true" mayBeNull=3D"true"></param>
    /// <returns type=3D"Date"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String},
        {name: "formats", mayBeNull: true, optional: true, =
parameterArray: true}
    ]);
    if (e) throw e;
    return Date._parse(value, Sys.CultureInfo.CurrentCulture, =
arguments);
}

Date.parseInvariant =3D function Date$parseInvariant(value, formats) {
    /// <summary locid=3D"M:J#Date.parseInvariant" />
    /// <param name=3D"value" type=3D"String"></param>
    /// <param name=3D"formats" parameterArray=3D"true" =
optional=3D"true" mayBeNull=3D"true"></param>
    /// <returns type=3D"Date"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String},
        {name: "formats", mayBeNull: true, optional: true, =
parameterArray: true}
    ]);
    if (e) throw e;
    return Date._parse(value, Sys.CultureInfo.InvariantCulture, =
arguments);
}

Date._parse =3D function Date$_parse(value, cultureInfo, args) {
    // args is a params array with value as the first item, followed by =
custom formats.
    // try parse with custom formats.
    var custom =3D false;
    for (var i =3D 1, il =3D args.length; i < il; i++) {
        var format =3D args[i];
        if (format) {
            custom =3D true;
            var date =3D Date._parseExact(value, format, cultureInfo);
            if (date) return date;
        }
    }
    // try parse with culture formats.
    if (! custom) {
        var formats =3D cultureInfo._getDateTimeFormats();
        for (var i =3D 0, il =3D formats.length; i < il; i++) {
            var date =3D Date._parseExact(value, formats[i], =
cultureInfo);
            if (date) return date;
        }
    }
    return null;
}

Date._parseExact =3D function Date$_parseExact(value, format, =
cultureInfo) {
    // try to parse the date string value by matching against the format =
string
    // while using the specified culture for date field names.
    value =3D value.trim();
    var dtf =3D cultureInfo.dateTimeFormat;

    // convert date formats into regular expressions with groupings.
    // use the regexp to determine the input format and extract the date =
fields.
    var parseInfo =3D Date._getParseRegExp(dtf, format);
    var match =3D new RegExp(parseInfo.regExp).exec(value);
    // DevDiv 124696: Return null to avoid Firefox warning "does not =
always return a value"
    if (match =3D=3D=3D null) return null;
   =20
    // found a date format that matches the input.
    var groups =3D parseInfo.groups;
    var year =3D null, month =3D null, date =3D null, weekDay =3D null;
    var hour =3D 0, min =3D 0, sec =3D 0, msec =3D 0, tzMinOffset =3D =
null;
    var pmHour =3D false;
    // iterate the format groups to extract and set the date fields.
    for (var j =3D 0, jl =3D groups.length; j < jl; j++) {
        var matchGroup =3D match[j+1];
        if (matchGroup) {
            switch (groups[j]) {
                case 'dd': case 'd':
                    // Day of month.
                    date =3D parseInt(matchGroup, 10);
                    // check that date is generally in valid range, also =
checking overflow below.
                    if ((date < 1) || (date > 31)) return null;
                    break;
                case 'MMMM':
                    // Month, long name.
                    month =3D cultureInfo._getMonthIndex(matchGroup);
                    if ((month < 0) || (month > 11)) return null;
                    break;
                case 'MMM':
                    // Month, short name.
                    month =3D =
cultureInfo._getAbbrMonthIndex(matchGroup);
                    if ((month < 0) || (month > 11)) return null;
                    break;
                case 'M': case 'MM':
                    // Month.
                    var month =3D parseInt(matchGroup, 10) - 1;
                    if ((month < 0) || (month > 11)) return null;
                    break;
                case 'y': case 'yy':
                    // 2-Digit Year.
                    year =3D Date._expandYear(dtf,parseInt(matchGroup, =
10));
                    if ((year < 0) || (year > 9999)) return null;
                    break;
                case 'yyyy':
                    // 4-Digit Year.
                    year =3D parseInt(matchGroup, 10);
                    if ((year < 0) || (year > 9999)) return null;
                    break;
                case 'h': case 'hh':
                    // Hours (12-hour clock).
                    hour =3D parseInt(matchGroup, 10);
                    if (hour =3D=3D=3D 12) hour =3D 0;
                    if ((hour < 0) || (hour > 11)) return null;
                    break;
                case 'H': case 'HH':
                    // Hours (24-hour clock).
                    hour =3D parseInt(matchGroup, 10);
                    if ((hour < 0) || (hour > 23)) return null;
                    break;
                case 'm': case 'mm':
                    // Minutes.
                    min =3D parseInt(matchGroup, 10);
                    if ((min < 0) || (min > 59)) return null;
                    break;
                case 's': case 'ss':
                    // Seconds.
                    sec =3D parseInt(matchGroup, 10);
                    if ((sec < 0) || (sec > 59)) return null;
                    break;
                case 'tt': case 't':
                    // AM/PM designator.
                    var upperToken =3D matchGroup.toUpperCase();
                    pmHour =3D (upperToken =3D=3D=3D =
dtf.PMDesignator.toUpperCase());
                    if (!pmHour && (upperToken !=3D=3D =
dtf.AMDesignator.toUpperCase())) return null;
                    break;
                case 'f':
                    // Deciseconds.
                    msec =3D parseInt(matchGroup, 10) * 100;
                    if ((msec < 0) || (msec > 999)) return null;
                    break;
                case 'ff':
                    // Centiseconds.
                    msec =3D parseInt(matchGroup, 10) * 10;
                    if ((msec < 0) || (msec > 999)) return null;
                    break;
                case 'fff':
                    // Milliseconds.
                    msec =3D parseInt(matchGroup, 10);
                    if ((msec < 0) || (msec > 999)) return null;
                    break;
                case 'dddd':
                    // Day of week.
                    weekDay =3D cultureInfo._getDayIndex(matchGroup);
                    if ((weekDay < 0) || (weekDay > 6)) return null;
                    break;
                case 'ddd':
                    // Day of week.
                    weekDay =3D =
cultureInfo._getAbbrDayIndex(matchGroup);
                    if ((weekDay < 0) || (weekDay > 6)) return null;
                    break;
                case 'zzz':
                    // Time zone offset in +/- hours:min.
                    var offsets =3D matchGroup.split(/:/);
                    if (offsets.length !=3D=3D 2) return null;
                    var hourOffset =3D parseInt(offsets[0], 10);
                    if ((hourOffset < -12) || (hourOffset > 13)) return =
null;
                    var minOffset =3D parseInt(offsets[1], 10);
                    if ((minOffset < 0) || (minOffset > 59)) return =
null;
                    tzMinOffset =3D (hourOffset * 60) + =
(matchGroup.startsWith('-')? -minOffset : minOffset);
                    break;
                case 'z': case 'zz':
                    // Time zone offset in +/- hours.
                    var hourOffset =3D parseInt(matchGroup, 10);
                    if ((hourOffset < -12) || (hourOffset > 13)) return =
null;
                    tzMinOffset =3D hourOffset * 60;
                    break;
            }
        }
    }
    var result =3D new Date();
    if (year =3D=3D=3D null) {
        year =3D result.getFullYear();
    }
    if (month =3D=3D=3D null) {
        month =3D result.getMonth();
    }
    if (date =3D=3D=3D null) {
        date =3D result.getDate();
    }
    // have to set year, month and date together to avoid overflow based =
on current date.
    result.setFullYear(year, month, date);
    // check to see if date overflowed for specified month (only checked =
1-31 above).
    if (result.getDate() !=3D=3D date) return null;
    // invalid day of week.
    if ((weekDay !=3D=3D null) && (result.getDay() !=3D=3D weekDay)) {
        return null;
    }
    // if pm designator token was found make sure the hours fit the =
24-hour clock.
    if (pmHour && (hour < 12)) {
        hour +=3D 12;
    }
    result.setHours(hour, min, sec, msec);
    if (tzMinOffset !=3D=3D null) {
        // adjust timezone to utc before applying local offset.
        var adjustedMin =3D result.getMinutes() - (tzMinOffset + =
result.getTimezoneOffset());
        // Safari limits hours and minutes to the range of -127 to 127.  =
We need to use setHours
        // to ensure both these fields will not exceed this range.  =
adjustedMin will range
        // somewhere between -1440 and 1500, so we only need to split =
this into hours.
        result.setHours(result.getHours() + parseInt(adjustedMin/60, =
10), adjustedMin%60);
    }
    return result;
}

Date.prototype.format =3D function Date$format(format) {
    /// <summary locid=3D"M:J#Date.format" />
    /// <param name=3D"format" type=3D"String"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "format", type: String}
    ]);
    if (e) throw e;
    return this._toFormattedString(format, =
Sys.CultureInfo.InvariantCulture);
}

Date.prototype.localeFormat =3D function Date$localeFormat(format) {
    /// <summary locid=3D"M:J#Date.localeFormat" />
    /// <param name=3D"format" type=3D"String"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "format", type: String}
    ]);
    if (e) throw e;
    return this._toFormattedString(format, =
Sys.CultureInfo.CurrentCulture);
}

Date.prototype._toFormattedString =3D function =
Date$_toFormattedString(format, cultureInfo) {
    if (!format || (format.length =3D=3D=3D 0) || (format =3D=3D=3D =
'i')) {
        if (cultureInfo && (cultureInfo.name.length > 0)) {
            return this.toLocaleString();
        }
        else {
            return this.toString();
        }
    }

    var dtf =3D cultureInfo.dateTimeFormat;
    format =3D Date._expandFormat(dtf, format);

    // Start with an empty string
    var ret =3D new Sys.StringBuilder();
    var hour;

    function addLeadingZero(num) {
        if (num < 10) {
            return '0' + num;
        }
        return num.toString();
    }

    function addLeadingZeros(num) {
        if (num < 10) {
            return '00' + num;
        }
        if (num < 100) {
            return '0' + num;
        }
        return num.toString();
    }

    var quoteCount =3D 0;
    var tokenRegExp =3D Date._getTokenRegExp();
    for (;;) {

        // Save the current index
        var index =3D tokenRegExp.lastIndex;

        // Look for the next pattern
        var ar =3D tokenRegExp.exec(format);

        // Append the text before the pattern (or the end of the string =
if not found)
        var preMatch =3D format.slice(index, ar ? ar.index : =
format.length);
        quoteCount +=3D Date._appendPreOrPostMatch(preMatch, ret);

        if (!ar) break;

        // do not replace any matches that occur inside a string =
literal.
        if ((quoteCount%2) =3D=3D=3D 1) {
            ret.append(ar[0]);
            continue;
        }

        switch (ar[0]) {
        case "dddd":
            // Day of the week, using the full name
            ret.append(dtf.DayNames[this.getDay()]);
            break;
        case "ddd":
            //Day of the week, as a three-letter abbreviation
            ret.append(dtf.AbbreviatedDayNames[this.getDay()]);
            break;
        case "dd":
            // Day of month, with leading zero for single-digit days
            ret.append(addLeadingZero(this.getDate()));
            break;
        case "d":
            // Day of month, without leading zero for single-digit days
            ret.append(this.getDate());
            break;
        case "MMMM":
            // Month, using the full name
            ret.append(dtf.MonthNames[this.getMonth()]);
            break;
        case "MMM":
            // Month, as a three-letter abbreviation
            ret.append(dtf.AbbreviatedMonthNames[this.getMonth()]);
            break;
        case "MM":
            // Month, as digits, with leading zero for single-digit =
months
            ret.append(addLeadingZero(this.getMonth() + 1));
            break;
        case "M":
            // Month, as digits, with no leading zero for single-digit =
months
            ret.append(this.getMonth() + 1);
            break;
        case "yyyy":
            // Year represented by four full digits
            ret.append(this.getFullYear());
            break;
        case "yy":
            // Year, as two digits, with leading zero for years less =
than 10
            ret.append(addLeadingZero(this.getFullYear() % 100));
            break;
        case "y":
            // Year, as two digits, but with no leading zero for years =
less than 10
            ret.append(this.getFullYear() % 100);
            break;
        case "hh":
            // Hours with leading zero for single-digit hours, using =
12-hour clock
            hour =3D this.getHours() % 12;
            if (hour =3D=3D=3D 0) hour =3D 12;
            ret.append(addLeadingZero(hour));
            break;
        case "h":
            // Hours with no leading zero for single-digit hours, using =
12-hour clock
            hour =3D this.getHours() % 12;
            if (hour =3D=3D=3D 0) hour =3D 12;
            ret.append(hour);
            break;
        case "HH":
            // Hours with leading zero for single-digit hours, using =
24-hour clock
            ret.append(addLeadingZero(this.getHours()));
            break;
        case "H":
            // Hours with no leading zero for single-digit hours, using =
24-hour clock
            ret.append(this.getHours());
            break;
        case "mm":
            // Minutes with leading zero  for single-digit minutes
            ret.append(addLeadingZero(this.getMinutes()));
            break;
        case "m":
            // Minutes with no leading zero  for single-digit minutes
            ret.append(this.getMinutes());
            break;
        case "ss":
            // Seconds with leading zero for single-digit seconds
            ret.append(addLeadingZero(this.getSeconds()));
            break;
        case "s":
            // Seconds with no leading zero for single-digit seconds
            ret.append(this.getSeconds());
            break;
        case "tt":
            // Multicharacter am/pm indicator
            ret.append((this.getHours() < 12) ? dtf.AMDesignator : =
dtf.PMDesignator);
            break;
        case "t":
            // One character am/pm indicator ("a" or "p")
            ret.append(((this.getHours() < 12) ? dtf.AMDesignator : =
dtf.PMDesignator).charAt(0));
            break;
        case "f":
            // Deciseconds
            =
ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0));
            break;
        case "ff":
            // Centiseconds
            ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, =
2));
            break;
        case "fff":
            // Milliseconds
            ret.append(addLeadingZeros(this.getMilliseconds()));
            break;
        case "z":
            // Time zone offset, no leading zero
            hour =3D this.getTimezoneOffset() / 60;
            ret.append(((hour <=3D 0) ? '+' : '-') + =
Math.floor(Math.abs(hour)));
            break;
        case "zz":
            // Time zone offset with leading zero
            hour =3D this.getTimezoneOffset() / 60;
            ret.append(((hour <=3D 0) ? '+' : '-') + =
addLeadingZero(Math.floor(Math.abs(hour))));
            break;
        case "zzz":
            // Time zone offset with leading zero
            hour =3D this.getTimezoneOffset() / 60;
            ret.append(((hour <=3D 0) ? '+' : '-') + =
addLeadingZero(Math.floor(Math.abs(hour))) +
                dtf.TimeSeparator + =
addLeadingZero(Math.abs(this.getTimezoneOffset() % 60)));
            break;
        }
    }
    return ret.toString();
}
=20
Number.__typeName =3D 'Number';
Number.__class =3D true;

Number.parseLocale =3D function Number$parseLocale(value) {
    /// <summary locid=3D"M:J#Number.parseLocale" />
    /// <param name=3D"value" type=3D"String"></param>
    /// <returns type=3D"Number"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String}
    ]);
    if (e) throw e;
    return Number._parse(value, Sys.CultureInfo.CurrentCulture);
}
Number.parseInvariant =3D function Number$parseInvariant(value) {
    /// <summary locid=3D"M:J#Number.parseInvariant" />
    /// <param name=3D"value" type=3D"String"></param>
    /// <returns type=3D"Number"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String}
    ]);
    if (e) throw e;
    return Number._parse(value, Sys.CultureInfo.InvariantCulture);
}
Number._parse =3D function Number$_parse(value, cultureInfo) {
    // <param name=3D"value" type=3D"String">A string that can parse to =
a number.</param>
    // <param name=3D"cultureInfo" type=3D"Sys.CultureInfo">Culture =
information.</param>
    // <returns type=3D"Number">Parsed number or Number.NaN if parsing =
failed.</returns>
    value =3D value.trim();
   =20
    // allow infinity or hexidecimal for javascript compatability.
    if (value.match(/^[+-]?infinity$/i)) {
        return parseFloat(value);
    }
    if (value.match(/^0x[a-f0-9]+$/i)) {
        return parseInt(value);
    }

    var numFormat =3D cultureInfo.numberFormat;
    var signInfo =3D Number._parseNumberNegativePattern(value, =
numFormat, numFormat.NumberNegativePattern);
    var sign =3D signInfo[0];
    var num =3D signInfo[1];
   =20
    // support leading sign without space in addition to culture =
negative format for .NET compatability
    if ((sign =3D=3D=3D '') && (numFormat.NumberNegativePattern !=3D=3D =
1)) {
        signInfo =3D Number._parseNumberNegativePattern(value, =
numFormat, 1);
        sign =3D signInfo[0];
        num =3D signInfo[1];
    }
    if (sign =3D=3D=3D '') sign =3D '+';
   =20
    var exponent;
    var intAndFraction;
    var exponentPos =3D num.indexOf('e');
    if (exponentPos < 0) exponentPos =3D num.indexOf('E');
    if (exponentPos < 0) {
        intAndFraction =3D num;
        exponent =3D null;
    }
    else {
        intAndFraction =3D num.substr(0, exponentPos);
        exponent =3D num.substr(exponentPos + 1);
    }
   =20
    var integer;
    var fraction;
    var decimalPos =3D =
intAndFraction.indexOf(numFormat.NumberDecimalSeparator);
    if (decimalPos < 0) {
        integer =3D intAndFraction;
        fraction =3D null;
    }
    else {
        integer =3D intAndFraction.substr(0, decimalPos);
        fraction =3D intAndFraction.substr(decimalPos + =
numFormat.NumberDecimalSeparator.length);
    }
   =20
    // strip group separators from the integer portion
    integer =3D integer.split(numFormat.NumberGroupSeparator).join('');
   =20
    var p =3D sign + integer;
    if (fraction !=3D=3D null) {
        p +=3D '.' + fraction;
    }
    if (exponent !=3D=3D null) {
        var expSignInfo =3D Number._parseNumberNegativePattern(exponent, =
numFormat, 1);
        if (expSignInfo[0] =3D=3D=3D '') {
            expSignInfo[0] =3D '+';
        }
        p +=3D 'e' + expSignInfo[0] + expSignInfo[1];
    }

    // don't allow multiple decimals separators, group separators after =
decimal or trailing strings.
    if (p.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/)) {
        return parseFloat(p);
    }
    return Number.NaN;
}
Number._parseNumberNegativePattern =3D function =
Number$_parseNumberNegativePattern(value, numFormat, =
numberNegativePattern) {
    // <summary>
    //     Extracts the sign and number from a numeric input string =
using the culture-specific number format
    //     information and number negative pattern.
    // </summary>
    // <param name=3D"value" type=3D"String">Numerical string =
value.</param>
    // <param name=3D"numFormat" type=3D"Object">Culture-specific number =
formatting information.</param>
    // <param name=3D"numberNegativePattern" =
type=3D"Number">Culture-specific specifier for the negative number =
format.
    // </param>
    // <returns type=3D"Array">Sign and number for the input value.  The =
sign is the invariant symbol or an empty
    //     string if the number was unsigned.
    // </returns>
    var neg =3D numFormat.NegativeSign;
    var pos =3D numFormat.PositiveSign;   =20
    switch (numberNegativePattern) {
        case 4: // trailing sign with space
            neg =3D ' ' + neg;
            pos =3D ' ' + pos;
        case 3: // trailing sign no space
            if (value.endsWith(neg)) {
                return ['-', value.substr(0, value.length - =
neg.length)];
            }
            else if (value.endsWith(pos)) {
                return ['+', value.substr(0, value.length - =
pos.length)];
            }
            break;
        case 2: // leading sign with space
            neg +=3D ' ';
            pos +=3D ' ';
        case 1: // leading sign no space
            if (value.startsWith(neg)) {
                return ['-', value.substr(neg.length)];
            }
            else if (value.startsWith(pos)) {
                return ['+', value.substr(pos.length)];
            }
            break;
        case 0: // parenthesis
            if (value.startsWith('(') && value.endsWith(')')) {
                return ['-', value.substr(1, value.length - 2)];
            }
            break;
    }
    return ['', value];
}

Number.prototype.format =3D function Number$format(format) {
    /// <summary locid=3D"M:J#Number.format" />
    /// <param name=3D"format" type=3D"String"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "format", type: String}
    ]);
    if (e) throw e;
    return this._toFormattedString(format, =
Sys.CultureInfo.InvariantCulture);
}
Number.prototype.localeFormat =3D function Number$localeFormat(format) {
    /// <summary locid=3D"M:J#Number.localeFormat" />
    /// <param name=3D"format" type=3D"String"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "format", type: String}
    ]);
    if (e) throw e;
    return this._toFormattedString(format, =
Sys.CultureInfo.CurrentCulture);
}
Number.prototype._toFormattedString =3D function =
Number$_toFormattedString(format, cultureInfo) {
    if (!format || (format.length =3D=3D=3D 0) || (format =3D=3D=3D =
'i')) {
        if (cultureInfo && (cultureInfo.name.length > 0)) {
            return this.toLocaleString();
        }
        else {
            return this.toString();
        }
    }

    // All the enum patterns for the various NumberFormats
    var _percentPositivePattern =3D ["n %", "n%", "%n" ];
    var _percentNegativePattern =3D ["-n %", "-n%", "-%n"];
    var _numberNegativePattern =3D ["(n)","-n","- n","n-","n -"];
    var _currencyPositivePattern =3D ["$n","n$","$ n","n $"];
    var _currencyNegativePattern =3D =
["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n =
$-","$ n-","$ -n","n- $","($ n)","(n $)"];

    // Handles expanding numbers into some specified grouping i.e. [2, =
3, 5] would be ...,XXXXX,XXXXX,XXX,XX,
    function expandNumber(number, precision, groupSizes, sep, =
decimalChar) {
       =20
        var curSize =3D groupSizes[0];
        var curGroupIndex =3D 1;

        // Make the number a string
        var numberString =3D number.toString();
        var right =3D "";
        var exponent =3D "";
        // Split: left is integer, right is decimal and exponent.
        var decimalSplit =3D numberString.split('.');
        if (decimalSplit.length > 1) {
            numberString =3D decimalSplit[0];
            right =3D decimalSplit[1];
            // Split: left is decimal, right is exponent.
            var exponentSplit =3D right.split(/e/i);
            if (exponentSplit.length > 1) {
                right =3D exponentSplit[0];
                exponent =3D "e" + exponentSplit[1];
            }
        }

        // now check precision, if its 0, drop right, otherwise =
reassemble it
        if (precision > 0) {
            // trim right down to precision size
            var rightDifference =3D right.length - precision;
            if (rightDifference > 0) {
                right =3D right.slice(0, precision);
            } else if (rightDifference < 0) {
                for (var i=3D0; i<Math.abs(rightDifference); i++) {
                    right +=3D '0';
                }
            }

            // finally add the separator
            right =3D decimalChar + right;
        }
        else { // No precision wanted, so drop the right
            right =3D "";
        }
        right +=3D exponent;

        var stringIndex =3D numberString.length-1;
        var ret =3D "";
        while (stringIndex >=3D 0) {

            // group size of 0 or larger than the rest of the string =
means take the rest of the string
            if (curSize =3D=3D=3D 0 || curSize > stringIndex) {
                if (ret.length > 0)
                    return numberString.slice(0, stringIndex + 1) + sep =
+ ret + right;
                else
                    return numberString.slice(0, stringIndex + 1) + =
right;
            }

            if (ret.length > 0)
                ret =3D numberString.slice(stringIndex - curSize + 1, =
stringIndex+1) + sep + ret;
            else
                ret =3D numberString.slice(stringIndex - curSize + 1, =
stringIndex+1);

            stringIndex -=3D curSize;

            if (curGroupIndex < groupSizes.length) {
                curSize =3D groupSizes[curGroupIndex];
                curGroupIndex++;
            }
        }
        return numberString.slice(0, stringIndex + 1) + sep + ret + =
right;
    }
    var nf =3D cultureInfo.numberFormat;

    // Number is always positive for printing purposes (negative treated =
separately)
    var number =3D Math.abs(this);

    // Default to number format
    if (!format)
        format =3D "D";

    var precision =3D -1;
    if (format.length > 1) precision =3D parseInt(format.slice(1), 10);

    var pattern;
    switch (format.charAt(0)) {
    case "d":
    case "D":
        pattern =3D 'n';

        // precision for decimal is padding
        if (precision !=3D=3D -1) {
            var numberStr =3D ""+number;
            var zerosToAdd =3D precision - numberStr.length;
            if (zerosToAdd > 0) {
                for (var i=3D0; i<zerosToAdd; i++) {
                    numberStr =3D '0'+numberStr;
                }
            }
            number =3D numberStr;
        }

        // We do want the negative for this scenario only
        if (this < 0) number =3D -number;
        break;
    case "c":
    case "C":
        if (this < 0) pattern =3D =
_currencyNegativePattern[nf.CurrencyNegativePattern];
        else pattern =3D =
_currencyPositivePattern[nf.CurrencyPositivePattern];
        if (precision =3D=3D=3D -1) precision =3D =
nf.CurrencyDecimalDigits;
        number =3D expandNumber(Math.abs(this), precision, =
nf.CurrencyGroupSizes, nf.CurrencyGroupSeparator, =
nf.CurrencyDecimalSeparator);
        break;
    case "n":
    case "N":
        if (this < 0) pattern =3D =
_numberNegativePattern[nf.NumberNegativePattern];
        else pattern =3D 'n';
        if (precision =3D=3D=3D -1) precision =3D =
nf.NumberDecimalDigits;
        number =3D expandNumber(Math.abs(this), precision, =
nf.NumberGroupSizes, nf.NumberGroupSeparator, =
nf.NumberDecimalSeparator);
        break;
    case "p":
    case "P":
        if (this < 0) pattern =3D =
_percentNegativePattern[nf.PercentNegativePattern];
        else pattern =3D =
_percentPositivePattern[nf.PercentPositivePattern];
        if (precision =3D=3D=3D -1) precision =3D =
nf.PercentDecimalDigits;
        number =3D expandNumber(Math.abs(this), precision, =
nf.PercentGroupSizes, nf.PercentGroupSeparator, =
nf.PercentDecimalSeparator);
        break;
    default:
        throw Error.format(Sys.Res.formatBadFormatSpecifier);
    }

    var regex =3D /n|\$|-|%/g;

    // Start with an empty string
    var ret =3D "";

    for (;;) {

        // Save the current index
        var index =3D regex.lastIndex;

        // Look for the next pattern
        var ar =3D regex.exec(pattern);

        // Append the text before the pattern (or the end of the string =
if not found)
        ret +=3D pattern.slice(index, ar ? ar.index : pattern.length);

        if (!ar)
            break;

        switch (ar[0]) {
        case "n":
            ret +=3D number;
            break;
        case "$":
            ret +=3D nf.CurrencySymbol;
            break;
        case "-":
            ret +=3D nf.NegativeSign;
            break;
        case "%":
            ret +=3D nf.PercentSymbol;
            break;
        }
    }

    return ret;
}
=20
RegExp.__typeName =3D 'RegExp';
RegExp.__class =3D true;
=20
Array.__typeName =3D 'Array';
Array.__class =3D true;

Array.add =3D Array.enqueue =3D function Array$enqueue(array, item) {
    /// <summary locid=3D"M:J#Array.enqueue" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"item" mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "item", mayBeNull: true}
    ]);
    if (e) throw e;

    // Setting Array[Array.length] is faster than Array.push() for a =
single element.
    array[array.length] =3D item;
}

Array.addRange =3D function Array$addRange(array, items) {
    /// <summary locid=3D"M:J#Array.addRange" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"items" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "items", type: Array, elementMayBeNull: true}
    ]);
    if (e) throw e;

    // Array.push() for multiple elements is faster than setting =
Array[Array.length] in a loop.
    array.push.apply(array, items);
}

Array.clear =3D function Array$clear(array) {
    /// <summary locid=3D"M:J#Array.clear" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true}
    ]);
    if (e) throw e;
    array.length =3D 0;
}

Array.clone =3D function Array$clone(array) {
    /// <summary locid=3D"M:J#Array.clone" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <returns type=3D"Array" elementMayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true}
    ]);
    if (e) throw e;
    if (array.length =3D=3D=3D 1) {
        return [array[0]];
    }
    else {
        // When the Array ctor is called with 0 or 2 or more arguments, =
it creates a new
        // Array with the elements from the argument list.
        return Array.apply(null, array);
    }
}

Array.contains =3D function Array$contains(array, item) {
    /// <summary locid=3D"M:J#Array.contains" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"item" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "item", mayBeNull: true}
    ]);
    if (e) throw e;
    return (Array.indexOf(array, item) >=3D 0);
}

Array.dequeue =3D function Array$dequeue(array) {
    /// <summary locid=3D"M:J#Array.dequeue" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <returns mayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true}
    ]);
    if (e) throw e;
    return array.shift();
}

Array.forEach =3D function Array$forEach(array, method, instance) {
    /// <summary locid=3D"M:J#Array.forEach" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"method" type=3D"Function"></param>
    /// <param name=3D"instance" optional=3D"true" =
mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "method", type: Function},
        {name: "instance", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    for (var i =3D 0, l =3D array.length; i < l; i++) {
        var elt =3D array[i];
        if (typeof(elt) !=3D=3D 'undefined') method.call(instance, elt, =
i, array);
    }
}

Array.indexOf =3D function Array$indexOf(array, item, start) {
    /// <summary locid=3D"M:J#Array.indexOf" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"item" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"start" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"Number"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "item", mayBeNull: true, optional: true},
        {name: "start", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    if (typeof(item) =3D=3D=3D "undefined") return -1;
    var length =3D array.length;
    if (length !=3D=3D 0) {
        // Coerce into number ("1a" will become NaN, which is consistent =
with the built-in behavior of similar Array methods)
        start =3D start - 0;
        // NaN becomes zero
        if (isNaN(start)) {
            start =3D 0;
        }
        else {
            // If start is positive or negative infinity, don't try to =
truncate it.
            // The infinite values will be handled correctly by the =
subsequent code.
            if (isFinite(start)) {
                // This is faster than doing Math.floor or Math.ceil
                start =3D start - (start % 1);
            }
            // Negative start indices start from the end
            if (start < 0) {
                start =3D Math.max(0, length + start);
            }
        }

        // A do/while loop seems to have equal performance to a for loop =
in this scenario
        for (var i =3D start; i < length; i++) {
            if ((typeof(array[i]) !=3D=3D "undefined") && (array[i] =
=3D=3D=3D item)) {
                return i;
            }
        }
    }
    return -1;
}

Array.insert =3D function Array$insert(array, index, item) {
    /// <summary locid=3D"M:J#Array.insert" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"index" mayBeNull=3D"true"></param>
    /// <param name=3D"item" mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "index", mayBeNull: true},
        {name: "item", mayBeNull: true}
    ]);
    if (e) throw e;
    array.splice(index, 0, item);
}

Array.parse =3D function Array$parse(value) {
    /// <summary locid=3D"M:J#Array.parse" />
    /// <param name=3D"value" type=3D"String" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"Array" elementMayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String, mayBeNull: true}
    ]);
    if (e) throw e;
    if (!value) return [];
    var v =3D eval(value);
    if (!Array.isInstanceOfType(v)) throw Error.argument('value', =
Sys.Res.arrayParseBadFormat);
    return v;
}

Array.remove =3D function Array$remove(array, item) {
    /// <summary locid=3D"M:J#Array.remove" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"item" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "item", mayBeNull: true}
    ]);
    if (e) throw e;
    var index =3D Array.indexOf(array, item);
    if (index >=3D 0) {
        array.splice(index, 1);
    }
    return (index >=3D 0);
}

Array.removeAt =3D function Array$removeAt(array, index) {
    /// <summary locid=3D"M:J#Array.removeAt" />
    /// <param name=3D"array" type=3D"Array" =
elementMayBeNull=3D"true"></param>
    /// <param name=3D"index" mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "array", type: Array, elementMayBeNull: true},
        {name: "index", mayBeNull: true}
    ]);
    if (e) throw e;
    array.splice(index, 1);
}
=20
// Define the root object (for non-browser hosts)
if (!window) this.window =3D this;

// Alias Function as Type
window.Type =3D Function;

// This has undistinguishable perf from compiled a RegExp.
// The regexps here are kept a little too wide to allow for Unicode =
characters but still
// capture the most obvious developer errors. The JavaScript parser, as =
well as the checks for
// eval('name') =3D=3D=3D name will take care of the other errors.
// =
*************************************************************************=
*******************
// NOTE: update ScriptComponentDescriptor.cs with any change to this =
expression
// so server and client-side are in sync.
Type.__fullyQualifiedIdentifierRegExp =3D new RegExp("^[^.0-9 =
\\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ =
\\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. =
\\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i");
Type.__identifierRegExp =3D new RegExp("^[^.0-9 =
\\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. =
\\s|,;:&*=3D+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i");

Type.prototype.callBaseMethod =3D function Type$callBaseMethod(instance, =
name, baseArguments) {
    /// <summary locid=3D"M:J#Type.callBaseMethod" />
    /// <param name=3D"instance"></param>
    /// <param name=3D"name" type=3D"String"></param>
    /// <param name=3D"baseArguments" type=3D"Array" optional=3D"true" =
mayBeNull=3D"true" elementMayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance"},
        {name: "name", type: String},
        {name: "baseArguments", type: Array, mayBeNull: true, optional: =
true, elementMayBeNull: true}
    ]);
    if (e) throw e;
    var baseMethod =3D this.getBaseMethod(instance, name);
    if (!baseMethod) throw =
Error.invalidOperation(String.format(Sys.Res.methodNotFound, name));
    if (!baseArguments) {
        return baseMethod.apply(instance);
    }
    else {
        return baseMethod.apply(instance, baseArguments);
    }
}

Type.prototype.getBaseMethod =3D function Type$getBaseMethod(instance, =
name) {
    /// <summary locid=3D"M:J#Type.getBaseMethod" />
    /// <param name=3D"instance"></param>
    /// <param name=3D"name" type=3D"String"></param>
    /// <returns type=3D"Function" mayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance"},
        {name: "name", type: String}
    ]);
    if (e) throw e;
    if (!this.isInstanceOfType(instance)) throw =
Error.argumentType('instance', Object.getType(instance), this);
    var baseType =3D this.getBaseType();
    if (baseType) {
        var baseMethod =3D baseType.prototype[name];
        return (baseMethod instanceof Function) ? baseMethod : null;
    }

    return null;
}

Type.prototype.getBaseType =3D function Type$getBaseType() {
    /// <summary locid=3D"M:J#Type.getBaseType" />
    /// <returns type=3D"Type" mayBeNull=3D"true"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    return (typeof(this.__baseType) =3D=3D=3D "undefined") ? null : =
this.__baseType;
}

Type.prototype.getInterfaces =3D function Type$getInterfaces() {
    /// <summary locid=3D"M:J#Type.getInterfaces" />
    /// <returns type=3D"Array" elementType=3D"Type" mayBeNull=3D"false" =
elementMayBeNull=3D"false"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    var result =3D [];
    var type =3D this;
    while(type) {
        var interfaces =3D type.__interfaces;
        if (interfaces) {
            for (var i =3D 0, l =3D interfaces.length; i < l; i++) {
                var interfaceType =3D interfaces[i];
                if (!Array.contains(result, interfaceType)) {
                    result[result.length] =3D interfaceType;
                }
            }
        }
        type =3D type.__baseType;
    }
    return result;
}

Type.prototype.getName =3D function Type$getName() {
    /// <summary locid=3D"M:J#Type.getName" />
    /// <returns type=3D"String"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    return (typeof(this.__typeName) =3D=3D=3D "undefined") ? "" : =
this.__typeName;
}

Type.prototype.implementsInterface =3D function =
Type$implementsInterface(interfaceType) {
    /// <summary locid=3D"M:J#Type.implementsInterface" />
    /// <param name=3D"interfaceType" type=3D"Type"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "interfaceType", type: Type}
    ]);
    if (e) throw e;
    this.resolveInheritance();

    var interfaceName =3D interfaceType.getName();
    var cache =3D this.__interfaceCache;
    if (cache) {
        var cacheEntry =3D cache[interfaceName];
        if (typeof(cacheEntry) !=3D=3D 'undefined') return cacheEntry;
    }
    else {
        cache =3D this.__interfaceCache =3D {};
    }

    var baseType =3D this;
    while (baseType) {
        var interfaces =3D baseType.__interfaces;
        if (interfaces) {
            if (Array.indexOf(interfaces, interfaceType) !=3D=3D -1) {
                return cache[interfaceName] =3D true;
            }
        }

        baseType =3D baseType.__baseType;
    }

    return cache[interfaceName] =3D false;
}

Type.prototype.inheritsFrom =3D function Type$inheritsFrom(parentType) {
    /// <summary locid=3D"M:J#Type.inheritsFrom" />
    /// <param name=3D"parentType" type=3D"Type"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "parentType", type: Type}
    ]);
    if (e) throw e;
    this.resolveInheritance();
    var baseType =3D this.__baseType;
    while (baseType) {
        if (baseType =3D=3D=3D parentType) {
            return true;
        }
        baseType =3D baseType.__baseType;
    }

    return false;
}

Type.prototype.initializeBase =3D function Type$initializeBase(instance, =
baseArguments) {
    /// <summary locid=3D"M:J#Type.initializeBase" />
    /// <param name=3D"instance"></param>
    /// <param name=3D"baseArguments" type=3D"Array" optional=3D"true" =
mayBeNull=3D"true" elementMayBeNull=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance"},
        {name: "baseArguments", type: Array, mayBeNull: true, optional: =
true, elementMayBeNull: true}
    ]);
    if (e) throw e;
    if (!this.isInstanceOfType(instance)) throw =
Error.argumentType('instance', Object.getType(instance), this);

    this.resolveInheritance();
    if (this.__baseType) {
        if (!baseArguments) {
            this.__baseType.apply(instance);
        }
        else {
            this.__baseType.apply(instance, baseArguments);
        }
    }

    return instance;
}

Type.prototype.isImplementedBy =3D function =
Type$isImplementedBy(instance) {
    /// <summary locid=3D"M:J#Type.isImplementedBy" />
    /// <param name=3D"instance" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance", mayBeNull: true}
    ]);
    if (e) throw e;
    if (typeof(instance) =3D=3D=3D "undefined" || instance =3D=3D=3D =
null) return false;

    var instanceType =3D Object.getType(instance);
    return !!(instanceType.implementsInterface && =
instanceType.implementsInterface(this));
}

Type.prototype.isInstanceOfType =3D function =
Type$isInstanceOfType(instance) {
    /// <summary locid=3D"M:J#Type.isInstanceOfType" />
    /// <param name=3D"instance" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "instance", mayBeNull: true}
    ]);
    if (e) throw e;
    if (typeof(instance) =3D=3D=3D "undefined" || instance =3D=3D=3D =
null) return false;

    if (instance instanceof this) return true;

    var instanceType =3D Object.getType(instance);
    return !!(instanceType =3D=3D=3D this) ||
           (instanceType.inheritsFrom && =
instanceType.inheritsFrom(this)) ||
           (instanceType.implementsInterface && =
instanceType.implementsInterface(this));
}

Type.prototype.registerClass =3D function Type$registerClass(typeName, =
baseType, interfaceTypes) {
    /// <summary locid=3D"M:J#Type.registerClass" />
    /// <param name=3D"typeName" type=3D"String"></param>
    /// <param name=3D"baseType" type=3D"Type" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"interfaceTypes" parameterArray=3D"true" =
type=3D"Type"></param>
    /// <returns type=3D"Type"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "typeName", type: String},
        {name: "baseType", type: Type, mayBeNull: true, optional: true},
        {name: "interfaceTypes", type: Type, parameterArray: true}
    ]);
    if (e) throw e;
    if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw =
Error.argument('typeName', Sys.Res.notATypeName);
    // Check if the type name parses to an existing object that matches =
this.
    var parsedName;
    try {
        parsedName =3D eval(typeName);
    }
    catch(e) {
        throw Error.argument('typeName', Sys.Res.argumentTypeName);
    }
    if (parsedName !=3D=3D this) throw Error.argument('typeName', =
Sys.Res.badTypeName);
    // Check for double registrations
    if (Sys.__registeredTypes[typeName]) throw =
Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, =
typeName));

    // We never accept undefined for this parameter because this is the =
only way we can catch
    // registerClass("Sys.Foo", Sys.BArWithATypo, Sys.ISomeInterface).
    if ((arguments.length > 1) && (typeof(baseType) =3D=3D=3D =
'undefined')) throw Error.argumentUndefined('baseType');
    if (baseType && !baseType.__class) throw Error.argument('baseType', =
Sys.Res.baseNotAClass);

    this.prototype.constructor =3D this;
    this.__typeName =3D typeName;
    this.__class =3D true;
    if (baseType) {
        this.__baseType =3D baseType;
        this.__basePrototypePending =3D true;
    }
    // Saving a case-insensitive index of the registered types on each =
namespace
    Sys.__upperCaseTypes[typeName.toUpperCase()] =3D this;

    // It is more performant to check "if (interfaceTypes)" than "if =
(arguments.length > 2)".
    // Accessing the arguments array is relatively expensive, so we only =
want to do so if there
    // are actually interface parameters.
    if (interfaceTypes) {
        this.__interfaces =3D [];
        this.resolveInheritance();
        for (var i =3D 2, l =3D arguments.length; i < l; i++) {
            var interfaceType =3D arguments[i];
            if (!interfaceType.__interface) throw =
Error.argument('interfaceTypes[' + (i - 2) + ']', =
Sys.Res.notAnInterface);
            for (var methodName in interfaceType.prototype) {
                var method =3D interfaceType.prototype[methodName];
                if (!this.prototype[methodName]) {
                    this.prototype[methodName] =3D method;
                }
            }
            this.__interfaces.push(interfaceType);
        }
    }
    Sys.__registeredTypes[typeName] =3D true;

    return this;
}

Type.prototype.registerInterface =3D function =
Type$registerInterface(typeName) {
    /// <summary locid=3D"M:J#Type.registerInterface" />
    /// <param name=3D"typeName" type=3D"String"></param>
    /// <returns type=3D"Type"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "typeName", type: String}
    ]);
    if (e) throw e;
    if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw =
Error.argument('typeName', Sys.Res.notATypeName);
    // Check if the type name parses to an existing object that matches =
this.
    var parsedName;
    try {
        parsedName =3D eval(typeName);
    }
    catch(e) {
        throw Error.argument('typeName', Sys.Res.argumentTypeName);
    }
    if (parsedName !=3D=3D this) throw Error.argument('typeName', =
Sys.Res.badTypeName);
    // Check for double registrations
    if (Sys.__registeredTypes[typeName]) throw =
Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, =
typeName));
    // Saving a case-insensitive index of the registered types on each =
namespace
    Sys.__upperCaseTypes[typeName.toUpperCase()] =3D this;

    this.prototype.constructor =3D this;
    this.__typeName =3D typeName;
    this.__interface =3D true;
    Sys.__registeredTypes[typeName] =3D true;

    return this;
}

Type.prototype.resolveInheritance =3D function Type$resolveInheritance() =
{
    /// <summary locid=3D"M:J#Type.resolveInheritance" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();

    if (this.__basePrototypePending) {
        var baseType =3D this.__baseType;

        baseType.resolveInheritance();

        for (var memberName in baseType.prototype) {
            var memberValue =3D baseType.prototype[memberName];
            if (!this.prototype[memberName]) {
                this.prototype[memberName] =3D memberValue;
            }
        }
        delete this.__basePrototypePending;
    }
}

Type.getRootNamespaces =3D function Type$getRootNamespaces() {
    /// <summary locid=3D"M:J#Type.getRootNamespaces" />
    /// <returns type=3D"Array"></returns>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    return Array.clone(Sys.__rootNamespaces);
}

Type.isClass =3D function Type$isClass(type) {
    /// <summary locid=3D"M:J#Type.isClass" />
    /// <param name=3D"type" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "type", mayBeNull: true}
    ]);
    if (e) throw e;
    if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) =
return false;
    return !!type.__class;
}

Type.isInterface =3D function Type$isInterface(type) {
    /// <summary locid=3D"M:J#Type.isInterface" />
    /// <param name=3D"type" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "type", mayBeNull: true}
    ]);
    if (e) throw e;
    if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) =
return false;
    return !!type.__interface;
}

Type.isNamespace =3D function Type$isNamespace(object) {
    /// <summary locid=3D"M:J#Type.isNamespace" />
    /// <param name=3D"object" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "object", mayBeNull: true}
    ]);
    if (e) throw e;
    if ((typeof(object) =3D=3D=3D 'undefined') || (object =3D=3D=3D =
null)) return false;
    return !!object.__namespace;
}

Type.parse =3D function Type$parse(typeName, ns) {
    /// <summary locid=3D"M:J#Type.parse" />
    /// <param name=3D"typeName" type=3D"String" =
mayBeNull=3D"true"></param>
    /// <param name=3D"ns" optional=3D"true" mayBeNull=3D"true"></param>
    /// <returns type=3D"Type" mayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "typeName", type: String, mayBeNull: true},
        {name: "ns", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    var fn;
    if (ns) {
        fn =3D Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + =
typeName.toUpperCase()];
        return fn || null;
    }
    if (!typeName) return null;
    if (!Type.__htClasses) {
        Type.__htClasses =3D {};
    }
    fn =3D Type.__htClasses[typeName];
    if (!fn) {
        fn =3D eval(typeName);
        if (typeof(fn) !=3D=3D 'function') throw =
Error.argument('typeName', Sys.Res.notATypeName);
        Type.__htClasses[typeName] =3D fn;
    }
    return fn;
}

Type.registerNamespace =3D function =
Type$registerNamespace(namespacePath) {
    /// <summary locid=3D"M:J#Type.registerNamespace" />
    /// <param name=3D"namespacePath" type=3D"String"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "namespacePath", type: String}
    ]);
    if (e) throw e;
    if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) =
throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
    var rootObject =3D window;
    var namespaceParts =3D namespacePath.split('.');

    for (var i =3D 0; i < namespaceParts.length; i++) {
        var currentPart =3D namespaceParts[i];
        var ns =3D rootObject[currentPart];
        if (ns && !ns.__namespace) {
            throw =
Error.invalidOperation(String.format(Sys.Res.namespaceContainsObject, =
namespaceParts.splice(0, i + 1).join('.')));
        }
        if (!ns) {
            ns =3D rootObject[currentPart] =3D {
                __namespace: true,
                __typeName: namespaceParts.slice(0, i + 1).join('.')
            };
            if (i =3D=3D=3D 0) {
                Sys.__rootNamespaces[Sys.__rootNamespaces.length] =3D =
ns;
            }
            var parsedName;
            try {
                parsedName =3D eval(ns.__typeName);
            }
            catch(e) {
                parsedName =3D null;
            }
            if (parsedName !=3D=3D ns) {
                delete rootObject[currentPart];
                throw Error.argument('namespacePath', =
Sys.Res.invalidNameSpace);
            }
            ns.getName =3D function ns$getName() {return =
this.__typeName;}
        }
        rootObject =3D ns;
    }
}

// Bootstrapping the Sys namespace. Can't use registerNamespace here as =
its code uses some of the private
// variables that moved from the global namespace onto Sys.
// Changes to registerNamespace should be checked against this =
bootstrapping code to keep them in sync.
window.Sys =3D {
    __namespace: true,
    __typeName: "Sys",
    getName: function() {return "Sys";},
    __upperCaseTypes: {}
};
Sys.__rootNamespaces =3D [Sys];
Sys.__registeredTypes =3D {};

=20
Sys.IDisposable =3D function Sys$IDisposable() {
    throw Error.notImplemented();
}

    function Sys$IDisposable$dispose() {
        throw Error.notImplemented();
    }
Sys.IDisposable.prototype =3D {
    dispose: Sys$IDisposable$dispose
}
Sys.IDisposable.registerInterface('Sys.IDisposable');
=20
Sys.StringBuilder =3D function Sys$StringBuilder(initialText) {
    /// <summary locid=3D"M:J#Sys.StringBuilder.#ctor" />
    /// <param name=3D"initialText" optional=3D"true" =
mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "initialText", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    this._parts =3D (typeof(initialText) !=3D=3D 'undefined' && =
initialText !=3D=3D null && initialText !=3D=3D '') ?
        [initialText.toString()] : [];
    this._value =3D {};
    this._len =3D 0;
}


    function Sys$StringBuilder$append(text) {
        /// <summary locid=3D"M:J#Sys.StringBuilder.append" />
        /// <param name=3D"text" mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "text", mayBeNull: true}
        ]);
        if (e) throw e;
        this._parts[this._parts.length] =3D text;
    }

    function Sys$StringBuilder$appendLine(text) {
        /// <summary locid=3D"M:J#Sys.StringBuilder.appendLine" />
        /// <param name=3D"text" optional=3D"true" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "text", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        this._parts[this._parts.length] =3D
            ((typeof(text) =3D=3D=3D 'undefined') || (text =3D=3D=3D =
null) || (text =3D=3D=3D '')) ?
            '\r\n' : text + '\r\n';
    }

    function Sys$StringBuilder$clear() {
        /// <summary locid=3D"M:J#Sys.StringBuilder.clear" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        this._parts =3D [];
        this._value =3D {};
        this._len =3D 0;
    }

    function Sys$StringBuilder$isEmpty() {
        /// <summary locid=3D"M:J#Sys.StringBuilder.isEmpty" />
        /// <returns type=3D"Boolean"></returns>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this._parts.length =3D=3D=3D 0) return true;
        return this.toString() =3D=3D=3D '';
    }



    function Sys$StringBuilder$toString(separator) {
        /// <summary locid=3D"M:J#Sys.StringBuilder.toString" />
        /// <param name=3D"separator" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
        /// <returns type=3D"String"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "separator", type: String, mayBeNull: true, optional: =
true}
        ]);
        if (e) throw e;
        separator =3D separator || '';
        var parts =3D this._parts;
        if (this._len !=3D=3D parts.length) {
            this._value =3D {};
            this._len =3D parts.length;
        }
        var val =3D this._value;
        if (typeof(val[separator]) =3D=3D=3D 'undefined') {
            // Need to remove empty elements before joining in the =
separator case
            if (separator !=3D=3D '') {
                for (var i =3D 0; i < parts.length;) {
                    if ((typeof(parts[i]) =3D=3D=3D 'undefined') || =
(parts[i] =3D=3D=3D '') || (parts[i] =3D=3D=3D null)) {
                        parts.splice(i, 1);
                    }
                    else {
                        i++;
                    }
                }
            }
            val[separator] =3D this._parts.join(separator);
        }
        return val[separator];
    }
Sys.StringBuilder.prototype =3D {
    append: Sys$StringBuilder$append,
    appendLine: Sys$StringBuilder$appendLine,
    clear: Sys$StringBuilder$clear,
    isEmpty: Sys$StringBuilder$isEmpty,
    // separator may be null, to match behavior of ECMA =
Array.join(separator) and
    // .NET String.Join(separator, value)
    toString: Sys$StringBuilder$toString
}
Sys.StringBuilder.registerClass('Sys.StringBuilder');
=20
if (!window.XMLHttpRequest) {
    window.XMLHttpRequest =3D function window$XMLHttpRequest() {
        // DevDiv Bugs 150054: Msxml2.XMLHTTP (version independent =
ProgID) required for mobile IE
        var progIDs =3D [ 'Mxsml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ];
        for (var i =3D 0, l =3D progIDs.length; i < l; i++) {
            try {
                return new ActiveXObject(progIDs[i]);
            }
            catch (ex) {
            }
        }
        return null;
    }
}

// Compat
=20
Sys.Browser =3D {};

Sys.Browser.InternetExplorer =3D {};
Sys.Browser.Firefox =3D {};
Sys.Browser.Safari =3D {};
Sys.Browser.Opera =3D {};

Sys.Browser.agent =3D null;
Sys.Browser.hasDebuggerStatement =3D false;
Sys.Browser.name =3D navigator.appName;
Sys.Browser.version =3D parseFloat(navigator.appVersion);

if (navigator.userAgent.indexOf(' MSIE ') > -1) {
    Sys.Browser.agent =3D Sys.Browser.InternetExplorer;
    Sys.Browser.version =3D parseFloat(navigator.userAgent.match(/MSIE =
(\d+\.\d+)/)[1]);
    Sys.Browser.hasDebuggerStatement =3D true;
}
else if (navigator.userAgent.indexOf(' Firefox/') > -1) {
    Sys.Browser.agent =3D Sys.Browser.Firefox;
    Sys.Browser.version =3D parseFloat(navigator.userAgent.match(/ =
Firefox\/(\d+\.\d+)/)[1]);
    Sys.Browser.name =3D 'Firefox';
    Sys.Browser.hasDebuggerStatement =3D true;
}
else if (navigator.userAgent.indexOf(' Safari/') > -1) {
    Sys.Browser.agent =3D Sys.Browser.Safari;
    Sys.Browser.version =3D parseFloat(navigator.userAgent.match(/ =
Safari\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name =3D 'Safari';
}
else if (navigator.userAgent.indexOf('Opera/') > -1) {
    Sys.Browser.agent =3D Sys.Browser.Opera;
}

// Base Class Library

Type.registerNamespace('Sys.UI');

=20
Sys._Debug =3D function Sys$_Debug() {
    /// <summary locid=3D"M:J#Sys._Debug.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
}


    function Sys$_Debug$_appendConsole(text) {
        // VS script debugger output window.
        if ((typeof(Debug) !=3D=3D 'undefined') && Debug.writeln) {
            Debug.writeln(text);
        }
        // FF firebug and Safari console.
        if (window.console && window.console.log) {
            window.console.log(text);
        }
        // Opera console.
        if (window.opera) {
            window.opera.postError(text);
        }
        // WebDevHelper console.
        if (window.debugService) {
            window.debugService.trace(text);
        }
    }

    function Sys$_Debug$_appendTrace(text) {
        var traceElement =3D document.getElementById('TraceConsole');
        if (traceElement && (traceElement.tagName.toUpperCase() =
=3D=3D=3D 'TEXTAREA')) {
            traceElement.value +=3D text + '\n';
        }
    }

    function Sys$_Debug$assert(condition, message, displayCaller) {
        /// <summary locid=3D"M:J#Sys._Debug.assert" />
        /// <param name=3D"condition" type=3D"Boolean"></param>
        /// <param name=3D"message" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
        /// <param name=3D"displayCaller" type=3D"Boolean" =
optional=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "condition", type: Boolean},
            {name: "message", type: String, mayBeNull: true, optional: =
true},
            {name: "displayCaller", type: Boolean, optional: true}
        ]);
        if (e) throw e;
        if (!condition) {
            message =3D (displayCaller && this.assert.caller) ?
                String.format(Sys.Res.assertFailedCaller, message, =
this.assert.caller) :
                String.format(Sys.Res.assertFailed, message);

            if (confirm(String.format(Sys.Res.breakIntoDebugger, =
message))) {
                this.fail(message);
            }
        }
    }

    function Sys$_Debug$clearTrace() {
        var traceElement =3D document.getElementById('TraceConsole');
        if (traceElement && (traceElement.tagName.toUpperCase() =
=3D=3D=3D 'TEXTAREA')) {
            traceElement.value =3D '';
        }
    }

    function Sys$_Debug$fail(message) {
        /// <summary locid=3D"M:J#Sys._Debug.fail" />
        /// <param name=3D"message" type=3D"String" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "message", type: String, mayBeNull: true}
        ]);
        if (e) throw e;
        this._appendConsole(message);

        // Cannot execute eval('debugger') in browsers that don't have a =
debugger statement, since it causes a parse error.
        if (Sys.Browser.hasDebuggerStatement) {
            eval('debugger');
        }
    }

    function Sys$_Debug$trace(text) {
        /// <summary locid=3D"M:J#Sys._Debug.trace" />
        /// <param name=3D"text"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "text"}
        ]);
        if (e) throw e;
        this._appendConsole(text);
        this._appendTrace(text);
    }

    function Sys$_Debug$traceDump(object, name) {
        /// <summary locid=3D"M:J#Sys._Debug.traceDump" />
        /// <param name=3D"object" mayBeNull=3D"true"></param>
        /// <param name=3D"name" type=3D"String" mayBeNull=3D"true" =
optional=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "object", mayBeNull: true},
            {name: "name", type: String, mayBeNull: true, optional: =
true}
        ]);
        if (e) throw e;
        var text =3D this._traceDump(object, name, true);
    }

    function Sys$_Debug$_traceDump(object, name, recursive, =
indentationPadding, loopArray) {
        name =3D name? name : 'traceDump';
        indentationPadding =3D indentationPadding? indentationPadding : =
'';
        if (object =3D=3D=3D null) {
            this.trace(indentationPadding + name + ': null');
            return;
        }
        switch(typeof(object)) {
            case 'undefined':
                this.trace(indentationPadding + name + ': Undefined');
                break;
            case 'number': case 'string': case 'boolean':
                this.trace(indentationPadding + name + ': ' + object);
                break;
            default:
                if (Date.isInstanceOfType(object) || =
RegExp.isInstanceOfType(object)) {
                    this.trace(indentationPadding + name + ': ' + =
object.toString());
                    break;
                }
                if (!loopArray) {
                    loopArray =3D [];
                }
                else if (Array.contains(loopArray, object)) {
                    this.trace(indentationPadding + name + ': ...');
                    return;
                }
                Array.add(loopArray, object);

                // don't recurse into dom elements.
                // trace dump has to use '=3D=3D' for window when it's =
passed as event arg in IE.
                // i.e., body onLoad=3D"Sys.Debug.traceDump(window)"
                if ((object =3D=3D window) || (object =3D=3D=3D =
document) ||
                    (window.HTMLElement && (object instanceof =
HTMLElement)) ||
                    (typeof(object.nodeName) =3D=3D=3D 'string')) {
                    var tag =3D object.tagName? object.tagName : =
'DomElement';
                    if (object.id) {
                        tag +=3D ' - ' + object.id;
                    }
                    this.trace(indentationPadding + name + ' {' +  tag + =
'}');
                }
                // objects and arrays
                else {
                    var typeName =3D Object.getTypeName(object);
                    this.trace(indentationPadding + name + =
(typeof(typeName) =3D=3D=3D 'string' ? ' {' + typeName + '}' : ''));
                    if ((indentationPadding =3D=3D=3D '') || recursive) =
{
                        indentationPadding +=3D "    ";
                        var i, length, properties, p, v;
                        if (Array.isInstanceOfType(object)) {
                            length =3D object.length;
                            for (i =3D 0; i < length; i++) {
                                this._traceDump(object[i], '[' + i + =
']', recursive, indentationPadding, loopArray);
                            }
                        }
                        else {
                            for (p in object) {
                                v =3D object[p];
                                if (!Function.isInstanceOfType(v)) {
                                    this._traceDump(v, p, recursive, =
indentationPadding, loopArray);
                                }
                            }
                        }
                    }
                }
                Array.remove(loopArray, object);
        }
    }
Sys._Debug.prototype =3D {
    _appendConsole: Sys$_Debug$_appendConsole,
    _appendTrace: Sys$_Debug$_appendTrace,
    assert: Sys$_Debug$assert,
    clearTrace: Sys$_Debug$clearTrace,
    fail: Sys$_Debug$fail,
    trace: Sys$_Debug$trace,
    traceDump: Sys$_Debug$traceDump,
    _traceDump: Sys$_Debug$_traceDump
}
Sys._Debug.registerClass('Sys._Debug');

Sys.Debug =3D new Sys._Debug();
    Sys.Debug.isDebug =3D true;
=20
function Sys$Enum$parse(value, ignoreCase) {
    /// <summary locid=3D"M:J#Sys.Enum.parse" />
    /// <param name=3D"value" type=3D"String"></param>
    /// <param name=3D"ignoreCase" type=3D"Boolean" =
optional=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", type: String},
        {name: "ignoreCase", type: Boolean, optional: true}
    ]);
    if (e) throw e;
    var values, parsed, val;
    if (ignoreCase) {
        values =3D this.__lowerCaseValues;
        if (!values) {
            this.__lowerCaseValues =3D values =3D {};
            var prototype =3D this.prototype;
            for (var name in prototype) {
                values[name.toLowerCase()] =3D prototype[name];
            }
        }
    }
    else {
        values =3D this.prototype;
    }
    if (!this.__flags) {
        val =3D (ignoreCase ? value.toLowerCase() : value);
        parsed =3D values[val.trim()];
        if (typeof(parsed) !=3D=3D 'number') throw =
Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, =
this.__typeName));
        return parsed;
    }
    else {
        var parts =3D (ignoreCase ? value.toLowerCase() : =
value).split(',');
        var v =3D 0;

        for (var i =3D parts.length - 1; i >=3D 0; i--) {
            var part =3D parts[i].trim();
            parsed =3D values[part];
            if (typeof(parsed) !=3D=3D 'number') throw =
Error.argument('value', String.format(Sys.Res.enumInvalidValue, =
value.split(',')[i].trim(), this.__typeName));
            v |=3D parsed;
        }
        return v;
    }
}

function Sys$Enum$toString(value) {
    /// <summary locid=3D"M:J#Sys.Enum.toString" />
    /// <param name=3D"value" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "value", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    // Need to do the type check manually instead of using parameter =
validation to be able to return
    // an error message that mentions the actual enum type that's =
expected instead of Number.
    if ((typeof(value) =3D=3D=3D 'undefined') || (value =3D=3D=3D null)) =
return this.__string;
    if ((typeof(value) !=3D 'number') || ((value % 1) !=3D=3D 0)) throw =
Error.argumentType('value', Object.getType(value), this);
    var values =3D this.prototype;
    var i;
    if (!this.__flags || (value =3D=3D=3D 0)) {
        for (i in values) {
            if (values[i] =3D=3D=3D value) {
                return i;
            }
        }
    }
    else {
        var sorted =3D this.__sortedValues;
        if (!sorted) {
            sorted =3D [];
            for (i in values) {
                sorted[sorted.length] =3D {key: i, value: values[i]};
            }
            sorted.sort(function(a, b) {
                return a.value - b.value;
            });
            this.__sortedValues =3D sorted;
        }
        var parts =3D [];
        var v =3D value;
        for (i =3D sorted.length - 1; i >=3D 0; i--) {
            var kvp =3D sorted[i];
            var vali =3D kvp.value;
            if (vali =3D=3D=3D 0) continue;
            if ((vali & value) =3D=3D=3D vali) {
                parts[parts.length] =3D kvp.key;
                v -=3D vali;
                if (v =3D=3D=3D 0) break;
            }
        }
        if (parts.length && v =3D=3D=3D 0) return =
parts.reverse().join(', ');
    }
    throw Error.argumentOutOfRange('value', value, =
String.format(Sys.Res.enumInvalidValue, value, this.__typeName));
}

Type.prototype.registerEnum =3D function Type$registerEnum(name, flags) =
{
    /// <summary locid=3D"M:J#Sys.UI.LineType.#ctor" />
    /// <param name=3D"name" type=3D"String"></param>
    /// <param name=3D"flags" type=3D"Boolean" =
optional=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "name", type: String},
        {name: "flags", type: Boolean, optional: true}
    ]);
    if (e) throw e;
    if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw =
Error.argument('name', Sys.Res.notATypeName);
    // Check if the type name parses to an existing object that matches =
this.
    var parsedName;
    try {
        parsedName =3D eval(name);
    }
    catch(e) {
        throw Error.argument('name', Sys.Res.argumentTypeName);
    }
    if (parsedName !=3D=3D this) throw Error.argument('name', =
Sys.Res.badTypeName);
    if (Sys.__registeredTypes[name]) throw =
Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, =
name));
    for (var i in this.prototype) {
        var val =3D this.prototype[i];
        if (!Type.__identifierRegExp.test(i)) throw =
Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, i));
        if (typeof(val) !=3D=3D 'number' || (val % 1) !=3D=3D 0) throw =
Error.invalidOperation(Sys.Res.enumValueNotInteger);
        if (typeof(this[i]) !=3D=3D 'undefined') throw =
Error.invalidOperation(String.format(Sys.Res.enumReservedName, i));
    }
    Sys.__upperCaseTypes[name.toUpperCase()] =3D this;

    for (var i in this.prototype) {
        this[i] =3D this.prototype[i];
    }
    this.__typeName =3D name;
    this.parse =3D Sys$Enum$parse;
    this.__string =3D this.toString();
    this.toString =3D Sys$Enum$toString;
    this.__flags =3D flags;
    this.__enum =3D true;
    Sys.__registeredTypes[name] =3D true;
}

Type.isEnum =3D function Type$isEnum(type) {
    /// <summary locid=3D"M:J#Type.isEnum" />
    /// <param name=3D"type" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "type", mayBeNull: true}
    ]);
    if (e) throw e;
    if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) =
return false;
    return !!type.__enum;
}

Type.isFlags =3D function Type$isFlags(type) {
    /// <summary locid=3D"M:J#Type.isFlags" />
    /// <param name=3D"type" mayBeNull=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "type", mayBeNull: true}
    ]);
    if (e) throw e;
    if ((typeof(type) =3D=3D=3D 'undefined') || (type =3D=3D=3D null)) =
return false;
    return !!type.__flags;
}
=20
Sys.EventHandlerList =3D function Sys$EventHandlerList() {
    /// <summary locid=3D"M:J#Sys.EventHandlerList.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    this._list =3D {};
}


    function Sys$EventHandlerList$addHandler(id, handler) {
        /// <summary locid=3D"M:J#Sys.EventHandlerList.addHandler" />
        /// <param name=3D"id" type=3D"String"></param>
        /// <param name=3D"handler" type=3D"Function"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "id", type: String},
            {name: "handler", type: Function}
        ]);
        if (e) throw e;
        Array.add(this._getEvent(id, true), handler);
    }
    function Sys$EventHandlerList$removeHandler(id, handler) {
        /// <summary locid=3D"M:J#Sys.EventHandlerList.removeHandler" />
        /// <param name=3D"id" type=3D"String"></param>
        /// <param name=3D"handler" type=3D"Function"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "id", type: String},
            {name: "handler", type: Function}
        ]);
        if (e) throw e;
        var evt =3D this._getEvent(id);
        if (!evt) return;
        Array.remove(evt, handler);
    }
    function Sys$EventHandlerList$getHandler(id) {
        /// <summary locid=3D"M:J#Sys.EventHandlerList.getHandler" />
        /// <param name=3D"id" type=3D"String"></param>
        /// <returns type=3D"Function"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "id", type: String}
        ]);
        if (e) throw e;
        var evt =3D this._getEvent(id);
        if (!evt || (evt.length =3D=3D=3D 0)) return null;
        evt =3D Array.clone(evt);
        return function(source, args) {
            for (var i =3D 0, l =3D evt.length; i < l; i++) {
                evt[i](source, args);
            }
        };
    }

    function Sys$EventHandlerList$_getEvent(id, create) {
        if (!this._list[id]) {
            if (!create) return null;
            this._list[id] =3D [];
        }
        return this._list[id];
    }
Sys.EventHandlerList.prototype =3D {
    addHandler: Sys$EventHandlerList$addHandler,
    removeHandler: Sys$EventHandlerList$removeHandler,
    getHandler: Sys$EventHandlerList$getHandler,
    _getEvent: Sys$EventHandlerList$_getEvent
}
Sys.EventHandlerList.registerClass('Sys.EventHandlerList');
=20
Sys.EventArgs =3D function Sys$EventArgs() {
    /// <summary locid=3D"M:J#Sys.EventArgs.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
}
Sys.EventArgs.registerClass('Sys.EventArgs');

Sys.EventArgs.Empty =3D new Sys.EventArgs();
=20
Sys.CancelEventArgs =3D function Sys$CancelEventArgs() {
    /// <summary locid=3D"M:J#Sys.CancelEventArgs.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    Sys.CancelEventArgs.initializeBase(this);

    this._cancel =3D false;
}


    function Sys$CancelEventArgs$get_cancel() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.CancelEventArgs.cancel"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._cancel;
    }
    function Sys$CancelEventArgs$set_cancel(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Boolean}]);
        if (e) throw e;
        this._cancel =3D value;
    }
Sys.CancelEventArgs.prototype =3D {
    get_cancel: Sys$CancelEventArgs$get_cancel,
    set_cancel: Sys$CancelEventArgs$set_cancel
}

Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs);
=20
Sys.INotifyPropertyChange =3D function Sys$INotifyPropertyChange() {
    /// <summary locid=3D"M:J#Sys.INotifyPropertyChange.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    throw Error.notImplemented();
}

    function Sys$INotifyPropertyChange$add_propertyChanged(handler) {
    /// <summary locid=3D"E:J#Sys.INotifyPropertyChange.propertyChanged" =
/>
    var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
    if (e) throw e;
        throw Error.notImplemented();
    }
    function Sys$INotifyPropertyChange$remove_propertyChanged(handler) {
    var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
    if (e) throw e;
        throw Error.notImplemented();
    }
Sys.INotifyPropertyChange.prototype =3D {
    add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged,
    remove_propertyChanged: =
Sys$INotifyPropertyChange$remove_propertyChanged
}
Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange');=

=20
Sys.PropertyChangedEventArgs =3D function =
Sys$PropertyChangedEventArgs(propertyName) {
    /// <summary locid=3D"M:J#Sys.PropertyChangedEventArgs.#ctor" />
    /// <param name=3D"propertyName" type=3D"String"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "propertyName", type: String}
    ]);
    if (e) throw e;
    Sys.PropertyChangedEventArgs.initializeBase(this);
    this._propertyName =3D propertyName;
}
=20
    function Sys$PropertyChangedEventArgs$get_propertyName() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.PropertyChangedEventArgs.propertyName"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._propertyName;
    }
Sys.PropertyChangedEventArgs.prototype =3D {
    get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName
}
Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs'=
, Sys.EventArgs);
=20
Sys.INotifyDisposing =3D function Sys$INotifyDisposing() {
    /// <summary locid=3D"M:J#Sys.INotifyDisposing.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    throw Error.notImplemented();
}

    function Sys$INotifyDisposing$add_disposing(handler) {
    /// <summary locid=3D"E:J#Sys.INotifyDisposing.disposing" />
    var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
    if (e) throw e;
        throw Error.notImplemented();
    }
    function Sys$INotifyDisposing$remove_disposing(handler) {
    var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
    if (e) throw e;
        throw Error.notImplemented();
    }
Sys.INotifyDisposing.prototype =3D {
    add_disposing: Sys$INotifyDisposing$add_disposing,
    remove_disposing: Sys$INotifyDisposing$remove_disposing
}
Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing");
=20
Sys.Component =3D function Sys$Component() {
    /// <summary locid=3D"M:J#Sys.Component.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    if (Sys.Application) Sys.Application.registerDisposableObject(this);
}





    function Sys$Component$get_events() {
        /// <value type=3D"Sys.EventHandlerList" =
locid=3D"P:J#Sys.Component.events"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._events) {
            this._events =3D new Sys.EventHandlerList();
        }
        return this._events;
    }
    function Sys$Component$get_id() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Component.id"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._id;
    }
    function Sys$Component$set_id(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        if (this._idSet) throw =
Error.invalidOperation(Sys.Res.componentCantSetIdTwice);
        this._idSet =3D true;
        var oldId =3D this.get_id();
        if (oldId && Sys.Application.findComponent(oldId)) throw =
Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp);
        this._id =3D value;
    }
    function Sys$Component$get_isInitialized() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Component.isInitialized"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._initialized;
    }
    function Sys$Component$get_isUpdating() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Component.isUpdating"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._updating;
    }
    function Sys$Component$add_disposing(handler) {
        /// <summary locid=3D"E:J#Sys.Component.disposing" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().addHandler("disposing", handler);
    }
    function Sys$Component$remove_disposing(handler) {
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().removeHandler("disposing", handler);
    }
    function Sys$Component$add_propertyChanged(handler) {
        /// <summary locid=3D"E:J#Sys.Component.propertyChanged" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().addHandler("propertyChanged", handler);
    }
    function Sys$Component$remove_propertyChanged(handler) {
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().removeHandler("propertyChanged", handler);
    }
    function Sys$Component$beginUpdate() {
        this._updating =3D true;
    }
    function Sys$Component$dispose() {
        if (this._events) {
            var handler =3D this._events.getHandler("disposing");
            if (handler) {
                handler(this, Sys.EventArgs.Empty);
            }
        }
        delete this._events;
        Sys.Application.unregisterDisposableObject(this);
        Sys.Application.removeComponent(this);
    }
    function Sys$Component$endUpdate() {
        this._updating =3D false;
        if (!this._initialized) this.initialize();
        this.updated();
    }
    function Sys$Component$initialize() {
        this._initialized =3D true;
    }
    function Sys$Component$raisePropertyChanged(propertyName) {
        /// <summary locid=3D"M:J#Sys.Component.raisePropertyChanged" />
        /// <param name=3D"propertyName" type=3D"String"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "propertyName", type: String}
        ]);
        if (e) throw e;
        if (!this._events) return;
        var handler =3D this._events.getHandler("propertyChanged");
        if (handler) {
            handler(this, new =
Sys.PropertyChangedEventArgs(propertyName));
        }
    }
    function Sys$Component$updated() {
    }
Sys.Component.prototype =3D {
    _id: null,
    _idSet: false,
    _initialized: false,
    _updating: false,
    get_events: Sys$Component$get_events,
    get_id: Sys$Component$get_id,
    set_id: Sys$Component$set_id,
    get_isInitialized: Sys$Component$get_isInitialized,
    get_isUpdating: Sys$Component$get_isUpdating,
    add_disposing: Sys$Component$add_disposing,
    remove_disposing: Sys$Component$remove_disposing,
    add_propertyChanged: Sys$Component$add_propertyChanged,
    remove_propertyChanged: Sys$Component$remove_propertyChanged,
    beginUpdate: Sys$Component$beginUpdate,
    dispose: Sys$Component$dispose,
    endUpdate: Sys$Component$endUpdate,
    initialize: Sys$Component$initialize,
    raisePropertyChanged: Sys$Component$raisePropertyChanged,
    updated: Sys$Component$updated
}
Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, =
Sys.INotifyPropertyChange, Sys.INotifyDisposing);

function Sys$Component$_setProperties(target, properties) {
    /// <summary locid=3D"M:J#Sys.Component._setProperties" />
    /// <param name=3D"target"></param>
    /// <param name=3D"properties"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "target"},
        {name: "properties"}
    ]);
    if (e) throw e;
    var current;
    var targetType =3D Object.getType(target);
    var isObject =3D (targetType =3D=3D=3D Object) || (targetType =
=3D=3D=3D Sys.UI.DomElement);
    var isComponent =3D Sys.Component.isInstanceOfType(target) && =
!target.get_isUpdating();
    if (isComponent) target.beginUpdate();
    for (var name in properties) {
        var val =3D properties[name];
        var getter =3D isObject ? null : target["get_" + name];
        if (isObject || typeof(getter) !=3D=3D 'function') {
            // No getter, looking for an existing field.
            var targetVal =3D target[name];
            if (!isObject && typeof(targetVal) =3D=3D=3D 'undefined') =
throw Error.invalidOperation(String.format(Sys.Res.propertyUndefined, =
name));
            if (!val || (typeof(val) !=3D=3D 'object') || (isObject && =
!targetVal)) {
                target[name] =3D val;
            }
            else {
                Sys$Component$_setProperties(targetVal, val);
            }
        }
        else {
            var setter =3D target["set_" + name];
            if (typeof(setter) =3D=3D=3D 'function') {
                // The setter exists, using it in all cases.
                setter.apply(target, [val]);
            }
            else if (val instanceof Array) {
                // There is a getter but no setter and the value to set =
is an array. Adding to the existing array.
                current =3D getter.apply(target);
                if (!(current instanceof Array)) throw new =
Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name));
                for (var i =3D 0, j =3D current.length, l=3D val.length; =
i < l; i++, j++) {
                    current[j] =3D val[i];
                }
            }
            else if ((typeof(val) =3D=3D=3D 'object') && =
(Object.getType(val) =3D=3D=3D Object)) {
                // There is a getter but no setter and the value to set =
is a plain object. Adding to the existing object.
                current =3D getter.apply(target);
                if ((typeof(current) =3D=3D=3D 'undefined') || (current =
=3D=3D=3D null)) throw new =
Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, =
name));
                Sys$Component$_setProperties(current, val);
            }
            else {
                // No setter, and the value is not an array or object, =
throwing.
                throw new =
Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, =
name));
            }
        }
    }
    if (isComponent) target.endUpdate();
}

function Sys$Component$_setReferences(component, references) {
    for (var name in references) {
        var setter =3D component["set_" + name];
        var reference =3D $find(references[name]);
        if (typeof(setter) !=3D=3D 'function') throw new =
Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, =
name));
        if (!reference) throw =
Error.invalidOperation(String.format(Sys.Res.referenceNotFound, =
references[name]));
        setter.apply(component, [reference]);
    }
}

var $create =3D Sys.Component.create =3D function =
Sys$Component$create(type, properties, events, references, element) {
    /// <summary locid=3D"M:J#Sys.Component.create" />
    /// <param name=3D"type" type=3D"Type"></param>
    /// <param name=3D"properties" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"events" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"references" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <param name=3D"element" domElement=3D"true" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns type=3D"Sys.UI.Component"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "type", type: Type},
        {name: "properties", mayBeNull: true, optional: true},
        {name: "events", mayBeNull: true, optional: true},
        {name: "references", mayBeNull: true, optional: true},
        {name: "element", mayBeNull: true, domElement: true, optional: =
true}
    ]);
    if (e) throw e;
    if (!type.inheritsFrom(Sys.Component)) {
        throw Error.argument('type', =
String.format(Sys.Res.createNotComponent, type.getName()));
    }
    if (type.inheritsFrom(Sys.UI.Behavior) || =
type.inheritsFrom(Sys.UI.Control)) {
        if (!element) throw Error.argument('element', =
Sys.Res.createNoDom);
    }
    else if (element) throw Error.argument('element', =
Sys.Res.createComponentOnDom);
    var component =3D (element ? new type(element): new type());
    var app =3D Sys.Application;
    var creatingComponents =3D app.get_isCreatingComponents();

    component.beginUpdate();
    if (properties) {
        Sys$Component$_setProperties(component, properties);
    }
    if (events) {
        for (var name in events) {
            if (!(component["add_" + name] instanceof Function)) throw =
new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name));
            if (!(events[name] instanceof Function)) throw new =
Error.invalidOperation(Sys.Res.eventHandlerNotFunction);
            component["add_" + name](events[name]);
        }
    }

    if (component.get_id()) {
        app.addComponent(component);
    }
    if (creatingComponents) {
        // DevDiv 81690: Do not add to createdComponent list unless we =
are in 2 pass mode,
        // which is during the first GET and on partial updates.=20
        app._createdComponents[app._createdComponents.length] =3D =
component;
        if (references) {
            app._addComponentToSecondPass(component, references);
        }
        else {
            component.endUpdate();
        }
    }
    else {
        if (references) {
            Sys$Component$_setReferences(component, references);
        }
        component.endUpdate();
    }

    return component;
}
=20
Sys.UI.MouseButton =3D function Sys$UI$MouseButton() {
    /// <summary locid=3D"M:J#Sys.UI.MouseButton.#ctor" />
    /// <field name=3D"leftButton" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.MouseButton.leftButton"></field>
    /// <field name=3D"middleButton" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.MouseButton.middleButton"></field>
    /// <field name=3D"rightButton" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.MouseButton.rightButton"></field>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    throw Error.notImplemented();
}




Sys.UI.MouseButton.prototype =3D {
    leftButton: 0,
    middleButton: 1,
    rightButton: 2
}
Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton");
=20
Sys.UI.Key =3D function Sys$UI$Key() {
    /// <summary locid=3D"M:J#Sys.UI.Key.#ctor" />
    /// <field name=3D"backspace" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.backspace"></field>
    /// <field name=3D"tab" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.tab"></field>
    /// <field name=3D"enter" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.enter"></field>
    /// <field name=3D"esc" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.esc"></field>
    /// <field name=3D"space" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.space"></field>
    /// <field name=3D"pageUp" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.pageUp"></field>
    /// <field name=3D"pageDown" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.pageDown"></field>
    /// <field name=3D"end" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.end"></field>
    /// <field name=3D"home" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.home"></field>
    /// <field name=3D"left" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.left"></field>
    /// <field name=3D"up" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.up"></field>
    /// <field name=3D"right" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.right"></field>
    /// <field name=3D"down" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.down"></field>
    /// <field name=3D"del" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.Key.del"></field>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    throw Error.notImplemented();
}















Sys.UI.Key.prototype =3D {
    backspace: 8,
    tab: 9,
    enter: 13,
    esc: 27,
    space: 32,
    pageUp: 33,
    pageDown: 34,
    end: 35,
    home: 36,
    left: 37,
    up: 38,
    right: 39,
    down: 40,
    del: 127
}
Sys.UI.Key.registerEnum("Sys.UI.Key");
=20
Sys.UI.Point =3D function Sys$UI$Point(x, y) {
    /// <summary locid=3D"M:J#Sys.UI.Point.#ctor" />
    /// <param name=3D"x" type=3D"Number" integer=3D"true"></param>
    /// <param name=3D"y" type=3D"Number" integer=3D"true"></param>
    /// <field name=3D"x" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.Point.x"></field>
    /// <field name=3D"y" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.Point.y"></field>
    var e =3D Function._validateParams(arguments, [
        {name: "x", type: Number, integer: true},
        {name: "y", type: Number, integer: true}
    ]);
    if (e) throw e;
    this.x =3D x;
    this.y =3D y;
}
Sys.UI.Point.registerClass('Sys.UI.Point');
=20
Sys.UI.Bounds =3D function Sys$UI$Bounds(x, y, width, height) {
    /// <summary locid=3D"M:J#Sys.UI.Bounds.#ctor" />
    /// <param name=3D"x" type=3D"Number" integer=3D"true"></param>
    /// <param name=3D"y" type=3D"Number" integer=3D"true"></param>
    /// <param name=3D"height" type=3D"Number" integer=3D"true"></param>
    /// <param name=3D"width" type=3D"Number" integer=3D"true"></param>
    /// <field name=3D"x" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.Bounds.x"></field>
    /// <field name=3D"y" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.Bounds.y"></field>
    /// <field name=3D"height" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.Bounds.height"></field>
    /// <field name=3D"width" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.Bounds.width"></field>
    var e =3D Function._validateParams(arguments, [
        {name: "x", type: Number, integer: true},
        {name: "y", type: Number, integer: true},
        {name: "height", type: Number, integer: true},
        {name: "width", type: Number, integer: true}
    ]);
    if (e) throw e;
    this.x =3D x;
    this.y =3D y;
    this.height =3D height;
    this.width =3D width;
}
Sys.UI.Bounds.registerClass('Sys.UI.Bounds');
=20
Sys.UI.DomEvent =3D function Sys$UI$DomEvent(eventObject) {
    /// <summary locid=3D"M:J#Sys.UI.DomEvent.#ctor" />
    /// <param name=3D"eventObject"></param>
    /// <field name=3D"altKey" type=3D"Boolean" =
locid=3D"F:J#Sys.UI.DomEvent.altKey"></field>
    /// <field name=3D"button" type=3D"Sys.UI.MouseButton" =
locid=3D"F:J#Sys.UI.DomEvent.button"></field>
    /// <field name=3D"charCode" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.charCode"></field>
    /// <field name=3D"clientX" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.clientX"></field>
    /// <field name=3D"clientY" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.clientY"></field>
    /// <field name=3D"ctrlKey" type=3D"Boolean" =
locid=3D"F:J#Sys.UI.DomEvent.ctrlKey"></field>
    /// <field name=3D"keyCode" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.keyCode"></field>
    /// <field name=3D"offsetX" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.offsetX"></field>
    /// <field name=3D"offsetY" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.offsetY"></field>
    /// <field name=3D"screenX" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.screenX"></field>
    /// <field name=3D"screenY" type=3D"Number" integer=3D"true" =
locid=3D"F:J#Sys.UI.DomEvent.screenY"></field>
    /// <field name=3D"shiftKey" type=3D"Boolean" =
locid=3D"F:J#Sys.UI.DomEvent.shiftKey"></field>
    /// <field name=3D"target" =
locid=3D"F:J#Sys.UI.DomEvent.target"></field>
    /// <field name=3D"type" type=3D"String" =
locid=3D"F:J#Sys.UI.DomEvent.type"></field>
    var e =3D Function._validateParams(arguments, [
        {name: "eventObject"}
    ]);
    if (e) throw e;
    var e =3D eventObject;
    this.rawEvent =3D e;
    this.altKey =3D e.altKey;
    if (typeof(e.button) !=3D=3D 'undefined') {
        this.button =3D (typeof(e.which) !=3D=3D 'undefined') ? e.button =
:
            (e.button =3D=3D=3D 4) ? Sys.UI.MouseButton.middleButton :
            (e.button =3D=3D=3D 2) ? Sys.UI.MouseButton.rightButton :
            Sys.UI.MouseButton.leftButton;
    }
    if (e.type =3D=3D=3D 'keypress') {
        this.charCode =3D e.charCode || e.keyCode;
    }
    else if (e.keyCode && (e.keyCode =3D=3D=3D 46)) {
        this.keyCode =3D 127;
    }
    else {
        this.keyCode =3D e.keyCode;
    }
    this.clientX =3D e.clientX;
    this.clientY =3D e.clientY;
    this.ctrlKey =3D e.ctrlKey;
    this.target =3D e.target ? e.target : e.srcElement;
    if ((typeof(e.offsetX) !=3D=3D 'undefined') && (typeof(e.offsetY) =
!=3D=3D 'undefined')) {
        this.offsetX =3D e.offsetX;
        this.offsetY =3D e.offsetY;
    }
    else if (this.target && (this.target.nodeType !=3D=3D 3) && =
(typeof(e.clientX) =3D=3D=3D 'number')) {
        var loc =3D Sys.UI.DomElement.getLocation(this.target);
        var w =3D Sys.UI.DomElement._getWindow(this.target);
        this.offsetX =3D (w.pageXOffset || 0) + e.clientX - loc.x;
        this.offsetY =3D (w.pageYOffset || 0) + e.clientY - loc.y;
    }
    this.screenX =3D e.screenX;
    this.screenY =3D e.screenY;
    this.shiftKey =3D e.shiftKey;
    this.type =3D e.type;
}

    function Sys$UI$DomEvent$preventDefault() {
        /// <summary locid=3D"M:J#Sys.UI.DomEvent.preventDefault" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this.rawEvent.preventDefault) {
            this.rawEvent.preventDefault();
        }
        else if (window.event) {
            this.rawEvent.returnValue =3D false;
        }
    }
    function Sys$UI$DomEvent$stopPropagation() {
        /// <summary locid=3D"M:J#Sys.UI.DomEvent.stopPropagation" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this.rawEvent.stopPropagation) {
            this.rawEvent.stopPropagation();
        }
        else if (window.event) {
            this.rawEvent.cancelBubble =3D true;
        }
    }
Sys.UI.DomEvent.prototype =3D {
    preventDefault: Sys$UI$DomEvent$preventDefault,
    stopPropagation: Sys$UI$DomEvent$stopPropagation
}
Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent');

var $addHandler =3D Sys.UI.DomEvent.addHandler =3D function =
Sys$UI$DomEvent$addHandler(element, eventName, handler) {
    /// <summary locid=3D"M:J#Sys.UI.DomEvent.addHandler" />
    /// <param name=3D"element"></param>
    /// <param name=3D"eventName" type=3D"String"></param>
    /// <param name=3D"handler" type=3D"Function"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element"},
        {name: "eventName", type: String},
        {name: "handler", type: Function}
    ]);
    if (e) throw e;
    Sys.UI.DomEvent._ensureDomNode(element);
    if (eventName =3D=3D=3D "error") throw =
Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError);
    if (!element._events) {
        element._events =3D {};
    }
    var eventCache =3D element._events[eventName];
    if (!eventCache) {
        element._events[eventName] =3D eventCache =3D [];
    }
    var browserHandler;
    if (element.addEventListener) {
        browserHandler =3D function(e) {
            return handler.call(element, new Sys.UI.DomEvent(e));
        }
        element.addEventListener(eventName, browserHandler, false);
    }
    else if (element.attachEvent) {
        browserHandler =3D function() {
            // window.event can be denied access in some rare =
circumstances (DevDiv 68929)
            var e =3D {};
            // We want to use the window for the event element, not the =
window for this script (DevDiv 63167)
            try {e =3D Sys.UI.DomElement._getWindow(element).event} =
catch(ex) {}
            return handler.call(element, new Sys.UI.DomEvent(e));
        }
        element.attachEvent('on' + eventName, browserHandler);
    }
    eventCache[eventCache.length] =3D {handler: handler, browserHandler: =
browserHandler};
}

var $addHandlers =3D Sys.UI.DomEvent.addHandlers =3D function =
Sys$UI$DomEvent$addHandlers(element, events, handlerOwner) {
    /// <summary locid=3D"M:J#Sys.UI.DomEvent.addHandlers" />
    /// <param name=3D"element"></param>
    /// <param name=3D"events" type=3D"Object"></param>
    /// <param name=3D"handlerOwner" optional=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element"},
        {name: "events", type: Object},
        {name: "handlerOwner", optional: true}
    ]);
    if (e) throw e;
    Sys.UI.DomEvent._ensureDomNode(element);
    for (var name in events) {
        var handler =3D events[name];
        if (typeof(handler) !=3D=3D 'function') throw =
Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler);
        if (handlerOwner) {
            handler =3D Function.createDelegate(handlerOwner, handler);
        }
        $addHandler(element, name, handler);
    }
}

var $clearHandlers =3D Sys.UI.DomEvent.clearHandlers =3D function =
Sys$UI$DomEvent$clearHandlers(element) {
    /// <summary locid=3D"M:J#Sys.UI.DomEvent.clearHandlers" />
    /// <param name=3D"element"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element"}
    ]);
    if (e) throw e;
    Sys.UI.DomEvent._ensureDomNode(element);
    if (element._events) {
        var cache =3D element._events;
        for (var name in cache) {
            var handlers =3D cache[name];
            for (var i =3D handlers.length - 1; i >=3D 0; i--) {
                $removeHandler(element, name, handlers[i].handler);
            }
        }
        element._events =3D null;
    }
}

var $removeHandler =3D Sys.UI.DomEvent.removeHandler =3D function =
Sys$UI$DomEvent$removeHandler(element, eventName, handler) {
    /// <summary locid=3D"M:J#Sys.UI.DomEvent.removeHandler" />
    /// <param name=3D"element"></param>
    /// <param name=3D"eventName" type=3D"String"></param>
    /// <param name=3D"handler" type=3D"Function"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element"},
        {name: "eventName", type: String},
        {name: "handler", type: Function}
    ]);
    if (e) throw e;
    Sys.UI.DomEvent._ensureDomNode(element);
    var browserHandler =3D null;
    if ((typeof(element._events) !=3D=3D 'object') || (element._events =
=3D=3D null)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
    var cache =3D element._events[eventName];
    if (!(cache instanceof Array)) throw =
Error.invalidOperation(Sys.Res.eventHandlerInvalid);
    for (var i =3D 0, l =3D cache.length; i < l; i++) {
        if (cache[i].handler =3D=3D=3D handler) {
            browserHandler =3D cache[i].browserHandler;
            break;
        }
    }
    if (typeof(browserHandler) !=3D=3D 'function') throw =
Error.invalidOperation(Sys.Res.eventHandlerInvalid);
    if (element.removeEventListener) {
        element.removeEventListener(eventName, browserHandler, false);
    }
    else if (element.detachEvent) {
        element.detachEvent('on' + eventName, browserHandler);
    }
    cache.splice(i, 1);
}

Sys.UI.DomEvent._ensureDomNode =3D function =
Sys$UI$DomEvent$_ensureDomNode(element) {
    // DevDiv Bugs 100697: Accessing element.document causes dynamic =
script nodes to load prematurely.
    // DevDiv Bugs 124696: Firefox warns on undefined property =
element.tagName, added first part of IF
    if (element.tagName && (element.tagName =3D=3D=3D "SCRIPT")) return;
   =20
    var doc =3D element.ownerDocument || element.document || element;
    // Can't use _getWindow here and compare to the element to check if =
it's a window
    // because the object Safari exposes as document.defaultView is not =
the window (DevDiv 100229)
    // Looking at the document property instead to include window in DOM =
nodes, then comparing to the
    // document for this element and finally look for the nodeType =
property.
    if ((typeof(element.document) !=3D=3D 'object') && (element !=3D =
doc) && (typeof(element.nodeType) !=3D=3D 'number')) {
        throw Error.argument("element", Sys.Res.argumentDomNode);
    }
}
=20
Sys.UI.DomElement =3D function Sys$UI$DomElement() {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    throw Error.notImplemented();
}
Sys.UI.DomElement.registerClass('Sys.UI.DomElement');

Sys.UI.DomElement.addCssClass =3D function =
Sys$UI$DomElement$addCssClass(element, className) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.addCssClass" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"className" type=3D"String"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "className", type: String}
    ]);
    if (e) throw e;
    if (!Sys.UI.DomElement.containsCssClass(element, className)) {
        if (element.className =3D=3D=3D '') {
            element.className =3D className;
        }
        else {
            element.className +=3D ' ' + className;
        }
    }
}

Sys.UI.DomElement.containsCssClass =3D function =
Sys$UI$DomElement$containsCssClass(element, className) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.containsCssClass" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"className" type=3D"String"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "className", type: String}
    ]);
    if (e) throw e;
    return Array.contains(element.className.split(' '), className);
}

Sys.UI.DomElement.getBounds =3D function =
Sys$UI$DomElement$getBounds(element) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.getBounds" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <returns type=3D"Sys.UI.Bounds"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true}
    ]);
    if (e) throw e;
    var offset =3D Sys.UI.DomElement.getLocation(element);

    return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || =
0, element.offsetHeight || 0);
}

var $get =3D Sys.UI.DomElement.getElementById =3D function =
Sys$UI$DomElement$getElementById(id, element) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.getElementById" />
    /// <param name=3D"id" type=3D"String"></param>
    /// <param name=3D"element" domElement=3D"true" optional=3D"true" =
mayBeNull=3D"true"></param>
    /// <returns domElement=3D"true" mayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "id", type: String},
        {name: "element", mayBeNull: true, domElement: true, optional: =
true}
    ]);
    if (e) throw e;
    if (!element) return document.getElementById(id);
    if (element.getElementById) return element.getElementById(id);

    // Implementation for browsers that don't have getElementById on =
elements:
    var nodeQueue =3D [];
    var childNodes =3D element.childNodes;
    for (var i =3D 0; i < childNodes.length; i++) {
        var node =3D childNodes[i];
        if (node.nodeType =3D=3D 1) {
            nodeQueue[nodeQueue.length] =3D node;
        }
    }

    while (nodeQueue.length) {
        node =3D nodeQueue.shift();
        if (node.id =3D=3D id) {
            return node;
        }
        childNodes =3D node.childNodes;
        for (i =3D 0; i < childNodes.length; i++) {
            node =3D childNodes[i];
            if (node.nodeType =3D=3D 1) {
                nodeQueue[nodeQueue.length] =3D node;
            }
        }
    }

    return null;
}



switch(Sys.Browser.agent) {
    case Sys.Browser.InternetExplorer:
        Sys.UI.DomElement.getLocation =3D function =
Sys$UI$DomElement$getLocation(element) {
            /// <summary locid=3D"M:J#Sys.UI.DomElement.getLocation" />
            /// <param name=3D"element" domElement=3D"true"></param>
            /// <returns type=3D"Sys.UI.Point"></returns>
            var e =3D Function._validateParams(arguments, [
                {name: "element", domElement: true}
            ]);
            if (e) throw e;
            // For a document element, return zero.
            if (element.self || element.nodeType =3D=3D=3D 9) return new =
Sys.UI.Point(0,0);
            // Here there is a small inconsistency with what other =
browsers would give for wrapping elements:
            // the bounding rect can be different from the first =
rectangle. getBoundingRect is used here
            // because it's more consistent and because clientRects need =
to be offset by the coordinates
            // of the frame in the parent window, which is not always =
accessible to script (if it's in a different
            // domain in particular).
            var clientRect =3D element.getBoundingClientRect();
            if (!clientRect) {
                return new Sys.UI.Point(0,0);
            }
            var documentElement =3D =
element.ownerDocument.documentElement;
            // Substracting 2px for the border of the viewport. This can =
be changed in IE6 by applyting a border
            // to the HTML element but this is not supported by Atlas. =
It cannot be changed in IE7.
            var offsetX =3D clientRect.left - 2 + =
documentElement.scrollLeft,
                offsetY =3D clientRect.top - 2 + =
documentElement.scrollTop;
           =20
            // When the window is an iframe, the frameborder needs to be =
added. This is only available from
            // script when the parent window is in the same domain as =
the frame, hence the try/catch.
            try {
                var f =3D =
element.ownerDocument.parentWindow.frameElement || null;
                if (f) {
                    // frameBorder has a default of "1" so undefined =
must map to 0, and "0" and "no" to 2.
                    var offset =3D (f.frameBorder =3D=3D=3D "0" || =
f.frameBorder =3D=3D=3D "no") ? 2 : 0;
                    offsetX +=3D offset;
                    offsetY +=3D offset;
                }
            }
            catch(ex) {
            }   =20
           =20
            return new Sys.UI.Point(offsetX, offsetY);
        }
        break;
    case Sys.Browser.Safari:
        Sys.UI.DomElement.getLocation =3D function =
Sys$UI$DomElement$getLocation(element) {
            /// <summary locid=3D"M:J#Sys.UI.DomElement.getLocation" />
            /// <param name=3D"element" domElement=3D"true"></param>
            /// <returns type=3D"Sys.UI.Point"></returns>
            var e =3D Function._validateParams(arguments, [
                {name: "element", domElement: true}
            ]);
            if (e) throw e;
            // For a document element, return zero.
            if ((element.window && (element.window =3D=3D=3D element)) =
|| element.nodeType =3D=3D=3D 9) return new Sys.UI.Point(0,0);

            // Note (to document): in IE, if the elements are not =
explicitly dimensioned to contain
            // relatively positioned elements they contain, there are =
bugs in the measured dimensions of elements
            // that can't be worked around and which break this =
function.
            var offsetX =3D 0;
            var offsetY =3D 0;

            var previous =3D null;
            var previousStyle =3D null;
            var currentStyle;
            for (var parent =3D element; parent; previous =3D parent, =
previousStyle =3D currentStyle, parent =3D parent.offsetParent) {
                currentStyle =3D =
Sys.UI.DomElement._getCurrentStyle(parent);
                var tagName =3D parent.tagName;

                // Safari has a bug that double-counts the body offset =
for absolutely positioned elements
                // that are direct children of body.
                // Firefox has its own quirk, which is that =
non-absolutely positioned elements that are
                // direct children of body get the body offset counted =
twice.
                if ((parent.offsetLeft || parent.offsetTop) &&
                    ((tagName !=3D=3D "BODY") || (!previousStyle || =
previousStyle.position !=3D=3D "absolute"))) {

                    offsetX +=3D parent.offsetLeft;
                    offsetY +=3D parent.offsetTop;
                }
            }

            currentStyle =3D =
Sys.UI.DomElement._getCurrentStyle(element);
            var elementPosition =3D currentStyle ? currentStyle.position =
: null;
            // If an element is absolutely positioned, its parent's =
scroll should not be subtracted
            if (!elementPosition || (elementPosition !=3D=3D =
"absolute")) {
                // In Firefox and Safari, all parent's scroll values =
must be taken into account.
                for (var parent =3D element.parentNode; parent; parent =
=3D parent.parentNode) {
                    tagName =3D parent.tagName;

                    if ((tagName !=3D=3D "BODY") && (tagName !=3D=3D =
"HTML") && (parent.scrollLeft || parent.scrollTop)) {
                        offsetX -=3D (parent.scrollLeft || 0);
                        offsetY -=3D (parent.scrollTop || 0);
                    }
                    currentStyle =3D =
Sys.UI.DomElement._getCurrentStyle(parent);
                    var parentPosition =3D currentStyle ? =
currentStyle.position : null;

                    // If an element is absolutely positioned, its =
parent's scroll should not be subtracted
                    if (parentPosition && (parentPosition =3D=3D=3D =
"absolute")) break;
                }
            }

            return new Sys.UI.Point(offsetX, offsetY);
        }
        break;
    case Sys.Browser.Opera:
        Sys.UI.DomElement.getLocation =3D function =
Sys$UI$DomElement$getLocation(element) {
            /// <summary locid=3D"M:J#Sys.UI.DomElement.getLocation" />
            /// <param name=3D"element" domElement=3D"true"></param>
            /// <returns type=3D"Sys.UI.Point"></returns>
            var e =3D Function._validateParams(arguments, [
                {name: "element", domElement: true}
            ]);
            if (e) throw e;
            // For a document element, return zero.
            if ((element.window && (element.window =3D=3D=3D element)) =
|| element.nodeType =3D=3D=3D 9) return new Sys.UI.Point(0,0);

            // Note (to document): in IE, if the elements are not =
explicitly dimensioned to contain
            // relatively positioned elements they contain, there are =
bugs in the measured dimensions of elements
            // that can't be worked around and which break this =
function.
            var offsetX =3D 0;
            var offsetY =3D 0;

            var previous =3D null;
            for (var parent =3D element; parent; previous =3D parent, =
parent =3D parent.offsetParent) {

                var tagName =3D parent.tagName;

                offsetX +=3D parent.offsetLeft || 0;
                offsetY +=3D parent.offsetTop || 0;
            }

            // Opera already includes the scrolling into the offsets =
except for positioned contents.
            var elementPosition =3D element.style.position;
            var elementPositioned =3D elementPosition && =
(elementPosition !=3D=3D "static");

            // If an element is absolutely positioned, its parent's =
scroll should not be subtracted, except on Opera.
            for (var parent =3D element.parentNode; parent; parent =3D =
parent.parentNode) {
                tagName =3D parent.tagName;

                if ((tagName !=3D=3D "BODY") && (tagName !=3D=3D "HTML") =
&& (parent.scrollLeft || parent.scrollTop) &&
                    ((elementPositioned &&
                    ((parent.style.overflow =3D=3D=3D "scroll") || =
(parent.style.overflow =3D=3D=3D "auto"))))) {
                    // Opera has scroll values on elements that are not =
scrolled, like table rows so we
                    // need to explicitly check for overflow mode.

                    offsetX -=3D (parent.scrollLeft || 0);
                    offsetY -=3D (parent.scrollTop || 0);
                }
                var parentPosition =3D (parent && parent.style) ? =
parent.style.position : null;

                // Opera already includes the scrolling into the offsets =
except for positioned contents.
                elementPositioned =3D elementPositioned || =
(parentPosition && (parentPosition !=3D=3D "static"));
            }


            return new Sys.UI.Point(offsetX, offsetY);
        }
        break;
    default:
        Sys.UI.DomElement.getLocation =3D function =
Sys$UI$DomElement$getLocation(element) {
            /// <summary locid=3D"M:J#Sys.UI.DomElement.getLocation" />
            /// <param name=3D"element" domElement=3D"true"></param>
            /// <returns type=3D"Sys.UI.Point"></returns>
            var e =3D Function._validateParams(arguments, [
                {name: "element", domElement: true}
            ]);
            if (e) throw e;
            // For a document element, return zero.
            if ((element.window && (element.window =3D=3D=3D element)) =
|| element.nodeType =3D=3D=3D 9) return new Sys.UI.Point(0,0);

            var offsetX =3D 0;
            var offsetY =3D 0;
            var previous =3D null;
            var previousStyle =3D null;
            var currentStyle =3D null;
            for (var parent =3D element; parent; previous =3D parent, =
previousStyle =3D currentStyle, parent =3D parent.offsetParent) {
                var tagName =3D parent.tagName;
                currentStyle =3D =
Sys.UI.DomElement._getCurrentStyle(parent);

                // Firefox has its own quirk, which is that =
non-absolutely positioned elements that are
                // direct children of body get the body offset counted =
twice.
                if ((parent.offsetLeft || parent.offsetTop) &&
                    !((tagName =3D=3D=3D "BODY") &&
                    (!previousStyle || previousStyle.position !=3D=3D =
"absolute"))) {

                    offsetX +=3D parent.offsetLeft;
                    offsetY +=3D parent.offsetTop;
                }

                // This code works around a difference in behavior in =
Opera and Safari which includes
                // clientLeft and clientTop in the computedstyle offset.
                if (previous !=3D=3D null && currentStyle) {
                    // This is to workaround a known bug in IE and =
Firefox:
                    // <table> and <td> have strange behavior with =
offsetLeft/offsetTop and clientLeft/clientTop.
                    // Say you have the following html: <table =
style=3D"border-width:25px"><tr><td></table>
                    // The offsetLeft and offsetTop for the <td> will be =
25, but the client/borderLeft and
                    // client/borderTop for the <table> will also be 25. =
 So if you count the client/borderLeft and
                    // client/borderTop for the <table>, you will be =
double-counting the table border.
                    if ((tagName !=3D=3D "TABLE") && (tagName !=3D=3D =
"TD") && (tagName !=3D=3D "HTML")) {
                        offsetX +=3D =
parseInt(currentStyle.borderLeftWidth) || 0;
                        offsetY +=3D =
parseInt(currentStyle.borderTopWidth) || 0;
                    }
                    if (tagName =3D=3D=3D "TABLE" &&
                        (currentStyle.position =3D=3D=3D "relative" || =
currentStyle.position =3D=3D=3D "absolute")) {
                        offsetX +=3D parseInt(currentStyle.marginLeft) =
|| 0;
                        offsetY +=3D parseInt(currentStyle.marginTop) || =
0;
                    }
                }
            }

            currentStyle =3D =
Sys.UI.DomElement._getCurrentStyle(element);
            var elementPosition =3D currentStyle ? currentStyle.position =
: null;
            // If an element is absolutely positioned, its parent's =
scroll should not be subtracted, except on Opera.
            if (!elementPosition || (elementPosition !=3D=3D =
"absolute")) {
                // In Firefox and Safari, all parent's scroll values =
must be taken into account.
                // In IE, only the offset parent's because positioned =
elements are offset-parented to BODY and
                // don't need scroll substraction. Non-positioned =
elements are offset-parented to their parent,
                // which may be scrolled.
                for (var parent =3D element.parentNode; parent; parent =
=3D parent.parentNode) {
                    // In IE quirks mode, the <body> element has bogus =
values for scrollLeft and scrollTop.
                    // So we do not use the scrollLeft and scrollTop for =
the <body> element.  This does not
                    // break the standards mode behavior. (VSWhidbey =
426176)
                    tagName =3D parent.tagName;

                    if ((tagName !=3D=3D "BODY") && (tagName !=3D=3D =
"HTML") && (parent.scrollLeft || parent.scrollTop)) {

                        offsetX -=3D (parent.scrollLeft || 0);
                        offsetY -=3D (parent.scrollTop || 0);

                        currentStyle =3D =
Sys.UI.DomElement._getCurrentStyle(parent);
                        if (currentStyle) {
                            offsetX +=3D =
parseInt(currentStyle.borderLeftWidth) || 0;
                            offsetY +=3D =
parseInt(currentStyle.borderTopWidth) || 0;
                        }
                    }
                }
            }

            return new Sys.UI.Point(offsetX, offsetY);
        }
        break;

}


Sys.UI.DomElement.removeCssClass =3D function =
Sys$UI$DomElement$removeCssClass(element, className) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.removeCssClass" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"className" type=3D"String"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "className", type: String}
    ]);
    if (e) throw e;
    var currentClassName =3D ' ' + element.className + ' ';
    var index =3D currentClassName.indexOf(' ' + className + ' ');
    if (index >=3D 0) {
        element.className =3D (currentClassName.substr(0, index) + ' ' +
            currentClassName.substring(index + className.length + 1, =
currentClassName.length)).trim();
    }
}

Sys.UI.DomElement.setLocation =3D function =
Sys$UI$DomElement$setLocation(element, x, y) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.setLocation" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"x" type=3D"Number" integer=3D"true"></param>
    /// <param name=3D"y" type=3D"Number" integer=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "x", type: Number, integer: true},
        {name: "y", type: Number, integer: true}
    ]);
    if (e) throw e;
    var style =3D element.style;
    style.position =3D 'absolute';
    style.left =3D x + "px";
    style.top =3D y + "px";
}

Sys.UI.DomElement.toggleCssClass =3D function =
Sys$UI$DomElement$toggleCssClass(element, className) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.toggleCssClass" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"className" type=3D"String"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "className", type: String}
    ]);
    if (e) throw e;
    if (Sys.UI.DomElement.containsCssClass(element, className)) {
        Sys.UI.DomElement.removeCssClass(element, className);
    }
    else {
        Sys.UI.DomElement.addCssClass(element, className);
    }
}

Sys.UI.DomElement.getVisibilityMode =3D function =
Sys$UI$DomElement$getVisibilityMode(element) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.getVisibilityMode" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <returns type=3D"Sys.UI.VisibilityMode"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true}
    ]);
    if (e) throw e;
    return (element._visibilityMode =3D=3D=3D =
Sys.UI.VisibilityMode.hide) ?
        Sys.UI.VisibilityMode.hide :
        Sys.UI.VisibilityMode.collapse;
}
Sys.UI.DomElement.setVisibilityMode =3D function =
Sys$UI$DomElement$setVisibilityMode(element, value) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.setVisibilityMode" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"value" type=3D"Sys.UI.VisibilityMode"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "value", type: Sys.UI.VisibilityMode}
    ]);
    if (e) throw e;
    Sys.UI.DomElement._ensureOldDisplayMode(element);
    if (element._visibilityMode !=3D=3D value) {
        element._visibilityMode =3D value;
        if (Sys.UI.DomElement.getVisible(element) =3D=3D=3D false) {
            if (element._visibilityMode =3D=3D=3D =
Sys.UI.VisibilityMode.hide) {
                element.style.display =3D element._oldDisplayMode;
            }
            else {
                element.style.display =3D 'none';
            }
        }
        element._visibilityMode =3D value;
    }
}

Sys.UI.DomElement.getVisible =3D function =
Sys$UI$DomElement$getVisible(element) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.getVisible" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <returns type=3D"Boolean"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true}
    ]);
    if (e) throw e;
    var style =3D element.currentStyle || =
Sys.UI.DomElement._getCurrentStyle(element);
    if (!style) return true;
    return (style.visibility !=3D=3D 'hidden') && (style.display !=3D=3D =
'none');
}
Sys.UI.DomElement.setVisible =3D function =
Sys$UI$DomElement$setVisible(element, value) {
    /// <summary locid=3D"M:J#Sys.UI.DomElement.setVisible" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"value" type=3D"Boolean"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "value", type: Boolean}
    ]);
    if (e) throw e;
    if (value !=3D=3D Sys.UI.DomElement.getVisible(element)) {
        Sys.UI.DomElement._ensureOldDisplayMode(element);
        element.style.visibility =3D value ? 'visible' : 'hidden';
        if (value || (element._visibilityMode =3D=3D=3D =
Sys.UI.VisibilityMode.hide)) {
            element.style.display =3D element._oldDisplayMode;
        }
        else {
            element.style.display =3D 'none';
        }
    }
}

Sys.UI.DomElement._ensureOldDisplayMode =3D function =
Sys$UI$DomElement$_ensureOldDisplayMode(element) {
    if (!element._oldDisplayMode) {
        var style =3D element.currentStyle || =
Sys.UI.DomElement._getCurrentStyle(element);
        element._oldDisplayMode =3D style ? style.display : null;
        if (!element._oldDisplayMode || element._oldDisplayMode =
=3D=3D=3D 'none') {
            // Default is different depending on the tag name (omitting =
deprecated and non-standard tags)
            switch(element.tagName.toUpperCase()) {
                case 'DIV': case 'P': case 'ADDRESS': case 'BLOCKQUOTE': =
case 'BODY': case 'COL':
                case 'COLGROUP': case 'DD': case 'DL': case 'DT': case =
'FIELDSET': case 'FORM':
                case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': =
case 'H6': case 'HR':
                case 'IFRAME': case 'LEGEND': case 'OL': case 'PRE': =
case 'TABLE': case 'TD':
                case 'TH': case 'TR': case 'UL':
                    element._oldDisplayMode =3D 'block';
                    break;
                case 'LI':
                    element._oldDisplayMode =3D 'list-item';
                    break;
                default:
                    element._oldDisplayMode =3D 'inline';
            }
        }
    }
}

Sys.UI.DomElement._getWindow =3D function =
Sys$UI$DomElement$_getWindow(element) {
    var doc =3D element.ownerDocument || element.document || element;
    return doc.defaultView || doc.parentWindow;
}

Sys.UI.DomElement._getCurrentStyle =3D function =
Sys$UI$DomElement$_getCurrentStyle(element) {
    if (element.nodeType =3D=3D=3D 3) return null;
    var w =3D Sys.UI.DomElement._getWindow(element);
    if (element.documentElement) element =3D element.documentElement;
    var computedStyle =3D (w && (element !=3D=3D w) && =
w.getComputedStyle) ?
        w.getComputedStyle(element, null) :
        element.currentStyle || element.style;
    if (!computedStyle && (Sys.Browser.agent =3D=3D=3D =
Sys.Browser.Safari) && element.style) {
        // Safari has an interesting bug (fixed in WebKit) where an =
element with display:none will have a null computed style.
        var oldDisplay =3D element.style.display;
        var oldPosition =3D element.style.position;
        element.style.position =3D 'absolute';
        element.style.display =3D 'block';
        var style =3D w.getComputedStyle(element, null);
        element.style.display =3D oldDisplay;
        element.style.position =3D oldPosition;
        // Need a clone as the display property may be wrong and can't =
be fixed on the original object.
        computedStyle =3D {};
        for (var n in style) {
            computedStyle[n] =3D style[n];
        }
        computedStyle.display =3D 'none';
    }
    return computedStyle;
}
=20
Sys.IContainer =3D function Sys$IContainer() {
    throw Error.notImplemented();
}

    function Sys$IContainer$addComponent(component) {
        /// <summary locid=3D"M:J#Sys.IContainer.addComponent" />
        /// <param name=3D"component" type=3D"Sys.Component"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "component", type: Sys.Component}
        ]);
        if (e) throw e;
        throw Error.notImplemented();
    }
    function Sys$IContainer$removeComponent(component) {
        /// <summary locid=3D"M:J#Sys.IContainer.removeComponent" />
        /// <param name=3D"component" type=3D"Sys.Component"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "component", type: Sys.Component}
        ]);
        if (e) throw e;
        throw Error.notImplemented();
    }
    function Sys$IContainer$findComponent(id) {
        /// <summary locid=3D"M:J#Sys.IContainer.findComponent" />
        /// <param name=3D"id" type=3D"String"></param>
        /// <returns type=3D"Sys.Component"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "id", type: String}
        ]);
        if (e) throw e;
        throw Error.notImplemented();
    }
    function Sys$IContainer$getComponents() {
        /// <summary locid=3D"M:J#Sys.IContainer.getComponents" />
        /// <returns type=3D"Array" =
elementType=3D"Sys.Component"></returns>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
Sys.IContainer.prototype =3D {
    addComponent: Sys$IContainer$addComponent,
    removeComponent: Sys$IContainer$removeComponent,
    findComponent: Sys$IContainer$findComponent,
    getComponents: Sys$IContainer$getComponents
}
Sys.IContainer.registerInterface("Sys.IContainer");

=20
// This ScriptLoader works by injecting script tags into the DOM =
sequentially, waiting for each script
// to finish loading before proceeding to the next one.
// It supports a timeout which applies to ALL scripts.
// A call to Sys.Application.notifyScriptLoaded() must be at the bottom =
of each script, as that is=20
// the only reliable way to know when the script has finished loading in =
all browsers.
// It does however attach to the loaded, readystatechange, and error =
events on the script element, and it uses
// these event handlers to know when the script has loaded but the call =
to notifyScriptLoaded may not have been
// executed, which is treated as an error.

Sys._ScriptLoader =3D function Sys$_ScriptLoader() {
    this._scriptsToLoad =3D null;
    this._scriptLoadedDelegate =3D Function.createDelegate(this, =
this._scriptLoadedHandler);
}

    function Sys$_ScriptLoader$dispose() {
        this._stopLoading();
        if(this._events) {
            delete this._events;
        }
        this._scriptLoadedDelegate =3D null;       =20
    }

    function Sys$_ScriptLoader$loadScripts(scriptTimeout, =
allScriptsLoadedCallback, scriptLoadFailedCallback, =
scriptLoadTimeoutCallback) {
        /// <summary locid=3D"M:J#Sys._ScriptLoader.loadScripts" />
        /// <param name=3D"scriptTimeout" type=3D"Number" =
integer=3D"true"></param>
        /// <param name=3D"allScriptsLoadedCallback" type=3D"Function" =
mayBeNull=3D"true"></param>
        /// <param name=3D"scriptLoadFailedCallback" type=3D"Function" =
mayBeNull=3D"true"></param>
        /// <param name=3D"scriptLoadTimeoutCallback" type=3D"Function" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "scriptTimeout", type: Number, integer: true},
            {name: "allScriptsLoadedCallback", type: Function, =
mayBeNull: true},
            {name: "scriptLoadFailedCallback", type: Function, =
mayBeNull: true},
            {name: "scriptLoadTimeoutCallback", type: Function, =
mayBeNull: true}
        ]);
        if (e) throw e;
        if(this._loading) {
            throw =
Error.invalidOperation(Sys.Res.scriptLoaderAlreadyLoading);
        }
        this._loading =3D true;
        this._allScriptsLoadedCallback =3D allScriptsLoadedCallback;
        this._scriptLoadFailedCallback =3D scriptLoadFailedCallback;
        this._scriptLoadTimeoutCallback =3D scriptLoadTimeoutCallback;
       =20
        this._loadScriptsInternal();
    }

    function Sys$_ScriptLoader$notifyScriptLoaded() {
        /// <summary locid=3D"M:J#Sys._ScriptLoader.notifyScriptLoaded" =
/>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
       =20
        // called at the bottom of scripts that have been loaded. This =
is how we know the script is finished
        // mainly for Safari which doesn't support the load event.
        if(!this._loading) {
            // this can happen if someone disposes() the Script Loader =
while it is loading scripts
            // OR if someone includes a reference inline -- which should =
be a no-op
            return;
        }

        this._currentTask._notified++;
       =20
        if(Sys.Browser.agent =3D=3D=3D Sys.Browser.Safari) {          =20
            if(this._currentTask._notified =3D=3D=3D 1) {
                // the loaded event is never going to happen in Safari. =
But once we know that script within the loaded script
                // is executing, we can know when it is finished by =
setting a 0 timeout, it will run after the loaded script
                // is finished.
                // On the first (and only the first) notification for =
this script, set a timeout that processes the script
                // as if its loaded event fired. Only the first =
notification because if we did it for all we'd get one loaded event
                // for each call.
                window.setTimeout(Function.createDelegate(this, =
function() {
                    =
this._scriptLoadedHandler(this._currentTask.get_scriptElement(), true);
                }), 0);
            }
        }

        // in other browsers, the loaded handler will be called natively =
by the loaded/readystatechange event.
        // Waiting rather than processing the next script immediately =
means we can detect scripts that incorrectly contain
        // multiple notifyScriptLoaded() callbacks.
    }

    function Sys$_ScriptLoader$queueCustomScriptTag(scriptAttributes) {
        /// <summary =
locid=3D"M:J#Sys._ScriptLoader.queueCustomScriptTag" />
        /// <param name=3D"scriptAttributes" =
mayBeNull=3D"false"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "scriptAttributes"}
        ]);
        if (e) throw e;
        if(!this._scriptsToLoad) {
            this._scriptsToLoad =3D [];
        }
        Array.add(this._scriptsToLoad, scriptAttributes);
    }

    function Sys$_ScriptLoader$queueScriptBlock(scriptContent) {
        /// <summary locid=3D"M:J#Sys._ScriptLoader.queueScriptBlock" />
        /// <param name=3D"scriptContent" type=3D"String" =
mayBeNull=3D"false"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "scriptContent", type: String}
        ]);
        if (e) throw e;
        if(!this._scriptsToLoad) {
            this._scriptsToLoad =3D [];
        }
        Array.add(this._scriptsToLoad, {text: scriptContent});
    }

    function Sys$_ScriptLoader$queueScriptReference(scriptUrl) {
        /// <summary =
locid=3D"M:J#Sys._ScriptLoader.queueScriptReference" />
        /// <param name=3D"scriptUrl" type=3D"String" =
mayBeNull=3D"false"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "scriptUrl", type: String}
        ]);
        if (e) throw e;
        if(!this._scriptsToLoad) {
            this._scriptsToLoad =3D [];
        }
        Array.add(this._scriptsToLoad, {src: scriptUrl});
    }

    function Sys$_ScriptLoader$_createScriptElement(queuedScript) {
        var scriptElement =3D document.createElement('SCRIPT');

        // Initialize default script type to JavaScript - but it might =
get overwritten
        // if a custom script tag has a different type attribute.
        scriptElement.type =3D 'text/javascript';

        // Apply script element attributes
        for (var attr in queuedScript) {
            scriptElement[attr] =3D queuedScript[attr];
        }
       =20
        return scriptElement;
    }

    function Sys$_ScriptLoader$_loadScriptsInternal() {
        // Load up the next script in the list
        if (this._scriptsToLoad && this._scriptsToLoad.length > 0) {
            var nextScript =3D Array.dequeue(this._scriptsToLoad);
            // Inject a script element into the DOM
            var scriptElement =3D this._createScriptElement(nextScript);
           =20
            if (scriptElement.text && Sys.Browser.agent =3D=3D=3D =
Sys.Browser.Safari) {
                // Safari requires the inline script to be in the =
innerHTML attribute
                scriptElement.innerHTML =3D scriptElement.text;
                delete scriptElement.text;
            }           =20

            // AtlasWhidbey 36149: If they queue an empty script block =
"", we can't tell the difference between
            //                     a script block queue entry and a src =
entry with just if(!element.text).
            // dont use scriptElement.src --> FF resolves that to the =
current directory, IE leaves it blank.
            // nextScript.src is always a string if it's a non block =
script.
            if (typeof(nextScript.src) =3D=3D=3D "string") {
                // We only need to worry about timing out and loading if =
the script tag has a 'src'.
                this._currentTask =3D new =
Sys._ScriptLoaderTask(scriptElement, this._scriptLoadedDelegate);
                // note: task is responsible for disposing of _itself_. =
This is necessary so that the ScriptLoader can continue
                //       with script loading after a script notifies it =
has loaded. The task sticks around until the dom element finishes
                //       completely, and disposes itself automatically.
                // note: its possible for notify to occur before this =
method even returns in IE! So it should remain the last possible =
statement.
                this._currentTask.execute();
            }
            else {
                // script is literal script, so just load the script by =
adding the new element to the DOM
                =
document.getElementsByTagName('HEAD')[0].appendChild(scriptElement);
               =20
                // DevDiv 74151: Do not assume the script executes =
synchronously. Use a setTimeout to delay
                // proceeding, which ensures the script executes before =
we continue. This was first introduced
                // as a workaround for a Firefox bug, but we do it for =
all browsers in order to avoid making
                // an assumption that may be wrong in the future. =
Executing the script synchronously is not
                // in any spec or recommendation.
                var scriptLoader =3D this; // used in the setTimeout =
closure
                window.setTimeout(function() {
                    // cleanup (removes the script element in release =
mode).
                    Sys._ScriptLoader._clearScript(scriptElement);
                    // Resume script loading progress.
                    scriptLoader._loadScriptsInternal();
                }, 0);
            }
        }
        else {
            // When there are no more scripts to load, call the final =
event
            var callback =3D this._allScriptsLoadedCallback;
            this._stopLoading();
            if(callback) {
                callback(this);
            }
        }
    }

    function Sys$_ScriptLoader$_raiseError(multipleCallbacks) {
        // Abort script loading and raise an error.
        var callback =3D this._scriptLoadFailedCallback;
        var scriptElement =3D this._currentTask.get_scriptElement();
        this._stopLoading();
       =20
        if(callback) {
            callback(this, scriptElement, multipleCallbacks);
        }
        else {
            throw =
Sys._ScriptLoader._errorScriptLoadFailed(scriptElement.src, =
multipleCallbacks);
        }
    }

    function Sys$_ScriptLoader$_scriptLoadedHandler(scriptElement, =
loaded) {
        // called by the ScriptLoaderTask when the script element has =
finished loading, which could be because it loaded or
        // errored out (for browsers that support the error event).
        // In Safari this is called indirectly via a setTimeout in the =
notifyScriptLoaded method.
        if(loaded && this._currentTask._notified) {
            if(this._currentTask._notified > 1) {
                // the script contained more than one notify callback
                this._raiseError(true);
            }
            else {
                // script loaded and contained a single notify callback, =
move on to next script
                // DevDiv Bugs 123213: Note that scriptElement.src is =
read as un-htmlencoded, even if it was html encoded originally
                Array.add(Sys._ScriptLoader._getLoadedScripts(), =
scriptElement.src);
                this._currentTask.dispose();
                this._currentTask =3D null;
                this._loadScriptsInternal();
            }
        }
        else {
            // script loaded with an error or it did not contain a =
notify callback.
            this._raiseError(false);
        }
    }

    function Sys$_ScriptLoader$_scriptLoadTimeoutHandler() {
        var callback =3D this._scriptLoadTimeoutCallback;
        this._stopLoading();

        if(callback) {
            callback(this);
        }
    }

    function Sys$_ScriptLoader$_stopLoading() {
        if(this._timeoutCookie) {
            window.clearTimeout(this._timeoutCookie);
            this._timeoutCookie =3D null;
        }

        if(this._currentTask) {
            this._currentTask.dispose();
            this._currentTask =3D null;
        }

        this._scriptsToLoad =3D null;
        this._loading =3D null;
       =20
        this._allScriptsLoadedCallback =3D null;
        this._scriptLoadFailedCallback =3D null;
        this._scriptLoadTimeoutCallback =3D null;
    }
Sys._ScriptLoader.prototype =3D {
    dispose: Sys$_ScriptLoader$dispose,
    loadScripts: Sys$_ScriptLoader$loadScripts,
    notifyScriptLoaded: Sys$_ScriptLoader$notifyScriptLoaded,
    queueCustomScriptTag: Sys$_ScriptLoader$queueCustomScriptTag,
    queueScriptBlock: Sys$_ScriptLoader$queueScriptBlock,
    queueScriptReference: Sys$_ScriptLoader$queueScriptReference,
    _createScriptElement: Sys$_ScriptLoader$_createScriptElement,  =20
    _loadScriptsInternal: Sys$_ScriptLoader$_loadScriptsInternal,
    _raiseError: Sys$_ScriptLoader$_raiseError,
    _scriptLoadedHandler: Sys$_ScriptLoader$_scriptLoadedHandler,
    _scriptLoadTimeoutHandler: =
Sys$_ScriptLoader$_scriptLoadTimeoutHandler,
    _stopLoading: Sys$_ScriptLoader$_stopLoading   =20
}
Sys._ScriptLoader.registerClass('Sys._ScriptLoader', null, =
Sys.IDisposable);

Sys._ScriptLoader.getInstance =3D function =
Sys$_ScriptLoader$getInstance() {
    var sl =3D Sys._ScriptLoader._activeInstance;
    if(!sl) {
        sl =3D Sys._ScriptLoader._activeInstance =3D new =
Sys._ScriptLoader();
    }
    return sl;
}

Sys._ScriptLoader.isScriptLoaded =3D function =
Sys$_ScriptLoader$isScriptLoaded(scriptSrc) {
    // For Firefox we need to resolve the script src attribute
    // since the script elements already in the DOM are always
    // resolved. To do this we create a dummy element to see
    // what it would resolve to.
    var dummyScript =3D document.createElement('script');
    dummyScript.src =3D scriptSrc;
    return Array.contains(Sys._ScriptLoader._getLoadedScripts(), =
dummyScript.src);
}

Sys._ScriptLoader.readLoadedScripts =3D function =
Sys$_ScriptLoader$readLoadedScripts() {
    // enumerates the SCRIPT elements in the DOM and ensures we have =
their SRC's in the referencedScripts array.
    if(!Sys._ScriptLoader._referencedScripts) {
        var referencedScripts =3D Sys._ScriptLoader._referencedScripts =
=3D [];

        var existingScripts =3D document.getElementsByTagName('SCRIPT');
        for (i =3D existingScripts.length - 1; i >=3D 0; i--) {
            var scriptNode =3D existingScripts[i];
            var scriptSrc =3D scriptNode.src;
            if (scriptSrc.length) {
                if (!Array.contains(referencedScripts, scriptSrc)) {
                    Array.add(referencedScripts, scriptSrc);
                }
            }
        }
    }
}

Sys._ScriptLoader._clearScript =3D function =
Sys$_ScriptLoader$_clearScript(scriptElement) {
    if (!Sys.Debug.isDebug) {
        // In release mode we clear out the script elements that we add
        // so that they don't clutter up the DOM.
        scriptElement.parentNode.removeChild(scriptElement);
    }
}

Sys._ScriptLoader._errorScriptLoadFailed =3D function =
Sys$_ScriptLoader$_errorScriptLoadFailed(scriptUrl, multipleCallbacks) {
    var errorMessage;
    if(multipleCallbacks) {
        errorMessage =3D Sys.Res.scriptLoadMultipleCallbacks;
    }
    else {
        // a much more detailed message is displayed in debug mode
        errorMessage =3D Sys.Res.scriptLoadFailedDebug;
    }

    var displayMessage =3D "Sys.ScriptLoadFailedException: " + =
String.format(errorMessage, scriptUrl);
    var e =3D Error.create(displayMessage, {name: =
'Sys.ScriptLoadFailedException', 'scriptUrl': scriptUrl });
    e.popStackFrame();
    return e;
}

Sys._ScriptLoader._getLoadedScripts =3D function =
Sys$_ScriptLoader$_getLoadedScripts() {
    if(!Sys._ScriptLoader._referencedScripts) {
        Sys._ScriptLoader._referencedScripts =3D [];
        Sys._ScriptLoader.readLoadedScripts();
    }
    return Sys._ScriptLoader._referencedScripts;
}
=20
// ScriptLoaderTask loads a single script by injecting a dynamic script =
tag into the DOM.
// It calls the completed callback when the script element's =
load/readystatechange or error event occus.
// The ScriptLoader itself increments the _notified field each time =
notifyScriptLoaded is called from
// within the script (it should only be once). When the completed =
callback is called, ScriptLoader ensures
// the script was successfully loaded and contained exactly 1 =
notifyScriptLoaded callback.
// The task should be disposed of after use, as it contains references =
to the script element.

Sys._ScriptLoaderTask =3D function Sys$_ScriptLoaderTask(scriptElement, =
completedCallback) {
    /// <summary locid=3D"M:J#Sys._ScriptLoaderTask.#ctor" />
    /// <param name=3D"scriptElement" domElement=3D"true"></param>
    /// <param name=3D"completedCallback" type=3D"Function"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "scriptElement", domElement: true},
        {name: "completedCallback", type: Function}
    ]);
    if (e) throw e;
    this._scriptElement =3D scriptElement;
    this._completedCallback =3D completedCallback;
    this._notified =3D 0;
}

    function Sys$_ScriptLoaderTask$get_scriptElement() {
        /// <value domElement=3D"true" =
locid=3D"P:J#Sys._ScriptLoaderTask.scriptElement"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._scriptElement;
    }

    function Sys$_ScriptLoaderTask$dispose() {
        // disposes of the task by removing the load handlers, aborting =
the window timeout, and releasing the ref to the dom element
        if(this._disposed) {
            // already disposed
            return;
        }
        this._disposed =3D true;
        this._removeScriptElementHandlers();
        // remove script element from DOM
        Sys._ScriptLoader._clearScript(this._scriptElement);
        this._scriptElement =3D null;
    }

    function Sys$_ScriptLoaderTask$execute() {
        /// <summary locid=3D"M:J#Sys._ScriptLoaderTask.execute" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        this._addScriptElementHandlers();
        =
document.getElementsByTagName('HEAD')[0].appendChild(this._scriptElement)=
;
    }

    function Sys$_ScriptLoaderTask$_addScriptElementHandlers() {
        // adds the necessary event handlers to the script node to know =
when it is finished loading
        this._scriptLoadDelegate =3D Function.createDelegate(this, =
this._scriptLoadHandler);
       =20
        if (Sys.Browser.agent !=3D=3D Sys.Browser.InternetExplorer) {
            this._scriptElement.readyState =3D 'loaded';
            $addHandler(this._scriptElement, 'load', =
this._scriptLoadDelegate);
        }
        else {
            $addHandler(this._scriptElement, 'readystatechange', =
this._scriptLoadDelegate);
        }   =20
        // FF throws onerror if the script doesn't exist, not loaded.
        // DevDev Bugs 86101 -- cant use DomElement.addHandler because =
it throws for 'error' events.
        if (this._scriptElement.addEventListener) {
            this._scriptErrorDelegate =3D Function.createDelegate(this, =
this._scriptErrorHandler);
            this._scriptElement.addEventListener('error', =
this._scriptErrorDelegate, false);
        }
    }

    function Sys$_ScriptLoaderTask$_removeScriptElementHandlers() {
        // removes the load and error handlers from the script element
        if(this._scriptLoadDelegate) {
            var scriptElement =3D this.get_scriptElement();
            if (Sys.Browser.agent !=3D=3D Sys.Browser.InternetExplorer) =
{
                $removeHandler(scriptElement, 'load', =
this._scriptLoadDelegate);
            }
            else {
                $removeHandler(scriptElement, 'readystatechange', =
this._scriptLoadDelegate);
            }
            if (this._scriptErrorDelegate) {
                // DevDev Bugs 86101 -- cant use =
DomElement.removeHandler because addHandler throws for 'error' events.
                this._scriptElement.removeEventListener('error', =
this._scriptErrorDelegate, false);
                this._scriptErrorDelegate =3D null;
            }
            this._scriptLoadDelegate =3D null;
        }
    }

    function Sys$_ScriptLoaderTask$_scriptErrorHandler() {
        // handler for when the script element's error event occurs
        if(this._disposed) {
            return;
        }
       =20
        // false =3D=3D did not load successfully (404, etc)
        this._completedCallback(this.get_scriptElement(), false);
    }

    function Sys$_ScriptLoaderTask$_scriptLoadHandler() {
        // handler for when the script element's load/readystatechange =
event occurs
        if(this._disposed) {
            return;
        }

        var scriptElement =3D this.get_scriptElement();
        if ((scriptElement.readyState !=3D=3D 'loaded') &&
            (scriptElement.readyState !=3D=3D 'complete')) {
            return;
        }
       =20
        // process the loaded event on a timeout so it is queued behind =
the task that executes the referenced script.
        // Without this, if there is an alert open, the loaded event can =
occur BEFORE the script itself executes, leading
        // us to believe the script did not contain the notify callback =
when really it just hasn't executed yet.
        // The timeout ensures we don't run that logic until after the =
script has a chance to execute.
        var _this =3D this;
        window.setTimeout(function() {
            _this._completedCallback(scriptElement, true);
        }, 0);
    }
Sys._ScriptLoaderTask.prototype =3D {
    get_scriptElement: Sys$_ScriptLoaderTask$get_scriptElement,
    dispose: Sys$_ScriptLoaderTask$dispose,
    execute: Sys$_ScriptLoaderTask$execute,
    _addScriptElementHandlers: =
Sys$_ScriptLoaderTask$_addScriptElementHandlers,   =20
    _removeScriptElementHandlers: =
Sys$_ScriptLoaderTask$_removeScriptElementHandlers,   =20
    _scriptErrorHandler: Sys$_ScriptLoaderTask$_scriptErrorHandler,
    _scriptLoadHandler: Sys$_ScriptLoaderTask$_scriptLoadHandler =20
}
Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask", null, =
Sys.IDisposable);
=20
Sys.ApplicationLoadEventArgs =3D function =
Sys$ApplicationLoadEventArgs(components, isPartialLoad) {
    /// <summary locid=3D"M:J#Sys.ApplicationLoadEventArgs.#ctor" />
    /// <param name=3D"components" type=3D"Array" =
elementType=3D"Sys.Component"></param>
    /// <param name=3D"isPartialLoad" type=3D"Boolean"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "components", type: Array, elementType: Sys.Component},
        {name: "isPartialLoad", type: Boolean}
    ]);
    if (e) throw e;
    Sys.ApplicationLoadEventArgs.initializeBase(this);
    this._components =3D components;
    this._isPartialLoad =3D isPartialLoad;
}
=20
    function Sys$ApplicationLoadEventArgs$get_components() {
        /// <value type=3D"Array" elementType=3D"Sys.Component" =
locid=3D"P:J#Sys.ApplicationLoadEventArgs.components"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._components;
    }
    function Sys$ApplicationLoadEventArgs$get_isPartialLoad() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.ApplicationLoadEventArgs.isPartialLoad"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._isPartialLoad;
    }
Sys.ApplicationLoadEventArgs.prototype =3D {
    get_components: Sys$ApplicationLoadEventArgs$get_components,
    get_isPartialLoad: Sys$ApplicationLoadEventArgs$get_isPartialLoad
}
Sys.ApplicationLoadEventArgs.registerClass('Sys.ApplicationLoadEventArgs'=
, Sys.EventArgs);
=20
Sys._Application =3D function Sys$_Application() {
    Sys._Application.initializeBase(this);

    this._disposableObjects =3D [];
    this._components =3D {};
    this._createdComponents =3D [];
    this._secondPassComponents =3D [];

    this._unloadHandlerDelegate =3D Function.createDelegate(this, =
this._unloadHandler);
    this._loadHandlerDelegate =3D Function.createDelegate(this, =
this._loadHandler);

    Sys.UI.DomEvent.addHandler(window, "unload", =
this._unloadHandlerDelegate);
    Sys.UI.DomEvent.addHandler(window, "load", =
this._loadHandlerDelegate);
}




    function Sys$_Application$get_isCreatingComponents() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys._Application.isCreatingComponents"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._creatingComponents;
    }
    function Sys$_Application$add_load(handler) {
        /// <summary locid=3D"E:J#Sys._Application.load" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().addHandler("load", handler);
    }
    function Sys$_Application$remove_load(handler) {
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().removeHandler("load", handler);
    }
    function Sys$_Application$add_init(handler) {
        /// <summary locid=3D"E:J#Sys._Application.init" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        if (this._initialized) {
            handler(this, Sys.EventArgs.Empty);
        }
        else {
            this.get_events().addHandler("init", handler);
        }
    }
    function Sys$_Application$remove_init(handler) {
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().removeHandler("init", handler);
    }
    function Sys$_Application$add_unload(handler) {
        /// <summary locid=3D"E:J#Sys._Application.unload" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().addHandler("unload", handler);
    }
    function Sys$_Application$remove_unload(handler) {
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this.get_events().removeHandler("unload", handler);
    }
    function Sys$_Application$addComponent(component) {
        /// <summary locid=3D"M:J#Sys._Application.addComponent" />
        /// <param name=3D"component" type=3D"Sys.Component"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "component", type: Sys.Component}
        ]);
        if (e) throw e;
        var id =3D component.get_id();
        if (!id) throw Error.invalidOperation(Sys.Res.cantAddWithoutId);
        if (typeof(this._components[id]) !=3D=3D 'undefined') throw =
Error.invalidOperation(String.format(Sys.Res.appDuplicateComponent, =
id));
        this._components[id] =3D component;
    }
    function Sys$_Application$beginCreateComponents() {
        this._creatingComponents =3D true;
    }
    function Sys$_Application$dispose() {
        if (!this._disposing) {
            this._disposing =3D true;
            if (window.pageUnload) {
                window.pageUnload(this, Sys.EventArgs.Empty);
            }
            var unloadHandler =3D =
this.get_events().getHandler("unload");
            if (unloadHandler) {
                unloadHandler(this, Sys.EventArgs.Empty);
            }
            var disposableObjects =3D =
Array.clone(this._disposableObjects);
            for (var i =3D 0, l =3D disposableObjects.length; i < l; =
i++) {
                disposableObjects[i].dispose();
            }
            Array.clear(this._disposableObjects);

            Sys.UI.DomEvent.removeHandler(window, "unload", =
this._unloadHandlerDelegate);
            if(this._loadHandlerDelegate) {
                Sys.UI.DomEvent.removeHandler(window, "load", =
this._loadHandlerDelegate);
                this._loadHandlerDelegate =3D null;
            }

            var sl =3D Sys._ScriptLoader.getInstance();
            if(sl) {
                sl.dispose();
            }

            Sys._Application.callBaseMethod(this, 'dispose');
        }
    }
    function Sys$_Application$endCreateComponents() {
        var components =3D this._secondPassComponents;
        for (var i =3D 0, l =3D components.length; i < l; i++) {
            var component =3D components[i].component;
            Sys$Component$_setReferences(component, =
components[i].references);
            component.endUpdate();
        }
        this._secondPassComponents =3D [];
        this._creatingComponents =3D false;
    }
    function Sys$_Application$findComponent(id, parent) {
        /// <summary locid=3D"M:J#Sys._Application.findComponent" />
        /// <param name=3D"id" type=3D"String"></param>
        /// <param name=3D"parent" optional=3D"true" =
mayBeNull=3D"true"></param>
        /// <returns type=3D"Sys.Component" =
mayBeNull=3D"true"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "id", type: String},
            {name: "parent", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        // Need to reference the application singleton directly beause =
the $find alias
        // points to the instance function without context. The 'this' =
pointer won't work here.
        return (parent ?
            ((Sys.IContainer.isInstanceOfType(parent)) ?
                parent.findComponent(id) :
                parent[id] || null) :
            Sys.Application._components[id] || null);
    }
    function Sys$_Application$getComponents() {
        /// <summary locid=3D"M:J#Sys._Application.getComponents" />
        /// <returns type=3D"Array" =
elementType=3D"Sys.Component"></returns>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        var res =3D [];
        var components =3D this._components;
        for (var name in components) {
            res[res.length] =3D components[name];
        }
        return res;
    }
    function Sys$_Application$initialize() {
        if(!this._initialized && !this._initializing) {
            this._initializing =3D true;
            // Raise the init events on a timeout so it is queued. This =
delays the component creation until after the body is
            // is ready for use. Without this, if a component adds a dom =
element to body it will be modifying the body before
            // window.onload, which causes an "operation aborted" error =
in IE. We use this trick for all browsers for consistency.
            window.setTimeout(Function.createDelegate(this, =
this._doInitialize), 0);
        }
    }
    function Sys$_Application$notifyScriptLoaded() {
        /// <summary locid=3D"M:J#Sys._Application.notifyScriptLoaded" =
/>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        var sl =3D Sys._ScriptLoader.getInstance();
        if(sl) {
            sl.notifyScriptLoaded();
        }
    }
    function Sys$_Application$registerDisposableObject(object) {
        /// <summary =
locid=3D"M:J#Sys._Application.registerDisposableObject" />
        /// <param name=3D"object" type=3D"Sys.IDisposable"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "object", type: Sys.IDisposable}
        ]);
        if (e) throw e;
        if (!this._disposing) {
            this._disposableObjects[this._disposableObjects.length] =3D =
object;
        }
    }
    function Sys$_Application$raiseLoad() {
        var h =3D this.get_events().getHandler("load");
        var args =3D new =
Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents), =
!this._initializing);
        if (h) {
            h(this, args);
        }

        if (window.pageLoad) {
            window.pageLoad(this, args);
        }
        this._createdComponents =3D [];
    }
    function Sys$_Application$removeComponent(component) {
        /// <summary locid=3D"M:J#Sys._Application.removeComponent" />
        /// <param name=3D"component" type=3D"Sys.Component"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "component", type: Sys.Component}
        ]);
        if (e) throw e;
        var id =3D component.get_id();
        if (id) delete this._components[id];
    }
    function Sys$_Application$unregisterDisposableObject(object) {
        /// <summary =
locid=3D"M:J#Sys._Application.unregisterDisposableObject" />
        /// <param name=3D"object" type=3D"Sys.IDisposable"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "object", type: Sys.IDisposable}
        ]);
        if (e) throw e;
        if (!this._disposing) {
            Array.remove(this._disposableObjects, object);
        }
    }
    function Sys$_Application$_addComponentToSecondPass(component, =
references) {
        this._secondPassComponents[this._secondPassComponents.length] =
=3D {component: component, references: references};
    }
    function Sys$_Application$_doInitialize() {
        Sys._Application.callBaseMethod(this, 'initialize');

        var handler =3D this.get_events().getHandler("init");
        if (handler) {
            this.beginCreateComponents();
            handler(this, Sys.EventArgs.Empty);
            this.endCreateComponents();
        }
        this.raiseLoad();
        this._initializing =3D false;
    }
    function Sys$_Application$_loadHandler() {
        // Called from window.onload. Note that the app may already be =
initialized because SM inlines a call to app.initialize.
        // Who ever calls it first, wins.
        if(this._loadHandlerDelegate) {
            Sys.UI.DomEvent.removeHandler(window, "load", =
this._loadHandlerDelegate);
            this._loadHandlerDelegate =3D null;
        }
        this.initialize();
    }
    function Sys$_Application$_unloadHandler(event) {
        this.dispose();
    }
Sys._Application.prototype =3D {
    _creatingComponents: false,
    _disposing: false,
    get_isCreatingComponents: Sys$_Application$get_isCreatingComponents,
    add_load: Sys$_Application$add_load,
    remove_load: Sys$_Application$remove_load,
    add_init: Sys$_Application$add_init,
    remove_init: Sys$_Application$remove_init,
    add_unload: Sys$_Application$add_unload,
    remove_unload: Sys$_Application$remove_unload,
    addComponent: Sys$_Application$addComponent,
    beginCreateComponents: Sys$_Application$beginCreateComponents,
    dispose: Sys$_Application$dispose,
    endCreateComponents: Sys$_Application$endCreateComponents,
    findComponent: Sys$_Application$findComponent,
    getComponents: Sys$_Application$getComponents,
    initialize: Sys$_Application$initialize,
    notifyScriptLoaded: Sys$_Application$notifyScriptLoaded,
    registerDisposableObject: Sys$_Application$registerDisposableObject,
    raiseLoad: Sys$_Application$raiseLoad,
    removeComponent: Sys$_Application$removeComponent,
    unregisterDisposableObject: =
Sys$_Application$unregisterDisposableObject,
    _addComponentToSecondPass: =
Sys$_Application$_addComponentToSecondPass,
    _doInitialize: Sys$_Application$_doInitialize,   =20
    _loadHandler: Sys$_Application$_loadHandler,
    _unloadHandler: Sys$_Application$_unloadHandler
}
Sys._Application.registerClass('Sys._Application', Sys.Component, =
Sys.IContainer);

Sys.Application =3D new Sys._Application();

var $find =3D Sys.Application.findComponent;

Type.registerNamespace('Sys.Net');

=20
Sys.Net.WebRequestExecutor =3D function Sys$Net$WebRequestExecutor() {
    /// <summary locid=3D"M:J#Sys.Net.WebRequestExecutor.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    this._webRequest =3D null;
    this._resultObject =3D null;
}


    function Sys$Net$WebRequestExecutor$get_webRequest() {
        /// <value type=3D"Sys.Net.WebRequest" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.webRequest"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._webRequest;
    }

    function Sys$Net$WebRequestExecutor$_set_webRequest(value) {
        if (this.get_started()) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, =
'set_webRequest'));
        }

        this._webRequest =3D value;
    }


    function Sys$Net$WebRequestExecutor$get_started() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.started"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }

    function Sys$Net$WebRequestExecutor$get_responseAvailable() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.responseAvailable"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }

    function Sys$Net$WebRequestExecutor$get_timedOut() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.timedOut"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$get_aborted() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.aborted"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$get_responseData() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.responseData"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$get_statusCode() {
        /// <value type=3D"Number" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.statusCode"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$get_statusText() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebRequestExecutor.statusText"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$get_xml() {
        /// <value locid=3D"P:J#Sys.Net.WebRequestExecutor.xml"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$get_object() {
        /// <value =
locid=3D"P:J#Sys.Net.WebRequestExecutor.object"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._resultObject) {
            this._resultObject =3D =
Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData(=
));
        }
        return this._resultObject;
    }


    function Sys$Net$WebRequestExecutor$executeRequest() {
        /// <summary =
locid=3D"M:J#Sys.Net.WebRequestExecutor.executeRequest" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$abort() {
        /// <summary locid=3D"M:J#Sys.Net.WebRequestExecutor.abort" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$getResponseHeader(header) {
        /// <summary =
locid=3D"M:J#Sys.Net.WebRequestExecutor.getResponseHeader" />
        /// <param name=3D"header" type=3D"String"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "header", type: String}
        ]);
        if (e) throw e;
        throw Error.notImplemented();
    }
    function Sys$Net$WebRequestExecutor$getAllResponseHeaders() {
        /// <summary =
locid=3D"M:J#Sys.Net.WebRequestExecutor.getAllResponseHeaders" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        throw Error.notImplemented();
    }
Sys.Net.WebRequestExecutor.prototype =3D {
    get_webRequest: Sys$Net$WebRequestExecutor$get_webRequest,
    _set_webRequest: Sys$Net$WebRequestExecutor$_set_webRequest,
    // properties
    get_started: Sys$Net$WebRequestExecutor$get_started,
    get_responseAvailable: =
Sys$Net$WebRequestExecutor$get_responseAvailable,
    get_timedOut: Sys$Net$WebRequestExecutor$get_timedOut,
    get_aborted: Sys$Net$WebRequestExecutor$get_aborted,
    get_responseData: Sys$Net$WebRequestExecutor$get_responseData,
    get_statusCode: Sys$Net$WebRequestExecutor$get_statusCode,
    get_statusText: Sys$Net$WebRequestExecutor$get_statusText,
    get_xml: Sys$Net$WebRequestExecutor$get_xml,
    get_object: Sys$Net$WebRequestExecutor$get_object,
    // methods
    executeRequest: Sys$Net$WebRequestExecutor$executeRequest,
    abort: Sys$Net$WebRequestExecutor$abort,
    getResponseHeader: Sys$Net$WebRequestExecutor$getResponseHeader,
    getAllResponseHeaders: =
Sys$Net$WebRequestExecutor$getAllResponseHeaders
}
Sys.Net.WebRequestExecutor.registerClass('Sys.Net.WebRequestExecutor');
=20
Sys.Net.XMLDOM =3D function Sys$Net$XMLDOM(markup) {
    if (!window.DOMParser) {
        // DevDiv Bugs 150054: Msxml2.DOMDocument (version independent =
ProgID) required for mobile IE
        var progIDs =3D [ 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' =
];
        for (var i =3D 0, l =3D progIDs.length; i < l; i++) {
            try {
                var xmlDOM =3D new ActiveXObject(progIDs[i]);
                xmlDOM.async =3D false;
                xmlDOM.loadXML(markup);
                xmlDOM.setProperty('SelectionLanguage', 'XPath');
                return xmlDOM;
            }
            catch (ex) {
            }
        }
    }
    else {
        // Mozilla browsers have a DOMParser
        try {
            var domParser =3D new window.DOMParser();
            return domParser.parseFromString(markup, 'text/xml');
        }
        catch (ex) {
        }
    }
    return null;
}

Sys.Net.XMLHttpExecutor =3D function Sys$Net$XMLHttpExecutor() {
    /// <summary locid=3D"M:J#Sys.Net.XMLHttpExecutor.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();

    Sys.Net.XMLHttpExecutor.initializeBase(this);

    var _this =3D this;
    this._xmlHttpRequest =3D null;
    this._webRequest =3D null;
    this._responseAvailable =3D false;
    this._timedOut =3D false;
    this._timer =3D null;
    this._aborted =3D false;
    this._started =3D false;

    this._onReadyStateChange =3D function this$_onReadyStateChange() {
        /*
            readyState values:
            0 =3D uninitialized
            1 =3D loading
            2 =3D loaded
            3 =3D interactive
            4 =3D complete
        */
        if (_this._xmlHttpRequest.readyState =3D=3D=3D 4 /*complete*/) {
            // DevDiv 58581:
            // When a request is pending when the page is closed =
(navigated away, postback, etc)
            // in FF and Safari, the request is aborted just as if =
abort() was called on the=20
            // xmlhttprequest object.
            // However, even aborted requests have a readyState of 4, =
which we treat as successful.
            // This happened for example if a regular postback occurred =
during a partial update request.
            // In FF if you access the 'status' field on an aborted =
request, an error is thrown,
            // so the error console displayed an error when this =
happened.
            // On Safari it isn't an error, but status is undefined. =
That caused PRM to get the completed
            // event, and since the status is not 200, it raises an =
error.
            // IE and Opera ignore pending requests, or their readyState =
isn't 4.
            try {
                if (typeof(_this._xmlHttpRequest.status) =3D=3D=3D =
"undefined") {
                    // its an aborted request in Safari, ignore it
                    return;
                }
            }
            catch(ex) {
                // its an aborted request in Firefox, ignore it
                return;
            }
           =20
            _this._clearTimer();
            _this._responseAvailable =3D true;
            _this._webRequest.completed(Sys.EventArgs.Empty);
            if (_this._xmlHttpRequest !=3D null) {
                _this._xmlHttpRequest.onreadystatechange =3D =
Function.emptyMethod;
                _this._xmlHttpRequest =3D null;
            }
        }
    }

    this._clearTimer =3D function this$_clearTimer() {
        if (_this._timer !=3D null) {
            window.clearTimeout(_this._timer);
            _this._timer =3D null;
        }
    }

    this._onTimeout =3D function this$_onTimeout() {
        if (!_this._responseAvailable) {
            _this._clearTimer();
            _this._timedOut =3D true;
            _this._xmlHttpRequest.onreadystatechange =3D =
Function.emptyMethod;
            _this._xmlHttpRequest.abort();
            _this._webRequest.completed(Sys.EventArgs.Empty);
            _this._xmlHttpRequest =3D null;
        }
    }

}



    function Sys$Net$XMLHttpExecutor$get_timedOut() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.timedOut"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._timedOut;
    }

    function Sys$Net$XMLHttpExecutor$get_started() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.started"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._started;
    }

    function Sys$Net$XMLHttpExecutor$get_responseAvailable() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.responseAvailable"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._responseAvailable;
    }

    function Sys$Net$XMLHttpExecutor$get_aborted() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.aborted"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._aborted;
    }

    function Sys$Net$XMLHttpExecutor$executeRequest() {
        /// <summary locid=3D"M:J#this._onTimeout" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        this._webRequest =3D this.get_webRequest();

        if (this._started) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, =
'executeRequest'));
        }
        if (this._webRequest =3D=3D=3D null) {
            throw Error.invalidOperation(Sys.Res.nullWebRequest);
        }

        var body =3D this._webRequest.get_body();
        var headers =3D this._webRequest.get_headers();
        this._xmlHttpRequest =3D new XMLHttpRequest();
        this._xmlHttpRequest.onreadystatechange =3D =
this._onReadyStateChange;
        var verb =3D this._webRequest.get_httpVerb();
        this._xmlHttpRequest.open(verb, =
this._webRequest.getResolvedUrl(), true /*async*/);
        if (headers) {
            for (var header in headers) {
                var val =3D headers[header];
                if (typeof(val) !=3D=3D "function")
                    this._xmlHttpRequest.setRequestHeader(header, val);
            }
        }

        if (verb.toLowerCase() =3D=3D=3D "post") {
            // If it's a POST but no Content-Type was specified, default =
to application/x-www-form-urlencoded; charset=3Dutf-8
            if ((headers =3D=3D=3D null) || !headers['Content-Type']) {
                // DevDiv 109456: Include charset=3Dutf-8. Javascript =
encoding methods always use utf-8, server may be set to assume other =
encoding.
                this._xmlHttpRequest.setRequestHeader('Content-Type', =
'application/x-www-form-urlencoded; charset=3Dutf-8');
            }

            // DevDiv 15893: If POST with no body, default to ""(FireFox =
needs this)
            if (!body) {
                body =3D "";
            }
        }

        var timeout =3D this._webRequest.get_timeout();
        if (timeout > 0) {
            this._timer =3D =
window.setTimeout(Function.createDelegate(this, this._onTimeout), =
timeout);
        }
        this._xmlHttpRequest.send(body);
        this._started =3D true;
    }

    function Sys$Net$XMLHttpExecutor$getResponseHeader(header) {
        /// <summary locid=3D"M:J#this._onTimeout" />
        /// <param name=3D"header" type=3D"String"></param>
        /// <returns type=3D"String"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "header", type: String}
        ]);
        if (e) throw e;
        if (!this._responseAvailable) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, =
'getResponseHeader'));
        }
        if (!this._xmlHttpRequest) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, =
'getResponseHeader'));
        }

        var result;
        try {
            result =3D this._xmlHttpRequest.getResponseHeader(header);
        } catch (e) {
        }
        if (!result) result =3D "";
        return result;
    }

    function Sys$Net$XMLHttpExecutor$getAllResponseHeaders() {
        /// <summary locid=3D"M:J#this._onTimeout" />
        /// <returns type=3D"String"></returns>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._responseAvailable) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, =
'getAllResponseHeaders'));
        }
        if (!this._xmlHttpRequest) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, =
'getAllResponseHeaders'));
        }

        return this._xmlHttpRequest.getAllResponseHeaders();
    }

    function Sys$Net$XMLHttpExecutor$get_responseData() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.responseData"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._responseAvailable) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, =
'get_responseData'));
        }
        if (!this._xmlHttpRequest) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, =
'get_responseData'));
        }

        return this._xmlHttpRequest.responseText;
    }

    function Sys$Net$XMLHttpExecutor$get_statusCode() {
        /// <value type=3D"Number" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.statusCode"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._responseAvailable) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, =
'get_statusCode'));
        }
        if (!this._xmlHttpRequest) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, =
'get_statusCode'));
        }
        var result =3D 0;
        try {
            result =3D this._xmlHttpRequest.status;
        }
        catch(ex) {
        }
        return result;
    }

    function Sys$Net$XMLHttpExecutor$get_statusText() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.XMLHttpExecutor.statusText"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._responseAvailable) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, =
'get_statusText'));
        }
        if (!this._xmlHttpRequest) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, =
'get_statusText'));
        }

        return this._xmlHttpRequest.statusText;
    }

    function Sys$Net$XMLHttpExecutor$get_xml() {
        /// <value locid=3D"P:J#Sys.Net.XMLHttpExecutor.xml"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._responseAvailable) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, =
'get_xml'));
        }
        if (!this._xmlHttpRequest) {
            throw =
Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, =
'get_xml'));
        }

        var xml =3D this._xmlHttpRequest.responseXML;
        if (!xml || !xml.documentElement) {

            // This happens if the server doesn't set the content type =
to text/xml.
            xml =3D Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);

            // If we still couldn't get an XML DOM, the data is probably =
not XML
            if (!xml || !xml.documentElement)
                return null;
        }
        // REVIEW: todo this used to use Sys.Runtime get_hostType
        else if (navigator.userAgent.indexOf('MSIE') !=3D=3D -1) {
            xml.setProperty('SelectionLanguage', 'XPath');
        }

        // For Firefox parser errors have document elements of parser =
error
        if (xml.documentElement.namespaceURI =3D=3D=3D =
"http://www.mozilla.org/newlayout/xml/parsererror.xml" &&
            xml.documentElement.tagName =3D=3D=3D "parsererror") {
            return null;
        }
       =20
        // For Safari, parser errors are always the first child of the =
root
        if (xml.documentElement.firstChild && =
xml.documentElement.firstChild.tagName =3D=3D=3D "parsererror") {
            return null;
        }
       =20
        return xml;
    }

    function Sys$Net$XMLHttpExecutor$abort() {
        /// <summary locid=3D"M:J#this._onTimeout" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._started) {
            throw =
Error.invalidOperation(Sys.Res.cannotAbortBeforeStart);
        }

        // aborts are no ops if we are done, timedout, or aborted =
already
        if (this._aborted || this._responseAvailable || this._timedOut)
            return;

        this._aborted =3D true;

        this._clearTimer();

        if (this._xmlHttpRequest && !this._responseAvailable) {

            // Remove the onreadystatechange first otherwise abort would =
trigger readyState to become 4
            this._xmlHttpRequest.onreadystatechange =3D =
Function.emptyMethod;
            this._xmlHttpRequest.abort();
           =20
            this._xmlHttpRequest =3D null;           =20

            // DevDiv 59229: Call completed on the request instead of =
raising the event directly
            this._webRequest.completed(Sys.EventArgs.Empty);
        }
    }
Sys.Net.XMLHttpExecutor.prototype =3D {
    get_timedOut: Sys$Net$XMLHttpExecutor$get_timedOut,
    get_started: Sys$Net$XMLHttpExecutor$get_started,
    get_responseAvailable: =
Sys$Net$XMLHttpExecutor$get_responseAvailable,
    get_aborted: Sys$Net$XMLHttpExecutor$get_aborted,
    executeRequest: Sys$Net$XMLHttpExecutor$executeRequest,
    getResponseHeader: Sys$Net$XMLHttpExecutor$getResponseHeader,
    getAllResponseHeaders: =
Sys$Net$XMLHttpExecutor$getAllResponseHeaders,
    get_responseData: Sys$Net$XMLHttpExecutor$get_responseData,
    get_statusCode: Sys$Net$XMLHttpExecutor$get_statusCode,
    get_statusText: Sys$Net$XMLHttpExecutor$get_statusText,
    get_xml: Sys$Net$XMLHttpExecutor$get_xml,
    abort: Sys$Net$XMLHttpExecutor$abort
}
Sys.Net.XMLHttpExecutor.registerClass('Sys.Net.XMLHttpExecutor', =
Sys.Net.WebRequestExecutor);
=20
Sys.Net._WebRequestManager =3D function Sys$Net$_WebRequestManager() {
    this._this =3D this;
    this._defaultTimeout =3D 0;
    this._defaultExecutorType =3D "Sys.Net.XMLHttpExecutor";
}


    function Sys$Net$_WebRequestManager$add_invokingRequest(handler) {
        /// <summary =
locid=3D"E:J#Sys.Net._WebRequestManager.invokingRequest" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this._get_eventHandlerList().addHandler("invokingRequest", =
handler);
    }
    function Sys$Net$_WebRequestManager$remove_invokingRequest(handler) =
{
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this._get_eventHandlerList().removeHandler("invokingRequest", =
handler);
    }

    function Sys$Net$_WebRequestManager$add_completedRequest(handler) {
        /// <summary =
locid=3D"E:J#Sys.Net._WebRequestManager.completedRequest" />
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this._get_eventHandlerList().addHandler("completedRequest", =
handler);
    }
    function Sys$Net$_WebRequestManager$remove_completedRequest(handler) =
{
        var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
        if (e) throw e;
        this._get_eventHandlerList().removeHandler("completedRequest", =
handler);
    }

    function Sys$Net$_WebRequestManager$_get_eventHandlerList() {
        if (!this._events) {
            this._events =3D new Sys.EventHandlerList();
        }
        return this._events;
    }

    function Sys$Net$_WebRequestManager$get_defaultTimeout() {
        /// <value type=3D"Number" =
locid=3D"P:J#Sys.Net._WebRequestManager.defaultTimeout"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultTimeout;
    }
    function Sys$Net$_WebRequestManager$set_defaultTimeout(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Number}]);
        if (e) throw e;
        if (value < 0) {
            throw Error.argumentOutOfRange("value", value, =
Sys.Res.invalidTimeout);
        }

        this._defaultTimeout =3D value;
    }

    function Sys$Net$_WebRequestManager$get_defaultExecutorType() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net._WebRequestManager.defaultExecutorType"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultExecutorType;
    }
    function Sys$Net$_WebRequestManager$set_defaultExecutorType(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        this._defaultExecutorType =3D value;
    }

    function Sys$Net$_WebRequestManager$executeRequest(webRequest) {
        /// <summary =
locid=3D"M:J#Sys.Net._WebRequestManager.executeRequest" />
        /// <param name=3D"webRequest" =
type=3D"Sys.Net.WebRequest"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "webRequest", type: Sys.Net.WebRequest}
        ]);
        if (e) throw e;
        var executor =3D webRequest.get_executor();
        // if the request didn't set an executor, use the request =
manager default executor
        if (!executor) {
            // TODO: Optimize this by caching the type

            var failed =3D false;
            try {
                var executorType =3D eval(this._defaultExecutorType);
                executor =3D new executorType();
            } catch (e) {
                failed =3D true;
            }

            if (failed  || =
!Sys.Net.WebRequestExecutor.isInstanceOfType(executor) || !executor) {
                throw Error.argument("defaultExecutorType", =
String.format(Sys.Res.invalidExecutorType, this._defaultExecutorType));
            }

            webRequest.set_executor(executor);
        }

        // skip the request if it has been aborted;
        if (executor.get_aborted()) {
            return;
        }

        var evArgs =3D new Sys.Net.NetworkRequestEventArgs(webRequest);
        var handler =3D =
this._get_eventHandlerList().getHandler("invokingRequest");
        if (handler) {
            handler(this, evArgs);
        }

        if (!evArgs.get_cancel()) {
            executor.executeRequest();
        }
    }
Sys.Net._WebRequestManager.prototype =3D {
    add_invokingRequest: Sys$Net$_WebRequestManager$add_invokingRequest,
    remove_invokingRequest: =
Sys$Net$_WebRequestManager$remove_invokingRequest,
    add_completedRequest: =
Sys$Net$_WebRequestManager$add_completedRequest,
    remove_completedRequest: =
Sys$Net$_WebRequestManager$remove_completedRequest,
    _get_eventHandlerList: =
Sys$Net$_WebRequestManager$_get_eventHandlerList,
    get_defaultTimeout: Sys$Net$_WebRequestManager$get_defaultTimeout,
    set_defaultTimeout: Sys$Net$_WebRequestManager$set_defaultTimeout,
    get_defaultExecutorType: =
Sys$Net$_WebRequestManager$get_defaultExecutorType,
    set_defaultExecutorType: =
Sys$Net$_WebRequestManager$set_defaultExecutorType,
    executeRequest: Sys$Net$_WebRequestManager$executeRequest
}

Sys.Net._WebRequestManager.registerClass('Sys.Net._WebRequestManager');

// Create a single instance of the class
Sys.Net.WebRequestManager =3D new Sys.Net._WebRequestManager();
=20
Sys.Net.NetworkRequestEventArgs =3D function =
Sys$Net$NetworkRequestEventArgs(webRequest) {
    /// <summary locid=3D"M:J#Sys.Net.NetworkRequestEventArgs.#ctor" />
    /// <param name=3D"webRequest" type=3D"Sys.Net.WebRequest"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "webRequest", type: Sys.Net.WebRequest}
    ]);
    if (e) throw e;
    Sys.Net.NetworkRequestEventArgs.initializeBase(this);
    this._webRequest =3D webRequest;
}


    function Sys$Net$NetworkRequestEventArgs$get_webRequest() {
        /// <value type=3D"Sys.Net.WebRequest" =
locid=3D"P:J#Sys.Net.NetworkRequestEventArgs.webRequest"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._webRequest;
    }
Sys.Net.NetworkRequestEventArgs.prototype =3D {
    get_webRequest: Sys$Net$NetworkRequestEventArgs$get_webRequest
}

Sys.Net.NetworkRequestEventArgs.registerClass('Sys.Net.NetworkRequestEven=
tArgs', Sys.CancelEventArgs);
=20
Sys.Net.WebRequest =3D function Sys$Net$WebRequest() {
    /// <summary locid=3D"M:J#Sys.Net.WebRequest.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    this._url =3D "";
    this._headers =3D { };
    this._body =3D null;
    this._userContext =3D null;
    this._httpVerb =3D null;
    this._executor =3D null;
    this._invokeCalled =3D false;
    this._timeout =3D 0;
}

// Properties about the request data

    function Sys$Net$WebRequest$add_completed(handler) {
    /// <summary locid=3D"E:J#Sys.Net.WebRequest.completed" />
    var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
    if (e) throw e;
        this._get_eventHandlerList().addHandler("completed", handler);
    }
    function Sys$Net$WebRequest$remove_completed(handler) {
    var e =3D Function._validateParams(arguments, [{name: "handler", =
type: Function}]);
    if (e) throw e;
        this._get_eventHandlerList().removeHandler("completed", =
handler);
    }

    function Sys$Net$WebRequest$completed(eventArgs) {
        /// <summary locid=3D"M:J#Sys.Net.WebRequest.completed" />
        /// <param name=3D"eventArgs" type=3D"Sys.EventArgs"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "eventArgs", type: Sys.EventArgs}
        ]);
        if (e) throw e;
        var handler =3D =
Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRe=
quest");
        if (handler) {
            handler(this._executor, eventArgs);
        }

        handler =3D =
this._get_eventHandlerList().getHandler("completed");
        if (handler) {
            handler(this._executor, eventArgs);
        }
    }

    function Sys$Net$WebRequest$_get_eventHandlerList() {
        if (!this._events) {
            this._events =3D new Sys.EventHandlerList();
        }
        return this._events;
    }

    function Sys$Net$WebRequest$get_url() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebRequest.url"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._url;
    }
    function Sys$Net$WebRequest$set_url(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        this._url =3D value;
    }

    function Sys$Net$WebRequest$get_headers() {
        /// <value locid=3D"P:J#Sys.Net.WebRequest.headers"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._headers;
    }

    function Sys$Net$WebRequest$get_httpVerb() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebRequest.httpVerb"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        // Default is GET if no body, and POST otherwise
        if (this._httpVerb =3D=3D=3D null) {
            if (this._body =3D=3D=3D null) {
                return "GET";
            }
            return "POST";
        }
        return this._httpVerb;
    }
    function Sys$Net$WebRequest$set_httpVerb(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        if (value.length =3D=3D=3D 0) {
            throw Error.argument('value', Sys.Res.invalidHttpVerb);
        }

        this._httpVerb =3D value;
    }

    function Sys$Net$WebRequest$get_body() {
        /// <value mayBeNull=3D"true" =
locid=3D"P:J#Sys.Net.WebRequest.body"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._body;
    }
    function Sys$Net$WebRequest$set_body(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
mayBeNull: true}]);
        if (e) throw e;
        this._body =3D value;
    }

    function Sys$Net$WebRequest$get_userContext() {
        /// <value mayBeNull=3D"true" =
locid=3D"P:J#Sys.Net.WebRequest.userContext"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._userContext;
    }
    function Sys$Net$WebRequest$set_userContext(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
mayBeNull: true}]);
        if (e) throw e;
        this._userContext =3D value;
    }

    function Sys$Net$WebRequest$get_executor() {
        /// <value type=3D"Sys.Net.WebRequestExecutor" =
locid=3D"P:J#Sys.Net.WebRequest.executor"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._executor;
    }
    function Sys$Net$WebRequest$set_executor(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Sys.Net.WebRequestExecutor}]);
        if (e) throw e;
        if (this._executor !=3D=3D null && this._executor.get_started()) =
{
            throw =
Error.invalidOperation(Sys.Res.setExecutorAfterActive);
        }

        this._executor =3D value;
        this._executor._set_webRequest(this);
    }

    function Sys$Net$WebRequest$get_timeout() {
        /// <value type=3D"Number" =
locid=3D"P:J#Sys.Net.WebRequest.timeout"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this._timeout =3D=3D=3D 0) {
            return Sys.Net.WebRequestManager.get_defaultTimeout();
        }
        return this._timeout;
    }
    function Sys$Net$WebRequest$set_timeout(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Number}]);
        if (e) throw e;
        if (value < 0) {
            throw Error.argumentOutOfRange("value", value, =
Sys.Res.invalidTimeout);
        }

        this._timeout =3D value;
    }

    function Sys$Net$WebRequest$getResolvedUrl() {
        /// <summary locid=3D"M:J#Sys.Net.WebRequest.getResolvedUrl" />
        /// <returns type=3D"String"></returns>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return Sys.Net.WebRequest._resolveUrl(this._url);
    }

    function Sys$Net$WebRequest$invoke() {
        /// <summary locid=3D"M:J#Sys.Net.WebRequest.invoke" />
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this._invokeCalled) {
            throw Error.invalidOperation(Sys.Res.invokeCalledTwice);
        }

        Sys.Net.WebRequestManager.executeRequest(this);
        this._invokeCalled =3D true;
    }
Sys.Net.WebRequest.prototype =3D {
    add_completed: Sys$Net$WebRequest$add_completed,
    remove_completed: Sys$Net$WebRequest$remove_completed,
    completed: Sys$Net$WebRequest$completed,
    _get_eventHandlerList: Sys$Net$WebRequest$_get_eventHandlerList,
    get_url: Sys$Net$WebRequest$get_url,
    set_url: Sys$Net$WebRequest$set_url,
    get_headers: Sys$Net$WebRequest$get_headers,
    get_httpVerb: Sys$Net$WebRequest$get_httpVerb,
    set_httpVerb: Sys$Net$WebRequest$set_httpVerb,
    get_body: Sys$Net$WebRequest$get_body,
    set_body: Sys$Net$WebRequest$set_body,
    get_userContext: Sys$Net$WebRequest$get_userContext,
    set_userContext: Sys$Net$WebRequest$set_userContext,
    get_executor: Sys$Net$WebRequest$get_executor,
    set_executor: Sys$Net$WebRequest$set_executor,
    get_timeout: Sys$Net$WebRequest$get_timeout,
    set_timeout: Sys$Net$WebRequest$set_timeout,
    getResolvedUrl: Sys$Net$WebRequest$getResolvedUrl,
    invoke: Sys$Net$WebRequest$invoke
}

// Given a url and an optional base url, return an absolute url =
combining the url and base url
Sys.Net.WebRequest._resolveUrl =3D function =
Sys$Net$WebRequest$_resolveUrl(url, baseUrl) {
    // If the url contains a host, we are done
    if (url && url.indexOf('://') !=3D=3D -1) {
        return url;
    }

    // If a base url isn't passed in, we use either the base element if =
specified or the URL from the browser
    if (!baseUrl || baseUrl.length =3D=3D=3D 0) {
        var baseElement =3D document.getElementsByTagName('base')[0];
        if (baseElement && baseElement.href && baseElement.href.length > =
0) {
            baseUrl =3D baseElement.href;
        }
        else {
            baseUrl =3D document.URL;
        }
    }

    // strip off any querystrings
    var qsStart =3D baseUrl.indexOf('?');
    if (qsStart !=3D=3D -1) {
        baseUrl =3D baseUrl.substr(0, qsStart);
    }
    baseUrl =3D baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1);

    // If a url wasn't specified, we just use the base
    if (!url || url.length =3D=3D=3D 0) {
        return baseUrl;
    }

    // For absolute path url, we need to rebase it against the base url, =
stripping off everything after the http://host
    if (url.charAt(0) =3D=3D=3D '/') {
        var slashslash =3D baseUrl.indexOf('://');
        if (slashslash =3D=3D=3D -1) {
            throw Error.argument("baseUrl", Sys.Res.badBaseUrl1);
        }

        var nextSlash =3D baseUrl.indexOf('/', slashslash + 3);
        if (nextSlash =3D=3D=3D -1) {
            throw Error.argument("baseUrl", Sys.Res.badBaseUrl2);
        }

        return baseUrl.substr(0, nextSlash) + url;
    }
    // Otherwise for relative urls we just combine with the base url =
stripping off the last path component (filename typically)
    // Note the app path always contains a trailing slash so when =
resolving app paths, we never strip off anything important
    else {
        var lastSlash =3D baseUrl.lastIndexOf('/');
        if (lastSlash =3D=3D=3D -1) {
            throw Error.argument("baseUrl", Sys.Res.badBaseUrl3);
        }

        return baseUrl.substr(0, lastSlash+1) + url;
    }
}

Sys.Net.WebRequest._createQueryString =3D function =
Sys$Net$WebRequest$_createQueryString(queryString, encodeMethod) {
    // By default, use URI encoding
    if (!encodeMethod)
        encodeMethod =3D encodeURIComponent;

    var sb =3D new Sys.StringBuilder();

    var i =3D 0;
    for (var arg in queryString) {
        var obj =3D queryString[arg];
        if (typeof(obj) =3D=3D=3D "function") continue;
        var val =3D =
Sys.Serialization.JavaScriptSerializer.serialize(obj);
        if (i !=3D=3D 0) {
            sb.append('&');
        }

        sb.append(arg);
        sb.append('=3D');
        sb.append(encodeMethod(val));

        i++;
    }

    return sb.toString();
}

Sys.Net.WebRequest._createUrl =3D function =
Sys$Net$WebRequest$_createUrl(url, queryString) {
    if (!queryString) {
        return url;
    }

    var qs =3D Sys.Net.WebRequest._createQueryString(queryString);
    if (qs.length > 0) {
        var sep =3D '?';
        if (url && url.indexOf('?') !=3D=3D -1)
            sep =3D '&';
        return url + sep + qs;
    } else {
        return url;
    }
}

Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest');
=20
Sys.Net.WebServiceProxy =3D function Sys$Net$WebServiceProxy() {
}


    function Sys$Net$WebServiceProxy$get_timeout() {
        /// <value type=3D"Number" =
locid=3D"P:J#Sys.Net.WebServiceProxy.timeout"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._timeout;
    }
    function Sys$Net$WebServiceProxy$set_timeout(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Number}]);
        if (e) throw e;
        if (value < 0) { throw Error.argumentOutOfRange('value', value, =
Sys.Res.invalidTimeout); }
        this._timeout =3D value;
    }
    function Sys$Net$WebServiceProxy$get_defaultUserContext() {
        /// <value mayBeNull=3D"true" =
locid=3D"P:J#Sys.Net.WebServiceProxy.defaultUserContext"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._userContext;
    }
    function Sys$Net$WebServiceProxy$set_defaultUserContext(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
mayBeNull: true}]);
        if (e) throw e;
        this._userContext =3D value;
    }
    function Sys$Net$WebServiceProxy$get_defaultSucceededCallback() {
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Net.WebServiceProxy.defaultSucceededCallback"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._succeeded;
    }
    function Sys$Net$WebServiceProxy$set_defaultSucceededCallback(value) =
{
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._succeeded =3D value;
    }
    function Sys$Net$WebServiceProxy$get_defaultFailedCallback() {
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Net.WebServiceProxy.defaultFailedCallback"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._failed;
    }
    function Sys$Net$WebServiceProxy$set_defaultFailedCallback(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._failed =3D value;
    }
    function Sys$Net$WebServiceProxy$get_path() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebServiceProxy.path"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._path;
    }
    function Sys$Net$WebServiceProxy$set_path(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        this._path =3D value;
    }

    function Sys$Net$WebServiceProxy$_invoke(servicePath, methodName, =
useGet, params, onSuccess, onFailure, userContext) {
        /// <summary locid=3D"M:J#Sys.Net.WebServiceProxy._invoke" />
        /// <param name=3D"servicePath" type=3D"String"></param>
        /// <param name=3D"methodName" type=3D"String"></param>
        /// <param name=3D"useGet" type=3D"Boolean"></param>
        /// <param name=3D"params"></param>
        /// <param name=3D"onSuccess" type=3D"Function" =
mayBeNull=3D"true" optional=3D"true"></param>
        /// <param name=3D"onFailure" type=3D"Function" =
mayBeNull=3D"true" optional=3D"true"></param>
        /// <param name=3D"userContext" mayBeNull=3D"true" =
optional=3D"true"></param>
        /// <returns type=3D"Sys.Net.WebRequest"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "servicePath", type: String},
            {name: "methodName", type: String},
            {name: "useGet", type: Boolean},
            {name: "params"},
            {name: "onSuccess", type: Function, mayBeNull: true, =
optional: true},
            {name: "onFailure", type: Function, mayBeNull: true, =
optional: true},
            {name: "userContext", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;

        // Resolve against the defaults callbacks/context
        if (onSuccess =3D=3D=3D null || typeof onSuccess =3D=3D=3D =
'undefined') onSuccess =3D this.get_defaultSucceededCallback();
        if (onFailure =3D=3D=3D null || typeof onFailure =3D=3D=3D =
'undefined') onFailure =3D this.get_defaultFailedCallback();
        if (userContext =3D=3D=3D null || typeof userContext =3D=3D=3D =
'undefined') userContext =3D this.get_defaultUserContext();
       =20
        return Sys.Net.WebServiceProxy.invoke(servicePath, methodName, =
useGet, params, onSuccess, onFailure, userContext, this.get_timeout());
    }
Sys.Net.WebServiceProxy.prototype =3D {
    get_timeout: Sys$Net$WebServiceProxy$get_timeout,
    set_timeout: Sys$Net$WebServiceProxy$set_timeout,
    get_defaultUserContext: =
Sys$Net$WebServiceProxy$get_defaultUserContext,
    set_defaultUserContext: =
Sys$Net$WebServiceProxy$set_defaultUserContext,
    get_defaultSucceededCallback: =
Sys$Net$WebServiceProxy$get_defaultSucceededCallback,
    set_defaultSucceededCallback: =
Sys$Net$WebServiceProxy$set_defaultSucceededCallback,
    get_defaultFailedCallback: =
Sys$Net$WebServiceProxy$get_defaultFailedCallback,
    set_defaultFailedCallback: =
Sys$Net$WebServiceProxy$set_defaultFailedCallback,
    get_path: Sys$Net$WebServiceProxy$get_path,
    set_path: Sys$Net$WebServiceProxy$set_path,
    _invoke: Sys$Net$WebServiceProxy$_invoke
}
Sys.Net.WebServiceProxy.registerClass('Sys.Net.WebServiceProxy');

Sys.Net.WebServiceProxy.invoke =3D function =
Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, =
onSuccess, onFailure, userContext, timeout) {
    /// <summary locid=3D"M:J#Sys.Net.WebServiceProxy.invoke" />
    /// <param name=3D"servicePath" type=3D"String"></param>
    /// <param name=3D"methodName" type=3D"String"></param>
    /// <param name=3D"useGet" type=3D"Boolean" =
optional=3D"true"></param>
    /// <param name=3D"params" mayBeNull=3D"true" =
optional=3D"true"></param>
    /// <param name=3D"onSuccess" type=3D"Function" mayBeNull=3D"true" =
optional=3D"true"></param>
    /// <param name=3D"onFailure" type=3D"Function" mayBeNull=3D"true" =
optional=3D"true"></param>
    /// <param name=3D"userContext" mayBeNull=3D"true" =
optional=3D"true"></param>
    /// <param name=3D"timeout" type=3D"Number" =
optional=3D"true"></param>
    /// <returns type=3D"Sys.Net.WebRequest"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "servicePath", type: String},
        {name: "methodName", type: String},
        {name: "useGet", type: Boolean, optional: true},
        {name: "params", mayBeNull: true, optional: true},
        {name: "onSuccess", type: Function, mayBeNull: true, optional: =
true},
        {name: "onFailure", type: Function, mayBeNull: true, optional: =
true},
        {name: "userContext", mayBeNull: true, optional: true},
        {name: "timeout", type: Number, optional: true}
    ]);
    if (e) throw e;

    // Create a web request to make the method call
    var request =3D new Sys.Net.WebRequest();

    request.get_headers()['Content-Type'] =3D 'application/json; =
charset=3Dutf-8';
    if (!params) params =3D {};
    var urlParams =3D params;
    // If using POST, or we don't have any paramaters, start with a =
blank dictionary
    if (!useGet || !urlParams) urlParams =3D {};
    =
request.set_url(Sys.Net.WebRequest._createUrl(servicePath+"/"+encodeURICo=
mponent(methodName), urlParams));

    var body =3D null;
    // No body when using GET
    if (!useGet) {
        body =3D =
Sys.Serialization.JavaScriptSerializer.serialize(params);

        // If there are no parameters, send an empty body (though it =
will still be a POST)
        if (body =3D=3D=3D "{}") body =3D "";
    }

    // Put together the body as a JSON string
    request.set_body(body);
    request.add_completed(onComplete);
    if (timeout && timeout > 0) request.set_timeout(timeout);
    request.invoke();

    function onComplete(response, eventArgs) {
        if (response.get_responseAvailable()) {
            var statusCode =3D response.get_statusCode();
            var result =3D null;
          =20
            try {
                var contentType =3D =
response.getResponseHeader("Content-Type");
                if (contentType.startsWith("application/json")) {
                    result =3D response.get_object();
                }
                else if (contentType.startsWith("text/xml")) {
                    result =3D response.get_xml();
                }
                // Default to the response text
                else {
                    result =3D response.get_responseData();
                }
            } catch (ex) {
            }

            var error =3D response.getResponseHeader("jsonerror");
            var errorObj =3D (error =3D=3D=3D "true");
            if (errorObj) {
                if (result) {
                    result =3D new Sys.Net.WebServiceError(false, =
result.Message, result.StackTrace, result.ExceptionType);
                }
            }
            else if (contentType.startsWith("application/json")) {
                //DevDiv 88409: Change JSON wire format to prevent CSRF =
attack
                //The return value is wrapped inside an object with , =
'd' field set to return value=20
                if (!result || typeof(result.d) =3D=3D=3D "undefined") {
                    throw =
Sys.Net.WebServiceProxy._createFailedError(methodName, =
String.format(Sys.Res.webServiceInvalidJsonWrapper, methodName));
                }
                result =3D result.d;
            }
            if (((statusCode < 200) || (statusCode >=3D 300)) || =
errorObj) {
                if (onFailure) {
                    if (!result || !errorObj) {
                        result =3D new Sys.Net.WebServiceError(false =
/*timedout*/, String.format(Sys.Res.webServiceFailedNoMsg, methodName), =
"", "");
                    }
                    result._statusCode =3D statusCode;
                    onFailure(result, userContext, methodName);
                }
                else {
                    // In debug mode, if no error was registered, =
display some trace information
                    var error;
                    if (result && errorObj) {
                        // If we got a result, we're likely dealing with =
an error in the method itself
                        error =3D result.get_exceptionType() + "-- " + =
result.get_message();
                    }
                    else {
                        // Otherwise, it's probably a 'top-level' error, =
in which case we dump the
                        // whole response in the trace
                        error =3D response.get_responseData();
                    }
                    // DevDiv 89485: throw, not alert()
                    throw =
Sys.Net.WebServiceProxy._createFailedError(methodName, =
String.format(Sys.Res.webServiceFailed, methodName, error));
                }
            }
            else if (onSuccess) {
                onSuccess(result, userContext, methodName);
            }
        }
        else {
            var msg;
            if (response.get_timedOut()) {
                msg =3D String.format(Sys.Res.webServiceTimedOut, =
methodName);
            }
            else {
                msg =3D String.format(Sys.Res.webServiceFailedNoMsg, =
methodName)
            }
            if (onFailure) {
                onFailure(new =
Sys.Net.WebServiceError(response.get_timedOut(), msg, "", ""), =
userContext, methodName);
            }
            else {
                // In debug mode, if no error was registered, display =
some trace information
                // DevDiv 89485: throw, don't alert()
                throw =
Sys.Net.WebServiceProxy._createFailedError(methodName, msg);
            }
        }
    }

    return request;
}

Sys.Net.WebServiceProxy._createFailedError =3D function =
Sys$Net$WebServiceProxy$_createFailedError(methodName, errorMessage) {
    var displayMessage =3D "Sys.Net.WebServiceFailedException: " + =
errorMessage;
    var e =3D Error.create(displayMessage, { 'name': =
'Sys.Net.WebServiceFailedException', 'methodName': methodName });
    e.popStackFrame();
    return e;
}

Sys.Net.WebServiceProxy._defaultFailedCallback =3D function =
Sys$Net$WebServiceProxy$_defaultFailedCallback(err, methodName) {
    var error =3D err.get_exceptionType() + "-- " + err.get_message();
    throw Sys.Net.WebServiceProxy._createFailedError(methodName, =
String.format(Sys.Res.webServiceFailed, methodName, error));
}

// Generate a constructor that knows how to build objects of a =
particular server type,
// and then initialize it from the fields of an arbitrary object.
Sys.Net.WebServiceProxy._generateTypedConstructor =3D function =
Sys$Net$WebServiceProxy$_generateTypedConstructor(type) {
    return function(properties) {
        // If an object was passed in, copy all its fields
        if (properties) {
            for (var name in properties) {
                this[name] =3D properties[name];
            }
        }
        this.__type =3D type;
    }
}
=20
// Class returned to client if server throws an exception during =
ProcessRequest
Sys.Net.WebServiceError =3D function Sys$Net$WebServiceError(timedOut, =
message, stackTrace, exceptionType) {
    /// <summary locid=3D"M:J#Sys.Net.WebServiceError.#ctor" />
    /// <param name=3D"timedOut" type=3D"Boolean"></param>
    /// <param name=3D"message" type=3D"String" =
mayBeNull=3D"true"></param>
    /// <param name=3D"stackTrace" type=3D"String" =
mayBeNull=3D"true"></param>
    /// <param name=3D"exceptionType" type=3D"String" =
mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "timedOut", type: Boolean},
        {name: "message", type: String, mayBeNull: true},
        {name: "stackTrace", type: String, mayBeNull: true},
        {name: "exceptionType", type: String, mayBeNull: true}
    ]);
    if (e) throw e;
    this._timedOut =3D timedOut;
    this._message =3D message;
    this._stackTrace =3D stackTrace;
    this._exceptionType =3D exceptionType;
    this._statusCode =3D -1;
}


    function Sys$Net$WebServiceError$get_timedOut() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Net.WebServiceError.timedOut"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._timedOut;
    }

    function Sys$Net$WebServiceError$get_statusCode() {
        /// <value type=3D"Number" =
locid=3D"P:J#Sys.Net.WebServiceError.statusCode"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._statusCode;
    }

    function Sys$Net$WebServiceError$get_message() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebServiceError.message"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._message;
    }

    function Sys$Net$WebServiceError$get_stackTrace() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebServiceError.stackTrace"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._stackTrace;
    }

    function Sys$Net$WebServiceError$get_exceptionType() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.Net.WebServiceError.exceptionType"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._exceptionType;
    }
Sys.Net.WebServiceError.prototype =3D {
    get_timedOut: Sys$Net$WebServiceError$get_timedOut,
    get_statusCode: Sys$Net$WebServiceError$get_statusCode,
    get_message: Sys$Net$WebServiceError$get_message,
    get_stackTrace: Sys$Net$WebServiceError$get_stackTrace,
    get_exceptionType: Sys$Net$WebServiceError$get_exceptionType
}
Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError');

Type.registerNamespace('Sys.Services');


Sys.Services._ProfileService =3D function Sys$Services$_ProfileService() =
{
    Sys.Services._ProfileService.initializeBase(this);
    this.properties =3D {};
}
Sys.Services._ProfileService.DefaultWebServicePath =3D '';







    function =
Sys$Services$_ProfileService$get_defaultLoadCompletedCallback() {
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._ProfileService.defaultLoadCompletedCallback"><=
/value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultLoadCompletedCallback;
    }
    function =
Sys$Services$_ProfileService$set_defaultLoadCompletedCallback(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._defaultLoadCompletedCallback =3D value;
    }

    function =
Sys$Services$_ProfileService$get_defaultSaveCompletedCallback() {
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._ProfileService.defaultSaveCompletedCallback"><=
/value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultSaveCompletedCallback;
    }
    function =
Sys$Services$_ProfileService$set_defaultSaveCompletedCallback(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._defaultSaveCompletedCallback =3D value;
    }

    function Sys$Services$_ProfileService$get_path() {
        /// <value type=3D"String" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._ProfileService.path"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        // override from base to ensure returned value is '' even if =
usercode sets to null.
        // also refactored from v1 to ensure empty string on getter =
instead of setter.
        return this._path || '';
    }

    function Sys$Services$_ProfileService$load(propertyNames, =
loadCompletedCallback, failedCallback, userContext) {
        /// <summary locid=3D"M:J#Sys.Services._ProfileService.load" />
        /// <param name=3D"propertyNames" type=3D"Array" =
elementType=3D"String" optional=3D"true" elementMayBeNull=3D"false" =
mayBeNull=3D"true"></param>
        /// <param name=3D"loadCompletedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"failedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"userContext" optional=3D"true" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "propertyNames", type: Array, mayBeNull: true, =
optional: true, elementType: String},
            {name: "loadCompletedCallback", type: Function, mayBeNull: =
true, optional: true},
            {name: "failedCallback", type: Function, mayBeNull: true, =
optional: true},
            {name: "userContext", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        var parameters;
        var methodName;
        if (!propertyNames) {
            methodName =3D "GetAllPropertiesForCurrentUser";
            parameters =3D { authenticatedUserOnly: false };
        }
        else {
            methodName =3D "GetPropertiesForCurrentUser";
            parameters =3D { properties: =
this._clonePropertyNames(propertyNames), authenticatedUserOnly: false };
        }

        this._invoke(this._get_path(),
                                        methodName,
                                        false,
                                        parameters,
                                        Function.createDelegate(this, =
this._onLoadComplete),
                                        Function.createDelegate(this, =
this._onLoadFailed),
                                        [loadCompletedCallback, =
failedCallback, userContext]);
    }

    function Sys$Services$_ProfileService$save(propertyNames, =
saveCompletedCallback, failedCallback, userContext) {
        /// <summary locid=3D"M:J#Sys.Services._ProfileService.save" />
        /// <param name=3D"propertyNames" type=3D"Array" =
elementType=3D"String" optional=3D"true" elementMayBeNull=3D"false" =
mayBeNull=3D"true"></param>
        /// <param name=3D"saveCompletedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"failedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"userContext" optional=3D"true" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "propertyNames", type: Array, mayBeNull: true, =
optional: true, elementType: String},
            {name: "saveCompletedCallback", type: Function, mayBeNull: =
true, optional: true},
            {name: "failedCallback", type: Function, mayBeNull: true, =
optional: true},
            {name: "userContext", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        var flattenedProperties =3D =
this._flattenProperties(propertyNames, this.properties);
        this._invoke(this._get_path(),
                                        "SetPropertiesForCurrentUser",
                                        false,
                                        { values: =
flattenedProperties.value, authenticatedUserOnly: false },
                                        Function.createDelegate(this, =
this._onSaveComplete),
                                        Function.createDelegate(this, =
this._onSaveFailed),
                                        [saveCompletedCallback, =
failedCallback, userContext, flattenedProperties.count]);
    }


    function Sys$Services$_ProfileService$_clonePropertyNames(arr) {
        var nodups =3D [];
        var seen =3D {};
        for (var i=3D0; i < arr.length; i++) {
            var prop =3D arr[i];
            if(!seen[prop]) { Array.add(nodups, prop); =
seen[prop]=3Dtrue; };
        }
        return nodups;
    }





    function =
Sys$Services$_ProfileService$_flattenProperties(/*string[]*/propertyNames=
, properties, groupName) {
        var flattenedProperties =3D {};
        var val;
        var key;
        var count =3D 0;
        if (propertyNames && propertyNames.length =3D=3D=3D 0) {
            return { value: flattenedProperties, count: 0 };
        }

        for (var property in properties) {
            val =3D properties[property];
            key =3D groupName ? groupName + "." + property : property;
            // is it a property group?
            if(Sys.Services.ProfileGroup.isInstanceOfType(val)) {
                var obj =3D this._flattenProperties(propertyNames, val, =
key);
                var groupProperties =3D obj.value;
                count +=3D obj.count; // count all the group's =
properties we're about to merge in
                // merge in group's properties
                // NOTE: We don't use Array.addRange because =
flattenedProperties is not an Array.
                //       It can't be an array because it polutes the =
associative array and we need it to be purely properties.
                //       Array.prototype.addRange.apply() doesn't work =
either.
                // NOTE: In the case where a group exists but has no =
inner properties of its own, the for loop will short out
                //       and there will be no keys added to the =
collection, as expected.
                for(var subKey in groupProperties) {
                    var subVal =3D groupProperties[subKey];
                    flattenedProperties[subKey] =3D subVal;
                }
            }
            else {
                // is this a specified property (or use all properties)?
                if(!propertyNames || Array.indexOf(propertyNames, key) =
!=3D=3D -1) {
                    flattenedProperties[key] =3D val;
                    count++; // keep track of how many properties are in =
the flattened dictionary
                }
            }
        }
        return { value: flattenedProperties, count: count };
    }

    function Sys$Services$_ProfileService$_get_path() {
        var path =3D this.get_path();
        if (!path.length) {
            path =3D Sys.Services._ProfileService.DefaultWebServicePath;
        }
        if (!path || !path.length) {
            throw Error.invalidOperation(Sys.Res.servicePathNotSet);
        }
        return path;
    }

    function Sys$Services$_ProfileService$_onLoadComplete(result, =
context, methodName) {
        if (typeof(result) !=3D=3D "object") {
            throw =
Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,=
 methodName, "Object"));
        }

        var unflattened =3D this._unflattenProperties(result);
        for (var name in unflattened) {
            this.properties[name] =3D unflattened[name];
        }
       =20
        var callback =3D context[0] || =
this.get_defaultLoadCompletedCallback() || =
this.get_defaultSucceededCallback();
        if (callback) {
            var userContext =3D context[2] || =
this.get_defaultUserContext();       =20
            callback(result.length, userContext, =
"Sys.Services.ProfileService.load");
        }
    }

    function Sys$Services$_ProfileService$_onLoadFailed(err, context, =
methodName) {
        var callback =3D context[1] || this.get_defaultFailedCallback();
        if (callback) {
            var userContext =3D context[2] || =
this.get_defaultUserContext();       =20
            callback(err, userContext, =
"Sys.Services.ProfileService.load");
        }
        else {
            Sys.Net.WebServiceProxy._defaultFailedCallback(err, =
methodName);
        }
    }

    function Sys$Services$_ProfileService$_onSaveComplete(result, =
context, methodName) {
        // context[3] is the number of properties we sent to the server.
        var count =3D context[3];
        if (result !=3D=3D null) { // dont use if(result), might be =
number 0
            if (result instanceof Array) {
                // result is a list of properties that failed. Subtract =
the count to get the # succeeded
                count -=3D result.length;
            }
            else if (typeof(result) =3D=3D=3D 'number') {
                // legacy server API -- the number of successful =
properties is returned directly
                count =3D result;
            }
            else {
                // no other types allowed
                throw =
Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,=
 methodName, "Array"));
            }
        }
        // else: if result is null, treat as an empty array (no =
failures)
       =20
        var callback =3D context[0] || =
this.get_defaultSaveCompletedCallback() || =
this.get_defaultSucceededCallback();
        if (callback) {
            var userContext =3D context[2] || =
this.get_defaultUserContext();
            callback(count, userContext, =
"Sys.Services.ProfileService.save");
        }
    }

    function Sys$Services$_ProfileService$_onSaveFailed(err, context, =
methodName) {
        var callback =3D context[1] || this.get_defaultFailedCallback();
        if (callback) {
            var userContext =3D context[2] || =
this.get_defaultUserContext();
            callback(err, userContext, =
"Sys.Services.ProfileService.save");
        }
        else {
            Sys.Net.WebServiceProxy._defaultFailedCallback(err, =
methodName);
        }
    }

    function =
Sys$Services$_ProfileService$_unflattenProperties(properties) {
        var unflattenedProperties =3D {};
        var dotIndex;
        var val;
        var count =3D 0;
        for (var key in properties) {
            count++;
            val =3D properties[key];

            dotIndex =3D key.indexOf('.');
            if (dotIndex !=3D=3D -1) {
                var groupName =3D key.substr(0, dotIndex);
                key =3D key.substr(dotIndex+1);
                var group =3D unflattenedProperties[groupName];
                if (!group || =
!Sys.Services.ProfileGroup.isInstanceOfType(group)) {
                    group =3D new Sys.Services.ProfileGroup();
                    unflattenedProperties[groupName] =3D group;
                }
                group[key] =3D val;
            }
            else {
                unflattenedProperties[key] =3D val;
            }
        }
        properties.length =3D count;
        return unflattenedProperties;
    }
Sys.Services._ProfileService.prototype =3D {
    _defaultLoadCompletedCallback: null,
    _defaultSaveCompletedCallback: null,
    _path: '',
    _timeout: 0,
    get_defaultLoadCompletedCallback: =
Sys$Services$_ProfileService$get_defaultLoadCompletedCallback,
    set_defaultLoadCompletedCallback: =
Sys$Services$_ProfileService$set_defaultLoadCompletedCallback,
    get_defaultSaveCompletedCallback: =
Sys$Services$_ProfileService$get_defaultSaveCompletedCallback,
    set_defaultSaveCompletedCallback: =
Sys$Services$_ProfileService$set_defaultSaveCompletedCallback,
    get_path: Sys$Services$_ProfileService$get_path,
    load: Sys$Services$_ProfileService$load,
    save: Sys$Services$_ProfileService$save,
    // DevDiv 31283: calling load with two of the same property names =
throws an error, so we strip dups
    _clonePropertyNames: =
Sys$Services$_ProfileService$_clonePropertyNames,   =20
    // convert properties like properties.ProfileGroup.ProfileSetting to =
properties["ProfileGroup.ProfileSetting"].
    // propertyNames: list of properties that should be included in the =
flattened list (others are excluded)
    // properties: object containing properties to flatten
    // groupName: current group name used for recursion
    _flattenProperties: Sys$Services$_ProfileService$_flattenProperties,
    _get_path: Sys$Services$_ProfileService$_get_path,   =20
    _onLoadComplete: Sys$Services$_ProfileService$_onLoadComplete,
    _onLoadFailed: Sys$Services$_ProfileService$_onLoadFailed,
    _onSaveComplete: Sys$Services$_ProfileService$_onSaveComplete,
    _onSaveFailed: Sys$Services$_ProfileService$_onSaveFailed,
    _unflattenProperties: =
Sys$Services$_ProfileService$_unflattenProperties
}
Sys.Services._ProfileService.registerClass('Sys.Services._ProfileService'=
, Sys.Net.WebServiceProxy);
Sys.Services.ProfileService =3D new Sys.Services._ProfileService();

Sys.Services.ProfileGroup =3D function =
Sys$Services$ProfileGroup(properties) {
    /// <summary locid=3D"M:J#Sys.Services.ProfileGroup.#ctor" />
    /// <param name=3D"properties" optional=3D"true" =
mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "properties", mayBeNull: true, optional: true}
    ]);
    if (e) throw e;
    if (properties) {
        for (var property in properties) {
            this[property] =3D properties[property];
        }
    }
}
Sys.Services.ProfileGroup.registerClass('Sys.Services.ProfileGroup');

Sys.Services._AuthenticationService =3D function =
Sys$Services$_AuthenticationService() {
    /// <summary locid=3D"M:J#Sys.Services._AuthenticationService.#ctor" =
/>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    Sys.Services._AuthenticationService.initializeBase(this);
}
Sys.Services._AuthenticationService.DefaultWebServicePath =3D '';







    function =
Sys$Services$_AuthenticationService$get_defaultLoginCompletedCallback() =
{
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._AuthenticationService.defaultLoginCompletedCal=
lback"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultLoginCompletedCallback;
    }
    function =
Sys$Services$_AuthenticationService$set_defaultLoginCompletedCallback(val=
ue) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._defaultLoginCompletedCallback =3D value;
    }

    function =
Sys$Services$_AuthenticationService$get_defaultLogoutCompletedCallback() =
{
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._AuthenticationService.defaultLogoutCompletedCa=
llback"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultLogoutCompletedCallback;
    }
    function =
Sys$Services$_AuthenticationService$set_defaultLogoutCompletedCallback(va=
lue) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._defaultLogoutCompletedCallback =3D value;
    }

    function Sys$Services$_AuthenticationService$get_isLoggedIn() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.Services._AuthenticationService.isLoggedIn"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._authenticated;
    }

    function Sys$Services$_AuthenticationService$get_path() {
        /// <value type=3D"String" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._AuthenticationService.path"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        // override from base to ensure returned value is '' even if =
usercode sets to null.
        // also refactored from v1 to ensure empty string on getter =
instead of setter.
        return this._path || '';
    }

    function Sys$Services$_AuthenticationService$login(username, =
password, isPersistent, customInfo, redirectUrl, loginCompletedCallback, =
failedCallback, userContext) {
        /// <summary =
locid=3D"M:J#Sys.Services._AuthenticationService.login" />
        /// <param name=3D"username" type=3D"String" =
mayBeNull=3D"false"></param>
        /// <param name=3D"password" type=3D"String" =
mayBeNull=3D"true"></param>
        /// <param name=3D"isPersistent" type=3D"Boolean" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"customInfo" type=3D"String" optional=3D"true" =
mayBeNull=3D"true"></param>
        /// <param name=3D"redirectUrl" type=3D"String" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"loginCompletedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"failedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"userContext" optional=3D"true" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "username", type: String},
            {name: "password", type: String, mayBeNull: true},
            {name: "isPersistent", type: Boolean, mayBeNull: true, =
optional: true},
            {name: "customInfo", type: String, mayBeNull: true, =
optional: true},
            {name: "redirectUrl", type: String, mayBeNull: true, =
optional: true},
            {name: "loginCompletedCallback", type: Function, mayBeNull: =
true, optional: true},
            {name: "failedCallback", type: Function, mayBeNull: true, =
optional: true},
            {name: "userContext", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        // note: use of internal type here, but theres no other way
        this._invoke(this._get_path(), "Login", false,
                                        { userName: username, password: =
password, createPersistentCookie: isPersistent },
                                        Function.createDelegate(this, =
this._onLoginComplete),
                                        Function.createDelegate(this, =
this._onLoginFailed),
                                        [username, password, =
isPersistent, customInfo, redirectUrl, loginCompletedCallback, =
failedCallback, userContext]);
    }

    function Sys$Services$_AuthenticationService$logout(redirectUrl, =
logoutCompletedCallback, failedCallback, userContext) {
        /// <summary =
locid=3D"M:J#Sys.Services._AuthenticationService.logout" />
        /// <param name=3D"redirectUrl" type=3D"String" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"logoutCompletedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"failedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"userContext" optional=3D"true" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "redirectUrl", type: String, mayBeNull: true, =
optional: true},
            {name: "logoutCompletedCallback", type: Function, mayBeNull: =
true, optional: true},
            {name: "failedCallback", type: Function, mayBeNull: true, =
optional: true},
            {name: "userContext", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        // note: use of internal type here, but theres no other way
        this._invoke(this._get_path(), "Logout", false, {},=20
                                        Function.createDelegate(this, =
this._onLogoutComplete),
                                        Function.createDelegate(this, =
this._onLogoutFailed),
                                        [redirectUrl, =
logoutCompletedCallback, failedCallback, userContext]);
    }

    function Sys$Services$_AuthenticationService$_get_path() {
        var path =3D this.get_path();
        if(!path.length) {
            path =3D =
Sys.Services._AuthenticationService.DefaultWebServicePath;
        }
        if(!path || !path.length) {
            throw Error.invalidOperation(Sys.Res.servicePathNotSet);
        }
        return path;
    }

    function =
Sys$Services$_AuthenticationService$_onLoginComplete(result, /*login =
param list*/context, methodName) {
        if(typeof(result) !=3D=3D "boolean") {
            throw =
Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,=
 methodName, "Boolean"));
        }
       =20
        var redirectUrl =3D context[4];
        var userContext =3D context[7] || this.get_defaultUserContext();
        var callback =3D context[5] || =
this.get_defaultLoginCompletedCallback() || =
this.get_defaultSucceededCallback();
       =20
        if(result) {
            this._authenticated =3D true;

            if (callback) {
                callback(true, userContext, =
"Sys.Services.AuthenticationService.login");
            }
           =20
            if (typeof(redirectUrl) !=3D=3D "undefined" && redirectUrl =
!=3D=3D null) {
                // url may be empty which is a valid link
                window.location.href =3D redirectUrl;
            }
        }
        else if (callback) {
            callback(false, userContext, =
"Sys.Services.AuthenticationService.login");
        }
    }

    function Sys$Services$_AuthenticationService$_onLoginFailed(err, =
context, methodName) {
        var callback =3D context[6] || this.get_defaultFailedCallback();
        if (callback) {
            var userContext =3D context[7] || =
this.get_defaultUserContext();
            callback(err, userContext, =
"Sys.Services.AuthenticationService.login");
        }
        else {
            Sys.Net.WebServiceProxy._defaultFailedCallback(err, =
methodName);
        }
    }

    function =
Sys$Services$_AuthenticationService$_onLogoutComplete(result, context, =
methodName) {
        if(result !=3D=3D null) {
            throw =
Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,=
 methodName, "null"));
        }
       =20
        var redirectUrl =3D context[0];
        var userContext =3D context[3] || this.get_defaultUserContext();
        var callback =3D context[1] || =
this.get_defaultLogoutCompletedCallback() || =
this.get_defaultSucceededCallback();

        this._authenticated =3D false;
       =20
        if (callback) {
            callback(null, userContext, =
"Sys.Services.AuthenticationService.logout");
        }
       =20
        // always redirect when logging out
        if(!redirectUrl) {
            window.location.reload();
        }
        else {
            window.location.href =3D redirectUrl;
        }
    }

    function Sys$Services$_AuthenticationService$_onLogoutFailed(err, =
context, methodName) {
        var callback =3D context[2] || this.get_defaultFailedCallback();
        if (callback) {
            callback(err, context[3], =
"Sys.Services.AuthenticationService.logout");
        }
        else {
            Sys.Net.WebServiceProxy._defaultFailedCallback(err, =
methodName);
        }
    }

    function =
Sys$Services$_AuthenticationService$_setAuthenticated(authenticated) {
        this._authenticated =3D authenticated;
    }
Sys.Services._AuthenticationService.prototype =3D {
    _defaultLoginCompletedCallback: null,
    _defaultLogoutCompletedCallback: null,
    _path: '',
    _timeout: 0,
    _authenticated: false,
    get_defaultLoginCompletedCallback: =
Sys$Services$_AuthenticationService$get_defaultLoginCompletedCallback,
    set_defaultLoginCompletedCallback: =
Sys$Services$_AuthenticationService$set_defaultLoginCompletedCallback,
    get_defaultLogoutCompletedCallback: =
Sys$Services$_AuthenticationService$get_defaultLogoutCompletedCallback,
    set_defaultLogoutCompletedCallback: =
Sys$Services$_AuthenticationService$set_defaultLogoutCompletedCallback,
    get_isLoggedIn: Sys$Services$_AuthenticationService$get_isLoggedIn,
    get_path: Sys$Services$_AuthenticationService$get_path, =20
    login: Sys$Services$_AuthenticationService$login,
    logout: Sys$Services$_AuthenticationService$logout,
    _get_path: Sys$Services$_AuthenticationService$_get_path,
    _onLoginComplete: =
Sys$Services$_AuthenticationService$_onLoginComplete,
    _onLoginFailed: Sys$Services$_AuthenticationService$_onLoginFailed,
    _onLogoutComplete: =
Sys$Services$_AuthenticationService$_onLogoutComplete,
    _onLogoutFailed: =
Sys$Services$_AuthenticationService$_onLogoutFailed,
    _setAuthenticated: =
Sys$Services$_AuthenticationService$_setAuthenticated   =20
}

Sys.Services._AuthenticationService.registerClass('Sys.Services._Authenti=
cationService', Sys.Net.WebServiceProxy);
Sys.Services.AuthenticationService =3D new =
Sys.Services._AuthenticationService();

Sys.Services._RoleService =3D function Sys$Services$_RoleService() {
    Sys.Services._RoleService.initializeBase(this);
    this._roles =3D [];
}
Sys.Services._RoleService.DefaultWebServicePath =3D '';






    function =
Sys$Services$_RoleService$get_defaultLoadCompletedCallback() {
        /// <value type=3D"Function" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._RoleService.defaultLoadCompletedCallback"></va=
lue>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._defaultLoadCompletedCallback;
    }
    function =
Sys$Services$_RoleService$set_defaultLoadCompletedCallback(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Function, mayBeNull: true}]);
        if (e) throw e;
        this._defaultLoadCompletedCallback =3D value;
    }

    function Sys$Services$_RoleService$get_path() {
        /// <value type=3D"String" mayBeNull=3D"true" =
locid=3D"P:J#Sys.Services._RoleService.path"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        // override from base to ensure returned value is '' even if =
usercode sets to null, consistent with other appservices in v1.
        return this._path || '';
    }

    function Sys$Services$_RoleService$get_roles() {
        /// <value type=3D"Array" elementType=3D"String" =
mayBeNull=3D"false" =
locid=3D"P:J#Sys.Services._RoleService.roles"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return Array.clone(this._roles);
    }

    function Sys$Services$_RoleService$isUserInRole(role) {
        /// <summary =
locid=3D"M:J#Sys.Services._RoleService.isUserInRole" />
        /// <param name=3D"role" type=3D"String" =
mayBeNull=3D"false"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "role", type: String}
        ]);
        if (e) throw e;
        var v =3D this._get_rolesIndex()[role.trim().toLowerCase()];
        return !!v;
    }

    function Sys$Services$_RoleService$load(loadCompletedCallback, =
failedCallback, userContext) {
        /// <summary locid=3D"M:J#Sys.Services._RoleService.load" />
        /// <param name=3D"loadCompletedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"failedCallback" type=3D"Function" =
optional=3D"true" mayBeNull=3D"true"></param>
        /// <param name=3D"userContext" optional=3D"true" =
mayBeNull=3D"true"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "loadCompletedCallback", type: Function, mayBeNull: =
true, optional: true},
            {name: "failedCallback", type: Function, mayBeNull: true, =
optional: true},
            {name: "userContext", mayBeNull: true, optional: true}
        ]);
        if (e) throw e;
        Sys.Net.WebServiceProxy.invoke(
                    this._get_path(),
                    "GetRolesForCurrentUser",
                    false,
                    {} /* no params*/,
                    Function.createDelegate(this, this._onLoadComplete),
                    Function.createDelegate(this, this._onLoadFailed),
                    [loadCompletedCallback, failedCallback, =
userContext],
                    this.get_timeout());
    }

    function Sys$Services$_RoleService$_get_path() {
        var path =3D this.get_path();
        if(!path || !path.length) {
            path =3D Sys.Services._RoleService.DefaultWebServicePath;
        }
        if(!path || !path.length) {
            throw Error.invalidOperation(Sys.Res.servicePathNotSet);
        }
        return path;
    }

    function Sys$Services$_RoleService$_get_rolesIndex() {
        if (!this._rolesIndex) {
            var index =3D {};
            for(var i=3D0; i < this._roles.length; i++) {
                index[this._roles[i].toLowerCase()] =3D true;
            }
            this._rolesIndex =3D index;
        }
        return this._rolesIndex;
    }

    function Sys$Services$_RoleService$_onLoadComplete(result, context, =
methodName) {
        if(result && !(result instanceof Array)) {
            throw =
Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,=
 methodName, "Array"));
        }

        this._roles =3D result;
        this._rolesIndex =3D null;

        var callback =3D context[0] || =
this.get_defaultLoadCompletedCallback() || =
this.get_defaultSucceededCallback();
        if (callback) {
            var userContext =3D context[2] || =
this.get_defaultUserContext();
            var clonedResult =3D Array.clone(result);
            callback(clonedResult, userContext, =
"Sys.Services.RoleService.load");
        }
    }

    function Sys$Services$_RoleService$_onLoadFailed(err, context, =
methodName) {
        var callback =3D context[1] || this.get_defaultFailedCallback();
        if (callback) {
            var userContext =3D context[2] || =
this.get_defaultUserContext();
            callback(err, userContext, "Sys.Services.RoleService.load");
        }
        else {
            Sys.Net.WebServiceProxy._defaultFailedCallback(err, =
methodName);
        }
    }
Sys.Services._RoleService.prototype =3D {
    _defaultLoadCompletedCallback: null,
    _rolesIndex: null,
    _timeout: 0,
    _path: '',
    get_defaultLoadCompletedCallback: =
Sys$Services$_RoleService$get_defaultLoadCompletedCallback,
    set_defaultLoadCompletedCallback: =
Sys$Services$_RoleService$set_defaultLoadCompletedCallback,
    get_path: Sys$Services$_RoleService$get_path,
    get_roles: Sys$Services$_RoleService$get_roles,
    isUserInRole: Sys$Services$_RoleService$isUserInRole,
    load: Sys$Services$_RoleService$load,
    _get_path: Sys$Services$_RoleService$_get_path, =20
    _get_rolesIndex: Sys$Services$_RoleService$_get_rolesIndex,
    _onLoadComplete: Sys$Services$_RoleService$_onLoadComplete,
    _onLoadFailed: Sys$Services$_RoleService$_onLoadFailed
}

Sys.Services._RoleService.registerClass('Sys.Services._RoleService', =
Sys.Net.WebServiceProxy);
Sys.Services.RoleService =3D new Sys.Services._RoleService();

Type.registerNamespace('Sys.Serialization');


Sys.Serialization.JavaScriptSerializer =3D function =
Sys$Serialization$JavaScriptSerializer() {
    /// <summary =
locid=3D"M:J#Sys.Serialization.JavaScriptSerializer.#ctor" />
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    // DevDiv #62350: Considered making all methods static and removing =
this constructor,
    // but this would have been a breaking change from Atlas 1.0 to =
Atlas Orcas so was rejected.
}
Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.J=
avaScriptSerializer');

Sys.Serialization.JavaScriptSerializer._serverTypeFieldName =3D =
'__type';

// DevDiv Bugs 139383:
// Escape the backslashes so to _stringRegEx so we pass an escape =
sequence to the RegExp,
// not the literal character. Safari does not support the literal =
characters, and it fails on iPhone 1.01.
Sys.Serialization.JavaScriptSerializer._stringRegEx =3D new =
RegExp('["\\b\\f\\n\\r\\t\\\\\\x00-\\x1F]', 'i');
Sys.Serialization.JavaScriptSerializer._dateRegEx =3D new =
RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4}=
)?\\)\\\\/\\"', 'g');
Sys.Serialization.JavaScriptSerializer._jsonRegEx =3D new =
RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g');
Sys.Serialization.JavaScriptSerializer._jsonStringRegEx =3D new =
RegExp('"(\\\\.|[^"\\\\])*"', 'g');

Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder =3D =
function =
Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(objec=
t, stringBuilder) {
    stringBuilder.append(object.toString());
}

Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder =3D =
function =
Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object=
, stringBuilder) {
    if (isFinite(object)) {
        stringBuilder.append(String(object));
    }
    else {
        throw =
Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers);
    }
}

Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder =3D =
function =
Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(object=
, stringBuilder) {
    stringBuilder.append('"');

    // DevDiv 139383: Removed Safari check here.
    // Safari 2 supports \x## escapes in regular expressions as long as =
they are escaped in the regex pattern
    if =
(Sys.Serialization.JavaScriptSerializer._stringRegEx.test(object)) {
        var length =3D object.length;
        for (i =3D 0; i < length; ++i) {
            var curChar =3D object.charAt(i);
            // currently '/u001f' or below are escaped
            if (curChar >=3D ' ') {
                // Handle backslashes and quotes by escaping
                if (curChar =3D=3D=3D '\\' || curChar =3D=3D=3D '"') {
                    stringBuilder.append('\\');
                }
                stringBuilder.append(curChar);
            }
            else {
                switch (curChar) {
                    case '\b':
                        stringBuilder.append('\\b');
                        break;
                    case '\f':
                        stringBuilder.append('\\f');
                        break;
                    case '\n':
                        stringBuilder.append('\\n');
                        break;
                    case '\r':
                        stringBuilder.append('\\r');
                        break;
                    case '\t':
                        stringBuilder.append('\\t');
                        break;
                    default:
                        // Add the escaped code
                        stringBuilder.append('\\u00');
                        if (curChar.charCodeAt() < 16) =
stringBuilder.append('0');
                        =
stringBuilder.append(curChar.charCodeAt().toString(16));
                }
            }
        }
    } else {
        stringBuilder.append(object);
    }
    stringBuilder.append('"');   =20
}

Sys.Serialization.JavaScriptSerializer._serializeWithBuilder =3D =
function =
Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, =
stringBuilder, sort, prevObjects) {
    var i;
    switch (typeof object) {
    case 'object':
        if (object) {
            if (prevObjects){
                // The loop below makes serilzation O(n^2) worst case =
for linked list like struture
                // where in depth of graph is in linear proportion to =
number of elements.
                // However the depth of graph is limited by call stack =
size(less than 1000 in IE7) hence=20
                // the performance hit is within reasonable bounds for =
debug mode
                for( var j =3D 0; j < prevObjects.length; j++) {
                    if (prevObjects[j] =3D=3D=3D object) {
                        throw =
Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle);
                    }
                }
            }
            else {
                prevObjects =3D new Array();
            }
            try {
                Array.add(prevObjects, object);
               =20
                if (Number.isInstanceOfType(object)){
                    =
Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object=
, stringBuilder);
                }
                else if (Boolean.isInstanceOfType(object)){
                    =
Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(objec=
t, stringBuilder);
                }
                else if (String.isInstanceOfType(object)){
                    =
Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object=
, stringBuilder);
                }
           =20
                // Arrays
                else if (Array.isInstanceOfType(object)) {
                    stringBuilder.append('[');
                  =20
                    for (i =3D 0; i < object.length; ++i) {
                        if (i > 0) {
                            stringBuilder.append(',');
                        }
                        =
Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], =
stringBuilder,false,prevObjects);
                    }
                    stringBuilder.append(']');
                }
                else {
                    // DivDev 41125: Do not confuse atlas serialized =
strings with dates
                    // Currently it always serialize as =
\/Date({milliseconds from 1970/1/1})\/
                    // For example \/Date(123)\/
                    if (Date.isInstanceOfType(object)) {
                        stringBuilder.append('"\\/Date(');
                        stringBuilder.append(object.getTime());
                        stringBuilder.append(')\\/"');
                        break;
                    }

                    var properties =3D [];
                    var propertyCount =3D 0;
                    for (var name in object) {
                        // skip internal properties that should not be =
serialized.
                        if (name.startsWith('$')) {
                            continue;
                        }
                        //DevDiv 74427 : Need to make sure that _type is =
first item on JSON serialization
                        if (name =3D=3D=3D =
Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && =
propertyCount !=3D=3D 0){
                            // if current propery Name is __type, swap =
it with the first element on property array.
                            properties[propertyCount++] =3D =
properties[0];
                            properties[0] =3D name;
                        }
                        else{
                            properties[propertyCount++] =3D name;
                        }
                    }
                    if (sort) properties.sort();

                    stringBuilder.append('{');
                    var needComma =3D false;
                    =20
                    for (i=3D0; i<propertyCount; i++) {
                        var value =3D object[properties[i]];
                        if (typeof value !=3D=3D 'undefined' && typeof =
value !=3D=3D 'function') {
                            if (needComma) {
                                stringBuilder.append(',');
                            }
                            else {
                                needComma =3D true;
                            }
                          =20
                            // Serialize the name of the object =
property, then the value
                            =
Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(properties[i=
], stringBuilder, sort, prevObjects);
                            stringBuilder.append(':');
                            =
Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(value, =
stringBuilder, sort, prevObjects);
                         =20
                        }
                    }
                stringBuilder.append('}');
                }
            }
            finally {
                Array.removeAt(prevObjects, prevObjects.length - 1);
            }
        }
        else {
            stringBuilder.append('null');
        }
        break;

    case 'number':
        =
Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object=
, stringBuilder);
        break;

    case 'string':
        =
Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object=
, stringBuilder);
        break;

    case 'boolean':
        =
Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(objec=
t, stringBuilder);
        break;

    default:
        stringBuilder.append('null');
        break;
    }
}

Sys.Serialization.JavaScriptSerializer.serialize =3D function =
Sys$Serialization$JavaScriptSerializer$serialize(object) {
    /// <summary =
locid=3D"M:J#Sys.Serialization.JavaScriptSerializer.serialize" />
    /// <param name=3D"object" mayBeNull=3D"true"></param>
    /// <returns type=3D"String"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "object", mayBeNull: true}
    ]);
    if (e) throw e;
    var stringBuilder =3D new Sys.StringBuilder();
    Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, =
stringBuilder, false);
    return stringBuilder.toString();
}

Sys.Serialization.JavaScriptSerializer.deserialize =3D function =
Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) {
    /// <summary =
locid=3D"M:J#Sys.Serialization.JavaScriptSerializer.deserialize" />
    /// <param name=3D"data" type=3D"String"></param>
    /// <param name=3D"secure" type=3D"Boolean" =
optional=3D"true"></param>
    /// <returns></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "data", type: String},
        {name: "secure", type: Boolean, optional: true}
    ]);
    if (e) throw e;
   =20
    if (data.length =3D=3D=3D 0) throw Error.argument('data', =
Sys.Res.cannotDeserializeEmptyString);
    // DevDiv 41127: Never confuse atlas serialized strings with dates.
    // DevDiv 74430: JavasciptSerializer will need to handle date time =
offset - following WCF design
    // serilzed dates might look like "\/Date(123)\/" or "\/Date(123A)" =
or "Date(123+4567)" or Date(123-4567)"
    // the regex escaped version of this pattern is =
\"\\/Date\(123(?:[a-zA-Z]|(?:\+|-)[0-9]{4})?\)\\/\"
    // but we must also do js escaping to put it in the string. Escape =
all \ with \\
    // Result: =
\\"\\\\/Date\\(123(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"
    // The 123 can really be any number with an optional -, and we want =
to capture it.
    // Regex for that is: (-?[0-9]+)
    // Result: =
\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"
    // We want to avoid replacing serialized strings that happen to =
contain this string as a substring.
    // We can do that by excluding matches that start with a slash \ =
since that means the first quote is escaped.
    // The first quote of a real date string will never be escaped and =
so will never be preceeded with \
    // So we want to add regex pattern (^|[^\\]) to the beginning, which =
means "beginning of string or anything but slash".
    // JS Escaped version: (^|[^\\\\])
    // Result: =
(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\=
\/\\"
    // Finally, the replace string is $1new Date($2). We must include $1 =
so we put back the potentially matched character we captured.

    try {   =20
        var exp =3D =
data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new =
Date($2)");
       =20
        if (secure && =
Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(
             =
exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, =
''))) throw null;

        return eval('(' + exp + ')');
    }
    catch (e) {
         throw Error.argument('data', =
Sys.Res.cannotDeserializeInvalidJson);
    }
}

// CultureInfo must go after JavaScriptSerializer since it deserializes =
the __cultureInfo object inline.
=20
Sys.CultureInfo =3D function Sys$CultureInfo(name, numberFormat, =
dateTimeFormat) {
    /// <summary locid=3D"M:J#Sys.CultureInfo.#ctor" />
    /// <param name=3D"name" type=3D"String"></param>
    /// <param name=3D"numberFormat" type=3D"Object"></param>
    /// <param name=3D"dateTimeFormat" type=3D"Object"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "name", type: String},
        {name: "numberFormat", type: Object},
        {name: "dateTimeFormat", type: Object}
    ]);
    if (e) throw e;
    this.name =3D name;
    this.numberFormat =3D numberFormat;
    this.dateTimeFormat =3D dateTimeFormat;
}

    function Sys$CultureInfo$_getDateTimeFormats() {
        if (! this._dateTimeFormats) {
            var dtf =3D this.dateTimeFormat;
            this._dateTimeFormats =3D
              [ dtf.MonthDayPattern,
                dtf.YearMonthPattern,
                dtf.ShortDatePattern,
                dtf.ShortTimePattern,
                dtf.LongDatePattern,
                dtf.LongTimePattern,
                dtf.FullDateTimePattern,
                dtf.RFC1123Pattern,
                dtf.SortableDateTimePattern,
                dtf.UniversalSortableDateTimePattern ];
        }
        return this._dateTimeFormats;
    }
    function Sys$CultureInfo$_getMonthIndex(value) {
        if (!this._upperMonths) {
            this._upperMonths =3D =
this._toUpperArray(this.dateTimeFormat.MonthNames);
        }
        return Array.indexOf(this._upperMonths, this._toUpper(value));
    }
    function Sys$CultureInfo$_getAbbrMonthIndex(value) {
        if (!this._upperAbbrMonths) {
            this._upperAbbrMonths =3D =
this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);
        }
        return Array.indexOf(this._upperAbbrMonths, =
this._toUpper(value));
    }
    function Sys$CultureInfo$_getDayIndex(value) {
        if (!this._upperDays) {
            this._upperDays =3D =
this._toUpperArray(this.dateTimeFormat.DayNames);
        }
        return Array.indexOf(this._upperDays, this._toUpper(value));
    }
    function Sys$CultureInfo$_getAbbrDayIndex(value) {
        if (!this._upperAbbrDays) {
            this._upperAbbrDays =3D =
this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);
        }
        return Array.indexOf(this._upperAbbrDays, this._toUpper(value));
    }
    function Sys$CultureInfo$_toUpperArray(arr) {
        var result =3D [];
        for (var i =3D 0, il =3D arr.length; i < il; i++) {
            result[i] =3D this._toUpper(arr[i]);
        }
        return result;
    }
    function Sys$CultureInfo$_toUpper(value) {
        // 'he-IL' has non-breaking space (\u00A0) in weekday names.  In =
this case replace
        // didn't work using the space escape code ('\s'), so must match =
the exact character.
        return value.split("\u00A0").join(' ').toUpperCase();
    }
Sys.CultureInfo.prototype =3D {
    _getDateTimeFormats: Sys$CultureInfo$_getDateTimeFormats,
    _getMonthIndex: Sys$CultureInfo$_getMonthIndex,
    _getAbbrMonthIndex: Sys$CultureInfo$_getAbbrMonthIndex,
    _getDayIndex: Sys$CultureInfo$_getDayIndex,
    _getAbbrDayIndex: Sys$CultureInfo$_getAbbrDayIndex,
    _toUpperArray: Sys$CultureInfo$_toUpperArray,
    _toUpper: Sys$CultureInfo$_toUpper
}
Sys.CultureInfo._parse =3D function Sys$CultureInfo$_parse(value) {
    var cultureInfo =3D =
Sys.Serialization.JavaScriptSerializer.deserialize(value);
    return new Sys.CultureInfo(cultureInfo.name, =
cultureInfo.numberFormat, cultureInfo.dateTimeFormat);
}
Sys.CultureInfo.registerClass('Sys.CultureInfo');

// Make sure the invariant and 'en-US' cultureInfos contained in this =
file contain unicode in
// place of the non-ascii characters so it matches the encoding of the =
MicrosoftAjax.js script.
// This is especially required when jsCrunch builds the release script, =
because it will not
// convert non-ascii characters to unicode correctly for the current =
MicrosoftAjax.js encoding.
Sys.CultureInfo.InvariantCulture =3D =
Sys.CultureInfo._parse('{"name":"","numberFormat":{"CurrencyDecimalDigits=
":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes"=
:[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparat=
or":",","CurrencySymbol":"\u00A4","NaNSymbol":"NaN","CurrencyNegativePatt=
ern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegat=
ivePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","Nu=
mberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":=
",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","Posi=
tiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","Per=
centGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","Na=
tiveDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution"=
:1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTi=
me":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","Algor=
ithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnl=
y":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"Ful=
lDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, =
dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM =
dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy =
HH\':\'mm\':\'ss =
\'GMT\'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","Sort=
ableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSepar=
ator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd =
HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy =
MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"=
ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunda=
y","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"Abbrev=
iatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","=
Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","=
May","June","July","August","September","October","November","December","=
"],"IsReadOnly":true,"NativeCalendarName":"Gregorian =
Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May",=
"Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["Janu=
ary","February","March","April","May","June","July","August","September",=
"October","November","December",""]}}');

if (typeof(__cultureInfo) =3D=3D=3D 'undefined') {
    var __cultureInfo =3D =
'{"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecim=
alSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroup=
Sizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","Currency=
Symbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegative=
Pattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"Negativ=
eInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"=
NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositiveP=
attern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","Percent=
DecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",=
","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","=
2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{=
"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@=
","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarT=
ype":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparat=
or":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dd=
dd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, =
yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM =
dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy =
HH\':\'mm\':\'ss =
\'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm =
tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","=
TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd=
 HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, =
yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"=
ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunda=
y","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"Abbrev=
iatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","=
Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","=
May","June","July","August","September","October","November","December","=
"],"IsReadOnly":false,"NativeCalendarName":"Gregorian =
Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May",=
"Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["Janu=
ary","February","March","April","May","June","July","August","September",=
"October","November","December",""]}}';
}
Sys.CultureInfo.CurrentCulture =3D =
Sys.CultureInfo._parse(__cultureInfo);
delete __cultureInfo;

=20
Sys.UI.Behavior =3D function Sys$UI$Behavior(element) {
    /// <summary locid=3D"M:J#Sys.UI.Behavior.#ctor" />
    /// <param name=3D"element" domElement=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true}
    ]);
    if (e) throw e;
    Sys.UI.Behavior.initializeBase(this);

    this._element =3D element;

    var behaviors =3D element._behaviors;
    if (!behaviors) {
        element._behaviors =3D [this];
    }
    else {
        behaviors[behaviors.length] =3D this;
    }
}


    function Sys$UI$Behavior$get_element() {
        /// <value domElement=3D"true" =
locid=3D"P:J#Sys.UI.Behavior.element"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._element;
    }
    function Sys$UI$Behavior$get_id() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.UI.Behavior.id"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        var baseId =3D Sys.UI.Behavior.callBaseMethod(this, 'get_id');
        if (baseId) return baseId;
        if (!this._element || !this._element.id) return '';
        return this._element.id + '$' + this.get_name();
    }
    function Sys$UI$Behavior$get_name() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.UI.Behavior.name"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this._name) return this._name;
        var name =3D Object.getTypeName(this);
        var i =3D name.lastIndexOf('.');
        if (i !=3D -1) name =3D name.substr(i + 1);
        if (!this.get_isInitialized()) this._name =3D name;
        return name;
    }
    function Sys$UI$Behavior$set_name(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        if ((value =3D=3D=3D '') || (value.charAt(0) =3D=3D=3D ' ') || =
(value.charAt(value.length - 1) =3D=3D=3D ' '))
            throw Error.argument('value', Sys.Res.invalidId);
        if (typeof(this._element[value]) !=3D=3D 'undefined')
            throw =
Error.invalidOperation(String.format(Sys.Res.behaviorDuplicateName, =
value));
        if (this.get_isInitialized()) throw =
Error.invalidOperation(Sys.Res.cantSetNameAfterInit);
        this._name =3D value;
    }
    function Sys$UI$Behavior$initialize() {
        Sys.UI.Behavior.callBaseMethod(this, 'initialize');
        var name =3D this.get_name();
        if (name) this._element[name] =3D this;
    }
    function Sys$UI$Behavior$dispose() {
        Sys.UI.Behavior.callBaseMethod(this, 'dispose');
        if (this._element) {
            var name =3D this.get_name();
            if (name) {
                this._element[name] =3D null;
            }
            Array.remove(this._element._behaviors, this);
            delete this._element;
        }
    }
Sys.UI.Behavior.prototype =3D {
    _name: null,
    get_element: Sys$UI$Behavior$get_element,
    get_id: Sys$UI$Behavior$get_id,
    get_name: Sys$UI$Behavior$get_name,
    set_name: Sys$UI$Behavior$set_name,
    initialize: Sys$UI$Behavior$initialize,
    dispose: Sys$UI$Behavior$dispose
}
Sys.UI.Behavior.registerClass('Sys.UI.Behavior', Sys.Component);

Sys.UI.Behavior.getBehaviorByName =3D function =
Sys$UI$Behavior$getBehaviorByName(element, name) {
    /// <summary locid=3D"M:J#Sys.UI.Behavior.getBehaviorByName" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"name" type=3D"String"></param>
    /// <returns type=3D"Sys.UI.Behavior" mayBeNull=3D"true"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "name", type: String}
    ]);
    if (e) throw e;
    var b =3D element[name];
    return (b && Sys.UI.Behavior.isInstanceOfType(b)) ? b : null;
}

Sys.UI.Behavior.getBehaviors =3D function =
Sys$UI$Behavior$getBehaviors(element) {
    /// <summary locid=3D"M:J#Sys.UI.Behavior.getBehaviors" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <returns type=3D"Array" =
elementType=3D"Sys.UI.Behavior"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true}
    ]);
    if (e) throw e;
    if (!element._behaviors) return [];
    return Array.clone(element._behaviors);
}

Sys.UI.Behavior.getBehaviorsByType =3D function =
Sys$UI$Behavior$getBehaviorsByType(element, type) {
    /// <summary locid=3D"M:J#Sys.UI.Behavior.getBehaviorsByType" />
    /// <param name=3D"element" domElement=3D"true"></param>
    /// <param name=3D"type" type=3D"Type"></param>
    /// <returns type=3D"Array" =
elementType=3D"Sys.UI.Behavior"></returns>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true},
        {name: "type", type: Type}
    ]);
    if (e) throw e;
    var behaviors =3D element._behaviors;
    var results =3D [];
    if (behaviors) {
        for (var i =3D 0, l =3D behaviors.length; i < l; i++) {
            if (type.isInstanceOfType(behaviors[i])) {
                results[results.length] =3D behaviors[i];
            }
        }
    }
    return results;
}
=20
Sys.UI.VisibilityMode =3D function Sys$UI$VisibilityMode() {
    /// <summary locid=3D"M:J#Sys.UI.VisibilityMode.#ctor" />
    /// <field name=3D"hide" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.VisibilityMode.hide"></field>
    /// <field name=3D"collapse" type=3D"Number" integer=3D"true" =
static=3D"true" locid=3D"F:J#Sys.UI.VisibilityMode.collapse"></field>
    if (arguments.length !=3D=3D 0) throw Error.parameterCount();
    throw Error.notImplemented();
}



Sys.UI.VisibilityMode.prototype =3D {
    hide: 0,
    collapse: 1
}
Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode");

=20
Sys.UI.Control =3D function Sys$UI$Control(element) {
    /// <summary locid=3D"M:J#Sys.UI.Control.#ctor" />
    /// <param name=3D"element" domElement=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "element", domElement: true}
    ]);
    if (e) throw e;
    if (typeof(element.control) !=3D 'undefined') throw =
Error.invalidOperation(Sys.Res.controlAlreadyDefined);
    Sys.UI.Control.initializeBase(this);

    this._element =3D element;
    element.control =3D this;
}




    function Sys$UI$Control$get_element() {
        /// <value domElement=3D"true" =
locid=3D"P:J#Sys.UI.Control.element"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._element;
    }
    function Sys$UI$Control$get_id() {
        /// <value type=3D"String" =
locid=3D"P:J#Sys.UI.Control.id"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._element) return '';
        return this._element.id;
    }
    function Sys$UI$Control$set_id(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: String}]);
        if (e) throw e;
        throw Error.invalidOperation(Sys.Res.cantSetId);
    }
    function Sys$UI$Control$get_parent() {
        /// <value type=3D"Sys.UI.Control" =
locid=3D"P:J#Sys.UI.Control.parent"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (this._parent) return this._parent;
        if (!this._element) return null;
       =20
        var parentElement =3D this._element.parentNode;
        while (parentElement) {
            if (parentElement.control) {
                return parentElement.control;
            }
            parentElement =3D parentElement.parentNode;
        }
        return null;
    }
    function Sys$UI$Control$set_parent(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Sys.UI.Control}]);
        if (e) throw e;
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        var parents =3D [this];
        var current =3D value;
        while (current) {
            if (Array.contains(parents, current)) throw =
Error.invalidOperation(Sys.Res.circularParentChain);
            parents[parents.length] =3D current;
            current =3D current.get_parent();
        }
        this._parent =3D value;
    }
    function Sys$UI$Control$get_visibilityMode() {
        /// <value type=3D"Sys.UI.VisibilityMode" =
locid=3D"P:J#Sys.UI.Control.visibilityMode"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        return Sys.UI.DomElement.getVisibilityMode(this._element);
    }
    function Sys$UI$Control$set_visibilityMode(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Sys.UI.VisibilityMode}]);
        if (e) throw e;
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        Sys.UI.DomElement.setVisibilityMode(this._element, value);
    }
    function Sys$UI$Control$get_visible() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.UI.Control.visible"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        return Sys.UI.DomElement.getVisible(this._element);
    }
    function Sys$UI$Control$set_visible(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Boolean}]);
        if (e) throw e;
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        Sys.UI.DomElement.setVisible(this._element, value)
    }
    function Sys$UI$Control$addCssClass(className) {
        /// <summary locid=3D"M:J#Sys.UI.Control.addCssClass" />
        /// <param name=3D"className" type=3D"String"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "className", type: String}
        ]);
        if (e) throw e;
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        Sys.UI.DomElement.addCssClass(this._element, className);
    }
    function Sys$UI$Control$dispose() {
        Sys.UI.Control.callBaseMethod(this, 'dispose');
        if (this._element) {
            this._element.control =3D undefined;
            delete this._element;
        }
        if (this._parent) delete this._parent;
    }
    function Sys$UI$Control$onBubbleEvent(source, args) {
        /// <summary locid=3D"M:J#Sys.UI.Control.onBubbleEvent" />
        /// <param name=3D"source"></param>
        /// <param name=3D"args" type=3D"Sys.EventArgs"></param>
        /// <returns type=3D"Boolean"></returns>
        var e =3D Function._validateParams(arguments, [
            {name: "source"},
            {name: "args", type: Sys.EventArgs}
        ]);
        if (e) throw e;
        return false;
    }
    function Sys$UI$Control$raiseBubbleEvent(source, args) {
        /// <summary locid=3D"M:J#Sys.UI.Control.raiseBubbleEvent" />
        /// <param name=3D"source"></param>
        /// <param name=3D"args" type=3D"Sys.EventArgs"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "source"},
            {name: "args", type: Sys.EventArgs}
        ]);
        if (e) throw e;
        var currentTarget =3D this.get_parent();
        while (currentTarget) {
            if (currentTarget.onBubbleEvent(source, args)) {
                return;
            }
            currentTarget =3D currentTarget.get_parent();
        }
    }
    function Sys$UI$Control$removeCssClass(className) {
        /// <summary locid=3D"M:J#Sys.UI.Control.removeCssClass" />
        /// <param name=3D"className" type=3D"String"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "className", type: String}
        ]);
        if (e) throw e;
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        Sys.UI.DomElement.removeCssClass(this._element, className);
    }
    function Sys$UI$Control$toggleCssClass(className) {
        /// <summary locid=3D"M:J#Sys.UI.Control.toggleCssClass" />
        /// <param name=3D"className" type=3D"String"></param>
        var e =3D Function._validateParams(arguments, [
            {name: "className", type: String}
        ]);
        if (e) throw e;
        if (!this._element) throw =
Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
        Sys.UI.DomElement.toggleCssClass(this._element, className);
    }
Sys.UI.Control.prototype =3D {
    _parent: null,
    _visibilityMode: Sys.UI.VisibilityMode.hide,
    get_element: Sys$UI$Control$get_element,
    get_id: Sys$UI$Control$get_id,
    set_id: Sys$UI$Control$set_id,
    get_parent: Sys$UI$Control$get_parent,
    set_parent: Sys$UI$Control$set_parent,
    get_visibilityMode: Sys$UI$Control$get_visibilityMode,
    set_visibilityMode: Sys$UI$Control$set_visibilityMode,
    get_visible: Sys$UI$Control$get_visible,
    set_visible: Sys$UI$Control$set_visible,
    addCssClass: Sys$UI$Control$addCssClass,
    dispose: Sys$UI$Control$dispose,
    onBubbleEvent: Sys$UI$Control$onBubbleEvent,
    raiseBubbleEvent: Sys$UI$Control$raiseBubbleEvent,
    removeCssClass: Sys$UI$Control$removeCssClass,
    toggleCssClass: Sys$UI$Control$toggleCssClass
}
Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component);

Type.registerNamespace('Sys');
Sys.Res=3D{
"argumentTypeName":"Value is not the name of an existing type.",
"methodRegisteredTwice":"Method {0} has already been registered.",
"cantSetIdAfterInit":"The id property can\u0027t be set on this object =
after initialization.",
"cantBeCalledAfterDispose":"Can\u0027t be called after dispose.",
"componentCantSetIdAfterAddedToApp":"The id property of a component =
can\u0027t be set after it\u0027s been added to the Application =
object.",
"behaviorDuplicateName":"A behavior with name \u0027{0}\u0027 already =
exists or it is the name of an existing property on the target =
element.",
"notATypeName":"Value is not a valid type name.",
"typeShouldBeTypeOrString":"Value is not a valid type or a valid type =
name.",
"boolTrueOrFalse":"Value must be \u0027true\u0027 or =
\u0027false\u0027.",
"stringFormatInvalid":"The format string is invalid.",
"referenceNotFound":"Component \u0027{0}\u0027 was not found.",
"enumReservedName":"\u0027{0}\u0027 is a reserved name that can\u0027t =
be used as an enum value name.",
"eventHandlerNotFound":"Handler not found.",
"circularParentChain":"The chain of control parents can\u0027t have =
circular references.",
"undefinedEvent":"\u0027{0}\u0027 is not an event.",
"notAMethod":"{0} is not a method.",
"propertyUndefined":"\u0027{0}\u0027 is not a property or an existing =
field.",
"eventHandlerInvalid":"Handler was not added through the =
Sys.UI.DomEvent.addHandler method.",
"scriptLoadFailedDebug":"The script \u0027{0}\u0027 failed to load. =
Check for:\r\n Inaccessible path.\r\n Script errors. (IE) Enable =
\u0027Display a notification about every script error\u0027 under =
advanced settings.\r\n Missing call to =
Sys.Application.notifyScriptLoaded().",
"propertyNotWritable":"\u0027{0}\u0027 is not a writable property.",
"enumInvalidValueName":"\u0027{0}\u0027 is not a valid name for an enum =
value.",
"controlAlreadyDefined":"A control is already associated with the =
element.",
"addHandlerCantBeUsedForError":"Can\u0027t add a handler for the error =
event using this method. Please set the window.onerror property =
instead.",
"namespaceContainsObject":"Object {0} already exists and is not a =
namespace.",
"cantAddNonFunctionhandler":"Can\u0027t add a handler that is not a =
function.",
"scriptLoaderAlreadyLoading":"ScriptLoader.loadScripts cannot be called =
while the ScriptLoader is already loading scripts.",
"invalidNameSpace":"Value is not a valid namespace identifier.",
"notAnInterface":"Value is not a valid interface.",
"eventHandlerNotFunction":"Handler must be a function.",
"propertyNotAnArray":"\u0027{0}\u0027 is not an Array property.",
"typeRegisteredTwice":"Type {0} has already been registered. The type =
may be defined multiple times or the script file that defines it may =
have already been loaded. A possible cause is a change of settings =
during a partial update.",
"cantSetNameAfterInit":"The name property can\u0027t be set on this =
object after initialization.",
"appDuplicateComponent":"Two components with the same id \u0027{0}\u0027 =
can\u0027t be added to the application.",
"appComponentMustBeInitialized":"Components must be initialized before =
they are added to the Application object.",
"baseNotAClass":"Value is not a class.",
"methodNotFound":"No method found with name \u0027{0}\u0027.",
"arrayParseBadFormat":"Value must be a valid string representation for =
an array. It must start with a \u0027[\u0027 and end with a =
\u0027]\u0027.",
"cantSetId":"The id property can\u0027t be set on this object.",
"stringFormatBraceMismatch":"The format string contains an unmatched =
opening or closing brace.",
"enumValueNotInteger":"An enumeration definition can only contain =
integer values.",
"propertyNullOrUndefined":"Cannot set the properties of \u0027{0}\u0027 =
because it returned a null value.",
"argumentDomNode":"Value must be a DOM element or a text node.",
"componentCantSetIdTwice":"The id property of a component can\u0027t be =
set more than once.",
"createComponentOnDom":"Value must be null for Components that are not =
Controls or Behaviors.",
"createNotComponent":"{0} does not derive from Sys.Component.",
"createNoDom":"Value must not be null for Controls and Behaviors.",
"cantAddWithoutId":"Can\u0027t add a component that doesn\u0027t have an =
id.",
"badTypeName":"Value is not the name of the type being registered or the =
name is a reserved word.",
"argumentInteger":"Value must be an integer.",
"scriptLoadMultipleCallbacks":"The script \u0027{0}\u0027 contains =
multiple calls to Sys.Application.notifyScriptLoaded(). Only one is =
allowed.",
"invokeCalledTwice":"Cannot call invoke more than once.",
"webServiceFailed":"The server method \u0027{0}\u0027 failed with the =
following error: {1}",
"webServiceInvalidJsonWrapper":"The server method \u0027{0}\u0027 =
returned invalid data. The \u0027d\u0027 property is missing from the =
JSON wrapper.",
"argumentType":"Object cannot be converted to the required type.",
"argumentNull":"Value cannot be null.",
"controlCantSetId":"The id property can\u0027t be set on a control.",
"formatBadFormatSpecifier":"Format specifier was invalid.",
"webServiceFailedNoMsg":"The server method \u0027{0}\u0027 failed.",
"argumentDomElement":"Value must be a DOM element.",
"invalidExecutorType":"Could not create a valid =
Sys.Net.WebRequestExecutor from: {0}.",
"cannotCallBeforeResponse":"Cannot call {0} when responseAvailable is =
false.",
"actualValue":"Actual value was {0}.",
"enumInvalidValue":"\u0027{0}\u0027 is not a valid value for enum {1}.",
"scriptLoadFailed":"The script \u0027{0}\u0027 could not be loaded.",
"parameterCount":"Parameter count mismatch.",
"cannotDeserializeEmptyString":"Cannot deserialize empty string.",
"formatInvalidString":"Input string was not in a correct format.",
"invalidTimeout":"Value must be greater than or equal to zero.",
"cannotAbortBeforeStart":"Cannot abort when executor has not started.",
"argument":"Value does not fall within the expected range.",
"cannotDeserializeInvalidJson":"Cannot deserialize. The data does not =
correspond to valid JSON.",
"invalidHttpVerb":"httpVerb cannot be set to an empty or null string.",
"nullWebRequest":"Cannot call executeRequest with a null webRequest.",
"eventHandlerInvalid":"Handler was not added through the =
Sys.UI.DomEvent.addHandler method.",
"cannotSerializeNonFiniteNumbers":"Cannot serialize non finite =
numbers.",
"argumentUndefined":"Value cannot be undefined.",
"webServiceInvalidReturnType":"The server method \u0027{0}\u0027 =
returned an invalid type. Expected type: {1}",
"servicePathNotSet":"The path to the web service has not been set.",
"argumentTypeWithTypes":"Object of type \u0027{0}\u0027 cannot be =
converted to type \u0027{1}\u0027.",
"cannotCallOnceStarted":"Cannot call {0} once started.",
"badBaseUrl1":"Base URL does not contain ://.",
"badBaseUrl2":"Base URL does not contain another /.",
"badBaseUrl3":"Cannot find last / in base URL.",
"setExecutorAfterActive":"Cannot set executor after it has become =
active.",
"paramName":"Parameter name: {0}",
"cannotCallOutsideHandler":"Cannot call {0} outside of a completed event =
handler.",
"cannotSerializeObjectWithCycle":"Cannot serialize object with cyclic =
reference within child properties.",
"format":"One of the identified items was in an invalid format.",
"assertFailedCaller":"Assertion Failed: {0}\r\nat {1}",
"argumentOutOfRange":"Specified argument was out of the range of valid =
values.",
"webServiceTimedOut":"The server method \u0027{0}\u0027 timed out.",
"notImplemented":"The method or operation is not implemented.",
"assertFailed":"Assertion Failed: {0}",
"invalidOperation":"Operation is not valid due to the current state of =
the object.",
"breakIntoDebugger":"{0}\r\n\r\nBreak into debugger?"
};

if(typeof(Sys)!=3D=3D'undefined')Sys.Application.notifyScriptLoaded();
------=_NextPart_000_0000_01CA6765.4E044160
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://bsf.ncsl.org.uk/ScriptResource.axd?d=zKJOX5ywFa7Fh3bUN8VtqfBSxWEyT84BElKUVp0gjJvUruyDRF8p4R7KQ8_jr9AaFlL3bLZsMstbWc4WRY2t9gtYuNtzIG5Cnpuvqx3j7I9Y0XWc8bA6igvdBzIvFOEa0&t=633608030687243693

=EF=BB=BF// Name:        MicrosoftAjaxWebForms.debug.js
// Assembly:    System.Web.Extensions
// Version:     3.5.0.0
// FileVersion: 3.5.21022.8
//!----------------------------------------------------------------------=
-
//! Copyright (C) Microsoft Corporation. All rights reserved.
//!----------------------------------------------------------------------=
-
//! MicrosoftAjaxWebForms.js
//! Microsoft AJAX ASP.NET WebForms Framework.

// Partial Rendering

Type.registerNamespace('Sys.WebForms');


Sys.WebForms.BeginRequestEventArgs =3D function =
Sys$WebForms$BeginRequestEventArgs(request, postBackElement) {
    /// <summary locid=3D"M:J#Sys.WebForms.BeginRequestEventArgs.#ctor" =
/>
    /// <param name=3D"request" type=3D"Sys.Net.WebRequest"></param>
    /// <param name=3D"postBackElement" domElement=3D"true" =
mayBeNull=3D"true"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "request", type: Sys.Net.WebRequest},
        {name: "postBackElement", mayBeNull: true, domElement: true}
    ]);
    if (e) throw e;

    Sys.WebForms.BeginRequestEventArgs.initializeBase(this);
    this._request =3D request;
    this._postBackElement =3D postBackElement;
}


    function Sys$WebForms$BeginRequestEventArgs$get_postBackElement() {
        /// <value domElement=3D"true" mayBeNull=3D"true" =
locid=3D"P:J#Sys.WebForms.BeginRequestEventArgs.postBackElement"></value>=

        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._postBackElement;
    }

    function Sys$WebForms$BeginRequestEventArgs$get_request() {
        /// <value type=3D"Sys.Net.WebRequest" =
locid=3D"P:J#Sys.WebForms.BeginRequestEventArgs.request"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._request;
    }
Sys.WebForms.BeginRequestEventArgs.prototype =3D {
    get_postBackElement: =
Sys$WebForms$BeginRequestEventArgs$get_postBackElement,
    get_request: Sys$WebForms$BeginRequestEventArgs$get_request
}

Sys.WebForms.BeginRequestEventArgs.registerClass('Sys.WebForms.BeginReque=
stEventArgs', Sys.EventArgs);
=20
Sys.WebForms.EndRequestEventArgs =3D function =
Sys$WebForms$EndRequestEventArgs(error, dataItems, response) {
    /// <summary locid=3D"M:J#Sys.WebForms.EndRequestEventArgs.#ctor" />
    /// <param name=3D"error" type=3D"Error" mayBeNull=3D"true"></param>
    /// <param name=3D"dataItems" type=3D"Object" =
mayBeNull=3D"true"></param>
    /// <param name=3D"response" =
type=3D"Sys.Net.WebRequestExecutor"></param>
    var e =3D Function._validateParams(arguments, [
        {name: "error", type: Error, mayBeNull: true},
        {name: "dataItems", type: Object, mayBeNull: true},
        {name: "response", type: Sys.Net.WebRequestExecutor}
    ]);
    if (e) throw e;

    Sys.WebForms.EndRequestEventArgs.initializeBase(this);
    this._errorHandled =3D false;
    this._error =3D error;
    // Need to use "new Object()" instead of "{}", since the latter =
breaks code coverage.
    this._dataItems =3D dataItems || new Object();
    this._response =3D response;
}


    function Sys$WebForms$EndRequestEventArgs$get_dataItems() {
        /// <value type=3D"Object" =
locid=3D"P:J#Sys.WebForms.EndRequestEventArgs.dataItems"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._dataItems;
    }

    function Sys$WebForms$EndRequestEventArgs$get_error() {
        /// <value type=3D"Error" =
locid=3D"P:J#Sys.WebForms.EndRequestEventArgs.error"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._error;
    }

    function Sys$WebForms$EndRequestEventArgs$get_errorHandled() {
        /// <value type=3D"Boolean" =
locid=3D"P:J#Sys.WebForms.EndRequestEventArgs.errorHandled"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._errorHandled;
    }
    function Sys$WebForms$EndRequestEventArgs$set_errorHandled(value) {
        var e =3D Function._validateParams(arguments, [{name: "value", =
type: Boolean}]);
        if (e) throw e;
        this._errorHandled =3D value;
    }

    function Sys$WebForms$EndRequestEventArgs$get_response() {
        /// <value type=3D"Sys.Net.WebRequestExecutor" =
locid=3D"P:J#Sys.WebForms.EndRequestEventArgs.response"></value>
        if (arguments.length !=3D=3D 0) throw Error.parameterCount();
        return this._response;
    }
Sys.WebForms.EndRequestEventArgs.prototype =3D {
    get_dataItems: Sys$WebForms$EndRequestEventArgs$get_dataItems,
    get_error: Sys$WebForms$EndRequestEventArgs$get_error,
    get_errorHandled: Sys$WebForms$EndRequestEventArgs$get_errorHandled,
    set_errorHandled: Sys$WebForms$EndRequestEventArgs$set_errorHandled,
    get_response: Sys$WebForms$EndRequestEventArgs$get_response
}

Sys.WebForms.EndRequestEventArgs.registerClass('Sys.WebForms.EndRequestEv=
entArgs', Sys.EventArgs);

Sys.WebForms.InitializeRequestEventArgs =3D