From a5cf6754e486f36d9eab8433f39e7ade8de595f3 Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Thu, 20 Feb 2014 15:43:57 +0100 Subject: [PATCH 01/18] - WebGUI Plugin initial commit --- plugins/web_gui/__init__.py | 1 + plugins/web_gui/static/css/PixelGreen.css | 428 ++++++++++++++++++ plugins/web_gui/static/images/bg.jpg | Bin 0 -> 471 bytes plugins/web_gui/static/images/bullet.gif | Bin 0 -> 281 bytes plugins/web_gui/static/images/clock.gif | Bin 0 -> 272 bytes plugins/web_gui/static/images/comment.gif | Bin 0 -> 364 bytes plugins/web_gui/static/images/favicon.ico | Bin 0 -> 1150 bytes .../web_gui/static/images/firefox-gray.jpg | Bin 0 -> 3550 bytes plugins/web_gui/static/images/gradientbg.jpg | Bin 0 -> 337 bytes plugins/web_gui/static/images/headerphoto.jpg | Bin 0 -> 25158 bytes plugins/web_gui/static/images/page.gif | Bin 0 -> 393 bytes plugins/web_gui/static/index.html | 256 +++++++++++ plugins/web_gui/static/login.html | 93 ++++ plugins/web_gui/web_gui.py | 132 ++++++ plugins/web_gui/web_gui_plugin.py | 35 ++ 15 files changed, 945 insertions(+) create mode 100644 plugins/web_gui/__init__.py create mode 100644 plugins/web_gui/static/css/PixelGreen.css create mode 100644 plugins/web_gui/static/images/bg.jpg create mode 100644 plugins/web_gui/static/images/bullet.gif create mode 100644 plugins/web_gui/static/images/clock.gif create mode 100644 plugins/web_gui/static/images/comment.gif create mode 100644 plugins/web_gui/static/images/favicon.ico create mode 100644 plugins/web_gui/static/images/firefox-gray.jpg create mode 100644 plugins/web_gui/static/images/gradientbg.jpg create mode 100644 plugins/web_gui/static/images/headerphoto.jpg create mode 100644 plugins/web_gui/static/images/page.gif create mode 100644 plugins/web_gui/static/index.html create mode 100644 plugins/web_gui/static/login.html create mode 100644 plugins/web_gui/web_gui.py create mode 100644 plugins/web_gui/web_gui_plugin.py diff --git a/plugins/web_gui/__init__.py b/plugins/web_gui/__init__.py new file mode 100644 index 0000000..6089284 --- /dev/null +++ b/plugins/web_gui/__init__.py @@ -0,0 +1 @@ +from web_gui_plugin import WebGuiPlugin \ No newline at end of file diff --git a/plugins/web_gui/static/css/PixelGreen.css b/plugins/web_gui/static/css/PixelGreen.css new file mode 100644 index 0000000..196736d --- /dev/null +++ b/plugins/web_gui/static/css/PixelGreen.css @@ -0,0 +1,428 @@ +/* ---------------------------------------------------- + + AUTHOR : Erwin Aligam + WEBSITE : http://www.styleshout.com/ + TEMPLATE NAME : PixelGreen + TEMPLATE CODE : S-0010 + VERSION : 1.3 + LAST MODIFIED : January 19, 2010 + +------------------------------------------------------- */ + +/* ---------------------------------------------------- + HTML ELEMENTS +------------------------------------------------------- */ + +/* top elements */ +* { padding: 0; margin: 0; outline: 0; } + +body { + margin: 0; padding: 0; + font: normal 73%/1.6em 'Trebuchet MS', Tahoma, sans-serif; + color: #555; + background: #FFF url(../images/bg.jpg) repeat-x; + text-align: center; +} + +/* links */ +a:link, a:visited { background: inherit; color: #72A545; text-decoration: none; } +a:hover { background: inherit; color: #006699; text-decoration: underline; } + +/* headers */ +h1, h2, h3 { font: bold 1em 'Trebuchet MS', Tahoma, Sans-serif; } +h1 { font-size: 1.4em; color: #65944A; } +h2 { font-size: 1.2em; text-transform: uppercase; } +h3 { font-size: 1.2em; } + +p, h1, h2, h3 { + margin: 10px 15px; +} +ul, ol { + margin: 10px 30px; + padding: 0 15px; +} + +/* images */ +img { + border: 1px solid #DADADA; + padding: 8px; + background: #FAFAFA; +} +img.float-right { + margin: 5px 0px 5px 15px; +} +img.float-left { + margin: 5px 15px 5px 0px; +} + +code { + margin: 5px 0; + padding: 10px; + text-align: left; + display: block; + overflow: auto; + font: 500 1em/1.5em 'Lucida Console', 'courier new', monospace; + /* white-space: pre; */ + background: #FAFAFA; + border: 1px solid #f2f2f2; + border-left: 3px solid #72A545; +} +acronym { + cursor: help; + border-bottom: 1px solid #777; +} +blockquote { + margin: 15px; padding: 0 0 0 20px; + background-color: #FAFAFA; + background-position: 8px 10px; + border: 1px solid #f2f2f2; + border-left: 3px solid #72A545; + font: bold 1.2em/1.5em "Trebuchet MS", Tahoma, sans-serif; + color: #666666; +} + +/* start - table */ +table { + border-collapse: collapse; + margin: 10px 15px; +} +th strong { + color: #fff; +} +th { + background: #74A846; + height: 29px; + padding-left: 11px; + padding-right: 11px; + color: #fff; + text-align: left; + border-left: 1px solid #B6D59A; + border-bottom: solid 2px #FFF; +} +tr { + height: 30px; +} +td { + padding-left: 11px; + padding-right: 11px; + /* border-left: 1px solid #FFE1C3; */ + border-left: 1px solid #FFF; + border-bottom: solid 1px #ffffff; +} +td.first,th.first { + border-left: 0px; +} +tr.row-a { + background: #F8F8F8; +} +tr.row-b { + background: #EFEFEF; +} +/* end - table */ + +/* form elements */ +form { + margin:10px 15px; padding: 0; + border: 1px solid #f2f2f2; + background-color: #FAFAFA; +} +label { + display:block; + font-weight:bold; + margin:5px 0; +} +input { + padding: 2px; + border:1px solid #eee; + font: normal 1em "Trebuchet MS", Tahoma, sans-serif; + color:#777; +} +textarea { + width:400px; + padding:2px; + font: normal 1em "Trebuchet MS", Tahoma, sans-serif; + border:1px solid #eee; + height:100px; + display:block; + color:#777; +} +input.button { + margin: 0; + font: bold 1em Arial, Sans-serif; + background: #FFF url(../images/gradientbg.jpg) repeat-x; + padding: 2px 3px; + color: #333; + border: 1px solid #DADADA; +} + +/* search form */ +.searchform { + background-color: transparent; + border: none; margin: 0; padding: 0; +} +.searchform p { margin: 10px; padding: 0; } +.searchform input.textbox { + width: 130px; + color: #333; + height: 20px; + padding: 2px; + vertical-align: top; +} +.searchform input.button { + font: bold 12px Arial, Sans-serif; + color: #333; + width: 60px; + height: 26px; + border: 1px solid #DADADA; + padding: 3px 5px; + vertical-align: top; +} + +/* ---------------------------- + LAYOUT +------------------------------- */ + +#header-content, #content, #footer-content { + width: 760px; +} + +/* header */ +#header { + height: 100px; + text-align: left; +} +#header-content { + margin: 0 auto; padding: 0; + position: relative; +} +#header-content h1#logo { + position: absolute; + font: bold 45px 'Trebuchet MS', Sans-serif; + letter-spacing: -2px; + color: #FFF; + margin: 0; padding: 0; + + /* change the values of left and top to adjust the position of the logo */ + top: 0; left: 0px; +} +#header-content h1#logo a { + text-decoration: none; + color: #FFF; +} +#header-content #slogan { + position: absolute; + font: bold 12px 'Trebuchet Ms', Sans-serif; + text-transform: none; + color: #FFF; + margin: 0; padding: 0; + + /* change the values of left and top to adjust the position of the slogan */ + top: 55px; left: 40px; +} + +/* header menu */ +#header-content ul { + position: absolute; + right: -5px; top: 15px; + font: bolder 1.3em 'Trebuchet MS', sans-serif; + color: #FFF; + list-style: none; + margin: 0; padding: 0; +} +#header-content li { + display: inline; +} +#header-content li a { + float: left; + display: block; + padding: 3px 12px; + color: #FFF; + background-color: #333; + text-decoration: none; + border-right: 1px solid #272727; +} +#header-content li a:hover { + background: #65944A; + color: #FFF; +} +#header-content li a#current { + background: #65944A; + color: #FFF; +} + +/* header photo */ +.headerphoto { + margin: 0 auto; + width: 770px; + height: 200px; + padding: 15px 10px 10px 10px; + background: #FFF url(../images/headerphoto.jpg) no-repeat center; +} + +/* content */ +#content-wrap { + clear: both; + float: left; + width: 100%; +} +#content { + text-align: left; + padding: 0; + margin: 0 auto; +} + +/* sidebar */ +#sidebar { + float: right; + width: 30%; + margin: 0 0 10px 0; padding: 0; +} +#sidebar h1 { + padding: 10px 0px 5px 10px; + margin: 0; + font: bold 1.3em 'Trebuchet MS', Tahoma, Sans-serif; +} +.sidebox { + background: #F5F5F5; + border: 1px solid #EFEDED; + margin-bottom: 10px; +} + +/* sidebar menu */ +#sidebar ul.sidemenu { + list-style:none; + margin: 10px 0 15px 0; + padding: 0; + background: #F2F2F2; +} +#sidebar ul.sidemenu li { + padding: 0px 10px; +} +#sidebar ul.sidemenu a { + display:block; + font-weight:normal; + color: #333; + height: 1.5em; + padding:.3em 0 .3em 15px; + line-height: 1.5em; + border-bottom: 1px dashed #D4D4D4; + text-decoration:none; +} +#sidebar ul.sidemenu a.top{ + border-top: 1px dashed #D4D4D4; +} +#sidebar ul.sidemenu a:hover { + padding: .3em 0 .3em 10px; + border-left: 5px solid #65944A; + color: #65944A; +} + +/* main */ +#main { + float: left; + width: 68%; + margin: 0 0 10px 0; padding: 0; +} +#main h1 { + padding: 10px 0px 0px 5px; + margin: 0 0 0 10px; + border-bottom: 1px solid #f2f2f2; + font: normal 1.8em 'Trebuchet MS', Tahoma, Sans-serif; +} +#main ul li { + list-style-image: url(../images/bullet.gif); +} + +.post { + margin: 0; padding: 0; + background: #FFF url(../images/gradientbg.jpg) repeat-x; + border: 1px solid #EFEDED; +} +.post .post-footer { + background-color: #FAFAFA; + border: 1px solid #f2f2f2; + padding: 5px; margin-top: 20px; + font-size: 95%; +} +.post .post-footer .date { + background: url(../images/'clock.gif') no-repeat 0 center; + padding-left: 20px; margin: 0 10px 0 5px; +} +.post .post-footer .comments { + background: url(../images/'comment.gif') no-repeat 0 center; + padding-left: 20px; margin: 0 10px 0 5px; +} +.post .post-footer .readmore { + background: url(../images/'page.gif') no-repeat 0 center; + padding-left: 20px; margin: 0 10px 0 5px; +} + +/* footer */ +#footer { + clear: both; + margin: 0; padding: 0; + font: normal .95em/1.6em 'Trebuchet MS', Tahoma, Arial, sans-serif; + text-align: left; +} + +#footer h1, #footer p { margin-left: 0; } + +#footer-content { + border-top: 1px solid #EAEAEA; + margin: 0 auto; + padding-left: 15px; +} +#footer-content a { + text-decoration: none; +} +#footer-content a:hover { + color: #333; +} + +/* footer list */ +#footer-content ul.flist { + list-style: none; + margin: 0; padding: 0; + border-top: 1px solid #f2f2f2; +} +#footer-content ul.flist li { + border-bottom: 1px solid #f2f2f2; +} +#footer-content ul.flist li a:link, +#footer-content ul.flist li a:visited { + color: #555; + display: block; + font-weight: normal; + padding: 5px 0 ; + width: 98%; +} +#footer-content ul.flist li a:hover { + text-decoration: none; + color: #222; +} + + +#footer-content .col { + width: 240px; + padding: 0 5px 30px 0; +} +#footer-content .col2 { + width: 230px; + padding: 0 0 30px 0; +} +#footer-content .space-sep { + margin-right: 20px; +} + +/* alignment classes */ +.float-left { float: left; } +.float-right { float: right; } +.align-left { text-align: left; } +.align-right { text-align: right; } + +/* additional classes */ +.clear { clear: both; } +.gray { color: #BFBFBF; } + + + diff --git a/plugins/web_gui/static/images/bg.jpg b/plugins/web_gui/static/images/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87baa370ea85227243d8db0ccdce2bf41ddf2f3c GIT binary patch literal 471 zcmex=uI=H%w(=K}(Mey}1a#RK7?>VxzCA7BvVV3c5BWM&j(U=n0x7G(T?grS^)fti7c z8R$$HU}R=tU}ERsWMpJyU}l7gf@q)&E1Li#0}~@73pYZ7QAjZHgCa9);N_4hSEjOs zv5QLx0`;-5vLe(lFbXcb7zp&S=)|C45wZWb7*05;7vIVs!tfGRhj;_fWfv#ouI!Z(R*L+c^O$~UH!G7Jr VT!1}Ptu549TOm(@MS}nTO#rGvU~d2b literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/images/bullet.gif b/plugins/web_gui/static/images/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..c301719d7018b2c988b964bdbd3c8d96108e2e79 GIT binary patch literal 281 zcmZ?wbhEHbR9%a z?XESe#DDzyyzzATpT9qwHYhDR6+Hih|I90nK zLTlqXh10heFFBYn`-o@B5}u#GzkdJu;q2WNO>0#4TGf)F4{$v3g zqXQyAeqvxVbC^=#p(E9QVo8yNmWXB_Pg=5+mXJD&hl0pNEkVxo4-Te$6V4ym#K7Ur S#-?Z>#bhPkpC-w|U=0A_*%WBc~)&z?Q|{{8#gw{Op$J-c(~P9Gni zef##^zI}W8^yz2LoY}Eshp(^i{rmT)O`G=P#}A-h20}pbCkrD3g9w8TNFm5h2G(8$ z)jkK#9t}>OHv!8Q9S|!y$hGovYCM5*{6@|7v)oXNgSSs0g8QIxc_>)Dvc({ct*?HMH`TV;W u`8haSTRC}Hriw64pUKI|%|G8&c@Y=Oy7?srT?||T+w?cNsTn9TSOWm6w_FSW literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/images/comment.gif b/plugins/web_gui/static/images/comment.gif new file mode 100644 index 0000000000000000000000000000000000000000..951082f93a4bb0b7401e9cabdaaea9606cadb3f2 GIT binary patch literal 364 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 Wwcx^vboTbXnGj}v>8Cx2IrTqTcwBn` literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/images/gradientbg.jpg b/plugins/web_gui/static/images/gradientbg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed88f4c914fc2caf38db9e5aac39432629ce768f GIT binary patch literal 337 zcmex=uI=H%w(=K}(Mey}1a#RK7?>VxzCA7BvVU^v0R$jm6nz$D1XEXer(2tyD9BM<;x zi2$rDoM<9IIRT&$Gm1K4#=yiRK@=g78UJrF@BkGu2{H>Z*fYE>*}NdEeL{4D*6D@| L2rIxW{{J@tj9Vv} literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/images/headerphoto.jpg b/plugins/web_gui/static/images/headerphoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73c1df549f5ae0780e4f24af7fca2415a47200e4 GIT binary patch literal 25158 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 + + + + + + + + + + + + + + + +StarryPy WebGUI + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ + +

Chat

+ + +
+
+ + + +
+ +
+ + +

Table Styling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
post datetitledescription
05.31.2006Augue non nibhLobortis commodo metus vestibulum
05.31.2006Fusce ut diam bibendumPurus in eget odio in sapien
05.31.2006Maecenas et ipsumAdipiscing blandit quisque eros
05.31.2006Sed vestibulum blanditCras lobortis commodo metus lorem
+ +
+ +
+ + +
+ + + + + + +
+ + + diff --git a/plugins/web_gui/static/login.html b/plugins/web_gui/static/login.html new file mode 100644 index 0000000..7295d2d --- /dev/null +++ b/plugins/web_gui/static/login.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + +StarryPy WebGUI + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ + +

Login

+ +
+ Name:
+ Password:
+ + {% raw xsrf_form_html() %} +
+ +
+ +
+ + +
+ + + + + + +
+ + + diff --git a/plugins/web_gui/web_gui.py b/plugins/web_gui/web_gui.py new file mode 100644 index 0000000..3930a55 --- /dev/null +++ b/plugins/web_gui/web_gui.py @@ -0,0 +1,132 @@ +#:coding=utf-8: +import os +import logging +import string +import random +import ujson +import tornado.web +import tornado.websocket +from packets import chat_sent +from plugins.core.player_manager import permissions, PlayerManager, UserLevels +from plugins.core.player_manager.manager import Player +from tornado.ioloop import PeriodicCallback +from base_plugin import BasePlugin + + +class BaseHandler(tornado.web.RequestHandler): + + def get_current_user(self): + print self.request + return self.get_secure_cookie("player") + + +class LoginHandler(BaseHandler): + + def initialize(self): + self.player_manager = self.settings.get("playermanager") + + def get(self): + self.render("login.html") + + def post(self): + login_user = self.player_manager.get_by_name(self.get_argument("name")) + + if login_user is None or self.get_argument("password") != self.settings.get("ownerpassword"): + self.redirect("/login") + else: + self.set_secure_cookie("player", self.get_argument("name")) + self.redirect("/index.html") + + +class IndexHandler(BaseHandler): + def initialize(self): + self.player_manager = self.settings.get("playermanager") + + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + self.playerlist = self.player_manager.session.query(Player).all() + for player in self.playerlist: + print player.as_dict() + self.render("index.html") + +class ContactHandler(BaseHandler): + @tornado.web.authenticated + @tornado.web.asynchronous + def get(request): + request.render("contact.html") + + +class WebSocketChatHandler(tornado.websocket.WebSocketHandler): + clients = [] + + def open(self, *args): + self.clients.append(self) + self.messages = self.settings.get("messages") + self.callback = PeriodicCallback(self.update_chat, 500) + self.callback.start() + + def on_message(self, message): + messagejson = ujson.loads(message) + player = self.get_secure_cookie("player") + factory = self.settings.get("factory") + + self.messages.add(message) + factory.broadcast(messagejson["message"], 0, "", player) + + def on_chat_sent(self, data): + parsed = chat_sent().parse(data.data) + message = parsed.message.decode("utf-8") + for client in self.clients: + client.write_message(message) + + def update_chat(self): + if len(self.messages) > 0: + for message in self.messages: + for client in self.clients: + client.write_message(message) + self.messages.clear() + + def on_close(self): + self.clients.remove(self) + self.callback.stop() + + +class WebGuiApp(tornado.web.Application): + def __init__(self, port, ownerpassword, playermanager, factory, messages): + chars = string.ascii_letters + string.digits + random.seed(os.urandom(1024)) + cookiestring = "".join(random.choice(chars) for i in range(64)) + logging.getLogger('tornado.general').addHandler(logging.FileHandler("webgui.log")) + logging.getLogger('tornado.application').addHandler(logging.FileHandler("webgui.log")) + logging.getLogger('tornado.access').addHandler(logging.FileHandler("webgui_access.log")) + + handlers = [ + (r"/login", LoginHandler), + (r'/chat', WebSocketChatHandler), + (r'/contact.html', ContactHandler), + (r'/index.html', IndexHandler), + (r'/', IndexHandler), + (r'/style/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'style')}), + (r'/css/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'static/css')}), + (r'/js/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'static/js')}), + (r'/images/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'static/images')}) + ] + settings = dict( + template_path=os.path.join(os.path.dirname(__file__), "static"), + cookie_secret=cookiestring, + login_url="/login", + xsrf_cookies=True, + debug=True, + ownerpassword=ownerpassword, + playermanager=playermanager, + factory=factory, + messages=messages, + ) + tornado.web.Application.__init__(self, handlers, **settings) + self.listen(port) \ No newline at end of file diff --git a/plugins/web_gui/web_gui_plugin.py b/plugins/web_gui/web_gui_plugin.py new file mode 100644 index 0000000..ef72d56 --- /dev/null +++ b/plugins/web_gui/web_gui_plugin.py @@ -0,0 +1,35 @@ +#:coding=utf-8: +from base_plugin import BasePlugin +from plugins.core.player_manager import permissions, PlayerManager, UserLevels +import web_gui +import tornado.ioloop +from tornado.platform.twisted import TwistedIOLoop +TwistedIOLoop().install() + + +class WebGuiPlugin(BasePlugin, PlayerManager): + name = "web_gui" + depends = ['player_manager'] + + def __init__(self): + super(WebGuiPlugin, self).__init__() + try: + self.port = int(self.config.plugin_config['port']) + except (AttributeError, ValueError): + self.port = 8083 + self.ownerpassword = self.config.plugin_config['ownerpassword'] + self.websocket = web_gui.WebSocketChatHandler + self.chatmessages = set() + + def activate(self): + super(WebGuiPlugin, self).activate() + self.player_manager = self.plugins['player_manager'].player_manager + self.web_gui_app = web_gui.WebGuiApp(port=self.port, ownerpassword=self.ownerpassword, + playermanager=self.player_manager, factory=self.factory, + messages=self.chatmessages) + self.logger.info("WebGUI listening on port {p}".format(p=self.port)) + self.gui_instance = tornado.ioloop.IOLoop.instance() + + def deactivate(self): + super(WebGuiPlugin, self).deactivate() + self.gui_instance.stop() From f806020e7693950c498320477ec60168dc8077c0 Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 25 Feb 2014 10:55:17 +0100 Subject: [PATCH 02/18] - added button to stop StarryPy - added list of online players - JavaScript to send chat message when Return key is pressed in text field - added logout - moved on_chat_message to web_gui_plugin.py - token for secret_cookie will only be generated if empty or if plugin is configured to generate it on every start - some general cleanup on the html templates --- plugins/web_gui/static/adminstop.html | 85 ++++++++++++++++ plugins/web_gui/static/index.html | 140 ++++++++++---------------- plugins/web_gui/static/login.html | 10 +- plugins/web_gui/web_gui.py | 53 ++++++---- plugins/web_gui/web_gui_plugin.py | 20 +++- 5 files changed, 190 insertions(+), 118 deletions(-) create mode 100644 plugins/web_gui/static/adminstop.html diff --git a/plugins/web_gui/static/adminstop.html b/plugins/web_gui/static/adminstop.html new file mode 100644 index 0000000..9348344 --- /dev/null +++ b/plugins/web_gui/static/adminstop.html @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + +StarryPy WebGUI + + + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+ + + + + + +
+ + + diff --git a/plugins/web_gui/static/index.html b/plugins/web_gui/static/index.html index db17bbd..3a2e1c1 100644 --- a/plugins/web_gui/static/index.html +++ b/plugins/web_gui/static/index.html @@ -70,7 +70,17 @@ else { messageContainer.appendChild(createChatEntry(msgdate, "[SYSTEM]", "WebSocket is NOT supported by your browser!")); } + }; + + function confirmAction(action) { + var agree=confirm("Are you sure you want to " + action + " the server?"); + return (agree) + } + + function stopServer() { + if (confirmAction("stop")) window.open("/stopserver","_self") } + StarryPy WebGUI @@ -93,7 +103,7 @@

Put your site slogan here...

  • Downloads
  • Support
  • About
  • -
  • Login
  • +
  • Logout
  • @@ -107,73 +117,33 @@

    Put your site slogan here...

    @@ -187,42 +157,34 @@

    Chat

    - - - + + +
    -

    Table Styling

    +

    Player List

    + {% set row_count = 1 %} - - - - - - - - - - - - - - - - - - + + + + - - - - + {% for player in handler.playerlist %} + {% set row_class = "row-a" if bool(row_count & 1) else "row-b" %} + + + + + + {% set row_count +=1 %} + {% end %}
    post datetitledescription
    05.31.2006Augue non nibhLobortis commodo metus vestibulum
    05.31.2006Fusce ut diam bibendumPurus in eget odio in sapien
    05.31.2006Maecenas et ipsumAdipiscing blandit quisque erospost namePlanetAccess LevelLast Seen
    05.31.2006Sed vestibulum blanditCras lobortis commodo metus lorem
    {{ player.as_dict()["name"] }}{{ player.as_dict()["planet"] }}{{ player.as_dict()["access_level"] }}{{ player.as_dict()["last_seen"] }}

    diff --git a/plugins/web_gui/static/login.html b/plugins/web_gui/static/login.html index 7295d2d..9bf8062 100644 --- a/plugins/web_gui/static/login.html +++ b/plugins/web_gui/static/login.html @@ -28,11 +28,6 @@

    Put your site slogan here...

    @@ -57,8 +52,11 @@

    Login

    Name:
    - Password:
    + Password:
    + {% if handler.failed_login %} + Login failed. + {% end %} {% raw xsrf_form_html() %}
    diff --git a/plugins/web_gui/web_gui.py b/plugins/web_gui/web_gui.py index 3930a55..376bb92 100644 --- a/plugins/web_gui/web_gui.py +++ b/plugins/web_gui/web_gui.py @@ -1,11 +1,10 @@ #:coding=utf-8: import os import logging -import string -import random import ujson import tornado.web import tornado.websocket +from twisted.internet import reactor from packets import chat_sent from plugins.core.player_manager import permissions, PlayerManager, UserLevels from plugins.core.player_manager.manager import Player @@ -16,41 +15,50 @@ class BaseHandler(tornado.web.RequestHandler): def get_current_user(self): - print self.request return self.get_secure_cookie("player") class LoginHandler(BaseHandler): def initialize(self): + self.failed_login = False self.player_manager = self.settings.get("playermanager") def get(self): self.render("login.html") def post(self): - login_user = self.player_manager.get_by_name(self.get_argument("name")) + self.login_user = self.player_manager.get_by_name(self.get_argument("name")) - if login_user is None or self.get_argument("password") != self.settings.get("ownerpassword"): - self.redirect("/login") + if self.login_user is None or self.get_argument("password") != self.settings.get("ownerpassword"): + self.failed_login = True + self.render("login.html") else: self.set_secure_cookie("player", self.get_argument("name")) - self.redirect("/index.html") + self.failed_login = False + self.redirect(self.get_argument("next", "/")) + + +class LogoutHandler(BaseHandler): + @tornado.web.authenticated + @tornado.web.asynchronous + def get(request): + request.clear_cookie("player") + request.redirect("/login") class IndexHandler(BaseHandler): def initialize(self): self.player_manager = self.settings.get("playermanager") - @tornado.web.authenticated @tornado.web.asynchronous def get(self): - self.playerlist = self.player_manager.session.query(Player).all() - for player in self.playerlist: - print player.as_dict() + self.playerlist = self.player_manager.all() + self.playerlistonline = self.player_manager.who() self.render("index.html") + class ContactHandler(BaseHandler): @tornado.web.authenticated @tornado.web.asynchronous @@ -58,6 +66,14 @@ def get(request): request.render("contact.html") +class AdminStopHandler(BaseHandler): + @tornado.web.authenticated + @tornado.web.asynchronous + def get(request): + request.render("adminstop.html") + reactor.stop() + + class WebSocketChatHandler(tornado.websocket.WebSocketHandler): clients = [] @@ -75,12 +91,6 @@ def on_message(self, message): self.messages.add(message) factory.broadcast(messagejson["message"], 0, "", player) - def on_chat_sent(self, data): - parsed = chat_sent().parse(data.data) - message = parsed.message.decode("utf-8") - for client in self.clients: - client.write_message(message) - def update_chat(self): if len(self.messages) > 0: for message in self.messages: @@ -94,17 +104,16 @@ def on_close(self): class WebGuiApp(tornado.web.Application): - def __init__(self, port, ownerpassword, playermanager, factory, messages): - chars = string.ascii_letters + string.digits - random.seed(os.urandom(1024)) - cookiestring = "".join(random.choice(chars) for i in range(64)) + def __init__(self, port, ownerpassword, playermanager, factory, messages, cookie_secret): logging.getLogger('tornado.general').addHandler(logging.FileHandler("webgui.log")) logging.getLogger('tornado.application').addHandler(logging.FileHandler("webgui.log")) logging.getLogger('tornado.access').addHandler(logging.FileHandler("webgui_access.log")) handlers = [ (r"/login", LoginHandler), + (r"/logout", LogoutHandler), (r'/chat', WebSocketChatHandler), + (r'/stopserver', AdminStopHandler), (r'/contact.html', ContactHandler), (r'/index.html', IndexHandler), (r'/', IndexHandler), @@ -119,7 +128,7 @@ def __init__(self, port, ownerpassword, playermanager, factory, messages): ] settings = dict( template_path=os.path.join(os.path.dirname(__file__), "static"), - cookie_secret=cookiestring, + cookie_secret=cookie_secret, login_url="/login", xsrf_cookies=True, debug=True, diff --git a/plugins/web_gui/web_gui_plugin.py b/plugins/web_gui/web_gui_plugin.py index ef72d56..17c7380 100644 --- a/plugins/web_gui/web_gui_plugin.py +++ b/plugins/web_gui/web_gui_plugin.py @@ -1,4 +1,7 @@ #:coding=utf-8: +import os +import string +import random from base_plugin import BasePlugin from plugins.core.player_manager import permissions, PlayerManager, UserLevels import web_gui @@ -18,6 +21,10 @@ def __init__(self): except (AttributeError, ValueError): self.port = 8083 self.ownerpassword = self.config.plugin_config['ownerpassword'] + if self.config.plugin_config['cookie_token'] == "" or not self.config.plugin_config['remember_cookie_token']: + self.cookie_token = self.config.plugin_config['cookie_token'] = self.generate_cookie_token() + else: + self.cookie_token = self.config.plugin_config['cookie_token'] self.websocket = web_gui.WebSocketChatHandler self.chatmessages = set() @@ -26,10 +33,21 @@ def activate(self): self.player_manager = self.plugins['player_manager'].player_manager self.web_gui_app = web_gui.WebGuiApp(port=self.port, ownerpassword=self.ownerpassword, playermanager=self.player_manager, factory=self.factory, - messages=self.chatmessages) + messages=self.chatmessages, cookie_secret=self.cookie_token) self.logger.info("WebGUI listening on port {p}".format(p=self.port)) self.gui_instance = tornado.ioloop.IOLoop.instance() def deactivate(self): super(WebGuiPlugin, self).deactivate() self.gui_instance.stop() + + def generate_cookie_token(self): + chars = string.ascii_letters + string.digits + random.seed(os.urandom(1024)) + return "".join(random.choice(chars) for i in range(64)) + + def on_chat_sent(self, data): + parsed = chat_sent().parse(data.data) + message = parsed.message.decode("utf-8") + self.chatmessages.add(message) + From 59d2deb4eea8f52434bd5667cd494b8577435f6e Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 25 Feb 2014 11:13:56 +0100 Subject: [PATCH 03/18] - chat might actually work soon --- plugins/web_gui/static/index.html | 2 +- plugins/web_gui/web_gui.py | 16 ++++++++++------ plugins/web_gui/web_gui_plugin.py | 20 ++++++++++++++++---- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/plugins/web_gui/static/index.html b/plugins/web_gui/static/index.html index 3a2e1c1..f03b3dd 100644 --- a/plugins/web_gui/static/index.html +++ b/plugins/web_gui/static/index.html @@ -38,7 +38,7 @@ } function openWS(messageContainer) { - ws = new WebSocket("ws://localhost:8083/chat"); + ws = new WebSocket("ws://{{ handler.settings.get("serverurl") }}:{{ handler.settings.get("wsport") }}/chat"); ws.onmessage = function (e) { var data = JSON.parse(e.data); messageContainer.appendChild(createChatEntry(data.msgdate, data.author, data.message)); diff --git a/plugins/web_gui/web_gui.py b/plugins/web_gui/web_gui.py index 376bb92..27c9740 100644 --- a/plugins/web_gui/web_gui.py +++ b/plugins/web_gui/web_gui.py @@ -5,7 +5,6 @@ import tornado.web import tornado.websocket from twisted.internet import reactor -from packets import chat_sent from plugins.core.player_manager import permissions, PlayerManager, UserLevels from plugins.core.player_manager.manager import Player from tornado.ioloop import PeriodicCallback @@ -75,12 +74,15 @@ def get(request): class WebSocketChatHandler(tornado.websocket.WebSocketHandler): - clients = [] - def open(self, *args): - self.clients.append(self) + def initialize(self): + self.clients = [] + #self.messages = set() self.messages = self.settings.get("messages") self.callback = PeriodicCallback(self.update_chat, 500) + + def open(self, *args): + self.clients.append(self) self.callback.start() def on_message(self, message): @@ -104,7 +106,7 @@ def on_close(self): class WebGuiApp(tornado.web.Application): - def __init__(self, port, ownerpassword, playermanager, factory, messages, cookie_secret): + def __init__(self, port, ownerpassword, playermanager, factory, cookie_secret, serverurl, messages): logging.getLogger('tornado.general').addHandler(logging.FileHandler("webgui.log")) logging.getLogger('tornado.application').addHandler(logging.FileHandler("webgui.log")) logging.getLogger('tornado.access').addHandler(logging.FileHandler("webgui_access.log")) @@ -135,7 +137,9 @@ def __init__(self, port, ownerpassword, playermanager, factory, messages, cookie ownerpassword=ownerpassword, playermanager=playermanager, factory=factory, - messages=messages, + wsport=port, + serverurl=serverurl, + messages=messages ) tornado.web.Application.__init__(self, handlers, **settings) self.listen(port) \ No newline at end of file diff --git a/plugins/web_gui/web_gui_plugin.py b/plugins/web_gui/web_gui_plugin.py index 17c7380..e13c95d 100644 --- a/plugins/web_gui/web_gui_plugin.py +++ b/plugins/web_gui/web_gui_plugin.py @@ -4,7 +4,9 @@ import random from base_plugin import BasePlugin from plugins.core.player_manager import permissions, PlayerManager, UserLevels +from packets import chat_sent import web_gui +from websocket import create_connection import tornado.ioloop from tornado.platform.twisted import TwistedIOLoop TwistedIOLoop().install() @@ -25,15 +27,16 @@ def __init__(self): self.cookie_token = self.config.plugin_config['cookie_token'] = self.generate_cookie_token() else: self.cookie_token = self.config.plugin_config['cookie_token'] - self.websocket = web_gui.WebSocketChatHandler - self.chatmessages = set() + self.serverurl = self.config.plugin_config['serverurl'] + self.messages = set() def activate(self): super(WebGuiPlugin, self).activate() self.player_manager = self.plugins['player_manager'].player_manager self.web_gui_app = web_gui.WebGuiApp(port=self.port, ownerpassword=self.ownerpassword, playermanager=self.player_manager, factory=self.factory, - messages=self.chatmessages, cookie_secret=self.cookie_token) + cookie_secret=self.cookie_token, serverurl=self.serverurl, + messages=self.messages) self.logger.info("WebGUI listening on port {p}".format(p=self.port)) self.gui_instance = tornado.ioloop.IOLoop.instance() @@ -48,6 +51,15 @@ def generate_cookie_token(self): def on_chat_sent(self, data): parsed = chat_sent().parse(data.data) + print parsed.message.decode("utf-8") message = parsed.message.decode("utf-8") - self.chatmessages.add(message) + #message = {"msgdate": "text", "author": "test", "message": parsed.message.decode("utf-8")} + self.messages.add(message) + + # print "ws://localhost:{p}/chat".format(p=self.port) + # ws = create_connection("ws://localhost:{p}/chat".format(p=self.port)) + # result = ws.send(message) + # print "Received '%s'" % result + # ws.close() + return True From 5824e1e64d964bc713294febe6a1d9c0b53713b7 Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 25 Feb 2014 16:09:48 +0100 Subject: [PATCH 04/18] - added access_level verification to the server stop command - different format for chat entry timestamp - initial version of player list - initial version of player edit function --- plugins/web_gui/static/adminstop.html | 7 +- plugins/web_gui/static/index.html | 39 ++------ plugins/web_gui/static/playeredit.html | 121 +++++++++++++++++++++++++ plugins/web_gui/static/playerlist.html | 108 ++++++++++++++++++++++ plugins/web_gui/web_gui.py | 67 +++++++++++--- 5 files changed, 299 insertions(+), 43 deletions(-) create mode 100644 plugins/web_gui/static/playeredit.html create mode 100644 plugins/web_gui/static/playerlist.html diff --git a/plugins/web_gui/static/adminstop.html b/plugins/web_gui/static/adminstop.html index 9348344..574947c 100644 --- a/plugins/web_gui/static/adminstop.html +++ b/plugins/web_gui/static/adminstop.html @@ -45,8 +45,11 @@

    Put your site slogan here...

    diff --git a/plugins/web_gui/static/index.html b/plugins/web_gui/static/index.html index f03b3dd..e4edde8 100644 --- a/plugins/web_gui/static/index.html +++ b/plugins/web_gui/static/index.html @@ -50,7 +50,7 @@ function sendMessage() { var d = new Date(); - var data = { msgdate: "[" + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + "]", + var data = { msgdate: "[" + twoDigits(d.getHours()) + ":" + twoDigits(d.getMinutes()) + ":" + twoDigits(d.getSeconds()) + "]", author: document.getElementById("username").value, message: document.getElementById("message").value }; @@ -61,7 +61,7 @@ window.onload = function () { var d = new Date(); - var msgdate = "[" + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + "]"; + var msgdate = "[" + twoDigits(d.getHours()) + ":" + twoDigits(d.getMinutes()) + ":" + twoDigits(d.getSeconds()) + "]"; var messageContainer = document.getElementById("chat"); if ("WebSocket" in window) { messageContainer.appendChild(createChatEntry(msgdate, "[SYSTEM]", "WebSocket is supported by your browser!")); @@ -73,12 +73,16 @@ }; function confirmAction(action) { - var agree=confirm("Are you sure you want to " + action + " the server?"); + var agree=confirm("Are you sure you want to " + action + "?"); return (agree) } function stopServer() { - if (confirmAction("stop")) window.open("/stopserver","_self") + if (confirmAction("stop the server")) window.open("/stopserver","_self") + } + + function twoDigits(n){ + return n<10? '0'+n:''+n; } @@ -99,7 +103,7 @@

    Put your site slogan here...

    - - -

    Player List

    - - - {% set row_count = 1 %} - - - - - - - {% for player in handler.playerlist %} - {% set row_class = "row-a" if bool(row_count & 1) else "row-b" %} - - - - - - - {% set row_count +=1 %} - {% end %} -
    post namePlanetAccess LevelLast Seen
    {{ player.as_dict()["name"] }}{{ player.as_dict()["planet"] }}{{ player.as_dict()["access_level"] }}{{ player.as_dict()["last_seen"] }}
    - -
    diff --git a/plugins/web_gui/static/playeredit.html b/plugins/web_gui/static/playeredit.html new file mode 100644 index 0000000..c4f0005 --- /dev/null +++ b/plugins/web_gui/static/playeredit.html @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + +StarryPy WebGUI + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + + +

    Edit Player

    + +
    + + {% if handler.error_message != "" %} + {{ handler.error_message }} + {% end %} + + {% set row_count = 1 %} + {% for key, value in handler.edit_player_dict.iteritems() %} + {% set row_class = "row-a" if bool(row_count & 1) else "row-b" %} + {% if key == "access_level" %} + + + + + {% else %} + + + + + {% end %} + {% set row_count +=1 %} + {% end %} +
    {{ key }} + +
    {{ key }}{{ value }}
    + {% raw xsrf_form_html() %} + +
    +
    + +
    + +
    + + +
    + + + + + + +
    + + + diff --git a/plugins/web_gui/static/playerlist.html b/plugins/web_gui/static/playerlist.html new file mode 100644 index 0000000..2bce8f7 --- /dev/null +++ b/plugins/web_gui/static/playerlist.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + +StarryPy WebGUI + + + + + +
    + + + +
    + + +
    + + + +
    + +
    + + +

    Player List

    + + + {% set row_count = 1 %} + + + + + + + {% for player in handler.playerlist %} + {% set row_class = "row-a" if bool(row_count & 1) else "row-b" %} + + + + + + + {% set row_count +=1 %} + {% end %} +
    post namePlanetAccess LevelLast Seen
    {{ player.as_dict()["name"] }}{{ player.as_dict()["planet"] }}{{ player.as_dict()["access_level"] }}{{ player.as_dict()["last_seen"] }}
    + +
    + +
    + +
    + + +
    + + + + + + +
    + + + diff --git a/plugins/web_gui/web_gui.py b/plugins/web_gui/web_gui.py index 27c9740..7511a0a 100644 --- a/plugins/web_gui/web_gui.py +++ b/plugins/web_gui/web_gui.py @@ -41,9 +41,9 @@ def post(self): class LogoutHandler(BaseHandler): @tornado.web.authenticated @tornado.web.asynchronous - def get(request): - request.clear_cookie("player") - request.redirect("/login") + def get(self): + self.clear_cookie("player") + self.redirect("/login") class IndexHandler(BaseHandler): @@ -53,24 +53,68 @@ def initialize(self): @tornado.web.authenticated @tornado.web.asynchronous def get(self): - self.playerlist = self.player_manager.all() self.playerlistonline = self.player_manager.who() self.render("index.html") -class ContactHandler(BaseHandler): +class PlayerListHandler(BaseHandler): + + def initialize(self): + self.player_manager = self.settings.get("playermanager") + self.playerlist = self.player_manager.all() + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + self.render("playerlist.html") + + +class PlayerEditHandler(BaseHandler): + + def initialize(self): + self.player_manager = self.settings.get("playermanager") + self.levels = UserLevels.ranks + self.web_gui_user = self.player_manager.get_by_name(self.get_secure_cookie("player")) + self.edit_player = self.player_manager.get_by_name(self.get_argument("playername")) + self.edit_player_dict = self.edit_player.as_dict() + @tornado.web.authenticated @tornado.web.asynchronous - def get(request): - request.render("contact.html") + def get(self): + try: + self.error_message = self.get_argument("error_message") + except tornado.web.MissingArgumentError: + self.error_message = "" + self.render("playeredit.html") + + @tornado.web.authenticated + @tornado.web.asynchronous + def post(self): + if self.web_gui_user.access_level > self.edit_player.access_level: + self.edit_player.access_level = self.get_argument("access_level") + else: + error_message = "You are not allowed to change this users' data!" + self.redirect("playeredit.html?playername={n}&error_message={e}".format(n=self.get_argument("playername"), + e=error_message)) + self.redirect("playeredit.html?playername={n}".format(n=self.get_argument("playername"))) class AdminStopHandler(BaseHandler): + + def initialize(self): + self.levels = UserLevels.ranks + self.player_manager = self.settings.get("playermanager") + self.web_gui_user = self.player_manager.get_by_name(self.get_secure_cookie("player")) + @tornado.web.authenticated @tornado.web.asynchronous - def get(request): - request.render("adminstop.html") - reactor.stop() + def get(self): + if self.web_gui_user.access_level == self.levels["OWNER"]: + self.render("adminstop.html") + reactor.stop() + else: + self.error_message = "Only owners can stop the server!" + self.render("adminstop.html") class WebSocketChatHandler(tornado.websocket.WebSocketHandler): @@ -116,7 +160,8 @@ def __init__(self, port, ownerpassword, playermanager, factory, cookie_secret, s (r"/logout", LogoutHandler), (r'/chat', WebSocketChatHandler), (r'/stopserver', AdminStopHandler), - (r'/contact.html', ContactHandler), + (r'/playerlist.html', PlayerListHandler), + (r'/playeredit.html', PlayerEditHandler), (r'/index.html', IndexHandler), (r'/', IndexHandler), (r'/style/(.*)', tornado.web.StaticFileHandler, From 926a3f71ffd627cd1048eefd99480001efc6ce3b Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 25 Feb 2014 17:58:41 +0100 Subject: [PATCH 05/18] - fixed header width - fixed AdminStopHandler --- plugins/web_gui/static/css/PixelGreen.css | 2 +- plugins/web_gui/web_gui.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/web_gui/static/css/PixelGreen.css b/plugins/web_gui/static/css/PixelGreen.css index 196736d..c4ff073 100644 --- a/plugins/web_gui/static/css/PixelGreen.css +++ b/plugins/web_gui/static/css/PixelGreen.css @@ -183,7 +183,7 @@ input.button { ------------------------------- */ #header-content, #content, #footer-content { - width: 760px; + width: 1000px; } /* header */ diff --git a/plugins/web_gui/web_gui.py b/plugins/web_gui/web_gui.py index 7511a0a..9873d99 100644 --- a/plugins/web_gui/web_gui.py +++ b/plugins/web_gui/web_gui.py @@ -110,6 +110,7 @@ def initialize(self): @tornado.web.asynchronous def get(self): if self.web_gui_user.access_level == self.levels["OWNER"]: + self.error_message = "" self.render("adminstop.html") reactor.stop() else: From a1bc56798092f619d0d3ccf3ff76189aef0bfa59 Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 4 Mar 2014 21:51:56 +0100 Subject: [PATCH 06/18] oh boy, so much stuff. I should do more commits. well, I added a bunch of files and code and also changed and fixed a few things --- plugins/web_gui/__init__.py | 2 +- plugins/web_gui/static/adminstop.html | 115 +- plugins/web_gui/static/ajax/dashboard.html | 91 + plugins/web_gui/static/ajax/playeredit.html | 81 + .../web_gui/static/ajax/playereditnew.html | 85 + plugins/web_gui/static/ajax/playerlist.html | 41 + .../web_gui/static/ajax/playerlistonline.html | 40 + .../web_gui/static/ajax/playersonline.html | 3 + plugins/web_gui/static/css/PixelGreen.css | 428 - plugins/web_gui/static/css/footer.css | 6 + plugins/web_gui/static/css/style.css | 2366 +++ plugins/web_gui/static/css/style.min.css | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20290 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41236 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23292 bytes plugins/web_gui/static/images/960_logo.png | Bin 0 -> 194913 bytes plugins/web_gui/static/img/chevron-left.png | Bin 0 -> 1368 bytes plugins/web_gui/static/img/chevron-right.png | Bin 0 -> 1442 bytes .../web_gui/static/img/devoops_getdata.gif | Bin 0 -> 2892 bytes .../static/img/devoops_pattern_b10.png | Bin 0 -> 10010 bytes plugins/web_gui/static/img/logo-200.png | Bin 0 -> 2872 bytes plugins/web_gui/static/img/logo.png | Bin 0 -> 1168 bytes plugins/web_gui/static/img/sort-asc.png | Bin 0 -> 1022 bytes plugins/web_gui/static/img/sort-desc.png | Bin 0 -> 1017 bytes plugins/web_gui/static/img/sort.png | Bin 0 -> 1060 bytes plugins/web_gui/static/img/times.png | Bin 0 -> 1428 bytes .../web_gui/static/img/ui-accordion-down.png | Bin 0 -> 1125 bytes .../web_gui/static/img/ui-accordion-right.png | Bin 0 -> 1107 bytes plugins/web_gui/static/img/ui-left.png | Bin 0 -> 1085 bytes plugins/web_gui/static/img/ui-right.png | Bin 0 -> 1104 bytes plugins/web_gui/static/index.html | 312 +- plugins/web_gui/static/js/devoops.js | 2431 +++ plugins/web_gui/static/js/devoops.min.js | 1 + plugins/web_gui/static/js/noty/jquery.noty.js | 488 + .../web_gui/static/js/noty/layouts/bottom.js | 34 + .../static/js/noty/layouts/bottomCenter.js | 41 + .../static/js/noty/layouts/bottomLeft.js | 43 + .../static/js/noty/layouts/bottomRight.js | 43 + .../web_gui/static/js/noty/layouts/center.js | 56 + .../static/js/noty/layouts/centerLeft.js | 61 + .../static/js/noty/layouts/centerRight.js | 61 + .../web_gui/static/js/noty/layouts/inline.js | 31 + plugins/web_gui/static/js/noty/layouts/top.js | 34 + .../static/js/noty/layouts/topCenter.js | 41 + .../web_gui/static/js/noty/layouts/topLeft.js | 43 + .../static/js/noty/layouts/topRight.js | 43 + .../js/noty/packaged/jquery.noty.packaged.js | 1180 ++ .../noty/packaged/jquery.noty.packaged.min.js | 1 + plugins/web_gui/static/js/noty/promise.js | 432 + .../web_gui/static/js/noty/themes/default.js | 156 + plugins/web_gui/static/js/webgui.chat.js | 57 + plugins/web_gui/static/js/webgui.general.js | 55 + plugins/web_gui/static/login.html | 128 +- plugins/web_gui/static/playeredit.html | 121 - plugins/web_gui/static/playerlist.html | 108 - .../plugins/bootstrap/bootstrap-theme.css | 347 + .../plugins/bootstrap/bootstrap-theme.css.map | 1 + .../plugins/bootstrap/bootstrap-theme.min.css | 7 + .../static/plugins/bootstrap/bootstrap.css | 5831 ++++++ .../plugins/bootstrap/bootstrap.css.map | 1 + .../static/plugins/bootstrap/bootstrap.js | 1951 ++ .../plugins/bootstrap/bootstrap.min.css | 7 + .../static/plugins/bootstrap/bootstrap.min.js | 6 + .../bootstrapvalidator/bootstrapValidator.css | 11 + .../bootstrapvalidator/bootstrapValidator.js | 849 + .../bootstrapValidator.min.css | 12 + .../bootstrapValidator.min.js | 11 + .../bootstrapValidator.scss | 15 + plugins/web_gui/static/plugins/d3/LICENSE | 26 + plugins/web_gui/static/plugins/d3/d3.v3.js | 9274 ++++++++++ .../web_gui/static/plugins/d3/d3.v3.min.js | 5 + .../static/plugins/datatables/TableTools.js | 2475 +++ .../plugins/datatables/TableTools_orig.js | 2475 +++ .../plugins/datatables/ZeroClipboard.js | 367 + .../plugins/datatables/copy_csv_xls_pdf.swf | Bin 0 -> 58827 bytes .../datatables/dataTables.bootstrap.js | 148 + .../plugins/datatables/jquery.dataTables.js | 12099 +++++++++++++ .../web_gui/static/plugins/fancybox/blank.gif | Bin 0 -> 43 bytes .../plugins/fancybox/fancybox_loading.gif | Bin 0 -> 6567 bytes .../plugins/fancybox/fancybox_loading@2x.gif | Bin 0 -> 13984 bytes .../plugins/fancybox/fancybox_overlay.png | Bin 0 -> 1003 bytes .../plugins/fancybox/fancybox_sprite.png | Bin 0 -> 1362 bytes .../plugins/fancybox/fancybox_sprite@2x.png | Bin 0 -> 6553 bytes .../fancybox/helpers/fancybox_buttons.png | Bin 0 -> 1080 bytes .../helpers/jquery.fancybox-buttons.css | 97 + .../helpers/jquery.fancybox-buttons.js | 122 + .../fancybox/helpers/jquery.fancybox-media.js | 199 + .../helpers/jquery.fancybox-thumbs.css | 55 + .../helpers/jquery.fancybox-thumbs.js | 162 + .../plugins/fancybox/jquery.fancybox.css | 274 + .../plugins/fancybox/jquery.fancybox.js | 2020 +++ .../plugins/fancybox/jquery.fancybox.pack.js | 46 + .../static/plugins/fineuploader/LICENSE | 676 + .../static/plugins/fineuploader/edit.gif | Bin 0 -> 145 bytes .../fineuploader/fineuploader-4.3.1.css | 205 + .../fineuploader/fineuploader-4.3.1.min.css | 19 + .../fineuploader/iframe.xss.response-4.3.1.js | 7 + .../fineuploader/jquery.fineuploader-4.3.1.js | 9228 ++++++++++ .../jquery.fineuploader-4.3.1.min.js | 20 + .../static/plugins/fineuploader/loading.gif | Bin 0 -> 1688 bytes .../plugins/fineuploader/processing.gif | Bin 0 -> 3209 bytes .../web_gui/static/plugins/flot/LICENSE.txt | 22 + .../static/plugins/flot/jquery.flot.js | 3137 ++++ .../static/plugins/flot/jquery.flot.resize.js | 60 + .../static/plugins/flot/jquery.flot.time.js | 431 + .../plugins/fullcalendar/fullcalendar.css | 601 + .../plugins/fullcalendar/fullcalendar.js | 6934 +++++++ .../plugins/fullcalendar/fullcalendar.min.js | 7 + .../fullcalendar/fullcalendar.print.css | 32 + .../static/plugins/fullcalendar/gcal.js | 100 + .../static/plugins/fullcalendar/lang/all.js | 3 + .../static/plugins/fullcalendar/lang/ar-ma.js | 1 + .../static/plugins/fullcalendar/lang/ar.js | 1 + .../static/plugins/fullcalendar/lang/bg.js | 1 + .../static/plugins/fullcalendar/lang/ca.js | 1 + .../static/plugins/fullcalendar/lang/cs.js | 1 + .../static/plugins/fullcalendar/lang/da.js | 1 + .../static/plugins/fullcalendar/lang/de.js | 1 + .../static/plugins/fullcalendar/lang/el.js | 1 + .../static/plugins/fullcalendar/lang/en-au.js | 1 + .../static/plugins/fullcalendar/lang/en-ca.js | 1 + .../static/plugins/fullcalendar/lang/en-gb.js | 1 + .../static/plugins/fullcalendar/lang/es.js | 1 + .../static/plugins/fullcalendar/lang/fa.js | 1 + .../static/plugins/fullcalendar/lang/fi.js | 1 + .../static/plugins/fullcalendar/lang/fr-ca.js | 1 + .../static/plugins/fullcalendar/lang/fr.js | 1 + .../static/plugins/fullcalendar/lang/hi.js | 1 + .../static/plugins/fullcalendar/lang/hr.js | 1 + .../static/plugins/fullcalendar/lang/hu.js | 1 + .../static/plugins/fullcalendar/lang/it.js | 1 + .../static/plugins/fullcalendar/lang/ja.js | 1 + .../static/plugins/fullcalendar/lang/ko.js | 1 + .../static/plugins/fullcalendar/lang/lt.js | 1 + .../static/plugins/fullcalendar/lang/lv.js | 1 + .../static/plugins/fullcalendar/lang/nl.js | 1 + .../static/plugins/fullcalendar/lang/pl.js | 1 + .../static/plugins/fullcalendar/lang/pt-br.js | 1 + .../static/plugins/fullcalendar/lang/pt.js | 1 + .../static/plugins/fullcalendar/lang/ro.js | 1 + .../static/plugins/fullcalendar/lang/ru.js | 1 + .../static/plugins/fullcalendar/lang/sk.js | 1 + .../static/plugins/fullcalendar/lang/sl.js | 1 + .../static/plugins/fullcalendar/lang/sv.js | 1 + .../static/plugins/fullcalendar/lang/th.js | 1 + .../static/plugins/fullcalendar/lang/tr.js | 1 + .../static/plugins/fullcalendar/lang/uk.js | 1 + .../static/plugins/fullcalendar/lang/zh-cn.js | 1 + .../static/plugins/fullcalendar/lang/zh-tw.js | 1 + .../static/plugins/jQuery-Knob/LICENSE | 20 + .../static/plugins/jQuery-Knob/jquery.knob.js | 766 + .../jquery-ui-timepicker-addon/LICENSE-MIT | 22 + .../i18n/jquery-ui-timepicker-af.js | 21 + .../i18n/jquery-ui-timepicker-am.js | 21 + .../i18n/jquery-ui-timepicker-bg.js | 21 + .../i18n/jquery-ui-timepicker-ca.js | 21 + .../i18n/jquery-ui-timepicker-cs.js | 21 + .../i18n/jquery-ui-timepicker-da.js | 21 + .../i18n/jquery-ui-timepicker-de.js | 21 + .../i18n/jquery-ui-timepicker-el.js | 21 + .../i18n/jquery-ui-timepicker-es.js | 21 + .../i18n/jquery-ui-timepicker-et.js | 21 + .../i18n/jquery-ui-timepicker-eu.js | 21 + .../i18n/jquery-ui-timepicker-fi.js | 21 + .../i18n/jquery-ui-timepicker-fr.js | 21 + .../i18n/jquery-ui-timepicker-gl.js | 21 + .../i18n/jquery-ui-timepicker-he.js | 21 + .../i18n/jquery-ui-timepicker-hr.js | 21 + .../i18n/jquery-ui-timepicker-hu.js | 21 + .../i18n/jquery-ui-timepicker-id.js | 21 + .../i18n/jquery-ui-timepicker-it.js | 21 + .../i18n/jquery-ui-timepicker-ja.js | 21 + .../i18n/jquery-ui-timepicker-ko.js | 21 + .../i18n/jquery-ui-timepicker-lt.js | 21 + .../i18n/jquery-ui-timepicker-nl.js | 21 + .../i18n/jquery-ui-timepicker-no.js | 21 + .../i18n/jquery-ui-timepicker-pl.js | 21 + .../i18n/jquery-ui-timepicker-pt-BR.js | 21 + .../i18n/jquery-ui-timepicker-pt.js | 21 + .../i18n/jquery-ui-timepicker-ro.js | 21 + .../i18n/jquery-ui-timepicker-ru.js | 21 + .../i18n/jquery-ui-timepicker-sk.js | 21 + .../i18n/jquery-ui-timepicker-sr-RS.js | 21 + .../i18n/jquery-ui-timepicker-sr-YU.js | 21 + .../i18n/jquery-ui-timepicker-sv.js | 21 + .../i18n/jquery-ui-timepicker-th.js | 18 + .../i18n/jquery-ui-timepicker-tr.js | 21 + .../i18n/jquery-ui-timepicker-uk.js | 21 + .../i18n/jquery-ui-timepicker-vi.js | 21 + .../i18n/jquery-ui-timepicker-zh-CN.js | 21 + .../i18n/jquery-ui-timepicker-zh-TW.js | 21 + .../jquery-ui-timepicker-addon/index.html | 971 + .../jquery-ui-sliderAccess.js | 91 + .../jquery-ui-timepicker-addon.css | 11 + .../jquery-ui-timepicker-addon.js | 2145 +++ .../jquery-ui-timepicker-addon.min.css | 5 + .../jquery-ui-timepicker-addon.min.js | 5 + .../jquery-ui/i18n/jquery-ui-i18n.min.js | 6 + .../i18n/jquery.ui.datepicker-af.min.js | 4 + .../i18n/jquery.ui.datepicker-ar-DZ.min.js | 4 + .../i18n/jquery.ui.datepicker-ar.min.js | 4 + .../i18n/jquery.ui.datepicker-az.min.js | 4 + .../i18n/jquery.ui.datepicker-be.min.js | 4 + .../i18n/jquery.ui.datepicker-bg.min.js | 4 + .../i18n/jquery.ui.datepicker-bs.min.js | 4 + .../i18n/jquery.ui.datepicker-ca.min.js | 4 + .../i18n/jquery.ui.datepicker-cs.min.js | 4 + .../i18n/jquery.ui.datepicker-cy-GB.min.js | 4 + .../i18n/jquery.ui.datepicker-da.min.js | 4 + .../i18n/jquery.ui.datepicker-de.min.js | 4 + .../i18n/jquery.ui.datepicker-el.min.js | 4 + .../i18n/jquery.ui.datepicker-en-AU.min.js | 4 + .../i18n/jquery.ui.datepicker-en-GB.min.js | 4 + .../i18n/jquery.ui.datepicker-en-NZ.min.js | 4 + .../i18n/jquery.ui.datepicker-eo.min.js | 4 + .../i18n/jquery.ui.datepicker-es.min.js | 4 + .../i18n/jquery.ui.datepicker-et.min.js | 4 + .../i18n/jquery.ui.datepicker-eu.min.js | 4 + .../i18n/jquery.ui.datepicker-fa.min.js | 4 + .../i18n/jquery.ui.datepicker-fi.min.js | 4 + .../i18n/jquery.ui.datepicker-fo.min.js | 4 + .../i18n/jquery.ui.datepicker-fr-CA.min.js | 4 + .../i18n/jquery.ui.datepicker-fr-CH.min.js | 4 + .../i18n/jquery.ui.datepicker-fr.min.js | 4 + .../i18n/jquery.ui.datepicker-gl.min.js | 4 + .../i18n/jquery.ui.datepicker-he.min.js | 4 + .../i18n/jquery.ui.datepicker-hi.min.js | 4 + .../i18n/jquery.ui.datepicker-hr.min.js | 4 + .../i18n/jquery.ui.datepicker-hu.min.js | 4 + .../i18n/jquery.ui.datepicker-hy.min.js | 4 + .../i18n/jquery.ui.datepicker-id.min.js | 4 + .../i18n/jquery.ui.datepicker-is.min.js | 4 + .../i18n/jquery.ui.datepicker-it.min.js | 4 + .../i18n/jquery.ui.datepicker-ja.min.js | 4 + .../i18n/jquery.ui.datepicker-ka.min.js | 4 + .../i18n/jquery.ui.datepicker-kk.min.js | 4 + .../i18n/jquery.ui.datepicker-km.min.js | 4 + .../i18n/jquery.ui.datepicker-ko.min.js | 4 + .../i18n/jquery.ui.datepicker-ky.min.js | 4 + .../i18n/jquery.ui.datepicker-lb.min.js | 4 + .../i18n/jquery.ui.datepicker-lt.min.js | 4 + .../i18n/jquery.ui.datepicker-lv.min.js | 4 + .../i18n/jquery.ui.datepicker-mk.min.js | 4 + .../i18n/jquery.ui.datepicker-ml.min.js | 4 + .../i18n/jquery.ui.datepicker-ms.min.js | 4 + .../i18n/jquery.ui.datepicker-nb.min.js | 4 + .../i18n/jquery.ui.datepicker-nl-BE.min.js | 4 + .../i18n/jquery.ui.datepicker-nl.min.js | 4 + .../i18n/jquery.ui.datepicker-nn.min.js | 4 + .../i18n/jquery.ui.datepicker-no.min.js | 4 + .../i18n/jquery.ui.datepicker-pl.min.js | 4 + .../i18n/jquery.ui.datepicker-pt-BR.min.js | 4 + .../i18n/jquery.ui.datepicker-pt.min.js | 4 + .../i18n/jquery.ui.datepicker-rm.min.js | 4 + .../i18n/jquery.ui.datepicker-ro.min.js | 4 + .../i18n/jquery.ui.datepicker-ru.min.js | 4 + .../i18n/jquery.ui.datepicker-sk.min.js | 4 + .../i18n/jquery.ui.datepicker-sl.min.js | 4 + .../i18n/jquery.ui.datepicker-sq.min.js | 4 + .../i18n/jquery.ui.datepicker-sr-SR.min.js | 4 + .../i18n/jquery.ui.datepicker-sr.min.js | 4 + .../i18n/jquery.ui.datepicker-sv.min.js | 4 + .../i18n/jquery.ui.datepicker-ta.min.js | 4 + .../i18n/jquery.ui.datepicker-th.min.js | 4 + .../i18n/jquery.ui.datepicker-tj.min.js | 4 + .../i18n/jquery.ui.datepicker-tr.min.js | 4 + .../i18n/jquery.ui.datepicker-uk.min.js | 4 + .../i18n/jquery.ui.datepicker-vi.min.js | 4 + .../i18n/jquery.ui.datepicker-zh-CN.min.js | 4 + .../i18n/jquery.ui.datepicker-zh-HK.min.js | 4 + .../i18n/jquery.ui.datepicker-zh-TW.min.js | 4 + .../jquery-ui/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../static/plugins/jquery-ui/jquery-ui.css | 1189 ++ .../static/plugins/jquery-ui/jquery-ui.js | 15040 ++++++++++++++++ .../plugins/jquery-ui/jquery-ui.min.css | 4 + .../static/plugins/jquery-ui/jquery-ui.min.js | 12 + .../static/plugins/jquery/jquery-2.1.0.min.js | 4 + .../plugins/justified-gallery/README.md | 14 + .../jquery.justifiedgallery.css | 73 + .../jquery.justifiedgallery.js | 258 + .../jquery.justifiedgallery.min.css | 17 + .../jquery.justifiedgallery.min.js | 24 + .../plugins/justified-gallery/loading.gif | Bin 0 -> 9427 bytes plugins/web_gui/static/plugins/moment/LICENSE | 22 + .../web_gui/static/plugins/moment/langs.js | 5841 ++++++ .../static/plugins/moment/langs.min.js | 3 + .../plugins/moment/moment-with-langs.js | 7768 ++++++++ .../plugins/moment/moment-with-langs.min.js | 9 + .../static/plugins/moment/moment.min.js | 6 + .../web_gui/static/plugins/morris/morris.js | 1767 ++ .../static/plugins/morris/morris.min.js | 1 + .../static/plugins/raphael/raphael-min.js | 11 + .../web_gui/static/plugins/raphael/raphael.js | 8111 +++++++++ .../web_gui/static/plugins/select2/LICENSE | 18 + .../web_gui/static/plugins/select2/README.md | 83 + .../web_gui/static/plugins/select2/bower.json | 8 + .../web_gui/static/plugins/select2/release.sh | 73 + .../plugins/select2/select2-bootstrap.css | 87 + .../plugins/select2/select2-spinner.gif | Bin 0 -> 1849 bytes .../static/plugins/select2/select2.css | 615 + .../plugins/select2/select2.jquery.json | 36 + .../web_gui/static/plugins/select2/select2.js | 3255 ++++ .../static/plugins/select2/select2.min.js | 22 + .../static/plugins/select2/select2.png | Bin 0 -> 613 bytes .../plugins/select2/select2_locale_ar.js | 17 + .../plugins/select2/select2_locale_bg.js | 17 + .../plugins/select2/select2_locale_ca.js | 17 + .../plugins/select2/select2_locale_cs.js | 49 + .../plugins/select2/select2_locale_da.js | 17 + .../plugins/select2/select2_locale_de.js | 15 + .../plugins/select2/select2_locale_el.js | 17 + .../select2/select2_locale_en.js.template | 17 + .../plugins/select2/select2_locale_es.js | 15 + .../plugins/select2/select2_locale_et.js | 17 + .../plugins/select2/select2_locale_eu.js | 43 + .../plugins/select2/select2_locale_fa.js | 17 + .../plugins/select2/select2_locale_fi.js | 28 + .../plugins/select2/select2_locale_fr.js | 15 + .../plugins/select2/select2_locale_gl.js | 43 + .../plugins/select2/select2_locale_he.js | 17 + .../plugins/select2/select2_locale_hr.js | 42 + .../plugins/select2/select2_locale_hu.js | 15 + .../plugins/select2/select2_locale_id.js | 17 + .../plugins/select2/select2_locale_is.js | 16 + .../plugins/select2/select2_locale_it.js | 15 + .../plugins/select2/select2_locale_ja.js | 15 + .../plugins/select2/select2_locale_ko.js | 17 + .../plugins/select2/select2_locale_lt.js | 29 + .../plugins/select2/select2_locale_lv.js | 16 + .../plugins/select2/select2_locale_mk.js | 17 + .../plugins/select2/select2_locale_ms.js | 17 + .../plugins/select2/select2_locale_nl.js | 15 + .../plugins/select2/select2_locale_no.js | 18 + .../plugins/select2/select2_locale_pl.js | 37 + .../plugins/select2/select2_locale_pt-BR.js | 15 + .../plugins/select2/select2_locale_pt-PT.js | 15 + .../plugins/select2/select2_locale_ro.js | 15 + .../plugins/select2/select2_locale_ru.js | 15 + .../plugins/select2/select2_locale_sk.js | 48 + .../plugins/select2/select2_locale_sv.js | 17 + .../plugins/select2/select2_locale_th.js | 17 + .../plugins/select2/select2_locale_tr.js | 17 + .../plugins/select2/select2_locale_ua.js | 17 + .../plugins/select2/select2_locale_vi.js | 18 + .../plugins/select2/select2_locale_zh-CN.js | 14 + .../plugins/select2/select2_locale_zh-TW.js | 14 + .../static/plugins/select2/select2x2.png | Bin 0 -> 845 bytes .../plugins/sparkline/jquery.sparkline.js | 3054 ++++ .../plugins/sparkline/jquery.sparkline.min.js | 5 + .../plugins/tinymce/jquery.tinymce.min.js | 1 + .../static/plugins/tinymce/langs/readme.md | 3 + .../static/plugins/tinymce/license.txt | 504 + .../tinymce/plugins/advlist/plugin.min.js | 1 + .../tinymce/plugins/anchor/plugin.min.js | 1 + .../tinymce/plugins/autolink/plugin.min.js | 1 + .../tinymce/plugins/autoresize/plugin.min.js | 1 + .../tinymce/plugins/autosave/plugin.min.js | 1 + .../tinymce/plugins/bbcode/plugin.min.js | 1 + .../tinymce/plugins/charmap/plugin.min.js | 1 + .../tinymce/plugins/code/plugin.min.js | 1 + .../tinymce/plugins/contextmenu/plugin.min.js | 1 + .../plugins/directionality/plugin.min.js | 1 + .../plugins/emoticons/img/smiley-cool.gif | Bin 0 -> 354 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 0 -> 329 bytes .../emoticons/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 0 -> 342 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 0 -> 343 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 0 -> 323 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 0 -> 344 bytes .../emoticons/img/smiley-surprised.gif | Bin 0 -> 338 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../emoticons/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 0 -> 350 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 0 -> 336 bytes .../tinymce/plugins/emoticons/plugin.min.js | 1 + .../tinymce/plugins/example/plugin.min.js | 1 + .../plugins/example_dependency/plugin.min.js | 1 + .../tinymce/plugins/fullpage/plugin.min.js | 1 + .../tinymce/plugins/fullscreen/plugin.min.js | 1 + .../plugins/tinymce/plugins/hr/plugin.min.js | 1 + .../tinymce/plugins/image/plugin.min.js | 1 + .../tinymce/plugins/importcss/plugin.min.js | 1 + .../plugins/insertdatetime/plugin.min.js | 1 + .../tinymce/plugins/layer/plugin.min.js | 1 + .../plugins/legacyoutput/plugin.min.js | 1 + .../tinymce/plugins/link/plugin.min.js | 1 + .../tinymce/plugins/lists/plugin.min.js | 1 + .../tinymce/plugins/media/moxieplayer.swf | Bin 0 -> 20017 bytes .../tinymce/plugins/media/plugin.min.js | 1 + .../tinymce/plugins/nonbreaking/plugin.min.js | 1 + .../tinymce/plugins/noneditable/plugin.min.js | 1 + .../tinymce/plugins/pagebreak/plugin.min.js | 1 + .../tinymce/plugins/paste/plugin.min.js | 1 + .../tinymce/plugins/preview/plugin.min.js | 1 + .../tinymce/plugins/print/plugin.min.js | 1 + .../tinymce/plugins/save/plugin.min.js | 1 + .../plugins/searchreplace/plugin.min.js | 1 + .../plugins/spellchecker/plugin.min.js | 1 + .../tinymce/plugins/tabfocus/plugin.min.js | 1 + .../tinymce/plugins/table/plugin.min.js | 1 + .../tinymce/plugins/template/plugin.min.js | 1 + .../tinymce/plugins/textcolor/plugin.min.js | 1 + .../plugins/visualblocks/css/visualblocks.css | 128 + .../plugins/visualblocks/plugin.min.js | 1 + .../tinymce/plugins/visualchars/plugin.min.js | 1 + .../tinymce/plugins/wordcount/plugin.min.js | 1 + .../skins/lightgray/content.inline.min.css | 1 + .../tinymce/skins/lightgray/content.min.css | 1 + .../tinymce/skins/lightgray/fonts/readme.md | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 8348 bytes .../skins/lightgray/fonts/tinymce-small.svg | 175 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 8164 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 8340 bytes .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 8276 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 153 + .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 8112 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 8408 bytes .../tinymce/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../tinymce/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../tinymce/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../tinymce/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../tinymce/skins/lightgray/skin.ie7.min.css | 1 + .../tinymce/skins/lightgray/skin.min.css | 1 + .../tinymce/themes/modern/theme.min.js | 1 + .../static/plugins/tinymce/tinymce.min.js | 9 + .../web_gui/static/plugins/xcharts/LICENSE | 7 + .../web_gui/static/plugins/xcharts/README.md | 17 + .../static/plugins/xcharts/xcharts.css | 283 + .../web_gui/static/plugins/xcharts/xcharts.js | 1158 ++ .../static/plugins/xcharts/xcharts.min.css | 1 + .../static/plugins/xcharts/xcharts.min.js | 5 + plugins/web_gui/static/restart.html | 37 + plugins/web_gui/web_gui.py | 125 +- plugins/web_gui/web_gui_plugin.py | 24 +- 452 files changed, 124975 insertions(+), 1052 deletions(-) create mode 100644 plugins/web_gui/static/ajax/dashboard.html create mode 100644 plugins/web_gui/static/ajax/playeredit.html create mode 100644 plugins/web_gui/static/ajax/playereditnew.html create mode 100644 plugins/web_gui/static/ajax/playerlist.html create mode 100644 plugins/web_gui/static/ajax/playerlistonline.html create mode 100644 plugins/web_gui/static/ajax/playersonline.html delete mode 100644 plugins/web_gui/static/css/PixelGreen.css create mode 100644 plugins/web_gui/static/css/footer.css create mode 100644 plugins/web_gui/static/css/style.css create mode 100644 plugins/web_gui/static/css/style.min.css create mode 100644 plugins/web_gui/static/fonts/glyphicons-halflings-regular.eot create mode 100644 plugins/web_gui/static/fonts/glyphicons-halflings-regular.svg create mode 100644 plugins/web_gui/static/fonts/glyphicons-halflings-regular.ttf create mode 100644 plugins/web_gui/static/fonts/glyphicons-halflings-regular.woff create mode 100644 plugins/web_gui/static/images/960_logo.png create mode 100644 plugins/web_gui/static/img/chevron-left.png create mode 100644 plugins/web_gui/static/img/chevron-right.png create mode 100644 plugins/web_gui/static/img/devoops_getdata.gif create mode 100644 plugins/web_gui/static/img/devoops_pattern_b10.png create mode 100644 plugins/web_gui/static/img/logo-200.png create mode 100644 plugins/web_gui/static/img/logo.png create mode 100644 plugins/web_gui/static/img/sort-asc.png create mode 100644 plugins/web_gui/static/img/sort-desc.png create mode 100644 plugins/web_gui/static/img/sort.png create mode 100644 plugins/web_gui/static/img/times.png create mode 100644 plugins/web_gui/static/img/ui-accordion-down.png create mode 100644 plugins/web_gui/static/img/ui-accordion-right.png create mode 100644 plugins/web_gui/static/img/ui-left.png create mode 100644 plugins/web_gui/static/img/ui-right.png create mode 100644 plugins/web_gui/static/js/devoops.js create mode 100644 plugins/web_gui/static/js/devoops.min.js create mode 100644 plugins/web_gui/static/js/noty/jquery.noty.js create mode 100644 plugins/web_gui/static/js/noty/layouts/bottom.js create mode 100644 plugins/web_gui/static/js/noty/layouts/bottomCenter.js create mode 100644 plugins/web_gui/static/js/noty/layouts/bottomLeft.js create mode 100644 plugins/web_gui/static/js/noty/layouts/bottomRight.js create mode 100644 plugins/web_gui/static/js/noty/layouts/center.js create mode 100644 plugins/web_gui/static/js/noty/layouts/centerLeft.js create mode 100644 plugins/web_gui/static/js/noty/layouts/centerRight.js create mode 100644 plugins/web_gui/static/js/noty/layouts/inline.js create mode 100644 plugins/web_gui/static/js/noty/layouts/top.js create mode 100644 plugins/web_gui/static/js/noty/layouts/topCenter.js create mode 100644 plugins/web_gui/static/js/noty/layouts/topLeft.js create mode 100644 plugins/web_gui/static/js/noty/layouts/topRight.js create mode 100644 plugins/web_gui/static/js/noty/packaged/jquery.noty.packaged.js create mode 100644 plugins/web_gui/static/js/noty/packaged/jquery.noty.packaged.min.js create mode 100644 plugins/web_gui/static/js/noty/promise.js create mode 100644 plugins/web_gui/static/js/noty/themes/default.js create mode 100644 plugins/web_gui/static/js/webgui.chat.js create mode 100644 plugins/web_gui/static/js/webgui.general.js delete mode 100644 plugins/web_gui/static/playeredit.html delete mode 100644 plugins/web_gui/static/playerlist.html create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap-theme.css create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap-theme.css.map create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap-theme.min.css create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap.css create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap.css.map create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap.js create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap.min.css create mode 100644 plugins/web_gui/static/plugins/bootstrap/bootstrap.min.js create mode 100644 plugins/web_gui/static/plugins/bootstrapvalidator/bootstrapValidator.css create mode 100644 plugins/web_gui/static/plugins/bootstrapvalidator/bootstrapValidator.js create mode 100644 plugins/web_gui/static/plugins/bootstrapvalidator/bootstrapValidator.min.css create mode 100644 plugins/web_gui/static/plugins/bootstrapvalidator/bootstrapValidator.min.js create mode 100644 plugins/web_gui/static/plugins/bootstrapvalidator/bootstrapValidator.scss create mode 100644 plugins/web_gui/static/plugins/d3/LICENSE create mode 100644 plugins/web_gui/static/plugins/d3/d3.v3.js create mode 100644 plugins/web_gui/static/plugins/d3/d3.v3.min.js create mode 100644 plugins/web_gui/static/plugins/datatables/TableTools.js create mode 100644 plugins/web_gui/static/plugins/datatables/TableTools_orig.js create mode 100644 plugins/web_gui/static/plugins/datatables/ZeroClipboard.js create mode 100644 plugins/web_gui/static/plugins/datatables/copy_csv_xls_pdf.swf create mode 100644 plugins/web_gui/static/plugins/datatables/dataTables.bootstrap.js create mode 100644 plugins/web_gui/static/plugins/datatables/jquery.dataTables.js create mode 100644 plugins/web_gui/static/plugins/fancybox/blank.gif create mode 100644 plugins/web_gui/static/plugins/fancybox/fancybox_loading.gif create mode 100644 plugins/web_gui/static/plugins/fancybox/fancybox_loading@2x.gif create mode 100644 plugins/web_gui/static/plugins/fancybox/fancybox_overlay.png create mode 100644 plugins/web_gui/static/plugins/fancybox/fancybox_sprite.png create mode 100644 plugins/web_gui/static/plugins/fancybox/fancybox_sprite@2x.png create mode 100644 plugins/web_gui/static/plugins/fancybox/helpers/fancybox_buttons.png create mode 100644 plugins/web_gui/static/plugins/fancybox/helpers/jquery.fancybox-buttons.css create mode 100644 plugins/web_gui/static/plugins/fancybox/helpers/jquery.fancybox-buttons.js create mode 100644 plugins/web_gui/static/plugins/fancybox/helpers/jquery.fancybox-media.js create mode 100644 plugins/web_gui/static/plugins/fancybox/helpers/jquery.fancybox-thumbs.css create mode 100644 plugins/web_gui/static/plugins/fancybox/helpers/jquery.fancybox-thumbs.js create mode 100644 plugins/web_gui/static/plugins/fancybox/jquery.fancybox.css create mode 100644 plugins/web_gui/static/plugins/fancybox/jquery.fancybox.js create mode 100644 plugins/web_gui/static/plugins/fancybox/jquery.fancybox.pack.js create mode 100644 plugins/web_gui/static/plugins/fineuploader/LICENSE create mode 100644 plugins/web_gui/static/plugins/fineuploader/edit.gif create mode 100644 plugins/web_gui/static/plugins/fineuploader/fineuploader-4.3.1.css create mode 100644 plugins/web_gui/static/plugins/fineuploader/fineuploader-4.3.1.min.css create mode 100644 plugins/web_gui/static/plugins/fineuploader/iframe.xss.response-4.3.1.js create mode 100644 plugins/web_gui/static/plugins/fineuploader/jquery.fineuploader-4.3.1.js create mode 100644 plugins/web_gui/static/plugins/fineuploader/jquery.fineuploader-4.3.1.min.js create mode 100644 plugins/web_gui/static/plugins/fineuploader/loading.gif create mode 100644 plugins/web_gui/static/plugins/fineuploader/processing.gif create mode 100644 plugins/web_gui/static/plugins/flot/LICENSE.txt create mode 100644 plugins/web_gui/static/plugins/flot/jquery.flot.js create mode 100644 plugins/web_gui/static/plugins/flot/jquery.flot.resize.js create mode 100644 plugins/web_gui/static/plugins/flot/jquery.flot.time.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/fullcalendar.css create mode 100644 plugins/web_gui/static/plugins/fullcalendar/fullcalendar.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/fullcalendar.min.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/fullcalendar.print.css create mode 100644 plugins/web_gui/static/plugins/fullcalendar/gcal.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/all.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ar-ma.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ar.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/bg.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ca.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/cs.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/da.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/de.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/el.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/en-au.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/en-ca.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/en-gb.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/es.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/fa.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/fi.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/fr-ca.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/fr.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/hi.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/hr.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/hu.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/it.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ja.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ko.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/lt.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/lv.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/nl.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/pl.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/pt-br.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/pt.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ro.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/ru.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/sk.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/sl.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/sv.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/th.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/tr.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/uk.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/zh-cn.js create mode 100644 plugins/web_gui/static/plugins/fullcalendar/lang/zh-tw.js create mode 100644 plugins/web_gui/static/plugins/jQuery-Knob/LICENSE create mode 100644 plugins/web_gui/static/plugins/jQuery-Knob/jquery.knob.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/LICENSE-MIT create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-af.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-am.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-bg.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-ca.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-cs.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-da.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-de.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-el.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-es.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-et.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-eu.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-fi.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-fr.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-gl.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-he.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-hr.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-hu.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-id.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-it.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-ja.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-ko.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-lt.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-nl.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-no.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-pl.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-pt-BR.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-pt.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-ro.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-ru.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-sk.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-sr-RS.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-sr-YU.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-sv.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-th.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-tr.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-uk.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-vi.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-zh-CN.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/i18n/jquery-ui-timepicker-zh-TW.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/index.html create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/jquery-ui-sliderAccess.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.css create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.min.css create mode 100644 plugins/web_gui/static/plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery-ui-i18n.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-af.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ar-DZ.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ar.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-az.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-be.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-bg.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-bs.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ca.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-cs.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-cy-GB.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-da.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-de.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-el.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-en-AU.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-en-GB.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-en-NZ.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-eo.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-es.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-et.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-eu.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-fa.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-fi.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-fo.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-fr-CA.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-fr-CH.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-fr.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-gl.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-he.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-hi.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-hr.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-hu.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-hy.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-id.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-is.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-it.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ja.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ka.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-kk.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-km.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ko.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ky.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-lb.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-lt.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-lv.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-mk.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ml.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ms.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-nb.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-nl-BE.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-nl.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-nn.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-no.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-pl.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-pt-BR.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-pt.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-rm.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ro.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ru.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-sk.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-sl.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-sq.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-sr-SR.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-sr.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-sv.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-ta.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-th.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-tj.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-tr.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-uk.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-vi.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-zh-CN.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-zh-HK.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/i18n/jquery.ui.datepicker-zh-TW.min.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/animated-overlay.gif create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-icons_222222_256x240.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-icons_2e83ff_256x240.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-icons_454545_256x240.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-icons_888888_256x240.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/images/ui-icons_cd0a0a_256x240.png create mode 100644 plugins/web_gui/static/plugins/jquery-ui/jquery-ui.css create mode 100644 plugins/web_gui/static/plugins/jquery-ui/jquery-ui.js create mode 100644 plugins/web_gui/static/plugins/jquery-ui/jquery-ui.min.css create mode 100644 plugins/web_gui/static/plugins/jquery-ui/jquery-ui.min.js create mode 100644 plugins/web_gui/static/plugins/jquery/jquery-2.1.0.min.js create mode 100644 plugins/web_gui/static/plugins/justified-gallery/README.md create mode 100644 plugins/web_gui/static/plugins/justified-gallery/jquery.justifiedgallery.css create mode 100644 plugins/web_gui/static/plugins/justified-gallery/jquery.justifiedgallery.js create mode 100644 plugins/web_gui/static/plugins/justified-gallery/jquery.justifiedgallery.min.css create mode 100644 plugins/web_gui/static/plugins/justified-gallery/jquery.justifiedgallery.min.js create mode 100644 plugins/web_gui/static/plugins/justified-gallery/loading.gif create mode 100644 plugins/web_gui/static/plugins/moment/LICENSE create mode 100644 plugins/web_gui/static/plugins/moment/langs.js create mode 100644 plugins/web_gui/static/plugins/moment/langs.min.js create mode 100644 plugins/web_gui/static/plugins/moment/moment-with-langs.js create mode 100644 plugins/web_gui/static/plugins/moment/moment-with-langs.min.js create mode 100644 plugins/web_gui/static/plugins/moment/moment.min.js create mode 100644 plugins/web_gui/static/plugins/morris/morris.js create mode 100644 plugins/web_gui/static/plugins/morris/morris.min.js create mode 100644 plugins/web_gui/static/plugins/raphael/raphael-min.js create mode 100644 plugins/web_gui/static/plugins/raphael/raphael.js create mode 100644 plugins/web_gui/static/plugins/select2/LICENSE create mode 100644 plugins/web_gui/static/plugins/select2/README.md create mode 100644 plugins/web_gui/static/plugins/select2/bower.json create mode 100644 plugins/web_gui/static/plugins/select2/release.sh create mode 100644 plugins/web_gui/static/plugins/select2/select2-bootstrap.css create mode 100644 plugins/web_gui/static/plugins/select2/select2-spinner.gif create mode 100644 plugins/web_gui/static/plugins/select2/select2.css create mode 100644 plugins/web_gui/static/plugins/select2/select2.jquery.json create mode 100644 plugins/web_gui/static/plugins/select2/select2.js create mode 100644 plugins/web_gui/static/plugins/select2/select2.min.js create mode 100644 plugins/web_gui/static/plugins/select2/select2.png create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ar.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_bg.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ca.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_cs.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_da.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_de.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_el.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_en.js.template create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_es.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_et.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_eu.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_fa.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_fi.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_fr.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_gl.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_he.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_hr.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_hu.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_id.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_is.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_it.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ja.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ko.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_lt.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_lv.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_mk.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ms.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_nl.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_no.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_pl.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_pt-BR.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_pt-PT.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ro.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ru.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_sk.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_sv.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_th.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_tr.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_ua.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_vi.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_zh-CN.js create mode 100644 plugins/web_gui/static/plugins/select2/select2_locale_zh-TW.js create mode 100644 plugins/web_gui/static/plugins/select2/select2x2.png create mode 100644 plugins/web_gui/static/plugins/sparkline/jquery.sparkline.js create mode 100644 plugins/web_gui/static/plugins/sparkline/jquery.sparkline.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/jquery.tinymce.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/langs/readme.md create mode 100644 plugins/web_gui/static/plugins/tinymce/license.txt create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/advlist/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/anchor/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/autolink/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/autoresize/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/autosave/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/bbcode/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/charmap/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/code/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/contextmenu/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/directionality/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-cool.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-cry.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-embarassed.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-frown.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-innocent.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-kiss.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-laughing.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-money-mouth.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-sealed.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-smile.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-surprised.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-tongue-out.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-undecided.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-wink.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/img/smiley-yell.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/emoticons/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/example/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/example_dependency/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/fullpage/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/hr/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/image/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/importcss/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/layer/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/legacyoutput/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/link/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/lists/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/media/moxieplayer.swf create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/media/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/noneditable/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/paste/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/preview/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/print/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/save/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/spellchecker/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/tabfocus/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/table/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/template/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/textcolor/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/visualblocks/css/visualblocks.css create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/visualchars/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/plugins/wordcount/plugin.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/content.inline.min.css create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/content.min.css create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/readme.md create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce-small.eot create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce-small.svg create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce-small.woff create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce.eot create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce.svg create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce.ttf create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/fonts/tinymce.woff create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/img/anchor.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/img/loader.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/img/object.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/img/trans.gif create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/skin.ie7.min.css create mode 100644 plugins/web_gui/static/plugins/tinymce/skins/lightgray/skin.min.css create mode 100644 plugins/web_gui/static/plugins/tinymce/themes/modern/theme.min.js create mode 100644 plugins/web_gui/static/plugins/tinymce/tinymce.min.js create mode 100644 plugins/web_gui/static/plugins/xcharts/LICENSE create mode 100644 plugins/web_gui/static/plugins/xcharts/README.md create mode 100644 plugins/web_gui/static/plugins/xcharts/xcharts.css create mode 100644 plugins/web_gui/static/plugins/xcharts/xcharts.js create mode 100644 plugins/web_gui/static/plugins/xcharts/xcharts.min.css create mode 100644 plugins/web_gui/static/plugins/xcharts/xcharts.min.js create mode 100644 plugins/web_gui/static/restart.html diff --git a/plugins/web_gui/__init__.py b/plugins/web_gui/__init__.py index 6089284..c662274 100644 --- a/plugins/web_gui/__init__.py +++ b/plugins/web_gui/__init__.py @@ -1 +1 @@ -from web_gui_plugin import WebGuiPlugin \ No newline at end of file +from .web_gui_plugin import WebGuiPlugin \ No newline at end of file diff --git a/plugins/web_gui/static/adminstop.html b/plugins/web_gui/static/adminstop.html index 574947c..d099896 100644 --- a/plugins/web_gui/static/adminstop.html +++ b/plugins/web_gui/static/adminstop.html @@ -1,88 +1,37 @@ - - - - - - - - - - - - - - - -StarryPy WebGUI - - - + + + + + y + + + + + + + + + + + - -
    - - - -
    - - -
    - - - -
    - -
    - +
    +
    +
    +
    +
    + {% if handler.error_message == "" %} +

    Server is being stopped!

    + {% else %} +

    {{ handler.error_message }}

    + {% end %} +
    - -
    - - -
    - - - - - - +
    - - + \ No newline at end of file diff --git a/plugins/web_gui/static/ajax/dashboard.html b/plugins/web_gui/static/ajax/dashboard.html new file mode 100644 index 0000000..11f331e --- /dev/null +++ b/plugins/web_gui/static/ajax/dashboard.html @@ -0,0 +1,91 @@ + +
    + +
    +
    +
    +
    +
    +
    + + Chat +
    + +
    +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    +
    + + Online Players +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + + Administration +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/plugins/web_gui/static/ajax/playeredit.html b/plugins/web_gui/static/ajax/playeredit.html new file mode 100644 index 0000000..f0a2506 --- /dev/null +++ b/plugins/web_gui/static/ajax/playeredit.html @@ -0,0 +1,81 @@ +
    + +
    +
    +
    +

    Edit {{ handler.edit_player.name }}

    +
    +
    + +
    + + {% if handler.error_message != "" %} + {{ handler.error_message }} + {% end %} + + + + + + + + + + + + + + + + + + + + + + + + + +
    UUID{{ handler.edit_player.uuid }}
    Access Level + +
    IP{{ handler.edit_player.ip }}
    Last Seen{{ handler.edit_player.last_seen }}
    planet{{ handler.edit_player.planet }}
    On Ship{{ handler.edit_player.on_ship }}
    + {% raw xsrf_form_html() %} + +
    + +
    +
    +
    +
    +
    + diff --git a/plugins/web_gui/static/ajax/playereditnew.html b/plugins/web_gui/static/ajax/playereditnew.html new file mode 100644 index 0000000..3b00e0b --- /dev/null +++ b/plugins/web_gui/static/ajax/playereditnew.html @@ -0,0 +1,85 @@ +
    + +
    +
    +
    +
    +
    +
    + + Basic table +
    + +
    +
    +
    +

    Edit {{ handler.edit_player.name }}

    + +
    + + {% if handler.error_message != "" %} + {{ handler.error_message }} + {% end %} + + + + + + + + + + + + + + + + + + + + + + + + + +
    UUID{{ handler.edit_player.uuid }}
    Access Level + +
    IP{{ handler.edit_player.ip }}
    Last Seen{{ handler.edit_player.last_seen }}
    planet{{ handler.edit_player.planet }}
    On Ship{{ handler.edit_player.on_ship }}
    + {% raw xsrf_form_html() %} + +
    +
    +
    +
    +
    +
    + diff --git a/plugins/web_gui/static/ajax/playerlist.html b/plugins/web_gui/static/ajax/playerlist.html new file mode 100644 index 0000000..aaa5eac --- /dev/null +++ b/plugins/web_gui/static/ajax/playerlist.html @@ -0,0 +1,41 @@ +
    + +
    +
    +
    + + + + + + + + + + + {% for player in handler.playerlist %} + + {% set iconcolour = "#54ae86" if player.logged_in else "#D15E5E" %} + + + + + + {% end %} + +
    NamePlanetAccess LevelLast Seen
    {{ player.name }} {{ player.planet }}{{ player.access_level }}{{ str(player.last_seen).rpartition('.')[0] }}
    +
    +
    + + diff --git a/plugins/web_gui/static/ajax/playerlistonline.html b/plugins/web_gui/static/ajax/playerlistonline.html new file mode 100644 index 0000000..bbc833a --- /dev/null +++ b/plugins/web_gui/static/ajax/playerlistonline.html @@ -0,0 +1,40 @@ + +
    +
    + + + + + + + + + + + {% for player in handler.playerlistonline %} + + + + + + + {% end %} + +
    NamePlanetAccess LevelLast Seen
    {{ player.name }}{{ player.planet }}{{ player.access_level }}{{ str(player.last_seen).rpartition('.')[0] }}
    +
    +
    + + diff --git a/plugins/web_gui/static/ajax/playersonline.html b/plugins/web_gui/static/ajax/playersonline.html new file mode 100644 index 0000000..ee6b4e9 --- /dev/null +++ b/plugins/web_gui/static/ajax/playersonline.html @@ -0,0 +1,3 @@ + {% for player in handler.playerlistonline %} + {{ player.name }}
    + {% end %} \ No newline at end of file diff --git a/plugins/web_gui/static/css/PixelGreen.css b/plugins/web_gui/static/css/PixelGreen.css deleted file mode 100644 index c4ff073..0000000 --- a/plugins/web_gui/static/css/PixelGreen.css +++ /dev/null @@ -1,428 +0,0 @@ -/* ---------------------------------------------------- - - AUTHOR : Erwin Aligam - WEBSITE : http://www.styleshout.com/ - TEMPLATE NAME : PixelGreen - TEMPLATE CODE : S-0010 - VERSION : 1.3 - LAST MODIFIED : January 19, 2010 - -------------------------------------------------------- */ - -/* ---------------------------------------------------- - HTML ELEMENTS -------------------------------------------------------- */ - -/* top elements */ -* { padding: 0; margin: 0; outline: 0; } - -body { - margin: 0; padding: 0; - font: normal 73%/1.6em 'Trebuchet MS', Tahoma, sans-serif; - color: #555; - background: #FFF url(../images/bg.jpg) repeat-x; - text-align: center; -} - -/* links */ -a:link, a:visited { background: inherit; color: #72A545; text-decoration: none; } -a:hover { background: inherit; color: #006699; text-decoration: underline; } - -/* headers */ -h1, h2, h3 { font: bold 1em 'Trebuchet MS', Tahoma, Sans-serif; } -h1 { font-size: 1.4em; color: #65944A; } -h2 { font-size: 1.2em; text-transform: uppercase; } -h3 { font-size: 1.2em; } - -p, h1, h2, h3 { - margin: 10px 15px; -} -ul, ol { - margin: 10px 30px; - padding: 0 15px; -} - -/* images */ -img { - border: 1px solid #DADADA; - padding: 8px; - background: #FAFAFA; -} -img.float-right { - margin: 5px 0px 5px 15px; -} -img.float-left { - margin: 5px 15px 5px 0px; -} - -code { - margin: 5px 0; - padding: 10px; - text-align: left; - display: block; - overflow: auto; - font: 500 1em/1.5em 'Lucida Console', 'courier new', monospace; - /* white-space: pre; */ - background: #FAFAFA; - border: 1px solid #f2f2f2; - border-left: 3px solid #72A545; -} -acronym { - cursor: help; - border-bottom: 1px solid #777; -} -blockquote { - margin: 15px; padding: 0 0 0 20px; - background-color: #FAFAFA; - background-position: 8px 10px; - border: 1px solid #f2f2f2; - border-left: 3px solid #72A545; - font: bold 1.2em/1.5em "Trebuchet MS", Tahoma, sans-serif; - color: #666666; -} - -/* start - table */ -table { - border-collapse: collapse; - margin: 10px 15px; -} -th strong { - color: #fff; -} -th { - background: #74A846; - height: 29px; - padding-left: 11px; - padding-right: 11px; - color: #fff; - text-align: left; - border-left: 1px solid #B6D59A; - border-bottom: solid 2px #FFF; -} -tr { - height: 30px; -} -td { - padding-left: 11px; - padding-right: 11px; - /* border-left: 1px solid #FFE1C3; */ - border-left: 1px solid #FFF; - border-bottom: solid 1px #ffffff; -} -td.first,th.first { - border-left: 0px; -} -tr.row-a { - background: #F8F8F8; -} -tr.row-b { - background: #EFEFEF; -} -/* end - table */ - -/* form elements */ -form { - margin:10px 15px; padding: 0; - border: 1px solid #f2f2f2; - background-color: #FAFAFA; -} -label { - display:block; - font-weight:bold; - margin:5px 0; -} -input { - padding: 2px; - border:1px solid #eee; - font: normal 1em "Trebuchet MS", Tahoma, sans-serif; - color:#777; -} -textarea { - width:400px; - padding:2px; - font: normal 1em "Trebuchet MS", Tahoma, sans-serif; - border:1px solid #eee; - height:100px; - display:block; - color:#777; -} -input.button { - margin: 0; - font: bold 1em Arial, Sans-serif; - background: #FFF url(../images/gradientbg.jpg) repeat-x; - padding: 2px 3px; - color: #333; - border: 1px solid #DADADA; -} - -/* search form */ -.searchform { - background-color: transparent; - border: none; margin: 0; padding: 0; -} -.searchform p { margin: 10px; padding: 0; } -.searchform input.textbox { - width: 130px; - color: #333; - height: 20px; - padding: 2px; - vertical-align: top; -} -.searchform input.button { - font: bold 12px Arial, Sans-serif; - color: #333; - width: 60px; - height: 26px; - border: 1px solid #DADADA; - padding: 3px 5px; - vertical-align: top; -} - -/* ---------------------------- - LAYOUT -------------------------------- */ - -#header-content, #content, #footer-content { - width: 1000px; -} - -/* header */ -#header { - height: 100px; - text-align: left; -} -#header-content { - margin: 0 auto; padding: 0; - position: relative; -} -#header-content h1#logo { - position: absolute; - font: bold 45px 'Trebuchet MS', Sans-serif; - letter-spacing: -2px; - color: #FFF; - margin: 0; padding: 0; - - /* change the values of left and top to adjust the position of the logo */ - top: 0; left: 0px; -} -#header-content h1#logo a { - text-decoration: none; - color: #FFF; -} -#header-content #slogan { - position: absolute; - font: bold 12px 'Trebuchet Ms', Sans-serif; - text-transform: none; - color: #FFF; - margin: 0; padding: 0; - - /* change the values of left and top to adjust the position of the slogan */ - top: 55px; left: 40px; -} - -/* header menu */ -#header-content ul { - position: absolute; - right: -5px; top: 15px; - font: bolder 1.3em 'Trebuchet MS', sans-serif; - color: #FFF; - list-style: none; - margin: 0; padding: 0; -} -#header-content li { - display: inline; -} -#header-content li a { - float: left; - display: block; - padding: 3px 12px; - color: #FFF; - background-color: #333; - text-decoration: none; - border-right: 1px solid #272727; -} -#header-content li a:hover { - background: #65944A; - color: #FFF; -} -#header-content li a#current { - background: #65944A; - color: #FFF; -} - -/* header photo */ -.headerphoto { - margin: 0 auto; - width: 770px; - height: 200px; - padding: 15px 10px 10px 10px; - background: #FFF url(../images/headerphoto.jpg) no-repeat center; -} - -/* content */ -#content-wrap { - clear: both; - float: left; - width: 100%; -} -#content { - text-align: left; - padding: 0; - margin: 0 auto; -} - -/* sidebar */ -#sidebar { - float: right; - width: 30%; - margin: 0 0 10px 0; padding: 0; -} -#sidebar h1 { - padding: 10px 0px 5px 10px; - margin: 0; - font: bold 1.3em 'Trebuchet MS', Tahoma, Sans-serif; -} -.sidebox { - background: #F5F5F5; - border: 1px solid #EFEDED; - margin-bottom: 10px; -} - -/* sidebar menu */ -#sidebar ul.sidemenu { - list-style:none; - margin: 10px 0 15px 0; - padding: 0; - background: #F2F2F2; -} -#sidebar ul.sidemenu li { - padding: 0px 10px; -} -#sidebar ul.sidemenu a { - display:block; - font-weight:normal; - color: #333; - height: 1.5em; - padding:.3em 0 .3em 15px; - line-height: 1.5em; - border-bottom: 1px dashed #D4D4D4; - text-decoration:none; -} -#sidebar ul.sidemenu a.top{ - border-top: 1px dashed #D4D4D4; -} -#sidebar ul.sidemenu a:hover { - padding: .3em 0 .3em 10px; - border-left: 5px solid #65944A; - color: #65944A; -} - -/* main */ -#main { - float: left; - width: 68%; - margin: 0 0 10px 0; padding: 0; -} -#main h1 { - padding: 10px 0px 0px 5px; - margin: 0 0 0 10px; - border-bottom: 1px solid #f2f2f2; - font: normal 1.8em 'Trebuchet MS', Tahoma, Sans-serif; -} -#main ul li { - list-style-image: url(../images/bullet.gif); -} - -.post { - margin: 0; padding: 0; - background: #FFF url(../images/gradientbg.jpg) repeat-x; - border: 1px solid #EFEDED; -} -.post .post-footer { - background-color: #FAFAFA; - border: 1px solid #f2f2f2; - padding: 5px; margin-top: 20px; - font-size: 95%; -} -.post .post-footer .date { - background: url(../images/'clock.gif') no-repeat 0 center; - padding-left: 20px; margin: 0 10px 0 5px; -} -.post .post-footer .comments { - background: url(../images/'comment.gif') no-repeat 0 center; - padding-left: 20px; margin: 0 10px 0 5px; -} -.post .post-footer .readmore { - background: url(../images/'page.gif') no-repeat 0 center; - padding-left: 20px; margin: 0 10px 0 5px; -} - -/* footer */ -#footer { - clear: both; - margin: 0; padding: 0; - font: normal .95em/1.6em 'Trebuchet MS', Tahoma, Arial, sans-serif; - text-align: left; -} - -#footer h1, #footer p { margin-left: 0; } - -#footer-content { - border-top: 1px solid #EAEAEA; - margin: 0 auto; - padding-left: 15px; -} -#footer-content a { - text-decoration: none; -} -#footer-content a:hover { - color: #333; -} - -/* footer list */ -#footer-content ul.flist { - list-style: none; - margin: 0; padding: 0; - border-top: 1px solid #f2f2f2; -} -#footer-content ul.flist li { - border-bottom: 1px solid #f2f2f2; -} -#footer-content ul.flist li a:link, -#footer-content ul.flist li a:visited { - color: #555; - display: block; - font-weight: normal; - padding: 5px 0 ; - width: 98%; -} -#footer-content ul.flist li a:hover { - text-decoration: none; - color: #222; -} - - -#footer-content .col { - width: 240px; - padding: 0 5px 30px 0; -} -#footer-content .col2 { - width: 230px; - padding: 0 0 30px 0; -} -#footer-content .space-sep { - margin-right: 20px; -} - -/* alignment classes */ -.float-left { float: left; } -.float-right { float: right; } -.align-left { text-align: left; } -.align-right { text-align: right; } - -/* additional classes */ -.clear { clear: both; } -.gray { color: #BFBFBF; } - - - diff --git a/plugins/web_gui/static/css/footer.css b/plugins/web_gui/static/css/footer.css new file mode 100644 index 0000000..7ce6adb --- /dev/null +++ b/plugins/web_gui/static/css/footer.css @@ -0,0 +1,6 @@ +#footer { + position: fixed; + bottom: 0; + padding-left: 10 px; + padding-bottom: 5px; +} \ No newline at end of file diff --git a/plugins/web_gui/static/css/style.css b/plugins/web_gui/static/css/style.css new file mode 100644 index 0000000..e664583 --- /dev/null +++ b/plugins/web_gui/static/css/style.css @@ -0,0 +1,2366 @@ +body { + color: #525252; + background: #6AA6D6 url(../img/devoops_pattern_b10.png) 0 0 repeat; +} +.body-expanded, .modal-open { + overflow-y:hidden; + margin-right: 15px; +} +.body-expanded .expanded-panel, .fancybox-margin .expanded-panel, .modal-open .expanded-panel { + margin-right: 15px; +} +.body-screensaver { + overflow: hidden; +} +h1, .h1, h2, .h2, h3, .h3 { + margin:0; +} +#logo { + position:relative; + background: #525252 url(../img/devoops_pattern_b10.png) 0 0 repeat; +} +#logo a { + color: #fff; + font-family: 'Righteous', cursive; + display: block; + font-size: 20px; + line-height: 50px; + background: url(../img/logo.png) right 42px no-repeat; + -webkit-transition: 0.5s; + -moz-transition: 0.5s; + -o-transition: 0.5s; + transition: 0.5s; +} +#logo a:hover { + background-position: right 25px; + text-decoration: none; +} +.navbar { + margin: 0; + border: 0; + position: fixed; + top:0; + left: 0; + width:100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + box-shadow: 0 1px 2px #272727; + z-index: 2000; +} +.body-expanded .navbar { + z-index: 9; +} +a.show-sidebar { + float: left; + color:#6d6d6d; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +a.show-sidebar:hover { + color:#000; +} +#sidebar-left { + position:relative; + z-index: inherit; + padding-bottom: 3000px !important; + margin-bottom: -3000px !important; + background: #6AA6D6 url(../img/devoops_pattern_b10.png) 0 0 repeat; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +#content { + position: relative; + z-index: 10; + background: #ebebeb; + box-shadow: 0 0 6px #131313; + padding-bottom: 3000px !important; + margin-bottom: -2980px !important; + overflow: hidden; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.full-content { + overflow: hidden; + padding: 0; + margin: 0; +} +.nav.main-menu, .nav.msg-menu { + margin:0 -15px; +} +.nav.main-menu > li > a, .nav.msg-menu > li > a { + text-align: center; + color:#f0f0f0; + min-height: 40px; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background:rgba(0, 0, 0, 0.1); +} +.nav.main-menu > li > a:hover, .nav.main-menu > li > a:focus, .nav.main-menu > li.active > a, .nav.main-menu .open > a, .nav.main-menu .open > a:hover, .nav.main-menu .open > a:focus, .dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover, .dropdown-menu > li.active > a, +.nav.msg-menu > li > a:hover, .nav.msg-menu > li > a:focus, .nav.msg-menu > li.active > a, .nav.msg-menu .open > a, .nav.msg-menu .open > a:hover, .nav.msg-menu .open > a:focus { + background:rgba(0, 0, 0, 0.1); + color:#f0f0f0; +} +.nav.main-menu a.active, .nav.msg-menu a.active { + background:rgba(0, 0, 0, 0.2); +} +.nav.main-menu a.active:hover, .nav.msg-menu a.active:hover { + background:rgba(0, 0, 0, 0.2); +} +.nav.main-menu a.active-parent, .nav.msg-menu a.active-parent { + background: rgba(0, 0, 0, 0.3); +} +.nav.main-menu a.active-parent:hover, .nav.msg-menu a.active-parent:hover { + background: rgba(0, 0, 0, 0.3); +} +.nav.main-menu > li > a > i, .nav.msg-menu > li > a > i { + font-size: 18px; + width: auto; + display: block; + text-align: center; + vertical-align: middle; +} +.main-menu .dropdown-menu { + position: absolute; + z-index: 2001; + left: 100%; + top: 0; + float: none; + margin: 0; + border: 0; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; + padding: 0; + background: #6AA6D6 url(../img/devoops_pattern_b10.png) 0 0 repeat; + box-shadow: none; + visibility:hidden; +} +.main-menu .active-parent:hover + .dropdown-menu { + visibility:visible; +} +.main-menu .active-parent + .dropdown-menu:hover { + visibility:visible; +} +.main-menu .dropdown-menu > li > a { + padding:9px 15px 9px 40px; + color:#f0f0f0; +} +.main-menu .dropdown-menu > li:first-child > a { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} +.main-menu .dropdown-menu > li:last-child > a { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} +#top-panel { + line-height: 50px; + height: 50px; + background: #ebebeb; +} +#main { + margin-top: 50px; + min-height: 800px; + overflow: hidden; +} +#search { + position: relative; + margin-left: 20px; +} +#search > input { + width: 80%; + background: #dfdfdf; + border: 1px solid #C7C7C7; + text-shadow:0 1px 1px #EEE; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + color: #686868; + line-height: 1em; + height: 30px; + padding: 0 35px 0 10px; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +#search > input + i { + opacity:0; + position: absolute; + top: 18px; + right: 10px; + color: #fff; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + transition: 0.4s; +} +#search > input:focus { + width:100%; + outline:none; +} +#search > input:focus + i { + opacity:1; +} +.panel-menu { + margin: 0; +} +.top-panel-right { + padding-left: 0; +} +.panel-menu > li > a { + padding: 0 5px 0 10px; + line-height: 50px; +} +.panel-menu > li > a:hover { + background: none; +} +.panel-menu a.account { + height: 50px; + padding: 5px 0 5px 10px; + line-height: 18px; +} +.panel-menu i { + margin-top: 8px; + padding: 5px; + font-size: 20px; + color: #7BC5D3; + line-height: 1em; + vertical-align: top; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.panel-menu > li > a:hover > i { + background: #f5f5f5; +} +.panel-menu i.pull-right { + color: #000; + border: 0; + box-shadow: none; + font-size: 16px; + background: none !important; +} +.panel-menu .badge { + margin-top: 3px; + padding: 3px 6px; + vertical-align: top; + background: #CEA9A9; +} +.avatar { + width: 40px; + float: left; + margin-right: 5px; +} +.avatar > img { + width:40px; + height:40px; + border: 1px solid #F8F8F8; +} +.user-mini > span { + display: block; + font-size: 12px; + color:#363636; + margin-bottom: -4px; +} +.user-mini > span.welcome { + font-weight: bold; + margin-top: 2px; +} +.panel-menu .dropdown-menu { + position: absolute !important; + background: rgba(0, 0, 0, 0.7) !important; + padding: 0; + border: 0; + right: 0; + left: auto; + min-width: 100%; +} +.panel-menu .dropdown-menu > li > a { + padding:5px 10px !important; + color:#f0f0f0; +} +.panel-menu .dropdown-menu > li > a > i { + border: 0; + padding: 0; + margin: 0; + font-size: 14px; + width: 20px; + display: inline-block; + text-align: center; + vertical-align: middle; +} +.well { + padding:15px; +} +.box { + display: block; + z-index: 1999; + position: relative; + border: 1px solid #f8f8f8; + box-shadow: 0 0 4px #D8D8D8; + background: transparent; + margin-bottom: 20px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.full-content .box { + border: 0; + margin-bottom: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.box-header { + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + color: #363636; + font-size: 16px; + position:relative; + overflow: hidden; + background: #f5f5f5; + border-bottom: 1px solid #E4E4E4; + height: 28px; +} +.box-name, .modal-header-name { + padding-left: 15px; + line-height: 28px; +} +.box-name:hover { + cursor: move; +} +.box-name > i { + margin-right:5px; +} +.box-icons { + position: absolute; + top:0; + right:0; + z-index: 9; +} +.no-move { + display: none; +} +.expanded .no-move { + position: absolute; + top:0; + left: 0; + width:100%; + height: 100%; + z-index: 1; + display: block; +} +.box-content { + position: relative; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + padding: 15px; + background: #FCFCFC; +} +.box-content.dropbox, .box-content.sortablebox { + overflow: hidden; +} +.full-content .box-content { + height: 100%; + position: absolute; + width: 100%; + left: 0; + top: 0; +} +.box-icons a { + cursor: pointer; + text-decoration: none !important; + border-left: 1px solid #fafafa; + height: 26px; + line-height: 26px; + width: 28px; + display: block; + float: left; + text-align: center; + color: #b8b8b8 !important; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.box-icons a.beauty-table-to-json { + width: auto; + padding: 0 10px; + font-size: 14px; +} +.box-icons a:hover { + box-shadow:inset 0 0 1px 0 #CECECE; +} +.expanded a.close-link { + display:none; +} +#sidebar-left.col-xs-2 { + opacity: 0; + width: 0%; + padding: 0; +} +.sidebar-show #sidebar-left.col-xs-2 { + opacity: 1; + width: 16.666666666666664%; + padding: 0 15px; +} +.sidebar-show #content.col-xs-12 { + opacity: 1; + width: 83.33333333333334%; +} +.expanded { + overflow-y:scroll; + border: 0; + z-index: 3000 !important; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + padding: 0px; + background: rgba(0, 0, 0, 0.2); + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.expanded-padding { + background: rgba(0, 0, 0, 0.7); + padding:50px; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.no-padding { + padding:0 !important; +} +.padding-15 { + padding:15px !important; +} +.no-padding .table-bordered { + border:0; + margin:0; +} +.no-padding .table-bordered thead tr th:first-child, .no-padding .table-bordered tbody tr th:first-child, .no-padding .table-bordered tfoot tr th:first-child, .no-padding .table-bordered thead tr td:first-child, .no-padding .table-bordered tbody tr td:first-child, .no-padding .table-bordered tfoot tr td:first-child { + border-left: 0px !important; +} +.no-padding .table-bordered thead tr th:last-child, .no-padding .table-bordered tbody tr th:last-child, .no-padding .table-bordered tfoot tr th:last-child, .no-padding .table-bordered thead tr td:last-child, .no-padding .table-bordered tbody tr td:last-child, .no-padding .table-bordered tfoot tr td:last-child { + border-right: 0px !important; +} +.table-heading thead tr { + background-color: #f0f0f0; + background-image: -webkit-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -moz-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -ms-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -o-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: linear-gradient(to bottom, #f0f0f0, #dfdfdf); +} +table.no-border-bottom tr:last-child td { + border-bottom:0; +} +.dataTables_wrapper { + overflow: hidden; +} +.dataTables_wrapper table.table { + clear: both; + max-width: inherit; + margin-bottom: 0; +} +.table-datatable *, .table-datatable :after, .table-datatable :before { + margin: 0; + padding: 0; + -webkit-box-sizing: content-box; + box-sizing: content-box; + -moz-box-sizing: content-box; +} +.table-datatable label { + position: relative; + display: block; + font-weight: 400; +} +.table-datatable tbody td { + vertical-align: middle !important; +} +.table-datatable img { + margin-right: 10px; + border: 1px solid #F8F8F8; + width: 40px; +} +.table-datatable .sorting { + background:url(../img/sort.png) right center no-repeat; + padding-right:16px; + cursor:pointer; +} +.table-datatable .sorting_asc { + background:url(../img/sort-asc.png) right center no-repeat; + padding-right: 16px; + cursor:pointer; +} +.table-datatable .sorting_desc { + background:url(../img/sort-desc.png) right center no-repeat; + padding-right: 16px; + cursor:pointer; +} +div.DTTT_collection_background { + z-index: 2002; +} +div.DTTT .btn { + color: #333 !important; + font-size: 12px; +} +ul.DTTT_dropdown.dropdown-menu { + z-index: 2003; + background: rgba(0, 0, 0, 0.7) !important; + padding: 0; + border: 0; + margin: 0; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; + min-width: 157px; +} +ul.DTTT_dropdown.dropdown-menu li { + position: relative; +} +ul.DTTT_dropdown.dropdown-menu > li > a { + position: relative; + display: block; + padding: 5px 10px !important; + color: #f0f0f0 !important; +} +ul.DTTT_dropdown.dropdown-menu > li:first-child > a { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +ul.DTTT_dropdown.dropdown-menu > li:last-child > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +ul.DTTT_dropdown.dropdown-menu > li:hover > a { + background:rgba(0, 0, 0, 0.3); + color:#f0f0f0; +} +.dataTables_wrapper input[type="text"] { + display: block; + width: 90%; + height: 26px; + padding: 2px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + box-sizing:border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-appearance: none; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.dataTables_wrapper input[type="text"]:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +#breadcrumb { + padding: 0; + line-height: 40px; + background: #525252; + background: #5a8db6 url(../img/devoops_pattern_b10.png) 0 0 repeat; + margin-bottom: 20px; +} +.breadcrumb { + padding: 0 15px; + background: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + margin: 0; +} +.breadcrumb > li > a { + color:#d8d8d8; +} +.breadcrumb > li > a:hover, .breadcrumb > li:last-child > a { + color:#f8f8f8; +} +.bs-callout { + padding: 15px; + border-left: 3px solid #525252; + background: #dfdfdf; +} +.bs-callout h4 { + margin-top: 0; + margin-bottom: 5px; + color: #525252; +} +.no-padding .bs-callout { + border:0; +} +.page-header { + margin: 0 0 10px; + border-bottom: 1px solid #c7c7c7; +} +.box-content .page-header, legend, .full-calendar .page-header { + margin: 0 0 10px; + border-bottom: 1px dashed #B6B6B6; +} +.invoice-header { + margin: 0 0 10px; + border-bottom: 1px dashed #B6B6B6; + display: inline-block; +} +.box-content .form-group, .devoops-modal-inner .form-group { + margin-top:15px; + margin-bottom:15px; +} +.show-grid [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; + background-color: #525252; + background-color: rgba(129, 199, 199, 0.2); + border: 1px solid #ebebeb; +} +.show-grid [class^="col-"]:hover { + padding-top: 10px; + padding-bottom: 10px; + background-color: rgba(107, 134, 182, 0.2); + border: 1px solid #ebebeb; +} +.show-grid, .show-grid-forms { + margin-bottom: 15px; +} +.show-grid-forms [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th, +td.beauty-hover { + background-color: rgba(219, 219, 219, 0.3) !important; +} +.table-hover > tbody > tr:hover > td.beauty-hover:hover { + background-color: rgba(219, 219, 219, 0.9) !important; +} +.DTTT.btn-group { + position: absolute; + top: -28px; + right: 83px; + border-right:1px solid #DBDBDB; +} +.DTTT.btn-group a { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + line-height: 1em; + font-size: 14px; + font-weight: bold; + outline: none; + box-shadow: none !important; + padding: 6px 12px; + margin: 0; + background: #F7F7F7; + border: 0; +} +#screensaver { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 3000; + background: #000; + display: none; +} +#screensaver.show { + display: block; +} +#canvas { + position: relative; +} +#screensaver i { + position: absolute; + top: 50px; + right: 50px; + background: rgba(255, 255, 255, 0.5); + line-height: 100px; + width: 100px; + height: 100px; + text-align: center; + font-size: 60px; + color: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.well pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; + white-space: nowrap; +} +.well pre code { + white-space: normal; +} +.btn { + border-width: 1px; + border-style: solid; + border-width: 1px; + text-decoration: none; + border-color: rgba(0, 0, 0, 0.3); + cursor: pointer; + outline: none; + font-family: "Lucida Grande","Lucida Sans","Lucida Sans Unicode","Segoe UI",Verdana,sans-serif; + display: inline-block; + vertical-align: top; + position: relative; + font-size: 12px; + font-weight: bold; + text-align: center; + background-color: #a2a2a2; + background: #a2a2a2 -moz-linear-gradient(top, rgba(255,255,255,0.6), rgba(255,255,255,0)); + background: #a2a2a2 -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,255,255,0.6)), to(rgba(255,255,255,0))); + line-height: 24px; + margin: 0 0 10px 0; + padding: 0 10px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -moz-user-select: none; + -webkit-user-select: none; + outline: none !important; +} +.btn-label-left, .btn-label-right { + padding: 0 10px; +} +.btn-label-left span { + position: relative; + left: -10px; + display: inline-block; + padding: 0px 8px; + background: rgba(0, 0, 0, 0.1); +} +.btn-label-right span { + position: relative; + right: -10px; + display: inline-block; + padding: 0px 8px; + background: rgba(0, 0, 0, 0.1); +} +.btn i { + vertical-align: middle; +} +.btn-app { + width: 80px; + height: 80px; + padding: 0; + font-size: 16px; +} +.btn-app i { + font-size: 36px; + line-height: 78px; + display: block; +} +.btn-app-sm { + width: 50px; + height: 50px; + padding: 0; + font-size: 12px; +} +.btn-app-sm i { + font-size: 18px; + line-height: 48px; + display: block; +} +.btn-circle { + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + border: 2px solid rgba(0, 0, 0, 0.25); +} +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default, .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active, .progress-bar { + background-color: #D8D8D8; + border-color: rgba(0, 0, 0, 0.3); + color: #929292; +} +.btn-primary, .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active, +.table > thead > tr > td.primary, .table > tbody > tr > td.primary, .table > tfoot > tr > td.primary, .table > thead > tr > th.primary, .table > tbody > tr > th.primary, .table > tfoot > tr > th.primary, .table > thead > tr.primary > td, .table > tbody > tr.primary > td, .table > tfoot > tr.primary > td, .table > thead > tr.primary > th, .table > tbody > tr.primary > th, .table > tfoot > tr.primary > th { + background-color: #6AA6D6; + border-color: rgba(0, 0, 0, 0.3); + color: #f8f8f8; +} +.btn-success, .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active, .progress-bar-success, +.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { + background-color: #63CC9E; + border-color: rgba(0, 0, 0, 0.3); + color: #f8f8f8; +} +.btn-info, .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active, .progress-bar-info, +.table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { + background-color: #7BC5D3; + border-color: rgba(0, 0, 0, 0.3); + color: #f8f8f8; +} +.btn-warning, .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active, .progress-bar-warning, +.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { + background-color: #DFD271; + border-color: rgba(0, 0, 0, 0.3); + color: #f8f8f8; +} +.btn-danger, .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active, .progress-bar-danger, +.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { + background-color: #D15E5E; + border-color: rgba(0, 0, 0, 0.3); + color: #f8f8f8; +} +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + color: #525252; + background-color: #b8b8b8; + border-color: rgba(0, 0, 0, 0.3); +} +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary, +.table-hover > tbody > tr > td.primary:hover, .table-hover > tbody > tr > th.primary:hover, .table-hover > tbody > tr.primary:hover > td, .table-hover > tbody > tr.primary:hover > th { + color: #fff; + background-color: #5a8db6; + border-color: rgba(0, 0, 0, 0.3); +} +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success, +.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th { + color: #fff; + background-color: #54ae86; + border-color: rgba(0, 0, 0, 0.3); +} +.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info, +.table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th { + color: #fff; + background-color: #69a8b4; + border-color: rgba(0, 0, 0, 0.3); +} +.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning, +.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th { + color: #fff; + background-color: #beb360; + border-color: rgba(0, 0, 0, 0.3); +} +.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger, +.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th { + color: #fff; + background-color: #b25050; + border-color: rgba(0, 0, 0, 0.3); +} +.progress { + overflow: visible; +} +.progress-ui { + height: 10px; +} +.progress-bar { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.progress-bar.ui-widget-content { + background: none; + border: 0; + height: 100%; + position: relative; +} +.progress-bar .ui-state-default { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + height: 10px; + width: 10px; + top: 0; + margin-left: -5px; + cursor:pointer; + border:0px solid #d3d3d3; + outline:none !important; + background-color: #f0f0f0; + background-image: -webkit-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -moz-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -ms-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -o-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: linear-gradient(to bottom, #f0f0f0, #dfdfdf); +} +.progress-bar .ui-widget-header { + background: #D8D8D8; +} +.progress-bar-primary .ui-widget-header { + background: #6AA6D6; + color:#f8f8f8; +} +.progress-bar-success .ui-widget-header { + background: #63CC9E; + color:#f8f8f8; +} +.progress-bar-info .ui-widget-header { + background: #7BC5D3; + color:#f8f8f8; +} +.progress-bar-warning .ui-widget-header { + background: #DFD271; + color:#f8f8f8; +} +.progress-bar-danger .ui-widget-header { + background: #D15E5E; + color:#f8f8f8; +} +.progress-bar .ui-state-default { + background: #b8b8b8; +} +.progress-bar-primary .ui-state-default { + background: #5a8db6; +} +.progress-bar-success .ui-state-default { + background: #54ae86; +} +.progress-bar-info .ui-state-default { + background: #69a8b4; +} +.progress-bar-warning .ui-state-default { + background: #beb360; +} +.progress-bar-danger .ui-state-default { + background: #b25050; +} +.slider-range-min-amount, .slider-range-max-amount, .slider-range-amount { + border: 0; + background: none; + outline: none !important; +} +.progress-bar.ui-slider-vertical { + width:20px; +} +.progress-bar.ui-slider-vertical .ui-state-default { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + height: 20px; + width: 20px; + top: auto; + margin-left: 0px; + left: 0; +} +#equalizer .progress { + height:160px; + display:inline-block; + margin:15px; +} +.beauty-table { + width:100%; + border-collapse:separate; + border-spacing:0; +} +.beauty-table input { + border:1px solid transparent; + background: none; + font-size: 16px; + text-align: center; + padding:2px 15px !important; + width:100%; + outline:none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.beauty-table input:focus { + border:1px solid #dfdfdf; + background: #fefefe; + font-size: 16px; + text-align: center; + padding: 2px 15px !important; + width:100%; + outline:none; +} +.c { + color: #999; + display: block; +} +.nt { + color: #2f6f9f; +} +.na { + color: #4f9fcf; +} +.s { + color: #d44950; +} +.radio, .checkbox, .radio-inline, .checkbox-inline { + position: relative; +} +.radio label, .checkbox label, .radio-inline label, .checkbox-inline label { + font-weight: normal; + cursor: pointer; + padding-left: 8px; + -webkit-transition: 1s; + -moz-transition: 1s; + -o-transition: 1s; + transition: 1s; +} +.radio + .radio, .checkbox + .checkbox { + margin-top: 10px; +} +.checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], .radio-inline input[type=radio] { + position: absolute; + clip: rect(0, 0, 0, 0); +} +.checkbox i, .checkbox-inline i, .radio i, .radio-inline i { + cursor: pointer; + position: absolute; + left: 0; + top: 0; + font-size: 24px; + -webkit-transition: 1s; + -moz-transition: 1s; + -o-transition: 1s; + transition: 1s; +} +.checkbox i.small, .checkbox-inline i.small, .radio i.small, .radio-inline i.small { + font-size: 18px; + top:2px; +} +.checkbox input[type=checkbox]:checked + i:before, .checkbox-inline input[type=checkbox]:checked + i:before { + content:"\f046"; +} +.radio input[type=radio]:checked + i:before, .radio-inline input[type=radio]:checked + i:before { + content:"\f192"; +} +.toggle-switch { + position: relative; + width: 60px; +} +.toggle-switch input { + display: none; +} +.toggle-switch label { + display: block; + overflow: hidden; + cursor: pointer; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; +} +.toggle-switch-inner { + width: 200%; + margin-left: -100%; + -webkit-transition: margin 0.3s ease-in 0s; + -moz-transition: margin 0.3s ease-in 0s; + -o-transition: margin 0.3s ease-in 0s; + transition: margin 0.3s ease-in 0s; +} +.toggle-switch-inner:before, .toggle-switch-inner:after { + float: left; + width: 50%; + height: 20px; + padding: 0; + line-height: 20px; + font-size: 12px; + text-shadow: 1px 1px 1px #FFFFFF; + color:#929292; + background-color: #F5F5F5; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.toggle-switch-inner:before { + content: "ON"; + padding-left: 15px; + -webkit-border-radius: 20px 0 0 20px; + -moz-border-radius: 20px 0 0 20px; + border-radius: 20px 0 0 20px; +} +.toggle-switch-inner:after { + content: "OFF"; + padding-right: 15px; + text-align: right; + -webkit-border-radius: 0 20px 20px 0; + -moz-border-radius: 0 20px 20px 0; + border-radius: 0 20px 20px 0; +} +.toggle-switch-switch { + width: 20px; + margin: 0; + border: 2px solid #d8d8d8; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + position: absolute; + top: 0; + bottom: 0; + right: 40px; + color: #f8f8f8; + line-height: 1em; + text-shadow: 0 0px 1px #ADADAD; + text-align: center; + -webkit-transition: all 0.3s ease-in 0s; + -moz-transition: all 0.3s ease-in 0s; + -o-transition: all 0.3s ease-in 0s; + transition: all 0.3s ease-in 0s; + background-color: #f0f0f0; + background-image: -webkit-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -moz-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -ms-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: -o-linear-gradient(top, #f0f0f0, #dfdfdf); + background-image: linear-gradient(to bottom, #f0f0f0, #dfdfdf); +} +.toggle-switch input:checked + .toggle-switch-inner { + margin-left: 0; +} +.toggle-switch input:checked + .toggle-switch-inner + .toggle-switch-switch { + right: 0px; +} +.toggle-switch-danger input:checked + .toggle-switch-inner + .toggle-switch-switch { + border:2px solid #D15E5E; + background: #D15E5E; +} +.toggle-switch-warning input:checked + .toggle-switch-inner + .toggle-switch-switch { + border:2px solid #DFD271; + background: #DFD271; +} +.toggle-switch-info input:checked + .toggle-switch-inner + .toggle-switch-switch { + border:2px solid #7BC5D3; + background: #7BC5D3; +} +.toggle-switch-success input:checked + .toggle-switch-inner + .toggle-switch-switch { + border:2px solid #63CC9E; + background: #63CC9E; +} +.toggle-switch-primary input:checked + .toggle-switch-inner + .toggle-switch-switch { + border:2px solid #6AA6D6; + background: #6AA6D6; +} +.select2-container { + width: 100%; +} +.select2-container .select2-choice { + height: 30px; +} +.knob-slider { + position: relative; + text-align: center; + display: inline-block; + width: 100%; + margin-bottom: 5px; +} +.knob-slider > div { + display: inline-block !important; +} +.knob-slider input { + outline: none !important; +} +.ipod { + background:#dedede; + text-align: center; + padding:50px 0; +} +.knob-clock { + text-align: center; +} +.knob-clock > div { + font-size:50px; + text-align: center; + color:#a2a2a2; +} +.knob { + border:0; + background: 0; +} +.box-pricing:hover { + box-shadow: 0 0 5px #525252; + -webkit-transition: 0.5s; + -moz-transition: 0.5s; + -o-transition: 0.5s; + transition: 0.5s; +} +.box-pricing .row-fluid > div { + padding: 18px 15px 8px; + line-height: 1.428571429; + vertical-align: top; +} +.box-pricing .row-fluid.centered > div { + background-color: #f5f5f5; + padding: 8px; + text-align: center; +} +.box-pricing .row-fluid.centered > div:nth-child(odd) { + background-color: #f9f9f9; +} +.box-pricing .box-header { + height: 80px; + padding: 10px 0; +} +.box-pricing .box-name { + padding: 0 10px; + text-align: center; +} +.box-pricing .box-name:hover { + cursor: inherit; +} +#messages #breadcrumb { + margin-bottom: 0; + position: fixed; + width: 100%; + z-index: 2; +} +#messages-menu { + position:fixed; + top:90px; + background:#a5a5a5; + margin:0; + height: 100%; + z-index: 2; +} +#messages-list { + margin-top: 40px; + padding: 0; +} +.one-list-message { + background: #F1F1F1; + border-bottom: 1px solid #CCC; + padding: 15px 15px 15px 25px; + margin: 0; +} +.one-list-message .checkbox { + margin: 0; + overflow: hidden; + white-space: nowrap; +} +.one-list-message .message-title { + overflow: hidden; + white-space: nowrap; + width: 80%; +} +.one-list-message .message-date { + overflow: hidden; + white-space: nowrap; + font-size: 11px; + line-height: 20px; + text-align: center; + position: absolute; + right: 10px; + font-weight: bold; + background: #D8D8D8; + padding: 0; + width: 50px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + color: #000; +} +.form-control { + height: 26px; + padding: 2px 12px; +} +.input-lg { + height:39px; +} +.input-sm { + height:18px; +} +.bg-default { + background: #D8D8D8 !important; +} +.bg-primary { + background: #6AA6D6 !important; + color:#f8f8f8 !important; +} +.bg-success { + background: #63CC9E !important; + color:#f8f8f8 !important; +} +.bg-info { + background: #7BC5D3 !important; + color:#f8f8f8 !important; +} +.bg-warning { + background: #DFD271 !important; + color:#f8f8f8 !important; +} +.bg-danger { + background: #D15E5E !important; + color:#f8f8f8 !important; +} +.txt-default { + color: #D8D8D8 !important; +} +.txt-primary { + color: #6AA6D6 !important; +} +.txt-success, .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { + color: #63CC9E !important; +} +.txt-info { + color: #7BC5D3 !important; +} +.txt-warning, .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { + color: #DFD271 !important; +} +.txt-danger, .has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline { + color: #D15E5E !important; +} +.has-success .form-control { + border-color:#63CC9E; +} +.has-warning .form-control { + border-color:#DFD271; +} +.has-error .form-control { + border-color:#D15E5E; +} +.has-success .form-control:focus { + border-color: #63CC9E; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #63CC9E; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #63CC9E; +} +.has-warning .form-control:focus { + border-color: #DFD271; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #DFD271; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #DFD271; +} +.has-error .form-control:focus { + border-color: #D15E5E; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #D15E5E; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #D15E5E; +} +.select2-container-multi .select2-choices { + min-height: 26px; + display: block; + height: 26px; + padding: 0 0 0 8px; + overflow: hidden; + position: relative; + border: 1px solid #aaa; + white-space: nowrap; + line-height: 26px; + color: #444; + text-decoration: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + background-clip: padding-box; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); + background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); + background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); + background-image: linear-gradient(top, #fff 0%, #eee 50%); +} +.select2-container-multi .select2-choices .select2-search-field input { + padding: 0; + margin: 0; +} +.has-feedback .form-control-feedback { + width: 26px; + height: 26px; + line-height: 26px; +} +.form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { + min-height: inherit; + padding-top: 0; +} +.form-horizontal .control-label { + padding-top: 4px; +} +.input-group-addon { + padding: 0px 6px; +} +.form-group .form-control, .form-group .input-group { + margin-bottom: 5px; +} +.input-group .form-control { + margin:0; +} +#ui-datepicker-div { + background: rgba(0, 0, 0, 0.7) !important; + border:0; +} +#ui-datepicker-div .ui-widget-header { + background: rgba(0, 0, 0, 0.2); + border: 0; + border-bottom: 1px solid #686868; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + color: #f8f8f8; + padding: 1px 0; +} +#ui-datepicker-div.ui-widget-content { + color:#f8f8f8 !important; +} +#ui-datepicker-div .ui-state-default, #ui-datepicker-div .ui-widget-content .ui-state-default, #ui-datepicker-div .ui-widget-header .ui-state-default { + background: none; + border:0; + color:#f8f8f8; + text-align: center; +} +#ui-datepicker-div .ui-state-hover, #ui-datepicker-div.ui-widget-content .ui-state-hover, #ui-datepicker-div .ui-widget-header .ui-state-hover, #ui-datepicker-div .ui-state-focus, #ui-datepicker-div.ui-widget-content .ui-state-focus, #ui-datepicker-div .ui-widget-header .ui-state-focus, +#ui-datepicker-div .ui-state-highlight, #ui-datepicker-div.ui-widget-content .ui-state-highlight, #ui-datepicker-div .ui-widget-header .ui-state-highlight { + background: rgba(0, 0, 0, 0.3) !important; + border:0; + top:2px; +} +#ui-datepicker-div .ui-datepicker-group { + border-left: 1px solid #686868; +} +#ui-datepicker-div .ui-datepicker-group:first-child { + border-left:0; +} +#ui-datepicker-div .ui-datepicker-buttonpane { + margin: 0; +} +#ui-datepicker-div .ui-datepicker-group table { + margin:0 auto !important; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px !important; + cursor: pointer; +} +.ui-datepicker .ui-datepicker-next { + right: 2px !important; + cursor: pointer; +} +.ui-icon-circle-triangle-w { + background: url(../img/ui-left.png) 0 0 no-repeat !important; +} +.ui-icon-circle-triangle-e { + background: url(../img/ui-right.png) 0 0 no-repeat !important; +} +.ui-icon-circle-arrow-s { + background: url(../img/ui-accordion-down.png) 0 0 no-repeat !important; +} +.ui-icon-circle-arrow-e { + background: url(../img/ui-accordion-right.png) 0 0 no-repeat !important; +} +#ui-datepicker-div .ui-slider-horizontal { + background: rgba(0, 0, 0, 0.5); + height: 4px; + border: 0; +} +#ui-datepicker-div .ui-slider-horizontal .ui-slider-handle { + background: #D8D8D8 !important; + border: 1px solid #f8f8f8; + height: 8px; + width: 8px; + top:-2px; + margin-left: -4px; + outline: none; + cursor: pointer; +} +.ui-spinner-input { + margin:0; +} +.ui-spinner .form-control { + margin-bottom: 0; +} +#tabs.ui-widget-content, #tabs .ui-widget-header { + border:0; + background: none; + padding: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +#tabs .ui-widget-header { + border-bottom: 1px solid #d8d8d8; +} +#tabs .ui-state-default, #tabs.ui-widget-content .ui-state-default, #tabs .ui-widget-header .ui-state-default { + border:0; + margin: 0 0 -1px 0; + background: none !important; +} +#tabs .ui-state-active, #tabs.ui-widget-content .ui-state-active, #tabs .ui-widget-header .ui-state-active { + background: none !important; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin: 0; + padding: 0; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + padding: 5px 15px; + outline: none !important; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + background:#fcfcfc; + border:1px solid #d8d8d8; + border-bottom: 0; +} +.ui-tabs .ui-tabs-nav { + padding: 0; +} +.ui-tabs .ui-tabs-panel { + padding: 1em 0; +} +.ui-widget { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +.jqstooltip { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + border:0!important; + text-align:center !important; + margin:0px!important; + width:50px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + padding:0px; +} +.ui-accordion .ui-accordion-header { + padding: 6px 12px; + margin: 0; + top:0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.ui-accordion .ui-accordion-icons { + padding-left:28px; +} +.ui-accordion-header.ui-state-default { + background: #f5f5f5 !important; + border: 1px solid #fcfcfc; + border-left: 0; + border-right: 0; +} +.ui-accordion-header.ui-state-hover, .ui-accordion-header.ui-state-focus { + background: #ebebeb !important; +} +.ui-accordion-header.ui-state-active { + background: #d8d8d8 !important; +} +.ui-accordion .ui-accordion-content { + padding:10px 12px; + background: none; + border:1px solid #d8d8d8; + border-top:0; + border-bottom:0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +#simple_gallery { + text-align: center; +} +#simple_gallery a.fancybox { + display: inline-block; + padding: 5px; +} +#simple_gallery a.fancybox img { + width: 100%; + padding: 2px; + border: 1px solid #979797; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +#simple_gallery a.fancybox img:hover { + box-shadow: 0 0 10px #C7C7C7; +} +.justifiedGallery { + overflow: hidden; + width: 100%; +} +.jg-row { + position: relative; + white-space: nowrap; +} +.justifiedGallery .jg-image { + position: absolute; + display: inline-block; + vertical-align: top; + margin-left: 0; +} +.justifiedGallery .jg-image a { + text-decoration: none; +} +.justifiedGallery .jg-image img { + border: none; +} +.justifiedGallery .jg-image-label { + white-space: normal; + font: normal 12px arial; + background: #000; + color: #fff; + position: absolute; + left: 0; + right: 0; + padding: 5px 5px 10px 8px; + text-align: left; + opacity: 0; +} +.ex-tooltip { + position: absolute; + display: none; + z-index: 2000; +} +.morris-hover { + position:absolute; + z-index:1000; +} +.morris-hover.morris-default-style, .ex-tooltip { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + padding: 6px 20px; + color: #525252; + background: rgba(255, 255, 255, 0.8); + font-size: 12px; + text-align: center; +} +.morris-hover.morris-default-style .morris-hover-row-label{ + font-weight:bold; + margin:0.25em 0; +} +.morris-hover.morris-default-style .morris-hover-point{ + white-space:nowrap; + margin:0.1em 0; +} +#dashboard-header { + margin-bottom:20px; +} +#dashboard_links { + padding: 0; +} +#dashboard_links .nav { + background:#3575A0 url(../img/devoops_pattern_b10.png) 0 0 repeat; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; + overflow: hidden; +} +#dashboard_links .nav-stacked > li { + border-bottom: 1px solid rgba(0, 0, 0, 0.25); + border-top: 1px solid rgba(255, 255, 255, 0.12); + font-size: 12px; + font-weight: 700; + line-height: 15px; + padding: 0; + margin: 0; +} +#dashboard_links .nav-pills > li > a { + color: #f8f8f8; + display: block; + padding: 20px 10px 20px 15px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + outline:none; +} +#dashboard_links .nav-pills > li.active { + border-top-color: rgba(0, 0, 0, 0.11); + position: relative; + margin: 0; +} +#dashboard_links .nav-pills > li.active > a, #dashboard_links .nav-pills > li.active > a:hover, #dashboard_links .nav-pills > li.active > a:focus, #dashboard_links .nav > li > a:hover, #dashboard_links .nav > li > a:focus { + background:rgba(0, 0, 0, 0.1); +} +#dashboard_links .nav-pills > li.active > a:before { + font-family: FontAwesome; + content: "\f0da"; + position: absolute; + left: -2px; + font-size: 30px; + color: #f8f8f8; +} +#dashboard_tabs { + background:#f8f8f8; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +#dashboard-overview { + padding-bottom:15px; +} +.sparkline-dashboard { + float: left; + margin-right: 10px; + text-align: center; +} +.sparkline-dashboard-info { + float: left; + display: block; + text-align: center; +} +.sparkline-dashboard-info span { + display: block; + font-weight: bold; + color: #b25050; +} +#ow-marketplace { + margin-top: 20px; +} +.ow-server { + padding-top: 8px; + padding-bottom: 25px; +} +.ow-server:hover { + background:#e7e7e7; +} +.ow-server .page-header { + padding-bottom: 3px; +} +.ow-server h4 i { + position: absolute; + left: 15px; +} +.ow-server small { + position: absolute; + right: 15px; + top: 51px; +} +.ow-server-bottom { + margin-top:25px; +} +.ow-server-bottom .knob-slider { + font-size: 11px; +} +#ow-server-footer { + overflow: hidden; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.ow-settings { + position: absolute; + top: 7px; + left: 40px; + display:none; +} +.ow-settings a { + color:#525252; +} +.ow-server:hover .ow-settings { + display: block; +} +#ow-server-footer a { + display: block; + padding:10px 0; + border-left:1px solid #f8f8f8; + text-decoration:none; +} +#ow-server-footer a:first-child { + border-left:0; +} +#ow-server-footer span { + display: block; +} +.m-table > thead > tr > th, .m-table > tbody > tr > th, .m-table > tfoot > tr > th, .m-table > thead > tr > td, .m-table > tbody > tr > td, .m-table > tfoot > tr > td { + vertical-align: middle; + padding: 2px 5px; +} +.m-ticker span { + display: block; + font-size: 0.8em; + line-height: 1em; +} +.m-price { + text-align: right; +} +.m-change .fa-angle-up { + color:#54ae86; + font-weight: bold; +} +.m-change .fa-angle-down { + color:#b25050; + font-weight: bold; +} +#ow-summary { + font-size: 12px; +} +#ow-summary b { + float:right; + padding:1px 4px; + margin:1px; + border:1px solid #d8d8d8; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +#ow-donut { + margin:0 0 20px; +} +#ow-donut > div { + padding:0; +} +#ow-activity .row { + margin: 0 0 0 -15px; + font-size: 13px; +} +#ow-setting { + border: 1px solid #C7C7C7; + padding: 0; + position: absolute; + width: 158px; + height: 28px; + top: 1px; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; + opacity: 0; + right: -200px; + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + transition: 0.1s; +} +#ow-marketplace:hover #ow-setting { + opacity:1; + right:15px; +} +#ow-setting a { + text-align: center; + float: left; + margin-left: 10px; + color: #d8d8d8; + font-size: 16px; + display:block; + line-height: 28px; + width:20px; + height:26px; + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + transition: 0.1s; +} +#ow-setting a:hover { + font-size:16px; + color:#222; + line-height:24px; +} +#ow-licenced { + margin:20px 0; +} +#ow-licenced .row { + margin:0; +} +#ow-stat .row { + margin: 0; +} +#dashboard-clients .one-list-message { + background:none; + padding:10px 15px; +} +#dashboard-clients .one-list-message:last-child { + border-bottom: 0; +} +#dashboard-clients .one-list-message .message-date { + position: relative; + width: auto; + right: auto; + left: 15px; + padding: 0 15px; +} +.btn + .dropdown-menu { + margin-top: -10px; + background: rgba(0, 0, 0, 0.7) !important; padding: 0; border: 0; + right: 0; + left: auto; + min-width: 100%; +} +.btn + .dropdown-menu > li > a { + padding: 5px 10px !important; + color: #f0f0f0; +} +.v-txt { + -moz-transform: rotate(-90deg); + -webkit-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + position: absolute; + top: 60px; + left: -20px; + color: #d8d8d8; + font-size: 18px; + box-shadow: 0 0 10px #d8d8d8; + padding: 0px 5px; +} +.full-calendar { + padding: 25px 0; + background: #FCFCFC; +} +.external-event { + padding: 2px 6px; + margin: 4px 0; + background: #f5f5f5; +} +.external-event:hover { + cursor: move; + background: #6AA6D6; + color:#f8f8f8; +} +#add-new-event { + background: #EBEBEB; + margin-bottom: 30px; + padding: 10px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.modal-backdrop { + z-index: 2000; +} +.modal { + z-index: 2001; +} +.fc-event { + border: 1px solid #6AA6D6; + background-color: #6AA6D6; +} +.qq-upload-drop-area { + position: absolute; + background: #fcfcfc; + width: 100%; + height: 100%; +} +.qq-upload-button { + float:right; + margin:20px 15px 0 0; +} +.qq-upload-list { + position: relative; + z-index: 3; + margin: 60px 15px 0; + padding: 0; + list-style: none; +} +.qq-upload-list li { + position: relative; + display: inline-block; + padding: 15px; + margin: 15px; + border: 1px solid #E6E6E6; + text-align: center; + font-size: 12px; + background: rgba(245, 245, 245, 0.9); +} +.qq-upload-settings { + opacity: 0; + visibility: hidden; + bottom: 0; + position: absolute; + width: 100%; + left: 0; + padding: 7px 0; + background: #FFF; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +.qq-upload-list li:hover .qq-upload-settings { + opacity: 1; + visibility: visible; +} +.qq-upload-list li img { + border:1px solid #b4b4b4; + margin-bottom: 5px; +} +.qq-upload-filename { + display: block; + overflow: hidden; +} +.qq-upload-file, .qq-upload-size, .qq-upload-status-text { + display: block; +} +.qq-dropped-zone { + position: absolute; + top: 5%; + left: 50%; + margin-left: -71px; + text-align: center; + font-weight: bold; +} +.qq-dropped-zone i { + font-size: 5em; + display: block; + color: #f5f5f5; + text-shadow: 0 -1px 1px #d8d8d8; +} +#page-500 h1, .page-404 h1 { + font-size: 5em; +} +.page-404 .form-inline { + margin: 40px auto; + width: 60%; + padding: 15px; + background: #FAFAFA; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.page-404 .input-group-btn:last-child > .btn, .page-404 .input-group-btn:last-child > .btn-group { + margin-left: -1px; + margin-bottom: 0; + height: 39px; +} +#page-500 h3, .page-404 h3 { + margin: 5px 0 20px; +} +.preloader { + position: absolute; + width: 100%; + height: 100%; + left: 0; + background: #ebebeb; + z-index: 2000; +} +.devoops-getdata { + position: absolute; + top: 25px; + left: 15px; + color:#ebebeb; +} +#page-500, #page-login { + position: absolute; + height: 100%; + width: 100%; +} +#page-500 { + background: #ebebeb; +} +#page-500 img { + display: block; + margin:30px auto; +} +#page-login .logo { + position:absolute; +} +#page-login h3 { + font-size:20px; + font-family: 'Righteous', cursive; +} +#page-login .text-right { + margin-top: 15px; +} +#page-login .box { + margin-top:15%; +} +.one-result { + margin-top:20px; +} +.one-result p { + margin:0; +} +.large { + font-size: 1.25em; +} +.nav-search > li.active > a { + background: #F0F0F0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + color: #525252; + border-bottom: 1px solid #CECECE; + font-weight: bold; +} +.page-feed .avatar { + width: 60px; + float: left; + margin: 10px 15px; + text-align: center; + overflow: hidden; +} +.page-feed .avatar img { + width: 60px; + height: 60px; + border: 1px solid #F8F8F8; +} +.page-feed-content { + position: relative; + padding: 3px 15px 5px; + background: #FCFCFC; + margin-left:90px; + min-height: 80px; +} +.page-feed-content small.time { + font-style: italic; +} +.page-feed .page-feed-content:before { + font-family: FontAwesome; + content: "\f0d9"; + position: absolute; + left: -10px; + top: 15px; + font-size: 30px; + color: #fcfcfc; +} +.likebox { + overflow: hidden; +} +.likebox .navbar-nav { + margin:0; +} +.likebox .navbar-nav li { + margin-right: 15px; + float: left; +} +.likebox .fa-thumbs-up { + color:#6AA6D6; +} +.likebox .fa-thumbs-down { + color:#D15E5E; +} +#modalbox { + display:none; + position: fixed; + overflow: auto; + overflow-x: hidden; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 5000; + background:rgba(0,0,0,0.8); +} +#modalbox .devoops-modal { + position:absolute;top:90px;margin-left: -300px;left: 50%; + border: 1px solid #f8f8f8; + box-shadow: 0 0 20px #6AA6D6; + background: transparent; + margin-bottom: 20px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + width: 600px; + z-index:6000; +} +#modalbox .devoops-modal-header { + color: #363636; + font-size: 16px; + position:relative; + overflow: hidden; + background: #f5f5f5; + border-bottom: 1px solid #E4E4E4; + height: 28px; +} +#modalbox .devoops-modal-inner { + position: relative; + overflow: hidden; + padding: 15px; + background: #FCFCFC; +} +#modalbox .devoops-modal-bottom { + position: relative; + overflow: hidden; + padding: 15px; + background: #d8d8d8; +} +.pagination > li > a, .pagination > li > span { + position: relative; + float: left; + padding: 4px 10px; + margin-left: -1px; + line-height: 1.428571429; + color: #969696; + text-decoration: none; + background-color: #F5F5F5; + border: 1px solid #D8D8D8; +} +.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { + color: #8A8A8A; + background-color: #eee; +} +.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #979797; + cursor: not-allowed; + background-color: #FCFCFC; + border-color: #D8D8D8; +} +.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #6AA6D6; + border-color: #6AA6D6; +} +.fancybox-nav { + position: fixed; + width: 50%; +} +.fancybox-close { + position: fixed; + top: 20px; + right: 36px; + background: url(../img/times.png) 0 0 no-repeat; +} +.fancybox-prev span { + left: 21px; + background: url(../img/chevron-left.png) 0 0 no-repeat; +} +.fancybox-next span { + right: 36px; + background: url(../img/chevron-right.png) 0 0 no-repeat; +} +#social a { + margin: 10px 3px; + color: #666; + display: block; + float: left; +} +#event_delete { + margin-left:20px; +} +@media (min-width: 768px) { + #sidebar-left.col-sm-2 { + opacity: 1; + width: 16.666666666666664%; + padding: 0 15px; + } + .sidebar-show #sidebar-left.col-sm-2 { + opacity: 0; + width:0; + padding:0; + } + .sidebar-show #content.col-sm-10 { + opacity: 1; + width:100%; + } + .page-404 .form-inline { + width: 60%; + } +} +@media (min-width: 992px) { + .nav.main-menu > li > a, .nav.msg-menu > li > a { + text-align: left; + } + .nav.main-menu > li > a > i, .nav.msg-menu > li > a > i { + font-size:14px; + width: 20px; + display: inline-block; + } + .main-menu .dropdown-menu { + position: relative; + z-index: inherit; + left:0; + margin: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + background:rgba(0, 0, 0, 0.2); + visibility: visible; + } + .main-menu .dropdown-menu > li > a { + -webkit-border-radius: 0 !important; + -moz-border-radius: 0 !important; + border-radius: 0 !important; + } + .page-404 .form-inline { + width: 40%; + } +} +@media (max-width: 767px) { + #main { + margin-top: 100px; + } + #messages-menu { + top:140px; + } + .page-404 .form-inline { + width: 100%; + } + #dashboard_links .nav { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; + } + #dashboard_links .nav-stacked > li { + float:left; + } + #dashboard_links .nav-pills > li > a { + padding:15px; + } + #dashboard_links .nav-pills > li.active > a:before { + bottom: 0; + left: 50%; + margin-left: -9px; + } +} +@media (max-width: 620px) { + .user-mini { + display: none; + } +} +@media (max-width: 400px) { + .panel-menu a.account { + padding: 5px 0px 5px 0; + } + .avatar { + margin: 0; + } + .panel-menu i.pull-right { + margin-left: 0; + } + .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background: none; + } + #dashboard_links .nav-stacked > li { + float:none; + } + #dashboard_links .nav-pills > li.active > a:before { + display: none; + } +} +#chat { + width: 100%; + height: 40em; + overflow: auto; + margin-bottom: 15px +} \ No newline at end of file diff --git a/plugins/web_gui/static/css/style.min.css b/plugins/web_gui/static/css/style.min.css new file mode 100644 index 0000000..f047d86 --- /dev/null +++ b/plugins/web_gui/static/css/style.min.css @@ -0,0 +1 @@ +body{color:#525252;background:#6aa6d6 url(../img/devoops_pattern_b10.png) 0 0 repeat}.body-expanded,.modal-open{overflow-y:hidden;margin-right:15px}.body-expanded .expanded-panel,.fancybox-margin .expanded-panel,.modal-open .expanded-panel{margin-right:15px}.body-screensaver{overflow:hidden}h1,.h1,h2,.h2,h3,.h3{margin:0}#logo{position:relative;background:#525252 url(../img/devoops_pattern_b10.png) 0 0 repeat}#logo a{color:#fff;font-family:'Righteous',cursive;display:block;font-size:20px;line-height:50px;background:url(../img/logo.png) right 42px no-repeat;-webkit-transition:.5s;-moz-transition:.5s;-o-transition:.5s;transition:.5s}#logo a:hover{background-position:right 25px;text-decoration:none}.navbar{margin:0;border:0;position:fixed;top:0;left:0;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:0 1px 2px #272727;z-index:2000}.body-expanded .navbar{z-index:9}a.show-sidebar{float:left;color:#6d6d6d;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}a.show-sidebar:hover{color:#000}#sidebar-left{position:relative;z-index:inherit;padding-bottom:3000px !important;margin-bottom:-3000px !important;background:#6aa6d6 url(../img/devoops_pattern_b10.png) 0 0 repeat;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}#content{position:relative;z-index:10;background:#ebebeb;box-shadow:0 0 6px #131313;padding-bottom:3000px !important;margin-bottom:-2980px !important;overflow:hidden;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.full-content{overflow:hidden;padding:0;margin:0}.nav.main-menu,.nav.msg-menu{margin:0 -15px}.nav.main-menu>li>a,.nav.msg-menu>li>a{text-align:center;color:#f0f0f0;min-height:40px;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background:rgba(0,0,0,0.1)}.nav.main-menu>li>a:hover,.nav.main-menu>li>a:focus,.nav.main-menu>li.active>a,.nav.main-menu .open>a,.nav.main-menu .open>a:hover,.nav.main-menu .open>a:focus,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-menu>li.active>a,.nav.msg-menu>li>a:hover,.nav.msg-menu>li>a:focus,.nav.msg-menu>li.active>a,.nav.msg-menu .open>a,.nav.msg-menu .open>a:hover,.nav.msg-menu .open>a:focus{background:rgba(0,0,0,0.1);color:#f0f0f0}.nav.main-menu a.active,.nav.msg-menu a.active{background:rgba(0,0,0,0.2)}.nav.main-menu a.active:hover,.nav.msg-menu a.active:hover{background:rgba(0,0,0,0.2)}.nav.main-menu a.active-parent,.nav.msg-menu a.active-parent{background:rgba(0,0,0,0.3)}.nav.main-menu a.active-parent:hover,.nav.msg-menu a.active-parent:hover{background:rgba(0,0,0,0.3)}.nav.main-menu>li>a>i,.nav.msg-menu>li>a>i{font-size:18px;width:auto;display:block;text-align:center;vertical-align:middle}.main-menu .dropdown-menu{position:absolute;z-index:2001;left:100%;top:0;float:none;margin:0;border:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;padding:0;background:#6aa6d6 url(../img/devoops_pattern_b10.png) 0 0 repeat;box-shadow:none;visibility:hidden}.main-menu .active-parent:hover+.dropdown-menu{visibility:visible}.main-menu .active-parent+.dropdown-menu:hover{visibility:visible}.main-menu .dropdown-menu>li>a{padding:9px 15px 9px 40px;color:#f0f0f0}.main-menu .dropdown-menu>li:first-child>a{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0}.main-menu .dropdown-menu>li:last-child>a{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0}#top-panel{line-height:50px;height:50px;background:#ebebeb}#main{margin-top:50px;min-height:800px;overflow:hidden}#search{position:relative;margin-left:20px}#search>input{width:80%;background:#dfdfdf;border:1px solid #c7c7c7;text-shadow:0 1px 1px #EEE;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#686868;line-height:1em;height:30px;padding:0 35px 0 10px;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}#search>input+i{opacity:0;position:absolute;top:18px;right:10px;color:#fff;-webkit-transition:.4s;-moz-transition:.4s;-o-transition:.4s;transition:.4s}#search>input:focus{width:100%;outline:0}#search>input:focus+i{opacity:1}.panel-menu{margin:0}.top-panel-right{padding-left:0}.panel-menu>li>a{padding:0 5px 0 10px;line-height:50px}.panel-menu>li>a:hover{background:0}.panel-menu a.account{height:50px;padding:5px 0 5px 10px;line-height:18px}.panel-menu i{margin-top:8px;padding:5px;font-size:20px;color:#7bc5d3;line-height:1em;vertical-align:top;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.panel-menu>li>a:hover>i{background:#f5f5f5}.panel-menu i.pull-right{color:#000;border:0;box-shadow:none;font-size:16px;background:none !important}.panel-menu .badge{margin-top:3px;padding:3px 6px;vertical-align:top;background:#cea9a9}.avatar{width:40px;float:left;margin-right:5px}.avatar>img{width:40px;height:40px;border:1px solid #f8f8f8}.user-mini>span{display:block;font-size:12px;color:#363636;margin-bottom:-4px}.user-mini>span.welcome{font-weight:bold;margin-top:2px}.panel-menu .dropdown-menu{position:absolute !important;background:rgba(0,0,0,0.7) !important;padding:0;border:0;right:0;left:auto;min-width:100%}.panel-menu .dropdown-menu>li>a{padding:5px 10px !important;color:#f0f0f0}.panel-menu .dropdown-menu>li>a>i{border:0;padding:0;margin:0;font-size:14px;width:20px;display:inline-block;text-align:center;vertical-align:middle}.well{padding:15px}.box{display:block;z-index:1999;position:relative;border:1px solid #f8f8f8;box-shadow:0 0 4px #d8d8d8;background:transparent;margin-bottom:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.full-content .box{border:0;margin-bottom:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.box-header{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;color:#363636;font-size:16px;position:relative;overflow:hidden;background:#f5f5f5;border-bottom:1px solid #e4e4e4;height:28px}.box-name,.modal-header-name{padding-left:15px;line-height:28px}.box-name:hover{cursor:move}.box-name>i{margin-right:5px}.box-icons{position:absolute;top:0;right:0;z-index:9}.no-move{display:none}.expanded .no-move{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;display:block}.box-content{position:relative;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;padding:15px;background:#fcfcfc}.box-content.dropbox,.box-content.sortablebox{overflow:hidden}.full-content .box-content{height:100%;position:absolute;width:100%;left:0;top:0}.box-icons a{cursor:pointer;text-decoration:none !important;border-left:1px solid #fafafa;height:26px;line-height:26px;width:28px;display:block;float:left;text-align:center;color:#b8b8b8 !important;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.box-icons a.beauty-table-to-json{width:auto;padding:0 10px;font-size:14px}.box-icons a:hover{box-shadow:inset 0 0 1px 0 #cecece}.expanded a.close-link{display:none}#sidebar-left.col-xs-2{opacity:0;width:0;padding:0}.sidebar-show #sidebar-left.col-xs-2{opacity:1;width:16.666666666666664%;padding:0 15px}.sidebar-show #content.col-xs-12{opacity:1;width:83.33333333333334%}.expanded{overflow-y:scroll;border:0;z-index:3000 !important;position:fixed;width:100%;height:100%;top:0;left:0;padding:0;background:rgba(0,0,0,0.2);-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.expanded-padding{background:rgba(0,0,0,0.7);padding:50px;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.no-padding{padding:0 !important}.padding-15{padding:15px !important}.no-padding .table-bordered{border:0;margin:0}.no-padding .table-bordered thead tr th:first-child,.no-padding .table-bordered tbody tr th:first-child,.no-padding .table-bordered tfoot tr th:first-child,.no-padding .table-bordered thead tr td:first-child,.no-padding .table-bordered tbody tr td:first-child,.no-padding .table-bordered tfoot tr td:first-child{border-left:0 !important}.no-padding .table-bordered thead tr th:last-child,.no-padding .table-bordered tbody tr th:last-child,.no-padding .table-bordered tfoot tr th:last-child,.no-padding .table-bordered thead tr td:last-child,.no-padding .table-bordered tbody tr td:last-child,.no-padding .table-bordered tfoot tr td:last-child{border-right:0 !important}.table-heading thead tr{background-color:#f0f0f0;background-image:-webkit-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-moz-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-ms-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-o-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:linear-gradient(to bottom,#f0f0f0,#dfdfdf)}table.no-border-bottom tr:last-child td{border-bottom:0}.dataTables_wrapper{overflow:hidden}.dataTables_wrapper table.table{clear:both;max-width:inherit;margin-bottom:0}.table-datatable *,.table-datatable :after,.table-datatable :before{margin:0;padding:0;-webkit-box-sizing:content-box;box-sizing:content-box;-moz-box-sizing:content-box}.table-datatable label{position:relative;display:block;font-weight:400}.table-datatable tbody td{vertical-align:middle !important}.table-datatable img{margin-right:10px;border:1px solid #f8f8f8;width:40px}.table-datatable .sorting{background:url(../img/sort.png) right center no-repeat;padding-right:16px;cursor:pointer}.table-datatable .sorting_asc{background:url(../img/sort-asc.png) right center no-repeat;padding-right:16px;cursor:pointer}.table-datatable .sorting_desc{background:url(../img/sort-desc.png) right center no-repeat;padding-right:16px;cursor:pointer}div.DTTT_collection_background{z-index:2002}div.DTTT .btn{color:#333 !important;font-size:12px}ul.DTTT_dropdown.dropdown-menu{z-index:2003;background:rgba(0,0,0,0.7) !important;padding:0;border:0;margin:0;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;min-width:157px}ul.DTTT_dropdown.dropdown-menu li{position:relative}ul.DTTT_dropdown.dropdown-menu>li>a{position:relative;display:block;padding:5px 10px !important;color:#f0f0f0 !important}ul.DTTT_dropdown.dropdown-menu>li:first-child>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}ul.DTTT_dropdown.dropdown-menu>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}ul.DTTT_dropdown.dropdown-menu>li:hover>a{background:rgba(0,0,0,0.3);color:#f0f0f0}.dataTables_wrapper input[type="text"]{display:block;width:90%;height:26px;padding:2px 12px;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-moz-appearance:none;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.dataTables_wrapper input[type="text"]:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}#breadcrumb{padding:0;line-height:40px;background:#525252;background:#5a8db6 url(../img/devoops_pattern_b10.png) 0 0 repeat;margin-bottom:20px}.breadcrumb{padding:0 15px;background:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0}.breadcrumb>li>a{color:#d8d8d8}.breadcrumb>li>a:hover,.breadcrumb>li:last-child>a{color:#f8f8f8}.bs-callout{padding:15px;border-left:3px solid #525252;background:#dfdfdf}.bs-callout h4{margin-top:0;margin-bottom:5px;color:#525252}.no-padding .bs-callout{border:0}.page-header{margin:0 0 10px;border-bottom:1px solid #c7c7c7}.box-content .page-header,legend,.full-calendar .page-header{margin:0 0 10px;border-bottom:1px dashed #b6b6b6}.invoice-header{margin:0 0 10px;border-bottom:1px dashed #b6b6b6;display:inline-block}.box-content .form-group,.devoops-modal-inner .form-group{margin-top:15px;margin-bottom:15px}.show-grid [class^="col-"]{padding-top:10px;padding-bottom:10px;background-color:#525252;background-color:rgba(129,199,199,0.2);border:1px solid #ebebeb}.show-grid [class^="col-"]:hover{padding-top:10px;padding-bottom:10px;background-color:rgba(107,134,182,0.2);border:1px solid #ebebeb}.show-grid,.show-grid-forms{margin-bottom:15px}.show-grid-forms [class^="col-"]{padding-top:10px;padding-bottom:10px}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th,td.beauty-hover{background-color:rgba(219,219,219,0.3) !important}.table-hover>tbody>tr:hover>td.beauty-hover:hover{background-color:rgba(219,219,219,0.9) !important}.DTTT.btn-group{position:absolute;top:-28px;right:83px;border-right:1px solid #dbdbdb}.DTTT.btn-group a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;line-height:1em;font-size:14px;font-weight:bold;outline:0;box-shadow:none !important;padding:6px 12px;margin:0;background:#f7f7f7;border:0}#screensaver{position:fixed;top:0;left:0;width:100%;height:100%;z-index:3000;background:#000;display:none}#screensaver.show{display:block}#canvas{position:relative}#screensaver i{position:absolute;top:50px;right:50px;background:rgba(255,255,255,0.5);line-height:100px;width:100px;height:100px;text-align:center;font-size:60px;color:rgba(0,0,0,0.8);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well pre{padding:0;margin-top:0;margin-bottom:0;background-color:transparent;border:0;white-space:nowrap}.well pre code{white-space:normal}.btn{border-width:1px;border-style:solid;border-width:1px;text-decoration:none;border-color:rgba(0,0,0,0.3);cursor:pointer;outline:0;font-family:"Lucida Grande","Lucida Sans","Lucida Sans Unicode","Segoe UI",Verdana,sans-serif;display:inline-block;vertical-align:top;position:relative;font-size:12px;font-weight:bold;text-align:center;background-color:#a2a2a2;background:#a2a2a2 -moz-linear-gradient(top,rgba(255,255,255,0.6),rgba(255,255,255,0));background:#a2a2a2 -webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,0.6)),to(rgba(255,255,255,0)));line-height:24px;margin:0 0 10px 0;padding:0 10px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-moz-user-select:none;-webkit-user-select:none;outline:none !important}.btn-label-left,.btn-label-right{padding:0 10px}.btn-label-left span{position:relative;left:-10px;display:inline-block;padding:0 8px;background:rgba(0,0,0,0.1)}.btn-label-right span{position:relative;right:-10px;display:inline-block;padding:0 8px;background:rgba(0,0,0,0.1)}.btn i{vertical-align:middle}.btn-app{width:80px;height:80px;padding:0;font-size:16px}.btn-app i{font-size:36px;line-height:78px;display:block}.btn-app-sm{width:50px;height:50px;padding:0;font-size:12px}.btn-app-sm i{font-size:18px;line-height:48px;display:block}.btn-circle{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;border:2px solid rgba(0,0,0,0.25)}.btn.active{background-image:none;outline:0;-webkit-box-shadow:none;box-shadow:none}.btn-default,.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active,.progress-bar{background-color:#d8d8d8;border-color:rgba(0,0,0,0.3);color:#929292}.btn-primary,.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active,.table>thead>tr>td.primary,.table>tbody>tr>td.primary,.table>tfoot>tr>td.primary,.table>thead>tr>th.primary,.table>tbody>tr>th.primary,.table>tfoot>tr>th.primary,.table>thead>tr.primary>td,.table>tbody>tr.primary>td,.table>tfoot>tr.primary>td,.table>thead>tr.primary>th,.table>tbody>tr.primary>th,.table>tfoot>tr.primary>th{background-color:#6aa6d6;border-color:rgba(0,0,0,0.3);color:#f8f8f8}.btn-success,.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active,.progress-bar-success,.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#63cc9e;border-color:rgba(0,0,0,0.3);color:#f8f8f8}.btn-info,.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active,.progress-bar-info,.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#7bc5d3;border-color:rgba(0,0,0,0.3);color:#f8f8f8}.btn-warning,.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active,.progress-bar-warning,.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#dfd271;border-color:rgba(0,0,0,0.3);color:#f8f8f8}.btn-danger,.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active,.progress-bar-danger,.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#d15e5e;border-color:rgba(0,0,0,0.3);color:#f8f8f8}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#525252;background-color:#b8b8b8;border-color:rgba(0,0,0,0.3)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary,.table-hover>tbody>tr>td.primary:hover,.table-hover>tbody>tr>th.primary:hover,.table-hover>tbody>tr.primary:hover>td,.table-hover>tbody>tr.primary:hover>th{color:#fff;background-color:#5a8db6;border-color:rgba(0,0,0,0.3)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{color:#fff;background-color:#54ae86;border-color:rgba(0,0,0,0.3)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{color:#fff;background-color:#69a8b4;border-color:rgba(0,0,0,0.3)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{color:#fff;background-color:#beb360;border-color:rgba(0,0,0,0.3)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{color:#fff;background-color:#b25050;border-color:rgba(0,0,0,0.3)}.progress{overflow:visible}.progress-ui{height:10px}.progress-bar{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.progress-bar.ui-widget-content{background:0;border:0;height:100%;position:relative}.progress-bar .ui-state-default{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;height:10px;width:10px;top:0;margin-left:-5px;cursor:pointer;border:0 solid #d3d3d3;outline:none !important;background-color:#f0f0f0;background-image:-webkit-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-moz-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-ms-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-o-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:linear-gradient(to bottom,#f0f0f0,#dfdfdf)}.progress-bar .ui-widget-header{background:#d8d8d8}.progress-bar-primary .ui-widget-header{background:#6aa6d6;color:#f8f8f8}.progress-bar-success .ui-widget-header{background:#63cc9e;color:#f8f8f8}.progress-bar-info .ui-widget-header{background:#7bc5d3;color:#f8f8f8}.progress-bar-warning .ui-widget-header{background:#dfd271;color:#f8f8f8}.progress-bar-danger .ui-widget-header{background:#d15e5e;color:#f8f8f8}.progress-bar .ui-state-default{background:#b8b8b8}.progress-bar-primary .ui-state-default{background:#5a8db6}.progress-bar-success .ui-state-default{background:#54ae86}.progress-bar-info .ui-state-default{background:#69a8b4}.progress-bar-warning .ui-state-default{background:#beb360}.progress-bar-danger .ui-state-default{background:#b25050}.slider-range-min-amount,.slider-range-max-amount,.slider-range-amount{border:0;background:0;outline:none !important}.progress-bar.ui-slider-vertical{width:20px}.progress-bar.ui-slider-vertical .ui-state-default{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;height:20px;width:20px;top:auto;margin-left:0;left:0}#equalizer .progress{height:160px;display:inline-block;margin:15px}.beauty-table{width:100%;border-collapse:separate;border-spacing:0}.beauty-table input{border:1px solid transparent;background:0;font-size:16px;text-align:center;padding:2px 15px !important;width:100%;outline:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.beauty-table input:focus{border:1px solid #dfdfdf;background:#fefefe;font-size:16px;text-align:center;padding:2px 15px !important;width:100%;outline:0}.c{color:#999;display:block}.nt{color:#2f6f9f}.na{color:#4f9fcf}.s{color:#d44950}.radio,.checkbox,.radio-inline,.checkbox-inline{position:relative}.radio label,.checkbox label,.radio-inline label,.checkbox-inline label{font-weight:normal;cursor:pointer;padding-left:8px;-webkit-transition:1s;-moz-transition:1s;-o-transition:1s;transition:1s}.radio+.radio,.checkbox+.checkbox{margin-top:10px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;clip:rect(0,0,0,0)}.checkbox i,.checkbox-inline i,.radio i,.radio-inline i{cursor:pointer;position:absolute;left:0;top:0;font-size:24px;-webkit-transition:1s;-moz-transition:1s;-o-transition:1s;transition:1s}.checkbox i.small,.checkbox-inline i.small,.radio i.small,.radio-inline i.small{font-size:18px;top:2px}.checkbox input[type=checkbox]:checked+i:before,.checkbox-inline input[type=checkbox]:checked+i:before{content:"\f046"}.radio input[type=radio]:checked+i:before,.radio-inline input[type=radio]:checked+i:before{content:"\f192"}.toggle-switch{position:relative;width:60px}.toggle-switch input{display:none}.toggle-switch label{display:block;overflow:hidden;cursor:pointer;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px}.toggle-switch-inner{width:200%;margin-left:-100%;-webkit-transition:margin .3s ease-in 0;-moz-transition:margin .3s ease-in 0;-o-transition:margin .3s ease-in 0;transition:margin .3s ease-in 0}.toggle-switch-inner:before,.toggle-switch-inner:after{float:left;width:50%;height:20px;padding:0;line-height:20px;font-size:12px;text-shadow:1px 1px 1px #fff;color:#929292;background-color:#f5f5f5;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.toggle-switch-inner:before{content:"ON";padding-left:15px;-webkit-border-radius:20px 0 0 20px;-moz-border-radius:20px 0 0 20px;border-radius:20px 0 0 20px}.toggle-switch-inner:after{content:"OFF";padding-right:15px;text-align:right;-webkit-border-radius:0 20px 20px 0;-moz-border-radius:0 20px 20px 0;border-radius:0 20px 20px 0}.toggle-switch-switch{width:20px;margin:0;border:2px solid #d8d8d8;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;position:absolute;top:0;bottom:0;right:40px;color:#f8f8f8;line-height:1em;text-shadow:0 0 1px #adadad;text-align:center;-webkit-transition:all .3s ease-in 0;-moz-transition:all .3s ease-in 0;-o-transition:all .3s ease-in 0;transition:all .3s ease-in 0;background-color:#f0f0f0;background-image:-webkit-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-moz-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-ms-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:-o-linear-gradient(top,#f0f0f0,#dfdfdf);background-image:linear-gradient(to bottom,#f0f0f0,#dfdfdf)}.toggle-switch input:checked+.toggle-switch-inner{margin-left:0}.toggle-switch input:checked+.toggle-switch-inner+.toggle-switch-switch{right:0}.toggle-switch-danger input:checked+.toggle-switch-inner+.toggle-switch-switch{border:2px solid #d15e5e;background:#d15e5e}.toggle-switch-warning input:checked+.toggle-switch-inner+.toggle-switch-switch{border:2px solid #dfd271;background:#dfd271}.toggle-switch-info input:checked+.toggle-switch-inner+.toggle-switch-switch{border:2px solid #7bc5d3;background:#7bc5d3}.toggle-switch-success input:checked+.toggle-switch-inner+.toggle-switch-switch{border:2px solid #63cc9e;background:#63cc9e}.toggle-switch-primary input:checked+.toggle-switch-inner+.toggle-switch-switch{border:2px solid #6aa6d6;background:#6aa6d6}.select2-container{width:100%}.select2-container .select2-choice{height:30px}.knob-slider{position:relative;text-align:center;display:inline-block;width:100%;margin-bottom:5px}.knob-slider>div{display:inline-block !important}.knob-slider input{outline:none !important}.ipod{background:#dedede;text-align:center;padding:50px 0}.knob-clock{text-align:center}.knob-clock>div{font-size:50px;text-align:center;color:#a2a2a2}.knob{border:0;background:0}.box-pricing:hover{box-shadow:0 0 5px #525252;-webkit-transition:.5s;-moz-transition:.5s;-o-transition:.5s;transition:.5s}.box-pricing .row-fluid>div{padding:18px 15px 8px;line-height:1.428571429;vertical-align:top}.box-pricing .row-fluid.centered>div{background-color:#f5f5f5;padding:8px;text-align:center}.box-pricing .row-fluid.centered>div:nth-child(odd){background-color:#f9f9f9}.box-pricing .box-header{height:80px;padding:10px 0}.box-pricing .box-name{padding:0 10px;text-align:center}.box-pricing .box-name:hover{cursor:inherit}#messages #breadcrumb{margin-bottom:0;position:fixed;width:100%;z-index:2}#messages-menu{position:fixed;top:90px;background:#a5a5a5;margin:0;height:100%;z-index:2}#messages-list{margin-top:40px;padding:0}.one-list-message{background:#f1f1f1;border-bottom:1px solid #CCC;padding:15px 15px 15px 25px;margin:0}.one-list-message .checkbox{margin:0;overflow:hidden;white-space:nowrap}.one-list-message .message-title{overflow:hidden;white-space:nowrap;width:80%}.one-list-message .message-date{overflow:hidden;white-space:nowrap;font-size:11px;line-height:20px;text-align:center;position:absolute;right:10px;font-weight:bold;background:#d8d8d8;padding:0;width:50px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;color:#000}.form-control{height:26px;padding:2px 12px}.input-lg{height:39px}.input-sm{height:18px}.bg-default{background:#d8d8d8 !important}.bg-primary{background:#6aa6d6 !important;color:#f8f8f8 !important}.bg-success{background:#63cc9e !important;color:#f8f8f8 !important}.bg-info{background:#7bc5d3 !important;color:#f8f8f8 !important}.bg-warning{background:#dfd271 !important;color:#f8f8f8 !important}.bg-danger{background:#d15e5e !important;color:#f8f8f8 !important}.txt-default{color:#d8d8d8 !important}.txt-primary{color:#6aa6d6 !important}.txt-success,.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#63cc9e !important}.txt-info{color:#7bc5d3 !important}.txt-warning,.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#dfd271 !important}.txt-danger,.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#d15e5e !important}.has-success .form-control{border-color:#63cc9e}.has-warning .form-control{border-color:#dfd271}.has-error .form-control{border-color:#d15e5e}.has-success .form-control:focus{border-color:#63cc9e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #63cc9e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #63cc9e}.has-warning .form-control:focus{border-color:#dfd271;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dfd271;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dfd271}.has-error .form-control:focus{border-color:#d15e5e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d15e5e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d15e5e}.select2-container-multi .select2-choices{min-height:26px;display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff',endColorstr = '#eeeeee',GradientType = 0);background-image:linear-gradient(top,#fff 0,#eee 50%)}.select2-container-multi .select2-choices .select2-search-field input{padding:0;margin:0}.has-feedback .form-control-feedback{width:26px;height:26px;line-height:26px}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{min-height:inherit;padding-top:0}.form-horizontal .control-label{padding-top:4px}.input-group-addon{padding:0 6px}.form-group .form-control,.form-group .input-group{margin-bottom:5px}.input-group .form-control{margin:0}#ui-datepicker-div{background:rgba(0,0,0,0.7) !important;border:0}#ui-datepicker-div .ui-widget-header{background:rgba(0,0,0,0.2);border:0;border-bottom:1px solid #686868;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#f8f8f8;padding:1px 0}#ui-datepicker-div.ui-widget-content{color:#f8f8f8 !important}#ui-datepicker-div .ui-state-default,#ui-datepicker-div .ui-widget-content .ui-state-default,#ui-datepicker-div .ui-widget-header .ui-state-default{background:0;border:0;color:#f8f8f8;text-align:center}#ui-datepicker-div .ui-state-hover,#ui-datepicker-div.ui-widget-content .ui-state-hover,#ui-datepicker-div .ui-widget-header .ui-state-hover,#ui-datepicker-div .ui-state-focus,#ui-datepicker-div.ui-widget-content .ui-state-focus,#ui-datepicker-div .ui-widget-header .ui-state-focus,#ui-datepicker-div .ui-state-highlight,#ui-datepicker-div.ui-widget-content .ui-state-highlight,#ui-datepicker-div .ui-widget-header .ui-state-highlight{background:rgba(0,0,0,0.3) !important;border:0;top:2px}#ui-datepicker-div .ui-datepicker-group{border-left:1px solid #686868}#ui-datepicker-div .ui-datepicker-group:first-child{border-left:0}#ui-datepicker-div .ui-datepicker-buttonpane{margin:0}#ui-datepicker-div .ui-datepicker-group table{margin:0 auto !important}.ui-datepicker .ui-datepicker-prev{left:2px !important;cursor:pointer}.ui-datepicker .ui-datepicker-next{right:2px !important;cursor:pointer}.ui-icon-circle-triangle-w{background:url(../img/ui-left.png) 0 0 no-repeat !important}.ui-icon-circle-triangle-e{background:url(../img/ui-right.png) 0 0 no-repeat !important}.ui-icon-circle-arrow-s{background:url(../img/ui-accordion-down.png) 0 0 no-repeat !important}.ui-icon-circle-arrow-e{background:url(../img/ui-accordion-right.png) 0 0 no-repeat !important}#ui-datepicker-div .ui-slider-horizontal{background:rgba(0,0,0,0.5);height:4px;border:0}#ui-datepicker-div .ui-slider-horizontal .ui-slider-handle{background:#d8d8d8 !important;border:1px solid #f8f8f8;height:8px;width:8px;top:-2px;margin-left:-4px;outline:0;cursor:pointer}.ui-spinner-input{margin:0}.ui-spinner .form-control{margin-bottom:0}#tabs.ui-widget-content,#tabs .ui-widget-header{border:0;background:0;padding:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#tabs .ui-widget-header{border-bottom:1px solid #d8d8d8}#tabs .ui-state-default,#tabs.ui-widget-content .ui-state-default,#tabs .ui-widget-header .ui-state-default{border:0;margin:0 0 -1px 0;background:none !important}#tabs .ui-state-active,#tabs.ui-widget-content .ui-state-active,#tabs .ui-widget-header .ui-state-active{background:none !important}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin:0;padding:0}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{padding:5px 15px;outline:none !important}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{background:#fcfcfc;border:1px solid #d8d8d8;border-bottom:0}.ui-tabs .ui-tabs-nav{padding:0}.ui-tabs .ui-tabs-panel{padding:1em 0}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.jqstooltip{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;border:0 !important;text-align:center !important;margin:0 !important;width:50px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:0}.ui-accordion .ui-accordion-header{padding:6px 12px;margin:0;top:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-accordion .ui-accordion-icons{padding-left:28px}.ui-accordion-header.ui-state-default{background:#f5f5f5 !important;border:1px solid #fcfcfc;border-left:0;border-right:0}.ui-accordion-header.ui-state-hover,.ui-accordion-header.ui-state-focus{background:#ebebeb !important}.ui-accordion-header.ui-state-active{background:#d8d8d8 !important}.ui-accordion .ui-accordion-content{padding:10px 12px;background:0;border:1px solid #d8d8d8;border-top:0;border-bottom:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#simple_gallery{text-align:center}#simple_gallery a.fancybox{display:inline-block;padding:5px}#simple_gallery a.fancybox img{width:100%;padding:2px;border:1px solid #979797;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}#simple_gallery a.fancybox img:hover{box-shadow:0 0 10px #c7c7c7}.justifiedGallery{overflow:hidden;width:100%}.jg-row{position:relative;white-space:nowrap}.justifiedGallery .jg-image{position:absolute;display:inline-block;vertical-align:top;margin-left:0}.justifiedGallery .jg-image a{text-decoration:none}.justifiedGallery .jg-image img{border:0}.justifiedGallery .jg-image-label{white-space:normal;font:normal 12px arial;background:#000;color:#fff;position:absolute;left:0;right:0;padding:5px 5px 10px 8px;text-align:left;opacity:0}.ex-tooltip{position:absolute;display:none;z-index:2000}.morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style,.ex-tooltip{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:6px 20px;color:#525252;background:rgba(255,255,255,0.8);font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:.25em 0}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:.1em 0}#dashboard-header{margin-bottom:20px}#dashboard_links{padding:0}#dashboard_links .nav{background:#3575a0 url(../img/devoops_pattern_b10.png) 0 0 repeat;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;overflow:hidden}#dashboard_links .nav-stacked>li{border-bottom:1px solid rgba(0,0,0,0.25);border-top:1px solid rgba(255,255,255,0.12);font-size:12px;font-weight:700;line-height:15px;padding:0;margin:0}#dashboard_links .nav-pills>li>a{color:#f8f8f8;display:block;padding:20px 10px 20px 15px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;outline:0}#dashboard_links .nav-pills>li.active{border-top-color:rgba(0,0,0,0.11);position:relative;margin:0}#dashboard_links .nav-pills>li.active>a,#dashboard_links .nav-pills>li.active>a:hover,#dashboard_links .nav-pills>li.active>a:focus,#dashboard_links .nav>li>a:hover,#dashboard_links .nav>li>a:focus{background:rgba(0,0,0,0.1)}#dashboard_links .nav-pills>li.active>a:before{font-family:FontAwesome;content:"\f0da";position:absolute;left:-2px;font-size:30px;color:#f8f8f8}#dashboard_tabs{background:#f8f8f8;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}#dashboard-overview{padding-bottom:15px}.sparkline-dashboard{float:left;margin-right:10px;text-align:center}.sparkline-dashboard-info{float:left;display:block;text-align:center}.sparkline-dashboard-info span{display:block;font-weight:bold;color:#b25050}#ow-marketplace{margin-top:20px}.ow-server{padding-top:8px;padding-bottom:25px}.ow-server:hover{background:#e7e7e7}.ow-server .page-header{padding-bottom:3px}.ow-server h4 i{position:absolute;left:15px}.ow-server small{position:absolute;right:15px;top:51px}.ow-server-bottom{margin-top:25px}.ow-server-bottom .knob-slider{font-size:11px}#ow-server-footer{overflow:hidden;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.ow-settings{position:absolute;top:7px;left:40px;display:none}.ow-settings a{color:#525252}.ow-server:hover .ow-settings{display:block}#ow-server-footer a{display:block;padding:10px 0;border-left:1px solid #f8f8f8;text-decoration:none}#ow-server-footer a:first-child{border-left:0}#ow-server-footer span{display:block}.m-table>thead>tr>th,.m-table>tbody>tr>th,.m-table>tfoot>tr>th,.m-table>thead>tr>td,.m-table>tbody>tr>td,.m-table>tfoot>tr>td{vertical-align:middle;padding:2px 5px}.m-ticker span{display:block;font-size:.8em;line-height:1em}.m-price{text-align:right}.m-change .fa-angle-up{color:#54ae86;font-weight:bold}.m-change .fa-angle-down{color:#b25050;font-weight:bold}#ow-summary{font-size:12px}#ow-summary b{float:right;padding:1px 4px;margin:1px;border:1px solid #d8d8d8;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#ow-donut{margin:0 0 20px}#ow-donut>div{padding:0}#ow-activity .row{margin:0 0 0 -15px;font-size:13px}#ow-setting{border:1px solid #c7c7c7;padding:0;position:absolute;width:158px;height:28px;top:1px;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;opacity:0;right:-200px;-webkit-transition:.1s;-moz-transition:.1s;-o-transition:.1s;transition:.1s}#ow-marketplace:hover #ow-setting{opacity:1;right:15px}#ow-setting a{text-align:center;float:left;margin-left:10px;color:#d8d8d8;font-size:16px;display:block;line-height:28px;width:20px;height:26px;-webkit-transition:.1s;-moz-transition:.1s;-o-transition:.1s;transition:.1s}#ow-setting a:hover{font-size:16px;color:#222;line-height:24px}#ow-licenced{margin:20px 0}#ow-licenced .row{margin:0}#ow-stat .row{margin:0}#dashboard-clients .one-list-message{background:0;padding:10px 15px}#dashboard-clients .one-list-message:last-child{border-bottom:0}#dashboard-clients .one-list-message .message-date{position:relative;width:auto;right:auto;left:15px;padding:0 15px}.btn+.dropdown-menu{margin-top:-10px;background:rgba(0,0,0,0.7) !important;padding:0;border:0;right:0;left:auto;min-width:100%}.btn+.dropdown-menu>li>a{padding:5px 10px !important;color:#f0f0f0}.v-txt{-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-o-transform:rotate(-90deg);position:absolute;top:60px;left:-20px;color:#d8d8d8;font-size:18px;box-shadow:0 0 10px #d8d8d8;padding:0 5px}.full-calendar{padding:25px 0;background:#fcfcfc}.external-event{padding:2px 6px;margin:4px 0;background:#f5f5f5}.external-event:hover{cursor:move;background:#6aa6d6;color:#f8f8f8}#add-new-event{background:#ebebeb;margin-bottom:30px;padding:10px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.modal-backdrop{z-index:2000}.modal{z-index:2001}.fc-event{border:1px solid #6aa6d6;background-color:#6aa6d6}.qq-upload-drop-area{position:absolute;background:#fcfcfc;width:100%;height:100%}.qq-upload-button{float:right;margin:20px 15px 0 0}.qq-upload-list{position:relative;z-index:3;margin:60px 15px 0;padding:0;list-style:none}.qq-upload-list li{position:relative;display:inline-block;padding:15px;margin:15px;border:1px solid #e6e6e6;text-align:center;font-size:12px;background:rgba(245,245,245,0.9)}.qq-upload-settings{opacity:0;visibility:hidden;bottom:0;position:absolute;width:100%;left:0;padding:7px 0;background:#FFF;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}.qq-upload-list li:hover .qq-upload-settings{opacity:1;visibility:visible}.qq-upload-list li img{border:1px solid #b4b4b4;margin-bottom:5px}.qq-upload-filename{display:block;overflow:hidden}.qq-upload-file,.qq-upload-size,.qq-upload-status-text{display:block}.qq-dropped-zone{position:absolute;top:5%;left:50%;margin-left:-71px;text-align:center;font-weight:bold}.qq-dropped-zone i{font-size:5em;display:block;color:#f5f5f5;text-shadow:0 -1px 1px #d8d8d8}#page-500 h1,.page-404 h1{font-size:5em}.page-404 .form-inline{margin:40px auto;width:60%;padding:15px;background:#fafafa;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.page-404 .input-group-btn:last-child>.btn,.page-404 .input-group-btn:last-child>.btn-group{margin-left:-1px;margin-bottom:0;height:39px}#page-500 h3,.page-404 h3{margin:5px 0 20px}.preloader{position:absolute;width:100%;height:100%;left:0;background:#ebebeb;z-index:2000}.devoops-getdata{position:absolute;top:25px;left:15px;color:#ebebeb}#page-500,#page-login{position:absolute;height:100%;width:100%}#page-500{background:#ebebeb}#page-500 img{display:block;margin:30px auto}#page-login .logo{position:absolute}#page-login h3{font-size:20px;font-family:'Righteous',cursive}#page-login .text-right{margin-top:15px}#page-login .box{margin-top:15%}.one-result{margin-top:20px}.one-result p{margin:0}.large{font-size:1.25em}.nav-search>li.active>a{background:#f0f0f0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#525252;border-bottom:1px solid #cecece;font-weight:bold}.page-feed .avatar{width:60px;float:left;margin:10px 15px;text-align:center;overflow:hidden}.page-feed .avatar img{width:60px;height:60px;border:1px solid #f8f8f8}.page-feed-content{position:relative;padding:3px 15px 5px;background:#fcfcfc;margin-left:90px;min-height:80px}.page-feed-content small.time{font-style:italic}.page-feed .page-feed-content:before{font-family:FontAwesome;content:"\f0d9";position:absolute;left:-10px;top:15px;font-size:30px;color:#fcfcfc}.likebox{overflow:hidden}.likebox .navbar-nav{margin:0}.likebox .navbar-nav li{margin-right:15px;float:left}.likebox .fa-thumbs-up{color:#6aa6d6}.likebox .fa-thumbs-down{color:#d15e5e}#modalbox{display:none;position:fixed;overflow:auto;overflow-x:hidden;top:0;right:0;bottom:0;left:0;z-index:5000;background:rgba(0,0,0,0.8)}#modalbox .devoops-modal{position:absolute;top:90px;margin-left:-300px;left:50%;border:1px solid #f8f8f8;box-shadow:0 0 20px #6aa6d6;background:transparent;margin-bottom:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:600px;z-index:6000}#modalbox .devoops-modal-header{color:#363636;font-size:16px;position:relative;overflow:hidden;background:#f5f5f5;border-bottom:1px solid #e4e4e4;height:28px}#modalbox .devoops-modal-inner{position:relative;overflow:hidden;padding:15px;background:#fcfcfc}#modalbox .devoops-modal-bottom{position:relative;overflow:hidden;padding:15px;background:#d8d8d8}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:4px 10px;margin-left:-1px;line-height:1.428571429;color:#969696;text-decoration:none;background-color:#f5f5f5;border:1px solid #d8d8d8}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#8a8a8a;background-color:#eee}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#979797;cursor:not-allowed;background-color:#fcfcfc;border-color:#d8d8d8}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#6aa6d6;border-color:#6aa6d6}.fancybox-nav{position:fixed;width:50%}.fancybox-close{position:fixed;top:20px;right:36px;background:url(../img/times.png) 0 0 no-repeat}.fancybox-prev span{left:21px;background:url(../img/chevron-left.png) 0 0 no-repeat}.fancybox-next span{right:36px;background:url(../img/chevron-right.png) 0 0 no-repeat}#social a{margin:10px 3px;color:#666;display:block;float:left}#event_delete{margin-left:20px}@media(min-width:768px){#sidebar-left.col-sm-2{opacity:1;width:16.666666666666664%;padding:0 15px}.sidebar-show #sidebar-left.col-sm-2{opacity:0;width:0;padding:0}.sidebar-show #content.col-sm-10{opacity:1;width:100%}.page-404 .form-inline{width:60%}}@media(min-width:992px){.nav.main-menu>li>a,.nav.msg-menu>li>a{text-align:left}.nav.main-menu>li>a>i,.nav.msg-menu>li>a>i{font-size:14px;width:20px;display:inline-block}.main-menu .dropdown-menu{position:relative;z-index:inherit;left:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:rgba(0,0,0,0.2);visibility:visible}.main-menu .dropdown-menu>li>a{-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important}.page-404 .form-inline{width:40%}}@media(max-width:767px){#main{margin-top:100px}#messages-menu{top:140px}.page-404 .form-inline{width:100%}#dashboard_links .nav{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}#dashboard_links .nav-stacked>li{float:left}#dashboard_links .nav-pills>li>a{padding:15px}#dashboard_links .nav-pills>li.active>a:before{bottom:0;left:50%;margin-left:-9px}}@media(max-width:620px){.user-mini{display:none}}@media(max-width:400px){.panel-menu a.account{padding:5px 0 5px 0}.avatar{margin:0}.panel-menu i.pull-right{margin-left:0}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background:0}#dashboard_links .nav-stacked>li{float:none}#dashboard_links .nav-pills>li.active>a:before{display:none}}#chat {width: 100%;height: 40em;overflow: auto;margin-bottom: 15px} diff --git a/plugins/web_gui/static/fonts/glyphicons-halflings-regular.eot b/plugins/web_gui/static/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..423bd5d3a20b804f596e04e5cd02fb4f16cfcbc1 GIT binary patch literal 20290 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/web_gui/static/fonts/glyphicons-halflings-regular.ttf b/plugins/web_gui/static/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a498ef4e7c8b556fc36f580c5ff524025bb11c84 GIT binary patch literal 41236 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 z

    E}xoj|jR83R*{HbqY(3dvUrZyZzv88xnqt=t&fsQA+M;n{)tZNz?&EqZ-058kH z!BjH?y{l


    (Ete9TT@jppL<^#auiaG%)lLX|~0h(ZY|4?NH`0k{7~pf!zfPuYVz z;K1zIlWixb$qA#?FPwzk;t=Xk!bS`6qFW>6e;l18VnTRnTTAxnSaB1wzsZSA6kjCm zqQ(t~>Y79{JwH&y9_mJ@w0zkZ)hTX5#@(9mF9DVFo04;&cXzBso-jC#<*$nU;T?U&<#!VdJB>`J0NH zkcY=*7vF0tZY8>H*nr?QljJfK@|=@jjS{kc0}-Ie2~xxBXW&AUKn?8Bao4q&e@H0cu2Wrg1 z)#D7r95!^x6d*WvcGju)lYAR4e{VNi3J{zLzYWO$;W*wn0?sZ+6(Bfw5>k9QjyIaG z*f!+N6d;)Lqqs%9^G6Cm(QX^AXh1NRM<|F(ljBXTA|?Sl(7IrALn~97e=6L0r11^h zq+YNQfK{YMazi5xuZkUK-LK)|z#sJC#7_yn1)B=4@W5Oh1|N>6}H^Fb-VNM&4iNEcBsHwH*|<0W$6ONb7YS zvk;+Cos-Q7jU0yu^hTgH6%qZ{%At_QCIXLXgPO9AS#JLEL$~xEh`8Xq^M0(Eh~AdT zm${@R!Li=DE;G=YittEKQ;V7m+qKNA-+s~7DGLMDP{l?x(vf)R9NK~2A((J^bm_6F zN`?!~o{ha;f)0c>%ZHQlV?!5UGq_&Y1>4^TqxJ0_5G=gK)8FzPN02Z4Eo(gF84*7W z+*9Cp=zbLDvGu&M%3bSJlFM5xy-J|;L_+Ki%Bku=)F_x0 z2FZf4P)ywpv^r?EL_z-~k0|4tqQ$rOiV6vaQW6av+uRw54Ai#u`Pb_rNWz>%4?=6Qp7E~sK^8&{EX1jdbV zw#}uTPD2T}p_{K9fg`mNYoGilPqPhFG#dzT
    - - - -
    - - -
    - - - + + + + + + + + + + + diff --git a/plugins/web_gui/static/js/devoops.js b/plugins/web_gui/static/js/devoops.js new file mode 100644 index 0000000..7d949fa --- /dev/null +++ b/plugins/web_gui/static/js/devoops.js @@ -0,0 +1,2431 @@ +// +// Main script of DevOOPS v1.0 Bootstrap Theme +// +"use strict"; +/*------------------------------------------- + Dynamically load plugin scripts +---------------------------------------------*/ +// +// Dynamically load Fullcalendar Plugin Script +// homepage: http://arshaw.com/fullcalendar +// require moment.js +// +function LoadCalendarScript(callback){ + function LoadFullCalendarScript(){ + if(!$.fn.fullCalendar){ + $.getScript('plugins/fullcalendar/fullcalendar.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } + } + if (!$.fn.moment){ + $.getScript('plugins/moment/moment.min.js', LoadFullCalendarScript); + } + else { + LoadFullCalendarScript(); + } +} +// +// Dynamically load OpenStreetMap Plugin +// homepage: http://openlayers.org +// +function LoadOpenLayersScript(callback){ + if (!$.fn.OpenLayers){ + $.getScript('http://www.openlayers.org/api/OpenLayers.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load jQuery Timepicker plugin +// homepage: http://trentrichardson.com/examples/timepicker/ +// +function LoadTimePickerScript(callback){ + if (!$.fn.timepicker){ + $.getScript('plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.min.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load Bootstrap Validator Plugin +// homepage: https://github.com/nghuuphuoc/bootstrapvalidator +// +function LoadBootstrapValidatorScript(callback){ + if (!$.fn.bootstrapValidator){ + $.getScript('plugins/bootstrapvalidator/bootstrapValidator.min.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load jQuery Select2 plugin +// homepage: https://github.com/ivaynberg/select2 v3.4.5 license - GPL2 +// +function LoadSelect2Script(callback){ + if (!$.fn.select2){ + $.getScript('plugins/select2/select2.min.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load DataTables plugin +// homepage: http://datatables.net v1.9.4 license - GPL or BSD +// +function LoadDataTablesScripts(callback){ + function LoadDatatables(){ + $.getScript('plugins/datatables/jquery.dataTables.js', function(){ + $.getScript('plugins/datatables/ZeroClipboard.js', function(){ + $.getScript('plugins/datatables/TableTools.js', function(){ + $.getScript('plugins/datatables/dataTables.bootstrap.js', callback); + }); + }); + }); + } + if (!$.fn.dataTables){ + LoadDatatables(); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load Widen FineUploader +// homepage: https://github.com/Widen/fine-uploader v4.3.1 license - GPL3 +// +function LoadFineUploader(callback){ + if (!$.fn.fineuploader){ + $.getScript('plugins/fineuploader/jquery.fineuploader-4.3.1.min.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load xCharts plugin +// homepage: http://tenxer.github.io/xcharts/ v0.3.0 license - MIT +// Required D3 plugin http://d3js.org/ v3.4.1 license - MIT +// +function LoadXChartScript(callback){ + function LoadXChart(){ + $.getScript('plugins/xcharts/xcharts.min.js', callback); + } + function LoadD3Script(){ + if (!$.fn.d3){ + $.getScript('plugins/d3/d3.v3.min.js', LoadXChart) + } + else { + LoadXChart(); + } + } + if (!$.fn.xcharts){ + LoadD3Script(); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load Flot plugin +// homepage: http://www.flotcharts.org v0.8.2 license- MIT +// +function LoadFlotScripts(callback){ + function LoadFlotScript(){ + $.getScript('plugins/flot/jquery.flot.js', LoadFlotResizeScript); + } + function LoadFlotResizeScript(){ + $.getScript('plugins/flot/jquery.flot.resize.js', LoadFlotTimeScript); + } + function LoadFlotTimeScript(){ + $.getScript('plugins/flot/jquery.flot.time.js', callback); + } + if (!$.fn.flot){ + LoadFlotScript(); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load Morris Charts plugin +// homepage: http://www.oesmith.co.uk/morris.js/ v0.4.3 License - MIT +// require Raphael http://raphael.js +// +function LoadMorrisScripts(callback){ + function LoadMorrisScript(){ + if(!$.fn.Morris){ + $.getScript('plugins/morris/morris.min.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } + } + if (!$.fn.raphael){ + $.getScript('plugins/raphael/raphael-min.js', LoadMorrisScript); + } + else { + LoadMorrisScript(); + } +} +// +// Dynamically load Fancybox 2 plugin +// homepage: http://fancyapps.com/fancybox/ v2.1.5 License - MIT +// +function LoadFancyboxScript(callback){ + if (!$.fn.fancybox){ + $.getScript('plugins/fancybox/jquery.fancybox.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load jQuery-Knob plugin +// homepage: http://anthonyterrien.com/knob/ v1.2.5 License- MIT or GPL +// +function LoadKnobScripts(callback){ + if(!$.fn.knob){ + $.getScript('plugins/jQuery-Knob/jquery.knob.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +// +// Dynamically load Sparkline plugin +// homepage: http://omnipotent.net/jquery.sparkline v2.1.2 License - BSD +// +function LoadSparkLineScript(callback){ + if(!$.fn.sparkline){ + $.getScript('plugins/sparkline/jquery.sparkline.min.js', callback); + } + else { + if (callback && typeof(callback) === "function") { + callback(); + } + } +} +/*------------------------------------------- + Main scripts used by theme +---------------------------------------------*/ +// +// Function for load content from url and put in $('.ajax-content') block +// +function LoadAjaxContent(url){ + $('.preloader').show(); + $.ajax({ + mimeType: 'text/html; charset=utf-8', // ! Need set mimeType only when run from local file + url: url, + type: 'GET', + success: function(data) { + $('#ajax-content').html(data); + $('.preloader').hide(); + }, + error: function (jqXHR, textStatus, errorThrown) { + alert(errorThrown); + }, + dataType: "html", + async: false + }); +} +// +// Function maked all .box selector is draggable, to disable for concrete element add class .no-drop +// +function WinMove(){ + $( "div.box").not('.no-drop') + .draggable({ + revert: true, + zIndex: 2000, + cursor: "crosshair", + handle: '.box-name', + opacity: 0.8 + }) + .droppable({ + tolerance: 'pointer', + drop: function( event, ui ) { + var draggable = ui.draggable; + var droppable = $(this); + var dragPos = draggable.position(); + var dropPos = droppable.position(); + draggable.swap(droppable); + setTimeout(function() { + var dropmap = droppable.find('[id^=map-]'); + var dragmap = draggable.find('[id^=map-]'); + if (dragmap.length > 0 || dropmap.length > 0){ + dragmap.resize(); + dropmap.resize(); + } + else { + draggable.resize(); + droppable.resize(); + } + }, 50); + setTimeout(function() { + draggable.find('[id^=map-]').resize(); + droppable.find('[id^=map-]').resize(); + }, 250); + } + }); +} +// +// Swap 2 elements on page. Used by WinMove function +// +jQuery.fn.swap = function(b){ + b = jQuery(b)[0]; + var a = this[0]; + var t = a.parentNode.insertBefore(document.createTextNode(''), a); + b.parentNode.insertBefore(a, b); + t.parentNode.insertBefore(b, t); + t.parentNode.removeChild(t); + return this; +}; +// +// Screensaver function +// used on locked screen, and write content to element with id - canvas +// +function ScreenSaver(){ + var canvas = document.getElementById("canvas"); + var ctx = canvas.getContext("2d"); + // Size of canvas set to fullscreen of browser + var W = window.innerWidth; + var H = window.innerHeight; + canvas.width = W; + canvas.height = H; + // Create array of particles for screensaver + var particles = []; + for (var i = 0; i < 25; i++) { + particles.push(new Particle()); + } + function Particle(){ + // location on the canvas + this.location = {x: Math.random()*W, y: Math.random()*H}; + // radius - lets make this 0 + this.radius = 0; + // speed + this.speed = 3; + // random angle in degrees range = 0 to 360 + this.angle = Math.random()*360; + // colors + var r = Math.round(Math.random()*255); + var g = Math.round(Math.random()*255); + var b = Math.round(Math.random()*255); + var a = Math.random(); + this.rgba = "rgba("+r+", "+g+", "+b+", "+a+")"; + } + // Draw the particles + function draw() { + // re-paint the BG + // Lets fill the canvas black + // reduce opacity of bg fill. + // blending time + ctx.globalCompositeOperation = "source-over"; + ctx.fillStyle = "rgba(0, 0, 0, 0.02)"; + ctx.fillRect(0, 0, W, H); + ctx.globalCompositeOperation = "lighter"; + for(var i = 0; i < particles.length; i++){ + var p = particles[i]; + ctx.fillStyle = "white"; + ctx.fillRect(p.location.x, p.location.y, p.radius, p.radius); + // Lets move the particles + // So we basically created a set of particles moving in random direction + // at the same speed + // Time to add ribbon effect + for(var n = 0; n < particles.length; n++){ + var p2 = particles[n]; + // calculating distance of particle with all other particles + var yd = p2.location.y - p.location.y; + var xd = p2.location.x - p.location.x; + var distance = Math.sqrt(xd*xd + yd*yd); + // draw a line between both particles if they are in 200px range + if(distance < 200){ + ctx.beginPath(); + ctx.lineWidth = 1; + ctx.moveTo(p.location.x, p.location.y); + ctx.lineTo(p2.location.x, p2.location.y); + ctx.strokeStyle = p.rgba; + ctx.stroke(); + //The ribbons appear now. + } + } + // We are using simple vectors here + // New x = old x + speed * cos(angle) + p.location.x = p.location.x + p.speed*Math.cos(p.angle*Math.PI/180); + // New y = old y + speed * sin(angle) + p.location.y = p.location.y + p.speed*Math.sin(p.angle*Math.PI/180); + // You can read about vectors here: + // http://physics.about.com/od/mathematics/a/VectorMath.htm + if(p.location.x < 0) p.location.x = W; + if(p.location.x > W) p.location.x = 0; + if(p.location.y < 0) p.location.y = H; + if(p.location.y > H) p.location.y = 0; + } + } + setInterval(draw, 30); +} +// +// Helper for draw Google Chart +// +function drawGoogleChart(chart_data, chart_options, element, chart_type) { + // Function for visualize Google Chart + var data = google.visualization.arrayToDataTable(chart_data); + var chart = new chart_type(document.getElementById(element)); + chart.draw(data, chart_options); +} +// +// Function for Draw Knob Charts +// +function DrawKnob(elem){ + elem.knob({ + change : function (value) { + //console.log("change : " + value); + }, + release : function (value) { + //console.log(this.$.attr('value')); + console.log("release : " + value); + }, + cancel : function () { + console.log("cancel : ", this); + }, + draw : function () { + // "tron" case + if(this.$.data('skin') == 'tron') { + var a = this.angle(this.cv); // Angle + var sa = this.startAngle; // Previous start angle + var sat = this.startAngle; // Start angle + var ea; // Previous end angle + var eat = sat + a; // End angle + var r = 1; + this.g.lineWidth = this.lineWidth; + this.o.cursor + && (sat = eat - 0.3) + && (eat = eat + 0.3); + if (this.o.displayPrevious) { + ea = this.startAngle + this.angle(this.v); + this.o.cursor + && (sa = ea - 0.3) + && (ea = ea + 0.3); + this.g.beginPath(); + this.g.strokeStyle = this.pColor; + this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, sa, ea, false); + this.g.stroke(); + } + this.g.beginPath(); + this.g.strokeStyle = r ? this.o.fgColor : this.fgColor ; + this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, sat, eat, false); + this.g.stroke(); + this.g.lineWidth = 2; + this.g.beginPath(); + this.g.strokeStyle = this.o.fgColor; + this.g.arc( this.xy, this.xy, this.radius - this.lineWidth + 1 + this.lineWidth * 2 / 3, 0, 2 * Math.PI, false); + this.g.stroke(); + return false; + } + } + }); + // Example of infinite knob, iPod click wheel + var v; + var up = 0; + var down=0; + var i=0; + var $idir = $("div.idir"); + var $ival = $("div.ival"); + var incr = function() { i++; $idir.show().html("+").fadeOut(); $ival.html(i); } + var decr = function() { i--; $idir.show().html("-").fadeOut(); $ival.html(i); }; + $("input.infinite").knob( + { + min : 0, + max : 20, + stopper : false, + change : function () { + if(v > this.cv){ + if(up){ + decr(); + up=0; + } else { + up=1;down=0; + } + } else { + if(v < this.cv){ + if(down){ + incr(); + down=0; + } else { + down=1;up=0; + } + } + } + v = this.cv; + } + }); +} +// +// Create OpenLayers map with required options and return map as object +// +function drawMap(lon, lat, elem, layers) { + var LayersArray = []; + // Map initialization + var map = new OpenLayers.Map(elem); + // Add layers on map + map.addLayers(layers); + // WGS 1984 projection + var epsg4326 = new OpenLayers.Projection("EPSG:4326"); + //The map projection (Spherical Mercator) + var projectTo = map.getProjectionObject(); + // Max zoom = 17 + var zoom=10; + map.zoomToMaxExtent(); + // Set longitude/latitude + var lonlat = new OpenLayers.LonLat(lon, lat); + map.setCenter(lonlat.transform(epsg4326, projectTo), zoom); + var layerGuest = new OpenLayers.Layer.Vector("You are here"); + // Define markers as "features" of the vector layer: + var guestMarker = new OpenLayers.Feature.Vector( + new OpenLayers.Geometry.Point(lon, lat).transform(epsg4326, projectTo) + ); + layerGuest.addFeatures(guestMarker); + LayersArray.push(layerGuest); + map.addLayers(LayersArray); + // If map layers > 1 then show checker + if (layers.length > 1){ + map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true})); + } + // Link to current position + map.addControl(new OpenLayers.Control.Permalink()); + // Show current mouse coords + map.addControl(new OpenLayers.Control.MousePosition({ displayProjection: epsg4326 })); + return map +} +// +// Function for create 2 dates in human-readable format (with leading zero) +// +function PrettyDates(){ + var currDate = new Date(); + var year = currDate.getFullYear(); + var month = currDate.getMonth() + 1; + var startmonth = 1; + if (month > 3){ + startmonth = month -2; + } + if (startmonth <=9){ + startmonth = '0'+startmonth; + } + if (month <= 9) { + month = '0'+month; + } + var day= currDate.getDate(); + if (day <= 9) { + day = '0'+day; + } + var startdate = year +'-'+ startmonth +'-01'; + var enddate = year +'-'+ month +'-'+ day; + return [startdate, enddate]; +} +// +// Function set min-height of window (required for this theme) +// +function SetMinBlockHeight(elem){ + elem.css('min-height', window.innerHeight - 49) +} +// +// Helper for correct size of Messages page +// +function MessagesMenuWidth(){ + var W = window.innerWidth; + var W_menu = $('#sidebar-left').outerWidth(); + var w_messages = (W-W_menu)*16.666666666666664/100; + $('#messages-menu').width(w_messages); +} +// +// Function for change panels of Dashboard +// +function DashboardTabChecker(){ + $('#content').on('click', 'a.tab-link', function(e){ + e.preventDefault(); + $('div#dashboard_tabs').find('div[id^=dashboard]').each(function(){ + $(this).css('visibility', 'hidden').css('position', 'absolute'); + }); + var attr = $(this).attr('id'); + $('#'+'dashboard-'+attr).css('visibility', 'visible').css('position', 'relative'); + $(this).closest('.nav').find('li').removeClass('active'); + $(this).closest('li').addClass('active'); + }); +} +// +// Helper for run TinyMCE editor with textarea's +// +function TinyMCEStart(elem, mode){ + var plugins = []; + if (mode == 'extreme'){ + plugins = [ "advlist anchor autolink autoresize autosave bbcode charmap code contextmenu directionality ", + "emoticons fullpage fullscreen hr image insertdatetime layer legacyoutput", + "link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace", + "tabfocus table template textcolor visualblocks visualchars wordcount"] + } + tinymce.init({selector: elem, + theme: "modern", + plugins: plugins, + //content_css: "css/style.css", + toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media fullpage | forecolor backcolor emoticons", + style_formats: [ + {title: 'Header 2', block: 'h2', classes: 'page-header'}, + {title: 'Header 3', block: 'h3', classes: 'page-header'}, + {title: 'Header 4', block: 'h4', classes: 'page-header'}, + {title: 'Header 5', block: 'h5', classes: 'page-header'}, + {title: 'Header 6', block: 'h6', classes: 'page-header'}, + {title: 'Bold text', inline: 'b'}, + {title: 'Red text', inline: 'span', styles: {color: '#ff0000'}}, + {title: 'Red header', block: 'h1', styles: {color: '#ff0000'}}, + {title: 'Example 1', inline: 'span', classes: 'example1'}, + {title: 'Example 2', inline: 'span', classes: 'example2'}, + {title: 'Table styles'}, + {title: 'Table row 1', selector: 'tr', classes: 'tablerow1'} + ] + }); +} +// +// Helper for draw Sparkline plots on Dashboard page +// +function SparkLineDrawBarGraph(elem, arr, color){ + if (color) { + var stacked_color = color; + } + else { + stacked_color = '#6AA6D6' + } + elem.sparkline(arr, { type: 'bar', barWidth: 7, highlightColor: '#000', barSpacing: 2, height: 40, stackedBarColor: stacked_color}); +} +// +// Helper for open ModalBox with requested header, content and bottom +// +// +function OpenModalBox(header, inner, bottom){ + var modalbox = $('#modalbox'); + modalbox.find('.modal-header-name span').html(header); + modalbox.find('.devoops-modal-inner').html(inner); + modalbox.find('.devoops-modal-bottom').html(bottom); + modalbox.fadeIn('fast'); + $('body').addClass("body-expanded"); +} +// +// Close modalbox +// +// +function CloseModalBox(){ + var modalbox = $('#modalbox'); + modalbox.fadeOut('fast', function(){ + modalbox.find('.modal-header-name span').children().remove(); + modalbox.find('.devoops-modal-inner').children().remove(); + modalbox.find('.devoops-modal-bottom').children().remove(); + $('body').removeClass("body-expanded"); + }); +} +// +// Beauty tables plugin (navigation in tables with inputs in cell) +// Created by DevOOPS. +// +(function( $ ){ + $.fn.beautyTables = function() { + var table = this; + var string_fill = false; + this.on('keydown', function(event) { + var target = event.target; + var tr = $(target).closest("tr"); + var col = $(target).closest("td"); + if (target.tagName.toUpperCase() == 'INPUT'){ + if (event.shiftKey === true){ + switch(event.keyCode) { + case 37: // left arrow + col.prev().children("input[type=text]").focus(); + break; + case 39: // right arrow + col.next().children("input[type=text]").focus(); + break; + case 40: // down arrow + if (string_fill==false){ + tr.next().find('td:eq('+col.index()+') input[type=text]').focus(); + } + break; + case 38: // up arrow + if (string_fill==false){ + tr.prev().find('td:eq('+col.index()+') input[type=text]').focus(); + } + break; + } + } + if (event.ctrlKey === true){ + switch(event.keyCode) { + case 37: // left arrow + tr.find('td:eq(1)').find("input[type=text]").focus(); + break; + case 39: // right arrow + tr.find('td:last-child').find("input[type=text]").focus(); + break; + case 40: // down arrow + if (string_fill==false){ + table.find('tr:last-child td:eq('+col.index()+') input[type=text]').focus(); + } + break; + case 38: // up arrow + if (string_fill==false){ + table.find('tr:eq(1) td:eq('+col.index()+') input[type=text]').focus(); + } + break; + } + } + if (event.keyCode == 13 || event.keyCode == 9 ) { + event.preventDefault(); + col.next().find("input[type=text]").focus(); + } + if (string_fill==false){ + if (event.keyCode == 34) { + event.preventDefault(); + table.find('tr:last-child td:last-child').find("input[type=text]").focus();} + if (event.keyCode == 33) { + event.preventDefault(); + table.find('tr:eq(1) td:eq(1)').find("input[type=text]").focus();} + } + } + }); + table.find("input[type=text]").each(function(){ + $(this).on('blur', function(event){ + var target = event.target; + var col = $(target).parents("td"); + if(table.find("input[name=string-fill]").prop("checked")==true) { + col.nextAll().find("input[type=text]").each(function() { + $(this).val($(target).val()); + }); + } + }); + }) +}; +})( jQuery ); +// +// Beauty Hover Plugin (backlight row and col when cell in mouseover) +// +// +(function( $ ){ + $.fn.beautyHover = function() { + var table = this; + table.on('mouseover','td', function() { + var idx = $(this).index(); + var rows = $(this).closest('table').find('tr'); + rows.each(function(){ + $(this).find('td:eq('+idx+')').addClass('beauty-hover'); + }); + }) + .on('mouseleave','td', function(e) { + var idx = $(this).index(); + var rows = $(this).closest('table').find('tr'); + rows.each(function(){ + $(this).find('td:eq('+idx+')').removeClass('beauty-hover'); + }); + }); + }; +})( jQuery ); +// +// Function convert values of inputs in table to JSON data +// +// +function Table2Json(table) { + var result = {}; + table.find("tr").each(function () { + var oneRow = []; + var varname = $(this).index(); + $("td", this).each(function (index) { if (index != 0) {oneRow.push($("input", this).val());}}); + result[varname] = oneRow; + }); + var result_json = JSON.stringify(result); + OpenModalBox('Table to JSON values', result_json); +} +/*------------------------------------------- + Demo graphs for Flot Chart page (charts_flot.html) +---------------------------------------------*/ +// +// Graph1 created in element with id = box-one-content +// +function FlotGraph1(){ + // We use an inline data source in the example, usually data would + // be fetched from a server + var data = [], + totalPoints = 300; + function getRandomData() { + if (data.length > 0) + data = data.slice(1); + // Do a random walk + while (data.length < totalPoints) { + var prev = data.length > 0 ? data[data.length - 1] : 50, + y = prev + Math.random() * 10 - 5; + if (y < 0) { + y = 0; + } else if (y > 100) { + y = 100; + } + data.push(y); + } + // Zip the generated y values with the x values + var res = []; + for (var i = 0; i < data.length; ++i) { + res.push([i, data[i]]) + } + return res; + } + var updateInterval = 30; + var plot = $.plot("#box-one-content", [ getRandomData() ], { + series: { + shadowSize: 0 // Drawing is faster without shadows + }, + yaxis: {min: 0, max: 100}, + xaxis: {show: false } + }); + function update() { + plot.setData([getRandomData()]); + // Since the axes don't change, we don't need to call plot.setupGrid() + plot.draw(); + setTimeout(update, updateInterval); + } + update(); +} +// +// Graph2 created in element with id = box-two-content +// +function FlotGraph2(){ + var sin = []; + var cos = []; + var tan = []; + for (var i = 0; i < 14; i += 0.1) { + sin.push([i, Math.sin(i)]); + cos.push([i, Math.cos(i)]); + tan.push([i, Math.tan(i)/4]); + } + var plot = $.plot("#box-two-content", [ + { data: sin, label: "sin(x) = -0.00"}, + { data: cos, label: "cos(x) = -0.00" }, + { data: tan, label: "tan(x)/4 = -0.00" } + ], { + series: { + lines: { + show: true + } + }, + crosshair: { + mode: "x" + }, + grid: { + hoverable: true, + autoHighlight: false + }, + yaxis: { + min: -5.2, + max: 5.2 + } + }); + var legends = $("#box-two-content .legendLabel"); + legends.each(function () { + // fix the widths so they don't jump around + $(this).css('width', $(this).width()); + }); + var updateLegendTimeout = null; + var latestPosition = null; + function updateLegend() { + updateLegendTimeout = null; + var pos = latestPosition; + var axes = plot.getAxes(); + if (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max || + pos.y < axes.yaxis.min || pos.y > axes.yaxis.max) { + return; + } + var i, j, dataset = plot.getData(); + for (i = 0; i < dataset.length; ++i) { + var series = dataset[i]; + // Find the nearest points, x-wise + for (j = 0; j < series.data.length; ++j) { + if (series.data[j][0] > pos.x) { + break; + } + } + // Now Interpolate + var y, p1 = series.data[j - 1], p2 = series.data[j]; + if (p1 == null) { + y = p2[1]; + } else if (p2 == null) { + y = p1[1]; + } else { + y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]); + } + legends.eq(i).text(series.label.replace(/=.*/, "= " + y.toFixed(2))); + } + } + $("#box-two-content").bind("plothover", function (event, pos, item) { + latestPosition = pos; + if (!updateLegendTimeout) { + updateLegendTimeout = setTimeout(updateLegend, 50); + } + }); +} +// +// Graph3 created in element with id = box-three-content +// +function FlotGraph3(){ + var d1 = []; + for (var i = 0; i <= 60; i += 1) { + d1.push([i, parseInt(Math.random() * 30 - 10)]); + } + function plotWithOptions(t) { + $.plot("#box-three-content", [{ + data: d1, + color: "rgb(30, 180, 20)", + threshold: { + below: t, + color: "rgb(200, 20, 30)" + }, + lines: { + steps: true + } + }]); + } + plotWithOptions(0); +} +// +// Graph4 created in element with id = box-four-content +// +function FlotGraph4(){ + var d1 = []; + for (var i = 0; i < 14; i += 0.5) { + d1.push([i, Math.sin(i)]); + } + var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; + var d3 = []; + for (var i = 0; i < 14; i += 0.5) { + d3.push([i, Math.cos(i)]); + } + var d4 = []; + for (var i = 0; i < 14; i += 0.1) { + d4.push([i, Math.sqrt(i * 10)]); + } + var d5 = []; + for (var i = 0; i < 14; i += 0.5) { + d5.push([i, Math.sqrt(i)]); + } + var d6 = []; + for (var i = 0; i < 14; i += 0.5 + Math.random()) { + d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]); + } + $.plot("#box-four-content", [{ + data: d1, + lines: { show: true, fill: true } + }, { + data: d2, + bars: { show: true } + }, { + data: d3, + points: { show: true } + }, { + data: d4, + lines: { show: true } + }, { + data: d5, + lines: { show: true }, + points: { show: true } + }, { + data: d6, + lines: { show: true, steps: true } + }]); +} +/*------------------------------------------- + Demo graphs for Morris Chart page (charts_morris.html) +---------------------------------------------*/ +// +// Graph1 created in element with id = morris-chart-1 +// +function MorrisChart1(){ + var day_data = [ + {"period": "2013-10-01", "licensed": 3407, "sorned": 660}, + {"period": "2013-09-30", "licensed": 3351, "sorned": 629}, + {"period": "2013-09-29", "licensed": 3269, "sorned": 618}, + {"period": "2013-09-20", "licensed": 3246, "sorned": 661}, + {"period": "2013-09-19", "licensed": 3257, "sorned": 667}, + {"period": "2013-09-18", "licensed": 3248, "sorned": 627}, + {"period": "2013-09-17", "licensed": 3171, "sorned": 660}, + {"period": "2013-09-16", "licensed": 3171, "sorned": 676}, + {"period": "2013-09-15", "licensed": 3201, "sorned": 656}, + {"period": "2013-09-10", "licensed": 3215, "sorned": 622} + ]; + Morris.Bar({ + element: 'morris-chart-1', + data: day_data, + xkey: 'period', + ykeys: ['licensed', 'sorned'], + labels: ['Licensed', 'SORN'], + xLabelAngle: 60 + }); +} +// +// Graph2 created in element with id = morris-chart-2 +// +function MorrisChart2(){ + // Use Morris.Area instead of Morris.Line + Morris.Area({ + element: 'morris-chart-2', + data: [ + {x: '2011 Q1', y: 3, z: 3, m: 1}, + {x: '2011 Q2', y: 2, z: 0, m: 7}, + {x: '2011 Q3', y: 2, z: 5, m: 2}, + {x: '2011 Q4', y: 4, z: 4, m: 5}, + {x: '2012 Q1', y: 6, z: 1, m: 11}, + {x: '2012 Q2', y: 4, z: 4, m: 3}, + {x: '2012 Q3', y: 4, z: 4, m: 7}, + {x: '2012 Q4', y: 4, z: 4, m: 9} + ], + xkey: 'x', + ykeys: ['y', 'z', 'm'], + labels: ['Y', 'Z', 'M'] + }) + .on('click', function(i, row){ + console.log(i, row); + }); +} +// +// Graph3 created in element with id = morris-chart-3 +// +function MorrisChart3(){ + var decimal_data = []; + for (var x = 0; x <= 360; x += 10) { + decimal_data.push({ x: x, y: Math.sin(Math.PI * x / 180).toFixed(4), z: Math.cos(Math.PI * x / 180).toFixed(4) }); + } + Morris.Line({ + element: 'morris-chart-3', + data: decimal_data, + xkey: 'x', + ykeys: ['y', 'z'], + labels: ['sin(x)', 'cos(x)'], + parseTime: false, + goals: [-1, 0, 1] + }); +} +// +// Graph4 created in element with id = morris-chart-4 +// +function MorrisChart4(){ + // Use Morris.Bar + Morris.Bar({ + element: 'morris-chart-4', + data: [ + {x: '2011 Q1', y: 0}, + {x: '2011 Q2', y: 1}, + {x: '2011 Q3', y: 2}, + {x: '2011 Q4', y: 3}, + {x: '2012 Q1', y: 4}, + {x: '2012 Q2', y: 5}, + {x: '2012 Q3', y: 6}, + {x: '2012 Q4', y: 7}, + {x: '2013 Q1', y: 8}, + {x: '2013 Q2', y: 7}, + {x: '2013 Q3', y: 6}, + {x: '2013 Q4', y: 5}, + {x: '2014 Q1', y: 9} + ], + xkey: 'x', + ykeys: ['y'], + labels: ['Y'], + barColors: function (row, series, type) { + if (type === 'bar') { + var red = Math.ceil(255 * row.y / this.ymax); + return 'rgb(' + red + ',0,0)'; + } + else { + return '#000'; + } + } + }); +} +// +// Graph5 created in element with id = morris-chart-5 +// +function MorrisChart5(){ + Morris.Area({ + element: 'morris-chart-5', + data: [ + {period: '2010 Q1', iphone: 2666, ipad: null, itouch: 2647}, + {period: '2010 Q2', iphone: 2778, ipad: 2294, itouch: 2441}, + {period: '2010 Q3', iphone: 4912, ipad: 1969, itouch: 2501}, + {period: '2010 Q4', iphone: 3767, ipad: 3597, itouch: 5689}, + {period: '2011 Q1', iphone: 6810, ipad: 1914, itouch: 2293}, + {period: '2011 Q2', iphone: 5670, ipad: 4293, itouch: 1881}, + {period: '2011 Q3', iphone: 4820, ipad: 3795, itouch: 1588}, + {period: '2011 Q4', iphone: 15073, ipad: 5967, itouch: 5175}, + {period: '2012 Q1', iphone: 10687, ipad: 4460, itouch: 2028}, + {period: '2012 Q2', iphone: 8432, ipad: 5713, itouch: 1791} + ], + xkey: 'period', + ykeys: ['iphone', 'ipad', 'itouch'], + labels: ['iPhone', 'iPad', 'iPod Touch'], + pointSize: 2, + hideHover: 'auto' + }); +} +/*------------------------------------------- + Demo graphs for Google Chart page (charts_google.html) +---------------------------------------------*/ +// +// One function for create all graphs on Google Chart page +// +function DrawAllCharts(){ + // Chart 1 + var chart1_data = [ + ['Smartphones', 'PC', 'Notebooks', 'Monitors','Routers', 'Switches' ], + ['01.01.2014', 1234, 2342, 344, 232,131], + ['02.01.2014', 1254, 232, 314, 232, 331], + ['03.01.2014', 2234, 342, 298, 232, 665], + ['04.01.2014', 2234, 42, 559, 232, 321], + ['05.01.2014', 1999, 82, 116, 232, 334], + ['06.01.2014', 1634, 834, 884, 232, 191], + ['07.01.2014', 321, 342, 383, 232, 556], + ['08.01.2014', 845, 112, 499, 232, 731] + ]; + var chart1_options = { + title: 'Sales of company', + hAxis: {title: 'Date', titleTextStyle: {color: 'red'}}, + backgroundColor: '#fcfcfc', + vAxis: {title: 'Quantity', titleTextStyle: {color: 'blue'}} + }; + var chart1_element = 'google-chart-1'; + var chart1_type = google.visualization.ColumnChart; + drawGoogleChart(chart1_data, chart1_options, chart1_element, chart1_type); + // Chart 2 + var chart2_data = [ + ['Height', 'Width'], + ['Samsung', 74.5], + ['Apple', 31.24], + ['LG', 12.10], + ['Huawei', 11.14], + ['Sony', 8.3], + ['Nokia', 7.4], + ['Blackberry', 6.8], + ['HTC', 6.63], + ['Motorola', 3.5], + ['Other', 43.15] + ]; + var chart2_options = { + title: 'Smartphone marketshare 2Q 2013', + backgroundColor: '#fcfcfc' + }; + var chart2_element = 'google-chart-2'; + var chart2_type = google.visualization.PieChart; + drawGoogleChart(chart2_data, chart2_options, chart2_element, chart2_type); + // Chart 3 + var chart3_data = [ + ['Age', 'Weight'], + [ 8, 12], + [ 4, 5.5], + [ 11, 14], + [ 4, 5], + [ 3, 3.5], + [ 6.5, 7] + ]; + var chart3_options = { + title: 'Age vs. Weight comparison', + hAxis: {title: 'Age', minValue: 0, maxValue: 15}, + vAxis: {title: 'Weight', minValue: 0, maxValue: 15}, + legend: 'none', + backgroundColor: '#fcfcfc' + }; + var chart3_element = 'google-chart-3'; + var chart3_type = google.visualization.ScatterChart; + drawGoogleChart(chart3_data, chart3_options, chart3_element, chart3_type); + // Chart 4 + var chart4_data = [ + ['ID', 'Life Expectancy', 'Fertility Rate', 'Region', 'Population'], + ['CAN', 80.66, 1.67, 'North America', 33739900], + ['DEU', 79.84, 1.36, 'Europe', 81902307], + ['DNK', 78.6, 1.84, 'Europe', 5523095], + ['EGY', 72.73, 2.78, 'Middle East', 79716203], + ['GBR', 80.05, 2, 'Europe', 61801570], + ['IRN', 72.49, 1.7, 'Middle East', 73137148], + ['IRQ', 68.09, 4.77, 'Middle East', 31090763], + ['ISR', 81.55, 2.96, 'Middle East', 7485600], + ['RUS', 68.6, 1.54, 'Europe', 141850000], + ['USA', 78.09, 2.05, 'North America', 307007000] + ]; + var chart4_options = { + title: 'Correlation between life expectancy, fertility rate and population of some world countries (2010)', + hAxis: {title: 'Life Expectancy'}, + vAxis: {title: 'Fertility Rate'}, + backgroundColor: '#fcfcfc', + bubble: {textStyle: {fontSize: 11}} + }; + var chart4_element = 'google-chart-4'; + var chart4_type = google.visualization.BubbleChart; + drawGoogleChart(chart4_data, chart4_options, chart4_element, chart4_type); + // Chart 5 + var chart5_data = [ + ['Country', 'Popularity'], + ['Germany', 200], + ['United States', 300], + ['Brazil', 400], + ['Canada', 500], + ['France', 600], + ['RU', 700] + ]; + var chart5_options = { + backgroundColor: '#fcfcfc', + enableRegionInteractivity: true + }; + var chart5_element = 'google-chart-5'; + var chart5_type = google.visualization.GeoChart; + drawGoogleChart(chart5_data, chart5_options, chart5_element, chart5_type); + // Chart 6 + var chart6_data = [ + ['Year', 'Sales', 'Expenses'], + ['2004', 1000, 400], + ['2005', 1170, 460], + ['2006', 660, 1120], + ['2007', 1030, 540], + ['2008', 2080, 740], + ['2009', 1949, 690], + ['2010', 2334, 820] + ]; + var chart6_options = { + backgroundColor: '#fcfcfc', + title: 'Company Performance' + }; + var chart6_element = 'google-chart-6'; + var chart6_type = google.visualization.LineChart; + drawGoogleChart(chart6_data, chart6_options, chart6_element, chart6_type); + // Chart 7 + var chart7_data = [ + ['Task', 'Hours per Day'], + ['Work', 11], + ['Eat', 2], + ['Commute', 2], + ['Watch TV', 2], + ['Sleep', 7] + ]; + var chart7_options = { + backgroundColor: '#fcfcfc', + title: 'My Daily Activities', + pieHole: 0.4 + }; + var chart7_element = 'google-chart-7'; + var chart7_type = google.visualization.PieChart; + drawGoogleChart(chart7_data, chart7_options, chart7_element, chart7_type); + // Chart 8 + var chart8_data = [ + ['Generation', 'Descendants'], + [0, 1], [1, 33], [2, 269], [3, 2013] + ]; + var chart8_options = { + backgroundColor: '#fcfcfc', + title: 'Descendants by Generation', + hAxis: {title: 'Generation', minValue: 0, maxValue: 3}, + vAxis: {title: 'Descendants', minValue: 0, maxValue: 2100}, + trendlines: { + 0: { + type: 'exponential', + visibleInLegend: true + } + } + }; + var chart8_element = 'google-chart-8'; + var chart8_type = google.visualization.ScatterChart; + drawGoogleChart(chart8_data, chart8_options, chart8_element, chart8_type); +} +/*------------------------------------------- + Demo graphs for xCharts page (charts_xcharts.html) +---------------------------------------------*/ +// +// Graph1 created in element with id = xchart-1 +// +function xGraph1(){ + var tt = document.createElement('div'), + leftOffset = -(~~$('html').css('padding-left').replace('px', '') + ~~$('body').css('margin-left').replace('px', '')), + topOffset = -32; + tt.className = 'ex-tooltip'; + document.body.appendChild(tt); + var data = { + "xScale": "time", + "yScale": "linear", + "main": [ + { + "className": ".xchart-class-1", + "data": [ + { + "x": "2012-11-05", + "y": 6 + }, + { + "x": "2012-11-06", + "y": 6 + }, + { + "x": "2012-11-07", + "y": 8 + }, + { + "x": "2012-11-08", + "y": 3 + }, + { + "x": "2012-11-09", + "y": 4 + }, + { + "x": "2012-11-10", + "y": 9 + }, + { + "x": "2012-11-11", + "y": 6 + }, + { + "x": "2012-11-12", + "y": 16 + }, + { + "x": "2012-11-13", + "y": 4 + }, + { + "x": "2012-11-14", + "y": 9 + }, + { + "x": "2012-11-15", + "y": 2 + } + ] + } + ] + }; + var opts = { + "dataFormatX": function (x) { return d3.time.format('%Y-%m-%d').parse(x); }, + "tickFormatX": function (x) { return d3.time.format('%A')(x); }, + "mouseover": function (d, i) { + var pos = $(this).offset(); + $(tt).text(d3.time.format('%A')(d.x) + ': ' + d.y) + .css({top: topOffset + pos.top, left: pos.left + leftOffset}) + .show(); + }, + "mouseout": function (x) { + $(tt).hide(); + } + }; + var myChart = new xChart('line-dotted', data, '#xchart-1', opts); +} +// +// Graph2 created in element with id = xchart-2 +// +function xGraph2(){ + var data = { + "xScale": "ordinal", + "yScale": "linear", + "main": [ + { + "className": ".xchart-class-2", + "data": [ + { + "x": "Apple", + "y": 575 + }, + { + "x": "Facebook", + "y": 163 + }, + { + "x": "Microsoft", + "y": 303 + }, + { + "x": "Cisco", + "y": 121 + }, + { + "x": "Google", + "y": 393 + } + ] + } + ] + }; + var myChart = new xChart('bar', data, '#xchart-2'); +} +// +// Graph3 created in element with id = xchart-3 +// +function xGraph3(){ + var data = { + "xScale": "time", + "yScale": "linear", + "type": "line", + "main": [ + { + "className": ".xchart-class-3", + "data": [ + { + "x": "2012-11-05", + "y": 1 + }, + { + "x": "2012-11-06", + "y": 6 + }, + { + "x": "2012-11-07", + "y": 13 + }, + { + "x": "2012-11-08", + "y": -3 + }, + { + "x": "2012-11-09", + "y": -4 + }, + { + "x": "2012-11-10", + "y": 9 + }, + { + "x": "2012-11-11", + "y": 6 + }, + { + "x": "2012-11-12", + "y": 7 + }, + { + "x": "2012-11-13", + "y": -2 + }, + { + "x": "2012-11-14", + "y": -7 + } + ] + } + ] + }; + var opts = { + "dataFormatX": function (x) { return d3.time.format('%Y-%m-%d').parse(x); }, + "tickFormatX": function (x) { return d3.time.format('%A')(x); } + }; + var myChart = new xChart('line', data, '#xchart-3', opts); +} +/*------------------------------------------- + Demo graphs for CoinDesk page (charts_coindesk.html) +---------------------------------------------*/ +// +// Main function for CoinDesk API Page +// (we get JSON data and make 4 graph from this) +// +function CoinDeskGraph(){ + var dates = PrettyDates(); + var startdate = dates[0]; + var enddate = dates[1]; + // Load JSON data from CoinDesk API + var jsonURL = 'http://api.coindesk.com/v1/bpi/historical/close.json?start='+startdate+'&end='+enddate; + $.getJSON(jsonURL, function(result){ + // Create array of data for xChart + $.each(result.bpi, function(key, val){ + xchart_data.push({'x': key,'y':val}); + }); + // Set handler for resize and create xChart plot + var graphXChartResize; + $('#coindesk-xchart').resize(function(){ + clearTimeout(graphXChartResize); + graphXChartResize = setTimeout(DrawCoinDeskXCharts, 500); + }); + DrawCoinDeskXCharts(); + // Create array of data for Google Chart + $.each(result.bpi, function(key, val){ + google_data.push([key,val]); + }); + // Set handler for resize and create Google Chart plot + var graphGChartResize; + $('#coindesk-google-chart').resize(function(){ + clearTimeout(graphGChartResize); + graphGChartResize = setTimeout(DrawCoinDeskGoogleCharts, 500); + }); + DrawCoinDeskGoogleCharts(); + // Create array of data for Flot and Sparkline + $.each(result.bpi, function(key, val){ + var parseDate=key; + parseDate=parseDate.split("-"); + var newDate=parseDate[1]+"/"+parseDate[2]+"/"+parseDate[0]; + var new_date = new Date(newDate).getTime(); + exchange_rate.push([new_date,val]); + }); + // Create Flot plot (not need bind to resize, cause Flot use plugin 'resize') + DrawCoinDeskFlot(); + // Set handler for resize and create Sparkline plot + var graphSparklineResize; + $('#coindesk-sparklines').resize(function(){ + clearTimeout(graphSparklineResize); + graphSparklineResize = setTimeout(DrawCoinDeskSparkLine, 500); + }); + DrawCoinDeskSparkLine(); + }); +} +// +// Draw Sparkline Graph on Coindesk page +// +function DrawCoinDeskSparkLine(){ + $('#coindesk-sparklines').sparkline(exchange_rate, { height: '100%', width: '100%' }); +} +// +// Draw xChart Graph on Coindesk page +// +function DrawCoinDeskXCharts(){ + var data = { + "xScale": "ordinal", + "yScale": "linear", + "main": [ + { + "className": ".pizza", + "data": xchart_data + } + ] + }; + var myChart = new xChart('line-dotted', data, '#coindesk-xchart'); +} +// +// Draw Flot Graph on Coindesk page +// +function DrawCoinDeskFlot(){ + var data1 = [ + { data: exchange_rate, label: "Bitcoin exchange rate ($)" } + ]; + var options = { + canvas: true, + xaxes: [ + { mode: "time" } + ], + yaxes: [ + { min: 0 }, + { + position: "right", + alignTicksWithAxis: 1, + tickFormatter: function (value, axis) { + return value.toFixed(axis.tickDecimals) + "€"; + } + } + ], + legend: { position: "sw" } + }; + $.plot("#coindesk-flot", data1, options); +} +// +// Draw Google Chart Graph on Coindesk page +// +function DrawCoinDeskGoogleCharts(){ + var google_options = { + backgroundColor: '#fcfcfc', + title: 'Coindesk Exchange Rate' + }; + var google_element = 'coindesk-google-chart'; + var google_type = google.visualization.LineChart; + drawGoogleChart(google_data, google_options, google_element, google_type); +} +/*------------------------------------------- + Scripts for DataTables page (tables_datatables.html) +---------------------------------------------*/ +// +// Function for table, located in element with id = datatable-1 +// +function TestTable1(){ + $('#datatable-1').dataTable( { + "aaSorting": [[ 0, "asc" ]], + "sDom": "<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>", + "sPaginationType": "bootstrap", + "oLanguage": { + "sSearch": "", + "sLengthMenu": '_MENU_' + } + }); +} +// +// Function for table, located in element with id = datatable-2 +// +function TestTable2(){ + var asInitVals = []; + var oTable = $('#datatable-2').dataTable( { + "aaSorting": [[ 0, "asc" ]], + "sDom": "<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>", + "sPaginationType": "bootstrap", + "oLanguage": { + "sSearch": "", + "sLengthMenu": '_MENU_' + }, + bAutoWidth: false + }); + var header_inputs = $("#datatable-2 thead input"); + header_inputs.on('keyup', function(){ + /* Filter on the column (the index) of this element */ + oTable.fnFilter( this.value, header_inputs.index(this) ); + }) + .on('focus', function(){ + if ( this.className == "search_init" ){ + this.className = ""; + this.value = ""; + } + }) + .on('blur', function (i) { + if ( this.value == "" ){ + this.className = "search_init"; + this.value = asInitVals[header_inputs.index(this)]; + } + }); + header_inputs.each( function (i) { + asInitVals[i] = this.value; + }); +} +// +// Function for table, located in element with id = datatable-3 +// +function TestTable3(){ + $('#datatable-3').dataTable( { + "aaSorting": [[ 0, "asc" ]], + "sDom": "T<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>", + "sPaginationType": "bootstrap", + "oLanguage": { + "sSearch": "", + "sLengthMenu": '_MENU_' + }, + "oTableTools": { + "sSwfPath": "plugins/datatables/copy_csv_xls_pdf.swf", + "aButtons": [ + "copy", + "print", + { + "sExtends": "collection", + "sButtonText": 'Save ', + "aButtons": [ "csv", "xls", "pdf" ] + } + ] + } + }); +} +/*------------------------------------------- + Functions for Dashboard page (dashboard.html) +---------------------------------------------*/ +// +// Helper for random change data (only test data for Sparkline plots) +// +function SmallChangeVal(val) { + var new_val = Math.floor(100*Math.random()); + var plusOrMinus = Math.random() < 0.5 ? -1 : 1; + var result = val[0]+new_val*plusOrMinus; + if (parseInt(result) > 1000){ + return [val[0] - new_val] + } + if (parseInt(result) < 0){ + return [val[0] + new_val] + } + return [result]; +} +// +// Make array of random data +// +function SparklineTestData(){ + var arr = []; + for (var i=1; i<9; i++){ + arr.push([Math.floor(1000*Math.random())]) + } + return arr; +} +// +// Redraw Knob charts on Dashboard (panel- servers) +// +function RedrawKnob(elem){ + elem.animate({ + value: Math.floor(100*Math.random()) + },{ + duration: 3000, + easing:'swing', + progress: function() + { + $(this).val(parseInt(Math.ceil(elem.val()))).trigger('change'); + } + }); +} +// +// Draw 3 Sparkline plot in Dashboard header +// +function SparklineLoop(){ + SparkLineDrawBarGraph($('#sparkline-1'), sparkline_arr_1.map(SmallChangeVal)); + SparkLineDrawBarGraph($('#sparkline-2'), sparkline_arr_2.map(SmallChangeVal), '#7BC5D3'); + SparkLineDrawBarGraph($('#sparkline-3'), sparkline_arr_3.map(SmallChangeVal), '#B25050'); +} +// +// Draw Morris charts on Dashboard (panel- Statistics + 3 donut) +// +function MorrisDashboard(){ + Morris.Line({ + element: 'stat-graph', + data: [ + {"period": "2014-01", "Win8": 13.4, "Win7": 55.3, 'Vista': 1.5, 'NT': 0.3, 'XP':11, 'Linux': 4.9, 'Mac': 9.6 , 'Mobile':4}, + {"period": "2013-12", "Win8": 10, "Win7": 55.9, 'Vista': 1.5, 'NT': 3.1, 'XP':11.6, 'Linux': 4.8, 'Mac': 9.2 , 'Mobile':3.8}, + {"period": "2013-11", "Win8": 8.6, "Win7": 56.4, 'Vista': 1.6, 'NT': 3.7, 'XP':11.7, 'Linux': 4.8, 'Mac': 9.6 , 'Mobile':3.7}, + {"period": "2013-10", "Win8": 9.9, "Win7": 56.7, 'Vista': 1.6, 'NT': 1.4, 'XP':12.4, 'Linux': 4.9, 'Mac': 9.6 , 'Mobile':3.3}, + {"period": "2013-09", "Win8": 10.2, "Win7": 56.8, 'Vista': 1.6, 'NT': 0.4, 'XP':13.5, 'Linux': 4.8, 'Mac': 9.3 , 'Mobile':3.3}, + {"period": "2013-08", "Win8": 9.6, "Win7": 55.9, 'Vista': 1.7, 'NT': 0.4, 'XP':14.7, 'Linux': 5, 'Mac': 9.2 , 'Mobile':3.4}, + {"period": "2013-07", "Win8": 9, "Win7": 56.2, 'Vista': 1.8, 'NT': 0.4, 'XP':15.8, 'Linux': 4.9, 'Mac': 8.7 , 'Mobile':3.2}, + {"period": "2013-06", "Win8": 8.6, "Win7": 56.3, 'Vista': 2, 'NT': 0.4, 'XP':15.4, 'Linux': 4.9, 'Mac': 9.1 , 'Mobile':3.2}, + {"period": "2013-05", "Win8": 7.9, "Win7": 56.4, 'Vista': 2.1, 'NT': 0.4, 'XP':15.7, 'Linux': 4.9, 'Mac': 9.7 , 'Mobile':2.6}, + {"period": "2013-04", "Win8": 7.3, "Win7": 56.4, 'Vista': 2.2, 'NT': 0.4, 'XP':16.4, 'Linux': 4.8, 'Mac': 9.7 , 'Mobile':2.2}, + {"period": "2013-03", "Win8": 6.7, "Win7": 55.9, 'Vista': 2.4, 'NT': 0.4, 'XP':17.6, 'Linux': 4.7, 'Mac': 9.5 , 'Mobile':2.3}, + {"period": "2013-02", "Win8": 5.7, "Win7": 55.3, 'Vista': 2.4, 'NT': 0.4, 'XP':19.1, 'Linux': 4.8, 'Mac': 9.6 , 'Mobile':2.2}, + {"period": "2013-01", "Win8": 4.8, "Win7": 55.3, 'Vista': 2.6, 'NT': 0.5, 'XP':19.9, 'Linux': 4.8, 'Mac': 9.3 , 'Mobile':2.2} + ], + xkey: 'period', + ykeys: ['Win8', 'Win7','Vista','NT','XP', 'Linux', 'Mac', 'Mobile'], + labels: ['Win8', 'Win7','Vista','NT','XP', 'Linux', 'Mac', 'Mobile'] + }); + Morris.Donut({ + element: 'morris_donut_1', + data: [ + {value: 70, label: 'pay', formatted: 'at least 70%' }, + {value: 15, label: 'client', formatted: 'approx. 15%' }, + {value: 10, label: 'buy', formatted: 'approx. 10%' }, + {value: 5, label: 'hosted', formatted: 'at most 5%' } + ], + formatter: function (x, data) { return data.formatted; } + }); + Morris.Donut({ + element: 'morris_donut_2', + data: [ + {value: 20, label: 'office', formatted: 'current' }, + {value: 35, label: 'store', formatted: 'approx. 35%' }, + {value: 20, label: 'shop', formatted: 'approx. 20%' }, + {value: 25, label: 'cars', formatted: 'at most 25%' } + ], + formatter: function (x, data) { return data.formatted; } + }); + Morris.Donut({ + element: 'morris_donut_3', + data: [ + {value: 17, label: 'current', formatted: 'current' }, + {value: 22, label: 'week', formatted: 'last week' }, + {value: 10, label: 'month', formatted: 'last month' }, + {value: 25, label: 'period', formatted: 'period' }, + {value: 25, label: 'year', formatted: 'this year' } + ], + formatter: function (x, data) { return data.formatted; } + }); +} +// +// Draw SparkLine example Charts for Dashboard (table- Tickers) +// +function DrawSparklineDashboard(){ + SparklineLoop(); + setInterval(SparklineLoop, 1000); + var sparkline_clients = [[309],[223], [343], [652], [455], [18], [912],[15]]; + $('.bar').each(function(){ + $(this).sparkline(sparkline_clients.map(SmallChangeVal), {type: 'bar', barWidth: 5, highlightColor: '#000', barSpacing: 2, height: 30, stackedBarColor: '#6AA6D6'}); + }); + var sparkline_table = [ [1,341], [2,464], [4,564], [5,235], [6,335], [7,535], [8,642], [9,342], [10,765] ]; + $('.td-graph').each(function(){ + var arr = $.map( sparkline_table, function(val, index) { + return [[val[0], SmallChangeVal([val[1]])]]; + }); + $(this).sparkline( arr , + {defaultPixelsPerValue: 10, minSpotColor: null, maxSpotColor: null, spotColor: null, + fillColor: false, lineWidth: 2, lineColor: '#5A8DB6'}); + }); +} +// +// Draw Knob Charts for Dashboard (for servers) +// +function DrawKnobDashboard(){ + var srv_monitoring_selectors = [ + $("#knob-srv-1"),$("#knob-srv-2"),$("#knob-srv-3"), + $("#knob-srv-4"),$("#knob-srv-5"),$("#knob-srv-6") + ]; + srv_monitoring_selectors.forEach(DrawKnob); + setInterval(function(){ + srv_monitoring_selectors.forEach(RedrawKnob); + }, 3000); +} +/*------------------------------------------- + Function for File upload page (form_file_uploader.html) +---------------------------------------------*/ +function FileUpload(){ + $('#bootstrapped-fine-uploader').fineUploader({ + template: 'qq-template-bootstrap', + classes: { + success: 'alert alert-success', + fail: 'alert alert-error' + }, + thumbnails: { + placeholders: { + waitingPath: "assets/waiting-generic.png", + notAvailablePath: "assets/not_available-generic.png" + } + }, + request: { + endpoint: 'server/handleUploads' + }, + validation: { + allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'] + } + }); +} +/*------------------------------------------- + Function for OpenStreetMap page (maps.html) +---------------------------------------------*/ +// +// Load GeoIP JSON data and draw 3 maps +// +function LoadTestMap(){ + $.getJSON("http://www.telize.com/geoip?callback=?", + function(json) { + var osmap = new OpenLayers.Layer.OSM("OpenStreetMap");//создание слоя карты + var googlestreets = new OpenLayers.Layer.Google("Google Streets", {numZoomLevels: 22,visibility: false}); + var googlesattelite = new OpenLayers.Layer.Google( "Google Sattelite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}); + var map1_layers = [googlestreets,osmap, googlesattelite]; + // Create map in element with ID - map-1 + var map1 = drawMap(json.longitude, json.latitude, "map-1", map1_layers); + $("#map-1").resize(function(){ setTimeout(map1.updateSize(), 500); }); + // Create map in element with ID - map-2 + var osmap1 = new OpenLayers.Layer.OSM("OpenStreetMap");//создание слоя карты + var map2_layers = [osmap1]; + var map2 = drawMap(json.longitude, json.latitude, "map-2", map2_layers); + $("#map-2").resize(function(){ setTimeout(map2.updateSize(), 500); }); + // Create map in element with ID - map-3 + var sattelite = new OpenLayers.Layer.Google( "Google Sattelite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}); + var map3_layers = [sattelite]; + var map3 = drawMap(json.longitude, json.latitude, "map-3", map3_layers); + $("#map-3").resize(function(){ setTimeout(map3.updateSize(), 500); }); + } + ); +} +/*------------------------------------------- + Function for Fullscreen Map page (map_fullscreen.html) +---------------------------------------------*/ +// +// Create Fullscreen Map +// +function FullScreenMap(){ + $.getJSON("http://www.telize.com/geoip?callback=?", + function(json) { + var osmap = new OpenLayers.Layer.OSM("OpenStreetMap");//создание слоя карты + var googlestreets = new OpenLayers.Layer.Google("Google Streets", {numZoomLevels: 22,visibility: false}); + var googlesattelite = new OpenLayers.Layer.Google( "Google Sattelite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}); + var map1_layers = [googlestreets,osmap, googlesattelite]; + var map_fs = drawMap(json.longitude, json.latitude, "full-map", map1_layers); + } + ); +} +/*------------------------------------------- + Function for Flickr Gallery page (gallery_flickr.html) +---------------------------------------------*/ +// +// Load data from Flicks, parse and create gallery +// +function displayFlickrImages(data){ + var res; + $.each(data.items, function(i,item){ + if (i >11) { return false;} + res = " + item.title + "; + $('#box-one-content').append(res); + }); + setTimeout(function(){ + $("#box-one-content").justifiedGallery({ + 'usedSuffix':'lt240', + 'justifyLastRow':true, + 'rowHeight':150, + 'fixedHeight':false, + 'captions':true, + 'margins':1 + }); + $('#box-one-content').fadeIn('slow'); + }, 100); +} +/*------------------------------------------- + Function for Form Layout page (form layouts.html) +---------------------------------------------*/ +// +// Example form validator function +// +function DemoFormValidator(){ + $('#defaultForm').bootstrapValidator({ + message: 'This value is not valid', + fields: { + username: { + message: 'The username is not valid', + validators: { + notEmpty: { + message: 'The username is required and can\'t be empty' + }, + stringLength: { + min: 6, + max: 30, + message: 'The username must be more than 6 and less than 30 characters long' + }, + regexp: { + regexp: /^[a-zA-Z0-9_\.]+$/, + message: 'The username can only consist of alphabetical, number, dot and underscore' + } + } + }, + country: { + validators: { + notEmpty: { + message: 'The country is required and can\'t be empty' + } + } + }, + acceptTerms: { + validators: { + notEmpty: { + message: 'You have to accept the terms and policies' + } + } + }, + email: { + validators: { + notEmpty: { + message: 'The email address is required and can\'t be empty' + }, + emailAddress: { + message: 'The input is not a valid email address' + } + } + }, + website: { + validators: { + uri: { + message: 'The input is not a valid URL' + } + } + }, + phoneNumber: { + validators: { + digits: { + message: 'The value can contain only digits' + } + } + }, + color: { + validators: { + hexColor: { + message: 'The input is not a valid hex color' + } + } + }, + zipCode: { + validators: { + usZipCode: { + message: 'The input is not a valid US zip code' + } + } + }, + password: { + validators: { + notEmpty: { + message: 'The password is required and can\'t be empty' + }, + identical: { + field: 'confirmPassword', + message: 'The password and its confirm are not the same' + } + } + }, + confirmPassword: { + validators: { + notEmpty: { + message: 'The confirm password is required and can\'t be empty' + }, + identical: { + field: 'password', + message: 'The password and its confirm are not the same' + } + } + }, + ages: { + validators: { + lessThan: { + value: 100, + inclusive: true, + message: 'The ages has to be less than 100' + }, + greaterThan: { + value: 10, + inclusive: false, + message: 'The ages has to be greater than or equals to 10' + } + } + } + } + }); +} +// +// Function for Dynamically Change input size on Form Layout page +// +function FormLayoutExampleInputLength(selector){ + var steps = [ + "col-sm-1", + "col-sm-2", + "col-sm-3", + "col-sm-4", + "col-sm-5", + "col-sm-6", + "col-sm-7", + "col-sm-8", + "col-sm-9", + "col-sm-10", + "col-sm-11", + "col-sm-12" + ]; + selector.slider({ + range: 'min', + value: 1, + min: 0, + max: 11, + step: 1, + slide: function(event, ui) { + if (ui.value < 1) { + return false; + } + var input = $("#form-styles"); + var f = input.parent(); + f.removeClass(); + f.addClass(steps[ui.value]); + input.attr("placeholder",'.'+steps[ui.value]); + } + }); +} +/*------------------------------------------- + Functions for Progressbar page (ui_progressbars.html) +---------------------------------------------*/ +// +// Function for Knob clock +// +function RunClock() { + var second = $(".second"); + var minute = $(".minute"); + var hour = $(".hour"); + var d = new Date(); + var s = d.getSeconds(); + var m = d.getMinutes(); + var h = d.getHours(); + if (h > 11) {h = h-12;} + $('#knob-clock-value').html(h+':'+m+':'+s); + second.val(s).trigger("change"); + minute.val(m).trigger("change"); + hour.val(h).trigger("change"); +} +// +// Function for create test sliders on Progressbar page +// +function CreateAllSliders(){ + $(".slider-default").slider(); + var slider_range_min_amount = $(".slider-range-min-amount"); + var slider_range_min = $(".slider-range-min"); + var slider_range_max = $(".slider-range-max"); + var slider_range_max_amount = $(".slider-range-max-amount"); + var slider_range = $(".slider-range"); + var slider_range_amount = $(".slider-range-amount"); + slider_range_min.slider({ + range: "min", + value: 37, + min: 1, + max: 700, + slide: function( event, ui ) { + slider_range_min_amount.val( "$" + ui.value ); + } + }); + slider_range_min_amount.val("$" + slider_range_min.slider( "value" )); + slider_range_max.slider({ + range: "max", + min: 1, + max: 100, + value: 2, + slide: function( event, ui ) { + slider_range_max_amount.val( ui.value ); + } + }); + slider_range_max_amount.val(slider_range_max.slider( "value" )); + slider_range.slider({ + range: true, + min: 0, + max: 500, + values: [ 75, 300 ], + slide: function( event, ui ) { + slider_range_amount.val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] ); + } + }); + slider_range_amount.val( "$" + slider_range.slider( "values", 0 ) + + " - $" + slider_range.slider( "values", 1 ) ); + $( "#equalizer > div.progress > div" ).each(function() { + // read initial values from markup and remove that + var value = parseInt( $( this ).text(), 10 ); + $( this ).empty().slider({ + value: value, + range: "min", + animate: true, + orientation: "vertical" + }); + }); +} +/*------------------------------------------- + Function for jQuery-UI page (ui_jquery-ui.html) +---------------------------------------------*/ +// +// Function for make all Date-Time pickers on page +// +function AllTimePickers(){ + $('#datetime_example').datetimepicker({}); + $('#time_example').timepicker({ + hourGrid: 4, + minuteGrid: 10, + timeFormat: 'hh:mm tt' + }); + $('#date3_example').datepicker({ numberOfMonths: 3, showButtonPanel: true}); + $('#date3-1_example').datepicker({ numberOfMonths: 3, showButtonPanel: true}); + $('#date_example').datepicker({}); +} +/*------------------------------------------- + Function for Calendar page (calendar.html) +---------------------------------------------*/ +// +// Example form validator function +// +function DrawCalendar(){ + /* initialize the external events + -----------------------------------------------------------------*/ + $('#external-events div.external-event').each(function() { + // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) + var eventObject = { + title: $.trim($(this).text()) // use the element's text as the event title + }; + // store the Event Object in the DOM element so we can get to it later + $(this).data('eventObject', eventObject); + // make the event draggable using jQuery UI + $(this).draggable({ + zIndex: 999, + revert: true, // will cause the event to go back to its + revertDuration: 0 // original position after the drag + }); + }); + /* initialize the calendar + -----------------------------------------------------------------*/ + var calendar = $('#calendar').fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay' + }, + selectable: true, + selectHelper: true, + select: function(start, end, allDay) { + var form = $('
    '+ + '
    '+ + 'Event name'+ + '
    '+ + ''+ + '
    '+ + ''+ + '
    '+ + ''+ + '
    '+ + '
    '+ + '
    '); + var buttons = $(''+ + ''); + OpenModalBox('Add event', form, buttons); + $('#event_cancel').on('click', function(){ + CloseModalBox(); + }); + $('#event_submit').on('click', function(){ + var new_event_name = $('#newevent_name').val(); + if (new_event_name != ''){ + calendar.fullCalendar('renderEvent', + { + title: new_event_name, + description: $('#newevent_desc').val(), + start: start, + end: end, + allDay: allDay + }, + true // make the event "stick" + ); + } + CloseModalBox(); + }); + calendar.fullCalendar('unselect'); + }, + editable: true, + droppable: true, // this allows things to be dropped onto the calendar !!! + drop: function(date, allDay) { // this function is called when something is dropped + // retrieve the dropped element's stored Event Object + var originalEventObject = $(this).data('eventObject'); + // we need to copy it, so that multiple events don't have a reference to the same object + var copiedEventObject = $.extend({}, originalEventObject); + // assign it the date that was reported + copiedEventObject.start = date; + copiedEventObject.allDay = allDay; + // render the event on the calendar + // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) + $('#calendar').fullCalendar('renderEvent', copiedEventObject, true); + // is the "remove after drop" checkbox checked? + if ($('#drop-remove').is(':checked')) { + // if so, remove the element from the "Draggable Events" list + $(this).remove(); + } + }, + eventRender: function (event, element, icon) { + if (event.description != "") { + element.attr('title', event.description); + } + }, + eventClick: function(calEvent, jsEvent, view) { + var form = $('
    '+ + '
    '+ + 'Event name'+ + '
    '+ + ''+ + '
    '+ + ''+ + '
    '+ + ''+ + '
    '+ + '
    '+ + '
    '); + var buttons = $(''+ + ''+ + ''); + OpenModalBox('Change event', form, buttons); + $('#event_cancel').on('click', function(){ + CloseModalBox(); + }); + $('#event_delete').on('click', function(){ + calendar.fullCalendar('removeEvents' , function(ev){ + return (ev._id == calEvent._id); + }); + CloseModalBox(); + }); + $('#event_change').on('click', function(){ + calEvent.title = $('#newevent_name').val(); + calEvent.description = $('#newevent_desc').val(); + calendar.fullCalendar('updateEvent', calEvent); + CloseModalBox() + }); + } + }); + $('#new-event-add').on('click', function(event){ + event.preventDefault(); + var event_name = $('#new-event-title').val(); + var event_description = $('#new-event-desc').val(); + if (event_name != ''){ + var event_template = $('
    '+event_name+'
    '); + $('#events-templates-header').after(event_template); + var eventObject = { + title: event_name, + description: event_description + }; + // store the Event Object in the DOM element so we can get to it later + event_template.data('eventObject', eventObject); + event_template.draggable({ + zIndex: 999, + revert: true, + revertDuration: 0 + }); + } + }); +} +// +// Load scripts and draw Calendar +// +function DrawFullCalendar(){ + LoadCalendarScript(DrawCalendar); +} +////////////////////////////////////////////////////// +////////////////////////////////////////////////////// +// +// MAIN DOCUMENT READY SCRIPT OF DEVOOPS THEME +// +// In this script main logic of theme +// +////////////////////////////////////////////////////// +////////////////////////////////////////////////////// +$(document).ready(function () { + $('.show-sidebar').on('click', function () { + $('div#main').toggleClass('sidebar-show'); + setTimeout(MessagesMenuWidth, 250); + }); + var ajax_url = location.hash.replace(/^#/, ''); + if (ajax_url.length < 1) { + ajax_url = 'ajax/dashboard.html'; + } + LoadAjaxContent(ajax_url); + $('.main-menu').on('click', 'a', function (e) { + var parents = $(this).parents('li'); + var li = $(this).closest('li.dropdown'); + var another_items = $('.main-menu li').not(parents); + another_items.find('a').removeClass('active'); + another_items.find('a').removeClass('active-parent'); + if ($(this).hasClass('dropdown-toggle') || $(this).closest('li').find('ul').length == 0) { + $(this).addClass('active-parent'); + var current = $(this).next(); + if (current.is(':visible')) { + li.find("ul.dropdown-menu").slideUp('fast'); + li.find("ul.dropdown-menu a").removeClass('active') + } + else { + another_items.find("ul.dropdown-menu").slideUp('fast'); + current.slideDown('fast'); + } + } + else { + if (li.find('a.dropdown-toggle').hasClass('active-parent')) { + var pre = $(this).closest('ul.dropdown-menu'); + pre.find("li.dropdown").not($(this).closest('li')).find('ul.dropdown-menu').slideUp('fast'); + } + } + if ($(this).hasClass('active') == false) { + $(this).parents("ul.dropdown-menu").find('a').removeClass('active'); + $(this).addClass('active') + } + if ($(this).hasClass('ajax-link')) { + e.preventDefault(); + if ($(this).hasClass('add-full')) { + $('#content').addClass('full-content'); + } + else { + $('#content').removeClass('full-content'); + } + var url = $(this).attr('href'); + window.location.hash = url; + LoadAjaxContent(url); + } + if ($(this).attr('href') == '#') { + e.preventDefault(); + } + }); + var height = window.innerHeight - 49; + $('#main').css('min-height', height) + .on('click', '.expand-link', function (e) { + var body = $('body'); + e.preventDefault(); + var box = $(this).closest('div.box'); + var button = $(this).find('i'); + button.toggleClass('fa-expand').toggleClass('fa-compress'); + box.toggleClass('expanded'); + body.toggleClass('body-expanded'); + var timeout = 0; + if (body.hasClass('body-expanded')) { + timeout = 100; + } + setTimeout(function () { + box.toggleClass('expanded-padding'); + }, timeout); + setTimeout(function () { + box.resize(); + box.find('[id^=map-]').resize(); + }, timeout + 50); + }) + .on('click', '.collapse-link', function (e) { + e.preventDefault(); + var box = $(this).closest('div.box'); + var button = $(this).find('i'); + var content = box.find('div.box-content'); + content.slideToggle('fast'); + button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down'); + setTimeout(function () { + box.resize(); + box.find('[id^=map-]').resize(); + }, 50); + }) + .on('click', '.close-link', function (e) { + e.preventDefault(); + var content = $(this).closest('div.box'); + content.remove(); + }); + $('#locked-screen').on('click', function (e) { + e.preventDefault(); + $('body').addClass('body-screensaver'); + $('#screensaver').addClass("show"); + ScreenSaver(); + }); + $('body').on('click', 'a.close-link', function(e){ + e.preventDefault(); + CloseModalBox(); + }); + $('#top-panel').on('click','a', function(e){ + if ($(this).hasClass('ajax-link')) { + e.preventDefault(); + if ($(this).hasClass('add-full')) { + $('#content').addClass('full-content'); + } + else { + $('#content').removeClass('full-content'); + } + var url = $(this).attr('href'); + window.location.hash = url; + LoadAjaxContent(url); + } + }); + $('#search').on('keydown', function(e){ + if (e.keyCode == 13){ + e.preventDefault(); + $('#content').removeClass('full-content'); + ajax_url = 'ajax/page_search.html'; + window.location.hash = ajax_url; + LoadAjaxContent(ajax_url); + } + }); + $('#screen_unlock').on('mouseover', function(){ + var header = 'Enter current username and password'; + var form = $('
    '+ + '
    '); + var button = $(''); + OpenModalBox(header, form, button); + }); +}); + + diff --git a/plugins/web_gui/static/js/devoops.min.js b/plugins/web_gui/static/js/devoops.min.js new file mode 100644 index 0000000..be8b8dc --- /dev/null +++ b/plugins/web_gui/static/js/devoops.min.js @@ -0,0 +1 @@ +"use strict";function LoadCalendarScript(callback){function LoadFullCalendarScript(){if(!$.fn.fullCalendar)$.getScript('plugins/fullcalendar/fullcalendar.js',callback);else if(callback&&typeof callback==="function")callback();}if(!$.fn.moment)$.getScript('plugins/moment/moment.min.js',LoadFullCalendarScript);else LoadFullCalendarScript();}function LoadOpenLayersScript(callback){if(!$.fn.OpenLayers)$.getScript('http://www.openlayers.org/api/OpenLayers.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadTimePickerScript(callback){if(!$.fn.timepicker)$.getScript('plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.min.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadBootstrapValidatorScript(callback){if(!$.fn.bootstrapValidator)$.getScript('plugins/bootstrapvalidator/bootstrapValidator.min.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadSelect2Script(callback){if(!$.fn.select2)$.getScript('plugins/select2/select2.min.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadDataTablesScripts(callback){function LoadDatatables(){$.getScript('plugins/datatables/jquery.dataTables.js',function(){$.getScript('plugins/datatables/ZeroClipboard.js',function(){$.getScript('plugins/datatables/TableTools.js',function(){$.getScript('plugins/datatables/dataTables.bootstrap.js',callback);});});});}if(!$.fn.dataTables)LoadDatatables();else if(callback&&typeof callback==="function")callback();}function LoadFineUploader(callback){if(!$.fn.fineuploader)$.getScript('plugins/fineuploader/jquery.fineuploader-4.3.1.min.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadXChartScript(callback){function LoadXChart(){$.getScript('plugins/xcharts/xcharts.min.js',callback);}function LoadD3Script(){if(!$.fn.d3)$.getScript('plugins/d3/d3.v3.min.js',LoadXChart);else LoadXChart();}if(!$.fn.xcharts)LoadD3Script();else if(callback&&typeof callback==="function")callback();}function LoadFlotScripts(callback){function LoadFlotScript(){$.getScript('plugins/flot/jquery.flot.js',LoadFlotResizeScript);}function LoadFlotResizeScript(){$.getScript('plugins/flot/jquery.flot.resize.js',LoadFlotTimeScript);}function LoadFlotTimeScript(){$.getScript('plugins/flot/jquery.flot.time.js',callback);}if(!$.fn.flot)LoadFlotScript();else if(callback&&typeof callback==="function")callback();}function LoadMorrisScripts(callback){function LoadMorrisScript(){if(!$.fn.Morris)$.getScript('plugins/morris/morris.min.js',callback);else if(callback&&typeof callback==="function")callback();}if(!$.fn.raphael)$.getScript('plugins/raphael/raphael-min.js',LoadMorrisScript);else LoadMorrisScript();}function LoadFancyboxScript(callback){if(!$.fn.fancybox)$.getScript('plugins/fancybox/jquery.fancybox.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadKnobScripts(callback){if(!$.fn.knob)$.getScript('plugins/jQuery-Knob/jquery.knob.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadSparkLineScript(callback){if(!$.fn.sparkline)$.getScript('plugins/sparkline/jquery.sparkline.min.js',callback);else if(callback&&typeof callback==="function")callback();}function LoadAjaxContent(url){$('.preloader').show();$.ajax({mimeType:'text/html; charset=utf-8',url:url,type:'GET',success:function(data){$('#ajax-content').html(data);$('.preloader').hide();},error:function(jqXHR,textStatus,errorThrown){alert(errorThrown);},dataType:"html",async:false});}function WinMove(){$("div.box").not('.no-drop').draggable({revert:true,zIndex:2000,cursor:"crosshair",handle:'.box-name',opacity:0.8}).droppable({tolerance:'pointer',drop:function(event,ui){var draggable=ui.draggable;var droppable=$(this);var dragPos=draggable.position();var dropPos=droppable.position();draggable.swap(droppable);setTimeout(function(){var dropmap=droppable.find('[id^=map-]');var dragmap=draggable.find('[id^=map-]');if(dragmap.length>0||dropmap.length>0){dragmap.resize();dropmap.resize();}else{draggable.resize();droppable.resize();}},50);setTimeout(function(){draggable.find('[id^=map-]').resize();droppable.find('[id^=map-]').resize();},250);}});}jQuery.fn.swap=function(b){b=jQuery(b)[0];var a=this[0];var t=a.parentNode.insertBefore(document.createTextNode(''),a);b.parentNode.insertBefore(a,b);t.parentNode.insertBefore(b,t);t.parentNode.removeChild(t);return this;};function ScreenSaver(){var canvas=document.getElementById("canvas");var ctx=canvas.getContext("2d");var W=window.innerWidth;var H=window.innerHeight;canvas.width=W;canvas.height=H;var particles=[];for(var i=0;i<25;i++)particles.push(new Particle());function Particle(){this.location={x:Math.random()*W,y:Math.random()*H};this.radius=0;this.speed=3;this.angle=Math.random()*360;var r=Math.round(Math.random()*255);var g=Math.round(Math.random()*255);var b=Math.round(Math.random()*255);var a=Math.random();this.rgba="rgba("+r+", "+g+", "+b+", "+a+")";}function draw(){ctx.globalCompositeOperation="source-over";ctx.fillStyle="rgba(0, 0, 0, 0.02)";ctx.fillRect(0,0,W,H);ctx.globalCompositeOperation="lighter";for(var i=0;iW)p.location.x=0;if(p.location.y<0)p.location.y=H;if(p.location.y>H)p.location.y=0;}}setInterval(draw,30);}function drawGoogleChart(chart_data,chart_options,element,chart_type){var data=google.visualization.arrayToDataTable(chart_data);var chart=new chart_type(document.getElementById(element));chart.draw(data,chart_options);}function DrawKnob(elem){elem.knob({change:function(value){},release:function(value){console.log("release : "+value);},cancel:function(){console.log("cancel : ",this);},draw:function(){if(this.$.data('skin')=='tron'){var a=this.angle(this.cv);var sa=this.startAngle;var sat=this.startAngle;var ea;var eat=sat+a;var r=1;this.g.lineWidth=this.lineWidth;this.o.cursor&&(sat=eat-0.3)&&(eat=eat+0.3);if(this.o.displayPrevious){ea=this.startAngle+this.angle(this.v);this.o.cursor&&(sa=ea-0.3)&&(ea=ea+0.3);this.g.beginPath();this.g.strokeStyle=this.pColor;this.g.arc(this.xy,this.xy,this.radius-this.lineWidth,sa,ea,false);this.g.stroke();}this.g.beginPath();this.g.strokeStyle=r?this.o.fgColor:this.fgColor;this.g.arc(this.xy,this.xy,this.radius-this.lineWidth,sat,eat,false);this.g.stroke();this.g.lineWidth=2;this.g.beginPath();this.g.strokeStyle=this.o.fgColor;this.g.arc(this.xy,this.xy,this.radius-this.lineWidth+1+this.lineWidth*2/3,0,2*Math.PI,false);this.g.stroke();return false;}}});var v;var up=0;var down=0;var i=0;var $idir=$("div.idir");var $ival=$("div.ival");var incr=function(){i++;$idir.show().html("+").fadeOut();$ival.html(i);};var decr=function(){i--;$idir.show().html("-").fadeOut();$ival.html(i);};$("input.infinite").knob({min:0,max:20,stopper:false,change:function(){if(v>this.cv)if(up){decr();up=0;}else{up=1;down=0;}else if(v1)map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true}));map.addControl(new OpenLayers.Control.Permalink());map.addControl(new OpenLayers.Control.MousePosition({displayProjection:epsg4326}));return map;}function PrettyDates(){var currDate=new Date();var year=currDate.getFullYear();var month=currDate.getMonth()+1;var startmonth=1;if(month>3)startmonth=month-2;if(startmonth<=9)startmonth='0'+startmonth;if(month<=9)month='0'+month;var day=currDate.getDate();if(day<=9)day='0'+day;var startdate=year+'-'+startmonth+'-01';var enddate=year+'-'+month+'-'+day;return [startdate,enddate];}function SetMinBlockHeight(elem){elem.css('min-height',window.innerHeight-49);}function MessagesMenuWidth(){var W=window.innerWidth;var W_menu=$('#sidebar-left').outerWidth();var w_messages=(W-W_menu)*16.666666666666664/100;$('#messages-menu').width(w_messages);}function DashboardTabChecker(){$('#content').on('click','a.tab-link',function(e){e.preventDefault();$('div#dashboard_tabs').find('div[id^=dashboard]').each(function(){$(this).css('visibility','hidden').css('position','absolute');});var attr=$(this).attr('id');$('#'+'dashboard-'+attr).css('visibility','visible').css('position','relative');$(this).closest('.nav').find('li').removeClass('active');$(this).closest('li').addClass('active');});}function TinyMCEStart(elem,mode){var plugins=[];if(mode=='extreme')plugins=["advlist anchor autolink autoresize autosave bbcode charmap code contextmenu directionality ","emoticons fullpage fullscreen hr image insertdatetime layer legacyoutput","link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace","tabfocus table template textcolor visualblocks visualchars wordcount"];tinymce.init({selector:elem,theme:"modern",plugins:plugins,toolbar:"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media fullpage | forecolor backcolor emoticons",style_formats:[{title:'Header 2',block:'h2',classes:'page-header'},{title:'Header 3',block:'h3',classes:'page-header'},{title:'Header 4',block:'h4',classes:'page-header'},{title:'Header 5',block:'h5',classes:'page-header'},{title:'Header 6',block:'h6',classes:'page-header'},{title:'Bold text',inline:'b'},{title:'Red text',inline:'span',styles:{color:'#ff0000'}},{title:'Red header',block:'h1',styles:{color:'#ff0000'}},{title:'Example 1',inline:'span',classes:'example1'},{title:'Example 2',inline:'span',classes:'example2'},{title:'Table styles'},{title:'Table row 1',selector:'tr',classes:'tablerow1'}]});}function SparkLineDrawBarGraph(elem,arr,color){if(color)var stacked_color=color;else stacked_color='#6AA6D6';elem.sparkline(arr,{type:'bar',barWidth:7,highlightColor:'#000',barSpacing:2,height:40,stackedBarColor:stacked_color});}function OpenModalBox(header,inner,bottom){var modalbox=$('#modalbox');modalbox.find('.modal-header-name span').html(header);modalbox.find('.devoops-modal-inner').html(inner);modalbox.find('.devoops-modal-bottom').html(bottom);modalbox.fadeIn('fast');$('body').addClass("body-expanded");}function CloseModalBox(){var modalbox=$('#modalbox');modalbox.fadeOut('fast',function(){modalbox.find('.modal-header-name span').children().remove();modalbox.find('.devoops-modal-inner').children().remove();modalbox.find('.devoops-modal-bottom').children().remove();$('body').removeClass("body-expanded");});}(function($){$.fn.beautyTables=function(){var table=this;var string_fill=false;this.on('keydown',function(event){var target=event.target;var tr=$(target).closest("tr");var col=$(target).closest("td");if(target.tagName.toUpperCase()=='INPUT'){if(event.shiftKey===true)switch(event.keyCode){case 37:col.prev().children("input[type=text]").focus();break;case 39:col.next().children("input[type=text]").focus();break;case 40:if(string_fill==false)tr.next().find('td:eq('+col.index()+') input[type=text]').focus();break;case 38:if(string_fill==false)tr.prev().find('td:eq('+col.index()+') input[type=text]').focus();break;}if(event.ctrlKey===true)switch(event.keyCode){case 37:tr.find('td:eq(1)').find("input[type=text]").focus();break;case 39:tr.find('td:last-child').find("input[type=text]").focus();break;case 40:if(string_fill==false)table.find('tr:last-child td:eq('+col.index()+') input[type=text]').focus();break;case 38:if(string_fill==false)table.find('tr:eq(1) td:eq('+col.index()+') input[type=text]').focus();break;}if(event.keyCode==13||event.keyCode==9){event.preventDefault();col.next().find("input[type=text]").focus();}if(string_fill==false){if(event.keyCode==34){event.preventDefault();table.find('tr:last-child td:last-child').find("input[type=text]").focus();}if(event.keyCode==33){event.preventDefault();table.find('tr:eq(1) td:eq(1)').find("input[type=text]").focus();}}}});table.find("input[type=text]").each(function(){$(this).on('blur',function(event){var target=event.target;var col=$(target).parents("td");if(table.find("input[name=string-fill]").prop("checked")==true)col.nextAll().find("input[type=text]").each(function(){$(this).val($(target).val());});});});};})(jQuery);(function($){$.fn.beautyHover=function(){var table=this;table.on('mouseover','td',function(){var idx=$(this).index();var rows=$(this).closest('table').find('tr');rows.each(function(){$(this).find('td:eq('+idx+')').addClass('beauty-hover');});}).on('mouseleave','td',function(e){var idx=$(this).index();var rows=$(this).closest('table').find('tr');rows.each(function(){$(this).find('td:eq('+idx+')').removeClass('beauty-hover');});});};})(jQuery);function Table2Json(table){var result={};table.find("tr").each(function(){var oneRow=[];var varname=$(this).index();$("td",this).each(function(index){if(index!=0)oneRow.push($("input",this).val());});result[varname]=oneRow;});var result_json=JSON.stringify(result);OpenModalBox('Table to JSON values',result_json);}function FlotGraph1(){var data=[],totalPoints=300;function getRandomData(){if(data.length>0)data=data.slice(1);while(data.length0?data[data.length-1]:50,y=prev+Math.random()*10-5;if(y<0)y=0;else if(y>100)y=100;data.push(y);}var res=[];for(var i=0;iaxes.xaxis.max||pos.yaxes.yaxis.max)return;var i,j,dataset=plot.getData();for(i=0;ipos.x)break;var y,p1=series.data[j-1],p2=series.data[j];if(p1==null)y=p2[1];else if(p2==null)y=p1[1];else y=p1[1]+(p2[1]-p1[1])*(pos.x-p1[0])/(p2[0]-p1[0]);legends.eq(i).text(series.label.replace(/=.*/,"= "+y.toFixed(2)));}}$("#box-two-content").bind("plothover",function(event,pos,item){latestPosition=pos;if(!updateLegendTimeout)updateLegendTimeout=setTimeout(updateLegend,50);});}function FlotGraph3(){var d1=[];for(var i=0;i<=60;i+=1)d1.push([i,parseInt(Math.random()*30-10)]);function plotWithOptions(t){$.plot("#box-three-content",[{data:d1,color:"rgb(30, 180, 20)",threshold:{below:t,color:"rgb(200, 20, 30)"},lines:{steps:true}}]);}plotWithOptions(0);}function FlotGraph4(){var d1=[];for(var i=0;i<14;i+=0.5)d1.push([i,Math.sin(i)]);var d2=[[0,3],[4,8],[8,5],[9,13]];var d3=[];for(var i=0;i<14;i+=0.5)d3.push([i,Math.cos(i)]);var d4=[];for(var i=0;i<14;i+=0.1)d4.push([i,Math.sqrt(i*10)]);var d5=[];for(var i=0;i<14;i+=0.5)d5.push([i,Math.sqrt(i)]);var d6=[];for(var i=0;i<14;i+=0.5+Math.random())d6.push([i,Math.sqrt(2*i+Math.sin(i)+5)]);$.plot("#box-four-content",[{data:d1,lines:{show:true,fill:true}},{data:d2,bars:{show:true}},{data:d3,points:{show:true}},{data:d4,lines:{show:true}},{data:d5,lines:{show:true},points:{show:true}},{data:d6,lines:{show:true,steps:true}}]);}function MorrisChart1(){var day_data=[{"period":"2013-10-01","licensed":3407,"sorned":660},{"period":"2013-09-30","licensed":3351,"sorned":629},{"period":"2013-09-29","licensed":3269,"sorned":618},{"period":"2013-09-20","licensed":3246,"sorned":661},{"period":"2013-09-19","licensed":3257,"sorned":667},{"period":"2013-09-18","licensed":3248,"sorned":627},{"period":"2013-09-17","licensed":3171,"sorned":660},{"period":"2013-09-16","licensed":3171,"sorned":676},{"period":"2013-09-15","licensed":3201,"sorned":656},{"period":"2013-09-10","licensed":3215,"sorned":622}];Morris.Bar({element:'morris-chart-1',data:day_data,xkey:'period',ykeys:['licensed','sorned'],labels:['Licensed','SORN'],xLabelAngle:60});}function MorrisChart2(){Morris.Area({element:'morris-chart-2',data:[{x:'2011 Q1',y:3,z:3,m:1},{x:'2011 Q2',y:2,z:0,m:7},{x:'2011 Q3',y:2,z:5,m:2},{x:'2011 Q4',y:4,z:4,m:5},{x:'2012 Q1',y:6,z:1,m:11},{x:'2012 Q2',y:4,z:4,m:3},{x:'2012 Q3',y:4,z:4,m:7},{x:'2012 Q4',y:4,z:4,m:9}],xkey:'x',ykeys:['y','z','m'],labels:['Y','Z','M']}).on('click',function(i,row){console.log(i,row);});}function MorrisChart3(){var decimal_data=[];for(var x=0;x<=360;x+=10)decimal_data.push({x:x,y:Math.sin(Math.PI*x/180).toFixed(4),z:Math.cos(Math.PI*x/180).toFixed(4)});Morris.Line({element:'morris-chart-3',data:decimal_data,xkey:'x',ykeys:['y','z'],labels:['sin(x)','cos(x)'],parseTime:false,goals:[-1,0,1]});}function MorrisChart4(){Morris.Bar({element:'morris-chart-4',data:[{x:'2011 Q1',y:0},{x:'2011 Q2',y:1},{x:'2011 Q3',y:2},{x:'2011 Q4',y:3},{x:'2012 Q1',y:4},{x:'2012 Q2',y:5},{x:'2012 Q3',y:6},{x:'2012 Q4',y:7},{x:'2013 Q1',y:8},{x:'2013 Q2',y:7},{x:'2013 Q3',y:6},{x:'2013 Q4',y:5},{x:'2014 Q1',y:9}],xkey:'x',ykeys:['y'],labels:['Y'],barColors:function(row,series,type){if(type==='bar'){var red=Math.ceil(255*row.y/this.ymax);return 'rgb('+red+',0,0)';}else return '#000';}});}function MorrisChart5(){Morris.Area({element:'morris-chart-5',data:[{period:'2010 Q1',iphone:2666,ipad:null,itouch:2647},{period:'2010 Q2',iphone:2778,ipad:2294,itouch:2441},{period:'2010 Q3',iphone:4912,ipad:1969,itouch:2501},{period:'2010 Q4',iphone:3767,ipad:3597,itouch:5689},{period:'2011 Q1',iphone:6810,ipad:1914,itouch:2293},{period:'2011 Q2',iphone:5670,ipad:4293,itouch:1881},{period:'2011 Q3',iphone:4820,ipad:3795,itouch:1588},{period:'2011 Q4',iphone:15073,ipad:5967,itouch:5175},{period:'2012 Q1',iphone:10687,ipad:4460,itouch:2028},{period:'2012 Q2',iphone:8432,ipad:5713,itouch:1791}],xkey:'period',ykeys:['iphone','ipad','itouch'],labels:['iPhone','iPad','iPod Touch'],pointSize:2,hideHover:'auto'});}function DrawAllCharts(){var chart1_data=[['Smartphones','PC','Notebooks','Monitors','Routers','Switches'],['01.01.2014',1234,2342,344,232,131],['02.01.2014',1254,232,314,232,331],['03.01.2014',2234,342,298,232,665],['04.01.2014',2234,42,559,232,321],['05.01.2014',1999,82,116,232,334],['06.01.2014',1634,834,884,232,191],['07.01.2014',321,342,383,232,556],['08.01.2014',845,112,499,232,731]];var chart1_options={title:'Sales of company',hAxis:{title:'Date',titleTextStyle:{color:'red'}},backgroundColor:'#fcfcfc',vAxis:{title:'Quantity',titleTextStyle:{color:'blue'}}};var chart1_element='google-chart-1';var chart1_type=google.visualization.ColumnChart;drawGoogleChart(chart1_data,chart1_options,chart1_element,chart1_type);var chart2_data=[['Height','Width'],['Samsung',74.5],['Apple',31.24],['LG',12.10],['Huawei',11.14],['Sony',8.3],['Nokia',7.4],['Blackberry',6.8],['HTC',6.63],['Motorola',3.5],['Other',43.15]];var chart2_options={title:'Smartphone marketshare 2Q 2013',backgroundColor:'#fcfcfc'};var chart2_element='google-chart-2';var chart2_type=google.visualization.PieChart;drawGoogleChart(chart2_data,chart2_options,chart2_element,chart2_type);var chart3_data=[['Age','Weight'],[8,12],[4,5.5],[11,14],[4,5],[3,3.5],[6.5,7]];var chart3_options={title:'Age vs. Weight comparison',hAxis:{title:'Age',minValue:0,maxValue:15},vAxis:{title:'Weight',minValue:0,maxValue:15},legend:'none',backgroundColor:'#fcfcfc'};var chart3_element='google-chart-3';var chart3_type=google.visualization.ScatterChart;drawGoogleChart(chart3_data,chart3_options,chart3_element,chart3_type);var chart4_data=[['ID','Life Expectancy','Fertility Rate','Region','Population'],['CAN',80.66,1.67,'North America',33739900],['DEU',79.84,1.36,'Europe',81902307],['DNK',78.6,1.84,'Europe',5523095],['EGY',72.73,2.78,'Middle East',79716203],['GBR',80.05,2,'Europe',61801570],['IRN',72.49,1.7,'Middle East',73137148],['IRQ',68.09,4.77,'Middle East',31090763],['ISR',81.55,2.96,'Middle East',7485600],['RUS',68.6,1.54,'Europe',141850000],['USA',78.09,2.05,'North America',307007000]];var chart4_options={title:'Correlation between life expectancy, fertility rate and population of some world countries (2010)',hAxis:{title:'Life Expectancy'},vAxis:{title:'Fertility Rate'},backgroundColor:'#fcfcfc',bubble:{textStyle:{fontSize:11}}};var chart4_element='google-chart-4';var chart4_type=google.visualization.BubbleChart;drawGoogleChart(chart4_data,chart4_options,chart4_element,chart4_type);var chart5_data=[['Country','Popularity'],['Germany',200],['United States',300],['Brazil',400],['Canada',500],['France',600],['RU',700]];var chart5_options={backgroundColor:'#fcfcfc',enableRegionInteractivity:true};var chart5_element='google-chart-5';var chart5_type=google.visualization.GeoChart;drawGoogleChart(chart5_data,chart5_options,chart5_element,chart5_type);var chart6_data=[['Year','Sales','Expenses'],['2004',1000,400],['2005',1170,460],['2006',660,1120],['2007',1030,540],['2008',2080,740],['2009',1949,690],['2010',2334,820]];var chart6_options={backgroundColor:'#fcfcfc',title:'Company Performance'};var chart6_element='google-chart-6';var chart6_type=google.visualization.LineChart;drawGoogleChart(chart6_data,chart6_options,chart6_element,chart6_type);var chart7_data=[['Task','Hours per Day'],['Work',11],['Eat',2],['Commute',2],['Watch TV',2],['Sleep',7]];var chart7_options={backgroundColor:'#fcfcfc',title:'My Daily Activities',pieHole:0.4};var chart7_element='google-chart-7';var chart7_type=google.visualization.PieChart;drawGoogleChart(chart7_data,chart7_options,chart7_element,chart7_type);var chart8_data=[['Generation','Descendants'],[0,1],[1,33],[2,269],[3,2013]];var chart8_options={backgroundColor:'#fcfcfc',title:'Descendants by Generation',hAxis:{title:'Generation',minValue:0,maxValue:3},vAxis:{title:'Descendants',minValue:0,maxValue:2100},trendlines:{0:{type:'exponential',visibleInLegend:true}}};var chart8_element='google-chart-8';var chart8_type=google.visualization.ScatterChart;drawGoogleChart(chart8_data,chart8_options,chart8_element,chart8_type);}function xGraph1(){var tt=document.createElement('div'),leftOffset=-(~~$('html').css('padding-left').replace('px','')+~~$('body').css('margin-left').replace('px','')),topOffset=-32;tt.className='ex-tooltip';document.body.appendChild(tt);var data={"xScale":"time","yScale":"linear","main":[{"className":".xchart-class-1","data":[{"x":"2012-11-05","y":6},{"x":"2012-11-06","y":6},{"x":"2012-11-07","y":8},{"x":"2012-11-08","y":3},{"x":"2012-11-09","y":4},{"x":"2012-11-10","y":9},{"x":"2012-11-11","y":6},{"x":"2012-11-12","y":16},{"x":"2012-11-13","y":4},{"x":"2012-11-14","y":9},{"x":"2012-11-15","y":2}]}]};var opts={"dataFormatX":function(x){return d3.time.format('%Y-%m-%d').parse(x);},"tickFormatX":function(x){return d3.time.format('%A')(x);},"mouseover":function(d,i){var pos=$(this).offset();$(tt).text(d3.time.format('%A')(d.x)+': '+d.y).css({top:topOffset+pos.top,left:pos.left+leftOffset}).show();},"mouseout":function(x){$(tt).hide();}};var myChart=new xChart('line-dotted',data,'#xchart-1',opts);}function xGraph2(){var data={"xScale":"ordinal","yScale":"linear","main":[{"className":".xchart-class-2","data":[{"x":"Apple","y":575},{"x":"Facebook","y":163},{"x":"Microsoft","y":303},{"x":"Cisco","y":121},{"x":"Google","y":393}]}]};var myChart=new xChart('bar',data,'#xchart-2');}function xGraph3(){var data={"xScale":"time","yScale":"linear","type":"line","main":[{"className":".xchart-class-3","data":[{"x":"2012-11-05","y":1},{"x":"2012-11-06","y":6},{"x":"2012-11-07","y":13},{"x":"2012-11-08","y":-3},{"x":"2012-11-09","y":-4},{"x":"2012-11-10","y":9},{"x":"2012-11-11","y":6},{"x":"2012-11-12","y":7},{"x":"2012-11-13","y":-2},{"x":"2012-11-14","y":-7}]}]};var opts={"dataFormatX":function(x){return d3.time.format('%Y-%m-%d').parse(x);},"tickFormatX":function(x){return d3.time.format('%A')(x);}};var myChart=new xChart('line',data,'#xchart-3',opts);}function CoinDeskGraph(){var dates=PrettyDates();var startdate=dates[0];var enddate=dates[1];var jsonURL='http://api.coindesk.com/v1/bpi/historical/close.json?start='+startdate+'&end='+enddate;$.getJSON(jsonURL,function(result){$.each(result.bpi,function(key,val){xchart_data.push({'x':key,'y':val});});var graphXChartResize;$('#coindesk-xchart').resize(function(){clearTimeout(graphXChartResize);graphXChartResize=setTimeout(DrawCoinDeskXCharts,500);});DrawCoinDeskXCharts();$.each(result.bpi,function(key,val){google_data.push([key,val]);});var graphGChartResize;$('#coindesk-google-chart').resize(function(){clearTimeout(graphGChartResize);graphGChartResize=setTimeout(DrawCoinDeskGoogleCharts,500);});DrawCoinDeskGoogleCharts();$.each(result.bpi,function(key,val){var parseDate=key;parseDate=parseDate.split("-");var newDate=parseDate[1]+"/"+parseDate[2]+"/"+parseDate[0];var new_date=new Date(newDate).getTime();exchange_rate.push([new_date,val]);});DrawCoinDeskFlot();var graphSparklineResize;$('#coindesk-sparklines').resize(function(){clearTimeout(graphSparklineResize);graphSparklineResize=setTimeout(DrawCoinDeskSparkLine,500);});DrawCoinDeskSparkLine();});}function DrawCoinDeskSparkLine(){$('#coindesk-sparklines').sparkline(exchange_rate,{height:'100%',width:'100%'});}function DrawCoinDeskXCharts(){var data={"xScale":"ordinal","yScale":"linear","main":[{"className":".pizza","data":xchart_data}]};var myChart=new xChart('line-dotted',data,'#coindesk-xchart');}function DrawCoinDeskFlot(){var data1=[{data:exchange_rate,label:"Bitcoin exchange rate ($)"}];var options={canvas:true,xaxes:[{mode:"time"}],yaxes:[{min:0},{position:"right",alignTicksWithAxis:1,tickFormatter:function(value,axis){return value.toFixed(axis.tickDecimals)+"€";}}],legend:{position:"sw"}};$.plot("#coindesk-flot",data1,options);}function DrawCoinDeskGoogleCharts(){var google_options={backgroundColor:'#fcfcfc',title:'Coindesk Exchange Rate'};var google_element='coindesk-google-chart';var google_type=google.visualization.LineChart;drawGoogleChart(google_data,google_options,google_element,google_type);}function TestTable1(){$('#datatable-1').dataTable({"aaSorting":[[0,"asc"]],"sDom":"<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>","sPaginationType":"bootstrap","oLanguage":{"sSearch":"","sLengthMenu":'_MENU_'}});}function TestTable2(){var asInitVals=[];var oTable=$('#datatable-2').dataTable({"aaSorting":[[0,"asc"]],"sDom":"<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>","sPaginationType":"bootstrap","oLanguage":{"sSearch":"","sLengthMenu":'_MENU_'},bAutoWidth:false});var header_inputs=$("#datatable-2 thead input");header_inputs.on('keyup',function(){oTable.fnFilter(this.value,header_inputs.index(this));}).on('focus',function(){if(this.className=="search_init"){this.className="";this.value="";}}).on('blur',function(i){if(this.value==""){this.className="search_init";this.value=asInitVals[header_inputs.index(this)];}});header_inputs.each(function(i){asInitVals[i]=this.value;});}function TestTable3(){$('#datatable-3').dataTable({"aaSorting":[[0,"asc"]],"sDom":"T<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>","sPaginationType":"bootstrap","oLanguage":{"sSearch":"","sLengthMenu":'_MENU_'},"oTableTools":{"sSwfPath":"plugins/datatables/copy_csv_xls_pdf.swf","aButtons":["copy","print",{"sExtends":"collection","sButtonText":'Save ',"aButtons":["csv","xls","pdf"]}]}});}function SmallChangeVal(val){var new_val=Math.floor(100*Math.random());var plusOrMinus=Math.random()<0.5?-1:1;var result=val[0]+new_val*plusOrMinus;if(parseInt(result)>1000)return [val[0]-new_val];if(parseInt(result)<0)return [val[0]+new_val];return [result];}function SparklineTestData(){var arr=[];for(var i=1;i<9;i++)arr.push([Math.floor(1000*Math.random())]);return arr;}function RedrawKnob(elem){elem.animate({value:Math.floor(100*Math.random())},{duration:3000,easing:'swing',progress:function(){$(this).val(parseInt(Math.ceil(elem.val()))).trigger('change');}});}function SparklineLoop(){SparkLineDrawBarGraph($('#sparkline-1'),sparkline_arr_1.map(SmallChangeVal));SparkLineDrawBarGraph($('#sparkline-2'),sparkline_arr_2.map(SmallChangeVal),'#7BC5D3');SparkLineDrawBarGraph($('#sparkline-3'),sparkline_arr_3.map(SmallChangeVal),'#B25050');}function MorrisDashboard(){Morris.Line({element:'stat-graph',data:[{"period":"2014-01","Win8":13.4,"Win7":55.3,'Vista':1.5,'NT':0.3,'XP':11,'Linux':4.9,'Mac':9.6,'Mobile':4},{"period":"2013-12","Win8":10,"Win7":55.9,'Vista':1.5,'NT':3.1,'XP':11.6,'Linux':4.8,'Mac':9.2,'Mobile':3.8},{"period":"2013-11","Win8":8.6,"Win7":56.4,'Vista':1.6,'NT':3.7,'XP':11.7,'Linux':4.8,'Mac':9.6,'Mobile':3.7},{"period":"2013-10","Win8":9.9,"Win7":56.7,'Vista':1.6,'NT':1.4,'XP':12.4,'Linux':4.9,'Mac':9.6,'Mobile':3.3},{"period":"2013-09","Win8":10.2,"Win7":56.8,'Vista':1.6,'NT':0.4,'XP':13.5,'Linux':4.8,'Mac':9.3,'Mobile':3.3},{"period":"2013-08","Win8":9.6,"Win7":55.9,'Vista':1.7,'NT':0.4,'XP':14.7,'Linux':5,'Mac':9.2,'Mobile':3.4},{"period":"2013-07","Win8":9,"Win7":56.2,'Vista':1.8,'NT':0.4,'XP':15.8,'Linux':4.9,'Mac':8.7,'Mobile':3.2},{"period":"2013-06","Win8":8.6,"Win7":56.3,'Vista':2,'NT':0.4,'XP':15.4,'Linux':4.9,'Mac':9.1,'Mobile':3.2},{"period":"2013-05","Win8":7.9,"Win7":56.4,'Vista':2.1,'NT':0.4,'XP':15.7,'Linux':4.9,'Mac':9.7,'Mobile':2.6},{"period":"2013-04","Win8":7.3,"Win7":56.4,'Vista':2.2,'NT':0.4,'XP':16.4,'Linux':4.8,'Mac':9.7,'Mobile':2.2},{"period":"2013-03","Win8":6.7,"Win7":55.9,'Vista':2.4,'NT':0.4,'XP':17.6,'Linux':4.7,'Mac':9.5,'Mobile':2.3},{"period":"2013-02","Win8":5.7,"Win7":55.3,'Vista':2.4,'NT':0.4,'XP':19.1,'Linux':4.8,'Mac':9.6,'Mobile':2.2},{"period":"2013-01","Win8":4.8,"Win7":55.3,'Vista':2.6,'NT':0.5,'XP':19.9,'Linux':4.8,'Mac':9.3,'Mobile':2.2}],xkey:'period',ykeys:['Win8','Win7','Vista','NT','XP','Linux','Mac','Mobile'],labels:['Win8','Win7','Vista','NT','XP','Linux','Mac','Mobile']});Morris.Donut({element:'morris_donut_1',data:[{value:70,label:'pay',formatted:'at least 70%'},{value:15,label:'client',formatted:'approx. 15%'},{value:10,label:'buy',formatted:'approx. 10%'},{value:5,label:'hosted',formatted:'at most 5%'}],formatter:function(x,data){return data.formatted;}});Morris.Donut({element:'morris_donut_2',data:[{value:20,label:'office',formatted:'current'},{value:35,label:'store',formatted:'approx. 35%'},{value:20,label:'shop',formatted:'approx. 20%'},{value:25,label:'cars',formatted:'at most 25%'}],formatter:function(x,data){return data.formatted;}});Morris.Donut({element:'morris_donut_3',data:[{value:17,label:'current',formatted:'current'},{value:22,label:'week',formatted:'last week'},{value:10,label:'month',formatted:'last month'},{value:25,label:'period',formatted:'period'},{value:25,label:'year',formatted:'this year'}],formatter:function(x,data){return data.formatted;}});}function DrawSparklineDashboard(){SparklineLoop();setInterval(SparklineLoop,1000);var sparkline_clients=[[309],[223],[343],[652],[455],[18],[912],[15]];$('.bar').each(function(){$(this).sparkline(sparkline_clients.map(SmallChangeVal),{type:'bar',barWidth:5,highlightColor:'#000',barSpacing:2,height:30,stackedBarColor:'#6AA6D6'});});var sparkline_table=[[1,341],[2,464],[4,564],[5,235],[6,335],[7,535],[8,642],[9,342],[10,765]];$('.td-graph').each(function(){var arr=$.map(sparkline_table,function(val,index){return [[val[0],SmallChangeVal([val[1]])]];});$(this).sparkline(arr,{defaultPixelsPerValue:10,minSpotColor:null,maxSpotColor:null,spotColor:null,fillColor:false,lineWidth:2,lineColor:'#5A8DB6'});});}function DrawKnobDashboard(){var srv_monitoring_selectors=[$("#knob-srv-1"),$("#knob-srv-2"),$("#knob-srv-3"),$("#knob-srv-4"),$("#knob-srv-5"),$("#knob-srv-6")];srv_monitoring_selectors.forEach(DrawKnob);setInterval(function(){srv_monitoring_selectors.forEach(RedrawKnob);},3000);}function FileUpload(){$('#bootstrapped-fine-uploader').fineUploader({template:'qq-template-bootstrap',classes:{success:'alert alert-success',fail:'alert alert-error'},thumbnails:{placeholders:{waitingPath:"assets/waiting-generic.png",notAvailablePath:"assets/not_available-generic.png"}},request:{endpoint:'server/handleUploads'},validation:{allowedExtensions:['jpeg','jpg','gif','png']}});}function LoadTestMap(){$.getJSON("http://www.telize.com/geoip?callback=?",function(json){var osmap=new OpenLayers.Layer.OSM("OpenStreetMap");var googlestreets=new OpenLayers.Layer.Google("Google Streets",{numZoomLevels:22,visibility:false});var googlesattelite=new OpenLayers.Layer.Google("Google Sattelite",{type:google.maps.MapTypeId.SATELLITE,numZoomLevels:22});var map1_layers=[googlestreets,osmap,googlesattelite];var map1=drawMap(json.longitude,json.latitude,"map-1",map1_layers);$("#map-1").resize(function(){setTimeout(map1.updateSize(),500);});var osmap1=new OpenLayers.Layer.OSM("OpenStreetMap");var map2_layers=[osmap1];var map2=drawMap(json.longitude,json.latitude,"map-2",map2_layers);$("#map-2").resize(function(){setTimeout(map2.updateSize(),500);});var sattelite=new OpenLayers.Layer.Google("Google Sattelite",{type:google.maps.MapTypeId.SATELLITE,numZoomLevels:22});var map3_layers=[sattelite];var map3=drawMap(json.longitude,json.latitude,"map-3",map3_layers);$("#map-3").resize(function(){setTimeout(map3.updateSize(),500);});});}function FullScreenMap(){$.getJSON("http://www.telize.com/geoip?callback=?",function(json){var osmap=new OpenLayers.Layer.OSM("OpenStreetMap");var googlestreets=new OpenLayers.Layer.Google("Google Streets",{numZoomLevels:22,visibility:false});var googlesattelite=new OpenLayers.Layer.Google("Google Sattelite",{type:google.maps.MapTypeId.SATELLITE,numZoomLevels:22});var map1_layers=[googlestreets,osmap,googlesattelite];var map_fs=drawMap(json.longitude,json.latitude,"full-map",map1_layers);});}function displayFlickrImages(data){var res;$.each(data.items,function(i,item){if(i>11)return false;res="+item.title+";$('#box-one-content').append(res);});setTimeout(function(){$("#box-one-content").justifiedGallery({'usedSuffix':'lt240','justifyLastRow':true,'rowHeight':150,'fixedHeight':false,'captions':true,'margins':1});$('#box-one-content').fadeIn('slow');},100);}function DemoFormValidator(){$('#defaultForm').bootstrapValidator({message:'This value is not valid',fields:{username:{message:'The username is not valid',validators:{notEmpty:{message:'The username is required and can\'t be empty'},stringLength:{min:6,max:30,message:'The username must be more than 6 and less than 30 characters long'},regexp:{regexp:/^[a-zA-Z0-9_\.]+$/,message:'The username can only consist of alphabetical, number, dot and underscore'}}},country:{validators:{notEmpty:{message:'The country is required and can\'t be empty'}}},acceptTerms:{validators:{notEmpty:{message:'You have to accept the terms and policies'}}},email:{validators:{notEmpty:{message:'The email address is required and can\'t be empty'},emailAddress:{message:'The input is not a valid email address'}}},website:{validators:{uri:{message:'The input is not a valid URL'}}},phoneNumber:{validators:{digits:{message:'The value can contain only digits'}}},color:{validators:{hexColor:{message:'The input is not a valid hex color'}}},zipCode:{validators:{usZipCode:{message:'The input is not a valid US zip code'}}},password:{validators:{notEmpty:{message:'The password is required and can\'t be empty'},identical:{field:'confirmPassword',message:'The password and its confirm are not the same'}}},confirmPassword:{validators:{notEmpty:{message:'The confirm password is required and can\'t be empty'},identical:{field:'password',message:'The password and its confirm are not the same'}}},ages:{validators:{lessThan:{value:100,inclusive:true,message:'The ages has to be less than 100'},greaterThan:{value:10,inclusive:false,message:'The ages has to be greater than or equals to 10'}}}}});}function FormLayoutExampleInputLength(selector){var steps=["col-sm-1","col-sm-2","col-sm-3","col-sm-4","col-sm-5","col-sm-6","col-sm-7","col-sm-8","col-sm-9","col-sm-10","col-sm-11","col-sm-12"];selector.slider({range:'min',value:1,min:0,max:11,step:1,slide:function(event,ui){if(ui.value<1)return false;var input=$("#form-styles");var f=input.parent();f.removeClass();f.addClass(steps[ui.value]);input.attr("placeholder",'.'+steps[ui.value]);}});}function RunClock(){var second=$(".second");var minute=$(".minute");var hour=$(".hour");var d=new Date();var s=d.getSeconds();var m=d.getMinutes();var h=d.getHours();if(h>11)h=h-12;$('#knob-clock-value').html(h+':'+m+':'+s);second.val(s).trigger("change");minute.val(m).trigger("change");hour.val(h).trigger("change");}function CreateAllSliders(){$(".slider-default").slider();var slider_range_min_amount=$(".slider-range-min-amount");var slider_range_min=$(".slider-range-min");var slider_range_max=$(".slider-range-max");var slider_range_max_amount=$(".slider-range-max-amount");var slider_range=$(".slider-range");var slider_range_amount=$(".slider-range-amount");slider_range_min.slider({range:"min",value:37,min:1,max:700,slide:function(event,ui){slider_range_min_amount.val("$"+ui.value);}});slider_range_min_amount.val("$"+slider_range_min.slider("value"));slider_range_max.slider({range:"max",min:1,max:100,value:2,slide:function(event,ui){slider_range_max_amount.val(ui.value);}});slider_range_max_amount.val(slider_range_max.slider("value"));slider_range.slider({range:true,min:0,max:500,values:[75,300],slide:function(event,ui){slider_range_amount.val("$"+ui.values[0]+" - $"+ui.values[1]);}});slider_range_amount.val("$"+slider_range.slider("values",0)+" - $"+slider_range.slider("values",1));$("#equalizer > div.progress > div").each(function(){var value=parseInt($(this).text(),10);$(this).empty().slider({value:value,range:"min",animate:true,orientation:"vertical"});});}function AllTimePickers(){$('#datetime_example').datetimepicker({});$('#time_example').timepicker({hourGrid:4,minuteGrid:10,timeFormat:'hh:mm tt'});$('#date3_example').datepicker({numberOfMonths:3,showButtonPanel:true});$('#date3-1_example').datepicker({numberOfMonths:3,showButtonPanel:true});$('#date_example').datepicker({});}function DrawCalendar(){$('#external-events div.external-event').each(function(){var eventObject={title:$.trim($(this).text())};$(this).data('eventObject',eventObject);$(this).draggable({zIndex:999,revert:true,revertDuration:0});});var calendar=$('#calendar').fullCalendar({header:{left:'prev,next today',center:'title',right:'month,agendaWeek,agendaDay'},selectable:true,selectHelper:true,select:function(start,end,allDay){var form=$('
    '+'
    '+'Event name'+'
    '+''+'
    '+''+'
    '+''+'
    '+'
    '+'
    ');var buttons=$(''+'');OpenModalBox('Add event',form,buttons);$('#event_cancel').on('click',function(){CloseModalBox();});$('#event_submit').on('click',function(){var new_event_name=$('#newevent_name').val();if(new_event_name!='')calendar.fullCalendar('renderEvent',{title:new_event_name,description:$('#newevent_desc').val(),start:start,end:end,allDay:allDay},true);CloseModalBox();});calendar.fullCalendar('unselect');},editable:true,droppable:true,drop:function(date,allDay){var originalEventObject=$(this).data('eventObject');var copiedEventObject=$.extend({},originalEventObject);copiedEventObject.start=date;copiedEventObject.allDay=allDay;$('#calendar').fullCalendar('renderEvent',copiedEventObject,true);if($('#drop-remove').is(':checked'))$(this).remove();},eventRender:function(event,element,icon){if(event.description!="")element.attr('title',event.description);},eventClick:function(calEvent,jsEvent,view){var form=$('
    '+'
    '+'Event name'+'
    '+''+'
    '+''+'
    '+''+'
    '+'
    '+'
    ');var buttons=$(''+''+'');OpenModalBox('Change event',form,buttons);$('#event_cancel').on('click',function(){CloseModalBox();});$('#event_delete').on('click',function(){calendar.fullCalendar('removeEvents',function(ev){return(ev._id==calEvent._id);});CloseModalBox();});$('#event_change').on('click',function(){calEvent.title=$('#newevent_name').val();calEvent.description=$('#newevent_desc').val();calendar.fullCalendar('updateEvent',calEvent);CloseModalBox();});}});$('#new-event-add').on('click',function(event){event.preventDefault();var event_name=$('#new-event-title').val();var event_description=$('#new-event-desc').val();if(event_name!=''){var event_template=$('
    '+event_name+'
    ');$('#events-templates-header').after(event_template);var eventObject={title:event_name,description:event_description};event_template.data('eventObject',eventObject);event_template.draggable({zIndex:999,revert:true,revertDuration:0});}});}function DrawFullCalendar(){LoadCalendarScript(DrawCalendar);}$(document).ready(function(){$('.show-sidebar').on('click',function(){$('div#main').toggleClass('sidebar-show');setTimeout(MessagesMenuWidth,250);});var ajax_url=location.hash.replace(/^#/,'');if(ajax_url.length<1)ajax_url='ajax/dashboard.html';LoadAjaxContent(ajax_url);$('.main-menu').on('click','a',function(e){var parents=$(this).parents('li');var li=$(this).closest('li.dropdown');var another_items=$('.main-menu li').not(parents);another_items.find('a').removeClass('active');another_items.find('a').removeClass('active-parent');if($(this).hasClass('dropdown-toggle')||$(this).closest('li').find('ul').length==0){$(this).addClass('active-parent');var current=$(this).next();if(current.is(':visible')){li.find("ul.dropdown-menu").slideUp('fast');li.find("ul.dropdown-menu a").removeClass('active');}else{another_items.find("ul.dropdown-menu").slideUp('fast');current.slideDown('fast');}}else if(li.find('a.dropdown-toggle').hasClass('active-parent')){var pre=$(this).closest('ul.dropdown-menu');pre.find("li.dropdown").not($(this).closest('li')).find('ul.dropdown-menu').slideUp('fast');}if($(this).hasClass('active')==false){$(this).parents("ul.dropdown-menu").find('a').removeClass('active');$(this).addClass('active');}if($(this).hasClass('ajax-link')){e.preventDefault();if($(this).hasClass('add-full'))$('#content').addClass('full-content');else $('#content').removeClass('full-content');var url=$(this).attr('href');window.location.hash=url;LoadAjaxContent(url);}if($(this).attr('href')=='#')e.preventDefault();});var height=window.innerHeight-49;$('#main').css('min-height',height).on('click','.expand-link',function(e){var body=$('body');e.preventDefault();var box=$(this).closest('div.box');var button=$(this).find('i');button.toggleClass('fa-expand').toggleClass('fa-compress');box.toggleClass('expanded');body.toggleClass('body-expanded');var timeout=0;if(body.hasClass('body-expanded'))timeout=100;setTimeout(function(){box.toggleClass('expanded-padding');},timeout);setTimeout(function(){box.resize();box.find('[id^=map-]').resize();},timeout+50);}).on('click','.collapse-link',function(e){e.preventDefault();var box=$(this).closest('div.box');var button=$(this).find('i');var content=box.find('div.box-content');content.slideToggle('fast');button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');setTimeout(function(){box.resize();box.find('[id^=map-]').resize();},50);}).on('click','.close-link',function(e){e.preventDefault();var content=$(this).closest('div.box');content.remove();});$('#locked-screen').on('click',function(e){e.preventDefault();$('body').addClass('body-screensaver');$('#screensaver').addClass("show");ScreenSaver();});$('body').on('click','a.close-link',function(e){e.preventDefault();CloseModalBox();});$('#top-panel').on('click','a',function(e){if($(this).hasClass('ajax-link')){e.preventDefault();if($(this).hasClass('add-full'))$('#content').addClass('full-content');else $('#content').removeClass('full-content');var url=$(this).attr('href');window.location.hash=url;LoadAjaxContent(url);}});$('#search').on('keydown',function(e){if(e.keyCode==13){e.preventDefault();$('#content').removeClass('full-content');ajax_url='ajax/page_search.html';window.location.hash=ajax_url;LoadAjaxContent(ajax_url);}});$('#screen_unlock').on('mouseover',function(){var header='Enter current username and password';var form=$('
    '+'
    ');var button=$('');OpenModalBox(header,form,button);});}); \ No newline at end of file diff --git a/plugins/web_gui/static/js/noty/jquery.noty.js b/plugins/web_gui/static/js/noty/jquery.noty.js new file mode 100644 index 0000000..6d1e202 --- /dev/null +++ b/plugins/web_gui/static/js/noty/jquery.noty.js @@ -0,0 +1,488 @@ +/** + * noty - jQuery Notification Plugin v2.2.2 + * Contributors: https://github.com/needim/noty/graphs/contributors + * + * Examples and Documentation - http://needim.github.com/noty/ + * + * Licensed under the MIT licenses: + * http://www.opensource.org/licenses/mit-license.php + * + **/ + +if (typeof Object.create !== 'function') { + Object.create = function (o) { + function F() { + } + + F.prototype = o; + return new F(); + }; +} + +(function ($) { + + var NotyObject = { + + init:function (options) { + + // Mix in the passed in options with the default options + this.options = $.extend({}, $.noty.defaults, options); + + this.options.layout = (this.options.custom) ? $.noty.layouts['inline'] : $.noty.layouts[this.options.layout]; + + if ($.noty.themes[this.options.theme]) + this.options.theme = $.noty.themes[this.options.theme]; + else + options.themeClassName = this.options.theme; + + delete options.layout; + delete options.theme; + + this.options = $.extend({}, this.options, this.options.layout.options); + this.options.id = 'noty_' + (new Date().getTime() * Math.floor(Math.random() * 1000000)); + + this.options = $.extend({}, this.options, options); + + // Build the noty dom initial structure + this._build(); + + // return this so we can chain/use the bridge with less code. + return this; + }, // end init + + _build:function () { + + // Generating noty bar + var $bar = $('
    ').attr('id', this.options.id); + $bar.append(this.options.template).find('.noty_text').html(this.options.text); + + this.$bar = (this.options.layout.parent.object !== null) ? $(this.options.layout.parent.object).css(this.options.layout.parent.css).append($bar) : $bar; + + if (this.options.themeClassName) + this.$bar.addClass(this.options.themeClassName).addClass('noty_container_type_' + this.options.type); + + // Set buttons if available + if (this.options.buttons) { + + // If we have button disable closeWith & timeout options + this.options.closeWith = []; + this.options.timeout = false; + + var $buttons = $('
    ').addClass('noty_buttons'); + + (this.options.layout.parent.object !== null) ? this.$bar.find('.noty_bar').append($buttons) : this.$bar.append($buttons); + + var self = this; + + $.each(this.options.buttons, function (i, button) { + var $button = $('
    '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
    '+o+'
    '+s+"
    "+a+"
    "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t=[],n,o,a;setTimeout(function(){e.addClass("in")},0),e.keyboardNavigation=new r({root:e,enableLeftRight:!1,enableUpDown:!1,items:t,onCancel:function(){e.close()}}),e.find("*").each(function(e){e.canFocus&&(o=o||e.settings.autofocus,n=n||e,e.subinput?(t.push(e.getEl("inp")),e.getEl("open")&&t.push(e.getEl("open"))):t.push(e.getEl()))}),e.statusbar&&e.statusbar.find("*").each(function(e){e.canFocus&&(o=o||e.settings.autofocus,n=n||e,t.push(e.getEl()))}),e._super(),e.statusbar&&e.statusbar.postRender(),!o&&n&&n.focus(),this.dragHelper=new i(e._id+"-dragh",{start:function(){a={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(t){e.moveTo(a.x+t.deltaX,a.y+t.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))}});return o}),r(Z,[Q],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onClose:n.onClose}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(et,[Q,Z],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit(),i.close()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo(document.body).reflow()},i.alert=function(e,n,r){t.alert(e,function(){n&&n.call(r||this)})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)}}}),r(tt,[T,B,C,m,h,f],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function d(){function t(e){var t=new MutationObserver(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),W.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc();window.MutationObserver&&(a.on("keydown",function(n){var r=n.keyCode==F,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==z)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||V.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),a.on("dragstart",function(e){e.dataTransfer.setData("mce-internal",a.selection.getContent())}),a.on("drop",function(e){if(!c(e)){var r=e.dataTransfer.getData("mce-internal");r&&n.caretRangeFromPoint&&(e.preventDefault(),t(),a.selection.setRng(n.caretRangeFromPoint(e.x,e.y)),a.insertContent(r))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function u(){function e(e){var t=W.create("body"),n=e.cloneContents();return t.appendChild(n),V.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=W.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==F||t==z)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!W.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&W.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(W.bind(a.getDoc(),"focusin",function(){V.setRng(V.getRng())}),W.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),V.setRng(V.getRng()))}))}function m(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===z&&V.isCollapsed()&&0===V.getRng(!0).startOffset){var t=V.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return W.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(W.remove(n),e.preventDefault())}})}function h(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&V.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&W.hasClass(e,"mce-item-anchor")&&V.select(e),a.nodeChanged()})}function v(){function e(){var e=W.getAttribs(V.getStart().cloneNode(!1));return function(){var t=V.getStart();t!==a.getBody()&&(W.setAttrib(t,"style",null),I(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!V.isCollapsed()&&W.getParent(V.getStart(),W.isBlock)!=W.getParent(V.getEnd(),W.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),W.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){var n=V.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===z&&V.isCollapsed()&&0===V.getRng(!0).startOffset){var t=V.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),W.addClass(a.getBody(),"mceHideBrInPre"),q.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),j.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){W.bind(a.getBody(),"mouseup",function(){var e,t=V.getNode();"IMG"==t.nodeName&&((e=W.getStyle(t,"width"))&&(W.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),W.setStyle(t,"width","")),(e=W.getStyle(t,"height"))&&(W.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),W.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=V.getRng(),r=n.startContainer,i=n.startOffset,o=W.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=W.createRng(),n.setStart(r,0),n.setEnd(r,0),V.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),U.object_resizing||s("enableObjectResizing",!1)}U.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){I(W.select("a"),function(e){var t=e.parentNode,n=W.getRoot();if(t.lastChild===e){for(;t&&!W.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}W.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function k(){U.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",U.forced_root_block)})}function S(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=z||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),W.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",I("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&(q.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),j.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),W.unbind(r,"mouseup",n),W.unbind(r,"mousemove",t),a=o=0}var r=W.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,W.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(W.bind(r,"mouseup",n),W.bind(r,"mousemove",t),W.win.focus(),a.select())}})}function L(){a.on("keyup focusin",function(t){65==t.keyCode&&e.metaKeyPressed(t)||V.normalize()})}function H(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function D(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.execCommand("SelectAll"),a.selection.collapse(!0),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}var I=o.each,z=e.BACKSPACE,F=e.DELETE,W=a.dom,V=a.selection,U=a.settings,q=a.parser,j=a.serializer,$=i.gecko,K=i.ie,Y=i.webkit;C(),_(),u(),L(),Y&&(d(),p(),g(),k(),i.iOS?(y(),M(),D()):f()),K&&i.ie<11&&(m(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&D(),i.ie&&(f(),O()),$&&(m(),h(),v(),N(),E(),S(),H(),P())}}),r(nt,[f],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,d,u;if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=d=s[l],!i.isImmediatePropagationStopped());l++)if(d.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(u=a.parent();u&&!i.isPropagationStopped();)u.fire(e,i,!1),u=u.parent();return i},on:function(e,t){var n=this,o,a,s,l;if(t===!1&&(t=function(){return!1}),t)for(s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=n[r],o||(o=n[r]={}),a=o[e],a||(a=o[e]=[],n.bindNative&&i[e]&&n.bindNative(e)),a.push(t);return n},off:function(e,t){var n=this,o,a=n[r],s,l,c,d;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(d=s.length;d--;)s[d]===t&&s.splice(d,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n},hasEventListeners:function(e){var t=this[r];return e=e.toLowerCase(),!(!t||!t[e]||0===t[e].length)}}}),r(rt,[f,h],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var d;return d=l,"string"==typeof l?l=function(){o.execCommand(d,!1,null)}:e.isArray(d)&&(l=function(){o.execCommand(d[0],d[1],d[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(it,[v,b,C,k,E,A,L,H,M,D,P,O,y,d,et,x,_,tt,h,f,nt,rt],function(e,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var E=e.DOM,k=n.ThemeManager,S=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,L=C.trim,H=C.resolve,M=m.Event,D=b.gecko,P=b.ie;return N.prototype={render:function(){function e(){E.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!k.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",k.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),R(r.external_plugins,function(e,t){S.load(t,e),r.plugins+=" "+t}),R(r.plugins.split(/[ ,]/),function(e){if(e=L(e),e&&!S.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=S.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=S.createUrl(t,e),S.load(e.resource,e)})}else S.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!M.domLoaded)return void E.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||E.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(E.insertAfter(E.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},E.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new h(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=S.get(n),i,o;i=S.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=L(n),r&&-1===B(m,n)&&(R(S.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,d,u,f,p,m=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),l=k.get(n.theme),t.theme=new l(t,k.urls[n.theme]),t.theme.init&&t.theme.init(t,k.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,f=/^[0-9\.]+(|px)$/i,f.test(""+i)&&(i=Math.max(parseInt(i,10)+(l.deltaWidth||0),100)),f.test(""+o)&&(o=Math.max(parseInt(o,10)+(l.deltaHeight||0),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',p=0;p',t.loadedCSS[h]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),u=n.body_class||"",-1!=u.indexOf("=")&&(u=t.getParam("body_class","","hash"),u=u[t.id]||""),t.iframeHTML+='
    ";var g='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(c=g),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:c||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),P)try{t.getDoc() +}catch(v){s.src=c=g}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),c||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=E.get(n.id),p=n.getDoc(),m,h;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"tabIndex",null),E.setAttrib(e,"contentEditable",null)}),E.addClass(f,"mce-content-body"),f.tabIndex=-1,n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),m=n.getBody(),m.disabled=!0,o.readonly||(n.inline&&"static"==E.getStyle(m,"position",!0)&&(m.style.position="relative"),m.contentEditable=n.getParam("content_editable_state",!0)),m.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new d(n),n.enterKey=new c(n),n.editorCommands=new u(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,E.setAttrib(m,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(m.dir=o.directionality),o.nowrap&&(m.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){R(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,R(n._pendingNativeEvents,function(e){n.dom.bind(_(n,e),e,function(e){n.fire(e.type,e)})}),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(h="",R(n.contentStyles,function(e){h+=e+"\r\n"}),n.dom.addStyle(h)),R(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=m=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;e||(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),(D||i)&&(l=n.getBody(),l.setActive&&b.ie<11?l.setActive():l.focus(),i&&r.normalize()),a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())),n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?H(r):0,n=H(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[L(e[0])]=L(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;e.initialized&&!e.settings.disable_nodechange&&(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(n.innerHTML=r,(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=P&&11>P?"":'
    ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):(!P||11>P)&&(e='
    '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=L(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?L(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o="mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.removed=1,e.hasHiddenInput&&E.remove(e.getElement().nextSibling);var t=e.getDoc();P&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),E.setStyle(e.id,"display",e.orgDisplay),e.settings.content_editable||(M.unbind(e.getWin()),M.unbind(e.getDoc()));var n=e.getContainer();M.unbind(e.getBody()),M.unbind(n),e.fire("remove"),e.editorManager.remove(e),E.remove(n),e.destroy()}},bindNative:function(e){var t=this;t.settings.readonly||(t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e])},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&D&&(M.unbind(t.getDoc()),M.unbind(t.getWin()),M.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return D?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(ot,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(at,[v,h],function(e,t){function n(r){function i(){try{return document.activeElement}catch(e){return document.body}}function o(e){return e&&e.startContainer?{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}:e}function a(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function s(t){return!!e.DOM.getParent(t,n.isEditorUIElement)}function l(e,t){for(var n=t.getBody();e;){if(e==n)return!0;e=e.parentNode}}function c(n){var c=n.editor,d;c.on("init",function(){"onbeforedeactivate"in document&&t.ie<11?c.dom.bind(c.getBody(),"beforedeactivate",function(){try{c.lastRng=c.selection.getRng()}catch(e){}c.selection.lastFocusBookmark=o(c.lastRng)}):(c.inline||t.ie>10)&&(c.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==c.id+"_ifr"&&(e=c.getBody()),l(e,c)&&(c.lastRng=c.selection.getRng())}),t.webkit&&(d=function(){var e=c.selection.getRng();e.collapsed||(c.lastRng=e)},e.DOM.bind(document,"selectionchange",d),c.on("remove",function(){e.DOM.unbind(document,"selectionchange",d)})))}),c.on("setcontent",function(){c.lastRng=null}),c.on("mousedown",function(){c.selection.lastFocusBookmark=null}),c.on("focusin",function(){var e=r.focusedEditor;c.selection.lastFocusBookmark&&(c.selection.setRng(a(c,c.selection.lastFocusBookmark)),c.selection.lastFocusBookmark=null),e!=c&&(e&&e.fire("blur",{focusedEditor:c}),r.activeEditor=c,r.focusedEditor=c,c.fire("focus",{blurredEditor:e}),c.focus(!1)),c.lastRng=null}),c.on("focusout",function(){window.setTimeout(function(){var e=r.focusedEditor;s(i())||e!=c||(c.fire("blur",{focusedEditor:null}),r.focusedEditor=null,c.selection&&(c.selection.lastFocusBookmark=null))},0)})}e.DOM.bind(document,"focusin",function(e){var t=r.activeEditor;t&&e.target.ownerDocument==document&&(t.selection&&(t.selection.lastFocusBookmark=o(t.lastRng)),s(e.target)||r.focusedEditor!=t||(t.fire("blur",{focusedEditor:null}),r.focusedEditor=null))}),r.on("AddEditor",c)}return n.isEditorUIElement=function(e){return-1!==e.className.indexOf("mce-")},n}),r(st,[it,v,O,h,f,nt,ot,at],function(e,n,r,i,o,a,s,l){var c=n.DOM,d=o.explode,u=o.each,f=o.extend,p=0,m,h={majorVersion:"4",minorVersion:"0.16",releaseDate:"2014-01-31",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o;if(n=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),s=0;s0&&u(d(m),function(n){c.get(n)?(l=new e(n,t,a),s.push(l),l.render(!0)):u(document.forms,function(r){u(r.elements,function(r){r.name===n&&(n="mce_editor_"+p++,c.setAttrib(r,"id",n),l=new e(n,t,a),s.push(l),l.render(1))})})});break;case"textareas":case"specific_textareas":u(c.select("textarea"),function(r){t.editor_deselector&&i(r,t.editor_deselector)||(!t.editor_selector||i(r,t.editor_selector))&&(l=new e(n(r),t,a),s.push(l),l.render(!0))})}t.oninit&&(m=h=0,u(s,function(e){h++,e.initialized?m++:e.on("init",function(){m++,m==h&&r(t,"oninit")}),m==h&&r(t,"oninit")}))}var a=this,s=[],l;a.settings=t,c.bind(window,"ready",o)},get:function(e){return e===t?this.editors:this.editors[e]},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},c.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i,o;{if(e){if("string"==typeof e)return e=e.selector||e,void u(c.select(e),function(e){t.remove(r[e.id])});if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){u(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)}};return f(h,a),h.setup(),window.tinymce=window.tinyMCE=h,h}),r(lt,[st,f],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(ct,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(dt,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(ut,[dt,ct,f],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(ft,[v],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(pt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?d+e:i.indexOf(",",d),-1===r||r>i.length?null:(n=i.substring(d,r),d=r+1,n)}var r,i,s,d=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var u=n();if(null===u)break;if(r=n(parseInt(u,32)||0),null!==r){if(u=n(),null===u)break;s=n(parseInt(u,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(d){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(mt,[v,d,y,b,f,h],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(ht,[I,f],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(gt,[ht],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(vt,[V,Y],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(yt,[V,vt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.tooltip)},tooltip:function(){var e=this;return n||(n=new t({type:"tooltip"}),n.renderTo(e.getContainerElm())),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&setTimeout(function(){e.focus()},0)},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(bt,[yt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i="";return e.settings.image&&(r="none",i=" style=\"background-image: url('"+e.settings.image+"')\""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    "}})}),r(Ct,[q],function(e){return e.extend({Defaults:{defaultType:"button",role:"toolbar"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(xt,[yt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+e.encode(e._text)+"
    "}})}),r(wt,[bt,X],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.popover=!0,r.autohide=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():e.showPanel())}),e._super()}})}),r(_t,[wt,v],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Nt,[yt,U,W],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target;r;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.keyboard&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder"))}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
    ",e.addClass("has-open")),'
    "+s+"
    " +}})}),r(Et,[yt,J],function(e,t){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.keyNav=new t({root:e,enableLeftRight:!0}),e.keyNav.focusFirst(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
    '+e._getPathHtml()+"
    "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
    '+t[n].name+"
    ";return i||(i='
     
    '),i}})}),r(kt,[Et,st],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(St,[q],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Tt,[q,St],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem","undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Rt,[Tt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(At,[Nt],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Bt,[gt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Lt,[gt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,k,S,T,R,A,B,L,H,M,D,P,O,I,z,F,W,V=Math.max,U=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(k="y",N="h",E="minH",S="maxH",R="innerH",T="top",A="bottom",B="deltaH",L="contentH",I="left",D="w",H="x",M="innerW",P="minW",O="maxW",z="right",F="deltaW",W="contentW"):(k="x",N="w",E="minW",S="maxW",R="innerW",T="left",A="right",B="deltaW",L="contentW",I="top",D="h",H="y",M="innerH",P="minH",O="maxH",z="bottom",F="deltaH",W="contentH"),u=i[R]-o[T]-o[T],_=d=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,u-=n-1>t?c:0,g>0&&(d+=g,m[S]&&v.push(p),m.flex=g),u-=m[E],y=o[I]+m[P]+o[z],y>_&&(_=y);if(x={},x[E]=0>u?i[E]-u+i[B]:i[R]-u+i[B],x[P]=_+i[F],x[L]=i[R]-u,x[W]=_,x.minW=U(x.minW,i.maxW),x.minH=U(x.minH,i.maxH),x.minW=V(x.minW,i.startMinWidth),x.minH=V(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=u/d,t=0,n=v.length;n>t;t++)p=v[t],m=p.layoutRect(),b=m[S],y=m[E]+m.flex*C,y>b?(u-=m[S]-m[E],d-=m.flex,m.flex=0,m.maxFlexSize=b):m.maxFlexSize=0;for(C=u/d,w=o[T],x={},0===d&&("end"==l?w=u+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-u)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(u/(r.length-1)))),x[H]=o[I],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[H]=Math.round(i[M]/2-m[D]/2):"stretch"===s?(x[D]=V(m[P]||0,i[M]-o[I]-o[z]),x[H]=o[I]):"end"===s&&(x[H]=i[M]-m[D]-o.top),m.flex>0&&(y+=m.flex*C),x[N]=y,x[k]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var q=e.parent();q&&(q._lastRect=null,q.recalc())}}})}),r(Ht,[ht],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Mt,[V,yt,X,f,st,h],function(e,t,n,r,i,o){function a(e){function t(t){function n(e){return e.replace(/%(\w+)/g,"")}var r,i,o=e.dom,a="",l,c;return c=e.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),(t=e.formatter.get(t))?(t=t[0],r=t.block||t.inline||"span",i=o.create(r),s(t.styles,function(e,t){e=n(e),e&&o.setStyle(i,t,e)}),s(t.attributes,function(e,t){e=n(e),e&&o.setAttrib(i,t,e)}),s(t.classes,function(e){e=n(e),o.hasClass(i,e)||o.addClass(i,e)}),e.fire("PreviewFormats"),o.setStyles(i,{position:"absolute",left:-65535}),e.getBody().appendChild(i),l=o.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,s(c.split(" "),function(t){var n=o.getStyle(i,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=o.getStyle(e.getBody(),t,!0),"#ffffff"==o.toHex(n).toLowerCase())||"color"==t&&"#000000"==o.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(a+="padding:0 2px;"),a+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),o.remove(i),a):void 0)}function r(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function i(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function o(){function n(e){var t=[];if(e)return s(e,function(e){var r={text:e.title,icon:e.icon};if(e.items)r.menu=n(e.items);else{var a=e.format||"custom"+i++;e.format||(e.name=a,o.push(e)),r.format=a}t.push(r)}),t}function r(){var t;return t=n(e.settings.style_formats_merge?e.settings.style_formats?a.concat(e.settings.style_formats):a:e.settings.style_formats||a)}var i=0,o=[],a=[{title:"Headers",items:[{title:"Header 1",format:"h1"},{title:"Header 2",format:"h2"},{title:"Header 3",format:"h3"},{title:"Header 4",format:"h4"},{title:"Header 5",format:"h5"},{title:"Header 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(o,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:r(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?t(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&f(this.settings.format)}}}}function a(){return e.undoManager?e.undoManager.hasUndo():!1}function l(){return e.undoManager?e.undoManager.hasRedo():!1}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function d(){var t=this;t.disabled(!l()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!l())})}function u(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function f(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var p;p=o(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){f(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:c,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:d,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:c,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:d,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:u,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:p}),e.addButton("formatselect",function(){var n=[],o=i(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6");return s(o,function(e){n.push({text:e[0],value:e[1],textStyle:function(){return t(e[1])}})}),{type:"listbox",text:o[0][0],values:n,fixedWidth:!0,onselect:f,onPostRender:r(n)}}),e.addButton("fontselect",function(){var t="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",n=[],o=i(e.settings.font_formats||t);return s(o,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:r(n,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var t=[],n="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||n;return s(i.split(" "),function(e){t.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:r(t,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:p})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Dt,[gt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],k,S,T,R,A,B;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),u=0;r>u;u++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(u=0;r>u&&(d=i[f*r+u],d);u++)c=d.layoutRect(),k=c.minW,S=c.minH,N[u]=k>N[u]?k:N[u],E[f]=S>E[f]?S:E[f];for(A=o.innerW-g.left-g.right,w=0,u=0;r>u;u++)w+=N[u]+(u>0?y:0),A-=(u>0?y:0)+N[u];for(B=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),B-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var L;L="start"==t.packV?0:B>0?Math.floor(B/n):0;var H=0,M=t.flexWidths;if(M)for(u=0;uu;u++)N[u]+=M?M[u]*D:D;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+L,u=0;r>u&&(d=i[f*r+u],d);u++)h=d.settings,c=d.layoutRect(),a=Math.max(N[u],c.startMinWidth),T=R=0,c.x=p,c.y=m,v=h.alignH||(C?C[u]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=h.alignV||(x?x[u]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),d.layoutRect(c),p+=a+y,d.recalc&&d.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var P=e.parent();P&&(P._lastRect=null,P.recalc())}}})}),r(Pt,[yt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(Ot,[yt,W],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(It,[q,J],function(e,t){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e.keyNav=new t({root:e,enableLeftRight:!0}),e._super()}})}),r(zt,[It],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",defaults:{type:"menubutton"}}})}),r(Ft,[bt,U,zt],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type)}).fire("show"),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1))},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.keyboard&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n'+("-"!==o?' ":"")+("-"!==o?''+o+"":"")+(l?'
    '+l+"
    ":"")+(r.menu?'
    ':"")+"
    "},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Ut,[X,J,Vt,f],function(e,t,n,r){var i=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"menu"},init:function(e){var i=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var o=e.items,a=o.length;a--;)o[a]=r.extend({},e.itemDefaults,o[a]);i._super(e),i.addClass("menu"),i.keyNav=new t({root:i,enableUpDown:!0,enableLeftRight:!0,leftAction:function(){i.parent()instanceof n&&i.keyNav.cancel()},onCancel:function(){i.fire("cancel",{},!1),i.hide()}})},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("cancel"),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return i}),r(qt,[xt],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(jt,[yt,j],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
    '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r($t,[yt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
    '}})}),r(Kt,[Ft,W],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"splitbutton"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if("BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Yt,[Ht],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Gt,[K,W],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){this.activeTabId&&t.removeClass(this.getEl(this.activeTabId),this.classPrefix+"active"),this.activeTabId="t"+e,t.addClass(this.getEl("t"+e),this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){n+='
    '+e.encode(t.settings.title)+"
    "}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(Xt,[yt,W],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Jt,[W],function(e){return function(t){var n=this,r;n.show=function(i){return n.hide(),r=!0,window.setTimeout(function(){r&&t.appendChild(e.createFragment('
    '))},i||0),n},n.hide=function(){var e=t.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),r=!1,n}}}),a([l,c,d,u,f,p,m,h,g,v,y,b,C,x,w,_,N,E,k,S,T,R,A,B,L,H,M,D,P,O,I,z,F,W,V,U,q,j,$,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,dt,ut,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,kt,St,Tt,Rt,At,Bt,Lt,Ht,Mt,Dt,Pt,Ot,It,zt,Ft,Wt,Vt,Ut,qt,jt,$t,Kt,Yt,Gt,Xt,Jt])}(this); \ No newline at end of file diff --git a/plugins/web_gui/static/plugins/xcharts/LICENSE b/plugins/web_gui/static/plugins/xcharts/LICENSE new file mode 100644 index 0000000..b5bdbb0 --- /dev/null +++ b/plugins/web_gui/static/plugins/xcharts/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2012 tenXer, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/web_gui/static/plugins/xcharts/README.md b/plugins/web_gui/static/plugins/xcharts/README.md new file mode 100644 index 0000000..6b9ff6e --- /dev/null +++ b/plugins/web_gui/static/plugins/xcharts/README.md @@ -0,0 +1,17 @@ +# xCharts [![Build Status](https://secure.travis-ci.org/tenXer/xcharts.png?branch=master)](http://travis-ci.org/tenxer/xcharts) + +[xCharts](http://tenxer.github.com/xcharts/) is a D3-based library for building custom charts and graphs. Written and maintained by [tenXer](https://www.tenxer.com). + +## Documentation + +View the [xCharts site](http://tenxer.github.com/xcharts/) for everything you need. + +## License + +Copyright (c) 2012 tenXer, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/web_gui/static/plugins/xcharts/xcharts.css b/plugins/web_gui/static/plugins/xcharts/xcharts.css new file mode 100644 index 0000000..8d8c760 --- /dev/null +++ b/plugins/web_gui/static/plugins/xcharts/xcharts.css @@ -0,0 +1,283 @@ +.xchart .line { + stroke-width: 3px; + fill: none; +} +.xchart .fill { + stroke-width: 0; +} +.xchart circle { + stroke: #FFF; + stroke-width: 3px; +} +.xchart .axis .domain { + fill: none; +} +.xchart .axis .tick line { + stroke: #EEE; + stroke-width: 1px; +} +.xchart .axis text { + font-family: Helvetica, Arial, Verdana, sans-serif; + fill: #666; + font-size: 12px; +} +.xchart .color0 .line { + stroke: #3880aa; +} +.xchart .color0 .line .fill { + pointer-events: none; +} +.xchart .color0 rect, +.xchart .color0 circle { + fill: #3880aa; +} +.xchart .color0 .fill { + fill: rgba(56, 128, 170, 0.1); +} +.xchart .color0.comp .line { + stroke: #89bbd8; +} +.xchart .color0.comp rect { + fill: #89bbd8; +} +.xchart .color0.comp .fill { + display: none; +} +.xchart .color0.comp circle, +.xchart .color0.comp .pointer { + fill: #89bbd8; +} +.xchart .color1 .line { + stroke: #4da944; +} +.xchart .color1 .line .fill { + pointer-events: none; +} +.xchart .color1 rect, +.xchart .color1 circle { + fill: #4da944; +} +.xchart .color1 .fill { + fill: rgba(77, 169, 68, 0.1); +} +.xchart .color1.comp .line { + stroke: #9dd597; +} +.xchart .color1.comp rect { + fill: #9dd597; +} +.xchart .color1.comp .fill { + display: none; +} +.xchart .color1.comp circle, +.xchart .color1.comp .pointer { + fill: #9dd597; +} +.xchart .color2 .line { + stroke: #f26522; +} +.xchart .color2 .line .fill { + pointer-events: none; +} +.xchart .color2 rect, +.xchart .color2 circle { + fill: #f26522; +} +.xchart .color2 .fill { + fill: rgba(242, 101, 34, 0.1); +} +.xchart .color2.comp .line { + stroke: #f9b99a; +} +.xchart .color2.comp rect { + fill: #f9b99a; +} +.xchart .color2.comp .fill { + display: none; +} +.xchart .color2.comp circle, +.xchart .color2.comp .pointer { + fill: #f9b99a; +} +.xchart .color3 .line { + stroke: #c6080d; +} +.xchart .color3 .line .fill { + pointer-events: none; +} +.xchart .color3 rect, +.xchart .color3 circle { + fill: #c6080d; +} +.xchart .color3 .fill { + fill: rgba(198, 8, 13, 0.1); +} +.xchart .color3.comp .line { + stroke: #f8555a; +} +.xchart .color3.comp rect { + fill: #f8555a; +} +.xchart .color3.comp .fill { + display: none; +} +.xchart .color3.comp circle, +.xchart .color3.comp .pointer { + fill: #f8555a; +} +.xchart .color4 .line { + stroke: #672d8b; +} +.xchart .color4 .line .fill { + pointer-events: none; +} +.xchart .color4 rect, +.xchart .color4 circle { + fill: #672d8b; +} +.xchart .color4 .fill { + fill: rgba(103, 45, 139, 0.1); +} +.xchart .color4.comp .line { + stroke: #a869ce; +} +.xchart .color4.comp rect { + fill: #a869ce; +} +.xchart .color4.comp .fill { + display: none; +} +.xchart .color4.comp circle, +.xchart .color4.comp .pointer { + fill: #a869ce; +} +.xchart .color5 .line { + stroke: #ce1797; +} +.xchart .color5 .line .fill { + pointer-events: none; +} +.xchart .color5 rect, +.xchart .color5 circle { + fill: #ce1797; +} +.xchart .color5 .fill { + fill: rgba(206, 23, 151, 0.1); +} +.xchart .color5.comp .line { + stroke: #f075cb; +} +.xchart .color5.comp rect { + fill: #f075cb; +} +.xchart .color5.comp .fill { + display: none; +} +.xchart .color5.comp circle, +.xchart .color5.comp .pointer { + fill: #f075cb; +} +.xchart .color6 .line { + stroke: #d9ce00; +} +.xchart .color6 .line .fill { + pointer-events: none; +} +.xchart .color6 rect, +.xchart .color6 circle { + fill: #d9ce00; +} +.xchart .color6 .fill { + fill: rgba(217, 206, 0, 0.1); +} +.xchart .color6.comp .line { + stroke: #fff75a; +} +.xchart .color6.comp rect { + fill: #fff75a; +} +.xchart .color6.comp .fill { + display: none; +} +.xchart .color6.comp circle, +.xchart .color6.comp .pointer { + fill: #fff75a; +} +.xchart .color7 .line { + stroke: #754c24; +} +.xchart .color7 .line .fill { + pointer-events: none; +} +.xchart .color7 rect, +.xchart .color7 circle { + fill: #754c24; +} +.xchart .color7 .fill { + fill: rgba(117, 76, 36, 0.1); +} +.xchart .color7.comp .line { + stroke: #c98c50; +} +.xchart .color7.comp rect { + fill: #c98c50; +} +.xchart .color7.comp .fill { + display: none; +} +.xchart .color7.comp circle, +.xchart .color7.comp .pointer { + fill: #c98c50; +} +.xchart .color8 .line { + stroke: #2eb9b4; +} +.xchart .color8 .line .fill { + pointer-events: none; +} +.xchart .color8 rect, +.xchart .color8 circle { + fill: #2eb9b4; +} +.xchart .color8 .fill { + fill: rgba(46, 185, 180, 0.1); +} +.xchart .color8.comp .line { + stroke: #86e1de; +} +.xchart .color8.comp rect { + fill: #86e1de; +} +.xchart .color8.comp .fill { + display: none; +} +.xchart .color8.comp circle, +.xchart .color8.comp .pointer { + fill: #86e1de; +} +.xchart .color9 .line { + stroke: #0e2e42; +} +.xchart .color9 .line .fill { + pointer-events: none; +} +.xchart .color9 rect, +.xchart .color9 circle { + fill: #0e2e42; +} +.xchart .color9 .fill { + fill: rgba(14, 46, 66, 0.1); +} +.xchart .color9.comp .line { + stroke: #2477ab; +} +.xchart .color9.comp rect { + fill: #2477ab; +} +.xchart .color9.comp .fill { + display: none; +} +.xchart .color9.comp circle, +.xchart .color9.comp .pointer { + fill: #2477ab; +} diff --git a/plugins/web_gui/static/plugins/xcharts/xcharts.js b/plugins/web_gui/static/plugins/xcharts/xcharts.js new file mode 100644 index 0000000..582407a --- /dev/null +++ b/plugins/web_gui/static/plugins/xcharts/xcharts.js @@ -0,0 +1,1158 @@ +/*! +xCharts v0.3.0 Copyright (c) 2012, tenXer, Inc. All Rights Reserved. +@license MIT license. http://github.com/tenXer/xcharts for details +*/ + +(function () { + +var xChart, + _vis = {}, + _scales = {}, + _visutils = {}; +(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,v=e.reduce,h=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.3";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduce===v)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduceRight===h)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?-1!=n.indexOf(t):E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2);return w.map(n,function(n){return(w.isFunction(t)?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t){return w.isEmpty(t)?[]:w.filter(n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var F=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=F(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||void 0===r)return 1;if(e>r||void 0===e)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i};var I=function(){};w.bind=function(n,t){var r,e;if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));if(!w.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));I.prototype=n.prototype;var u=new I;I.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},w.bindAll=function(n){var t=o.call(arguments,1);return 0==t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=S(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&S(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return S(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),w.isFunction=function(n){return"function"==typeof n},w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return void 0===n},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+(0|Math.random()*(t-n+1))};var T={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};T.unescape=w.invert(T.escape);var M={escape:RegExp("["+w.keys(T.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(T.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(M[n],function(t){return T[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=""+ ++N;return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){r=w.defaults({},r,w.templateSettings);var e=RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(D,function(n){return"\\"+B[n]}),r&&(i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(i+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),a&&(i+="';\n"+a+"\n__p+='"),u=o+t.length,t}),i+="';\n",r.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=Function(r.variable||"obj","_",i)}catch(o){throw o.source=i,o}if(t)return a(t,w);var c=function(n){return a.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+i+"}",c},w.chain=function(n){return w(n).chain()};var z=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this);function getInsertionPoint(zIndex) { + return _.chain(_.range(zIndex, 10)).reverse().map(function (z) { + return 'g[data-index="' + z + '"]'; + }).value().join(', '); +} + +function colorClass(el, i) { + var c = el.getAttribute('class'); + return ((c !== null) ? c.replace(/color\d+/g, '') : '') + ' color' + i; +} + +_visutils = { + getInsertionPoint: getInsertionPoint, + colorClass: colorClass +}; +var local = this, + defaultSpacing = 0.25; + +function _getDomain(data, axis) { + return _.chain(data) + .pluck('data') + .flatten() + .pluck(axis) + .uniq() + .filter(function (d) { + return d !== undefined && d !== null; + }) + .value() + .sort(d3.ascending); +} + +_scales.ordinal = function (data, axis, bounds, extents) { + var domain = _getDomain(data, axis); + return d3.scale.ordinal() + .domain(domain) + .rangeRoundBands(bounds, defaultSpacing); +}; + +_scales.linear = function (data, axis, bounds, extents) { + return d3.scale.linear() + .domain(extents) + .nice() + .rangeRound(bounds); +}; + +_scales.exponential = function (data, axis, bounds, extents) { + return d3.scale.pow() + .exponent(0.65) + .domain(extents) + .nice() + .rangeRound(bounds); +}; + +_scales.time = function (data, axis, bounds, extents) { + return d3.time.scale() + .domain(_.map(extents, function (d) { return new Date(d); })) + .range(bounds); +}; + +function _extendDomain(domain, axis) { + var min = domain[0], + max = domain[1], + diff, + e; + + if (min === max) { + e = Math.max(Math.round(min / 10), 4); + min -= e; + max += e; + } + + diff = max - min; + min = (min) ? min - (diff / 10) : min; + min = (domain[0] > 0) ? Math.max(min, 0) : min; + max = (max) ? max + (diff / 10) : max; + max = (domain[1] < 0) ? Math.min(max, 0) : max; + + return [min, max]; +} + +function _getExtents(options, data, xType, yType) { + var extents, + nData = _.chain(data) + .pluck('data') + .flatten() + .value(); + + extents = { + x: d3.extent(nData, function (d) { return d.x; }), + y: d3.extent(nData, function (d) { return d.y; }) + }; + + _.each([xType, yType], function (type, i) { + var axis = (i) ? 'y' : 'x', + extended; + extents[axis] = d3.extent(nData, function (d) { return d[axis]; }); + if (type === 'ordinal') { + return; + } + + _.each([axis + 'Min', axis + 'Max'], function (minMax, i) { + if (type !== 'time') { + extended = _extendDomain(extents[axis]); + } + + if (options.hasOwnProperty(minMax) && options[minMax] !== null) { + extents[axis][i] = options[minMax]; + } else if (type !== 'time') { + extents[axis][i] = extended[i]; + } + }); + }); + + return extents; +} + +_scales.xy = function (self, data, xType, yType) { + var o = self._options, + extents = _getExtents(o, data, xType, yType), + scales = {}, + horiz = [o.axisPaddingLeft, self._width], + vert = [self._height, o.axisPaddingTop], + xScale, + yScale; + + _.each([xType, yType], function (type, i) { + var axis = (i === 0) ? 'x' : 'y', + bounds = (i === 0) ? horiz : vert, + fn = xChart.getScale(type); + scales[axis] = fn(data, axis, bounds, extents[axis]); + }); + + return scales; +}; +(function () { + var zIndex = 2, + selector = 'g.bar', + insertBefore = _visutils.getInsertionPoint(zIndex); + + function postUpdateScale(self, scaleData, mainData, compData) { + self.xScale2 = d3.scale.ordinal() + .domain(d3.range(0, mainData.length)) + .rangeRoundBands([0, self.xScale.rangeBand()], 0.08); + } + + function enter(self, storage, className, data, callbacks) { + var barGroups, bars, + yZero = self.yZero; + + barGroups = self._g.selectAll(selector + className) + .data(data, function (d) { + return d.className; + }); + + barGroups.enter().insert('g', insertBefore) + .attr('data-index', zIndex) + .style('opacity', 0) + .attr('class', function (d, i) { + var cl = _.uniq((className + d.className).split('.')).join(' '); + return cl + ' bar ' + _visutils.colorClass(this, i); + }) + .attr('transform', function (d, i) { + return 'translate(' + self.xScale2(i) + ',0)'; + }); + + bars = barGroups.selectAll('rect') + .data(function (d) { + return d.data; + }, function (d) { + return d.x; + }); + + bars.enter().append('rect') + .attr('width', 0) + .attr('rx', 3) + .attr('ry', 3) + .attr('x', function (d) { + return self.xScale(d.x) + (self.xScale2.rangeBand() / 2); + }) + .attr('height', function (d) { + return Math.abs(yZero - self.yScale(d.y)); + }) + .attr('y', function (d) { + return (d.y < 0) ? yZero : self.yScale(d.y); + }) + .on('mouseover', callbacks.mouseover) + .on('mouseout', callbacks.mouseout) + .on('click', callbacks.click); + + storage.barGroups = barGroups; + storage.bars = bars; + } + + function update(self, storage, timing) { + var yZero = self.yZero; + + storage.barGroups + .attr('class', function (d, i) { + return _visutils.colorClass(this, i); + }) + .transition().duration(timing) + .style('opacity', 1) + .attr('transform', function (d, i) { + return 'translate(' + self.xScale2(i) + ',0)'; + }); + + storage.bars.transition().duration(timing) + .attr('width', self.xScale2.rangeBand()) + .attr('x', function (d) { + return self.xScale(d.x); + }) + .attr('height', function (d) { + return Math.abs(yZero - self.yScale(d.y)); + }) + .attr('y', function (d) { + return (d.y < 0) ? yZero : self.yScale(d.y); + }); + } + + function exit(self, storage, timing) { + storage.bars.exit() + .transition().duration(timing) + .attr('width', 0) + .remove(); + storage.barGroups.exit() + .transition().duration(timing) + .style('opacity', 0) + .remove(); + } + + function destroy(self, storage, timing) { + var band = (self.xScale2) ? self.xScale2.rangeBand() / 2 : 0; + delete self.xScale2; + storage.bars + .transition().duration(timing) + .attr('width', 0) + .attr('x', function (d) { + return self.xScale(d.x) + band; + }); + } + + _vis.bar = { + postUpdateScale: postUpdateScale, + enter: enter, + update: update, + exit: exit, + destroy: destroy + }; +}()); +(function () { + + var zIndex = 3, + selector = 'g.line', + insertBefore = _visutils.getInsertionPoint(zIndex); + + function enter(self, storage, className, data, callbacks) { + var inter = self._options.interpolation, + x = function (d, i) { + if (!self.xScale2 && !self.xScale.rangeBand) { + return self.xScale(d.x); + } + return self.xScale(d.x) + (self.xScale.rangeBand() / 2); + }, + y = function (d) { return self.yScale(d.y); }, + line = d3.svg.line() + .x(x) + .interpolate(inter), + area = d3.svg.area() + .x(x) + .y1(self.yZero) + .interpolate(inter), + container, + fills, + paths; + + function datum(d) { + return [d.data]; + } + + container = self._g.selectAll(selector + className) + .data(data, function (d) { + return d.className; + }); + + container.enter().insert('g', insertBefore) + .attr('data-index', zIndex) + .attr('class', function (d, i) { + var cl = _.uniq((className + d.className).split('.')).join(' '); + return cl + ' line ' + _visutils.colorClass(this, i); + }); + + fills = container.selectAll('path.fill') + .data(datum); + + fills.enter().append('path') + .attr('class', 'fill') + .style('opacity', 0) + .attr('d', area.y0(y)); + + paths = container.selectAll('path.line') + .data(datum); + + paths.enter().append('path') + .attr('class', 'line') + .style('opacity', 0) + .attr('d', line.y(y)); + + storage.lineContainers = container; + storage.lineFills = fills; + storage.linePaths = paths; + storage.lineX = x; + storage.lineY = y; + storage.lineA = area; + storage.line = line; + } + + function update(self, storage, timing) { + storage.lineContainers + .attr('class', function (d, i) { + return _visutils.colorClass(this, i); + }); + + storage.lineFills.transition().duration(timing) + .style('opacity', 1) + .attr('d', storage.lineA.y0(storage.lineY)); + + storage.linePaths.transition().duration(timing) + .style('opacity', 1) + .attr('d', storage.line.y(storage.lineY)); + } + + function exit(self, storage) { + storage.linePaths.exit() + .style('opacity', 0) + .remove(); + storage.lineFills.exit() + .style('opacity', 0) + .remove(); + + storage.lineContainers.exit() + .remove(); + } + + function destroy(self, storage, timing) { + storage.linePaths.transition().duration(timing) + .style('opacity', 0); + storage.lineFills.transition().duration(timing) + .style('opacity', 0); + } + + _vis.line = { + enter: enter, + update: update, + exit: exit, + destroy: destroy + }; +}()); +(function () { + var line = _vis.line; + + function enter(self, storage, className, data, callbacks) { + var circles; + + line.enter(self, storage, className, data, callbacks); + + circles = storage.lineContainers.selectAll('circle') + .data(function (d) { + return d.data; + }, function (d) { + return d.x; + }); + + circles.enter().append('circle') + .style('opacity', 0) + .attr('cx', storage.lineX) + .attr('cy', storage.lineY) + .attr('r', 5) + .on('mouseover', callbacks.mouseover) + .on('mouseout', callbacks.mouseout) + .on('click', callbacks.click); + + storage.lineCircles = circles; + } + + function update(self, storage, timing) { + line.update.apply(null, _.toArray(arguments)); + + storage.lineCircles.transition().duration(timing) + .style('opacity', 1) + .attr('cx', storage.lineX) + .attr('cy', storage.lineY); + } + + function exit(self, storage) { + storage.lineCircles.exit() + .remove(); + line.exit.apply(null, _.toArray(arguments)); + } + + function destroy(self, storage, timing) { + line.destroy.apply(null, _.toArray(arguments)); + if (!storage.lineCircles) { + return; + } + storage.lineCircles.transition().duration(timing) + .style('opacity', 0); + } + + _vis['line-dotted'] = { + enter: enter, + update: update, + exit: exit, + destroy: destroy + }; +}()); +(function () { + var line = _vis['line-dotted']; + + function enter(self, storage, className, data, callbacks) { + line.enter(self, storage, className, data, callbacks); + } + + function _accumulate_data(data) { + function reduce(memo, num) { + return memo + num.y; + } + + var nData = _.map(data, function (set) { + var i = set.data.length, + d = _.clone(set.data); + set = _.clone(set); + while (i) { + i -= 1; + // Need to clone here, otherwise we are actually setting the same + // data onto the original data set. + d[i] = _.clone(set.data[i]); + d[i].y0 = set.data[i].y; + d[i].y = _.reduce(_.first(set.data, i), reduce, set.data[i].y); + } + return _.extend(set, { data: d }); + }); + + return nData; + } + + function _resetData(self) { + if (!self.hasOwnProperty('cumulativeOMainData')) { + return; + } + self._mainData = self.cumulativeOMainData; + delete self.cumulativeOMainData; + self._compData = self.cumulativeOCompData; + delete self.cumulativeOCompData; + } + + function preUpdateScale(self, data) { + _resetData(self); + self.cumulativeOMainData = self._mainData; + self._mainData = _accumulate_data(self._mainData); + self.cumulativeOCompData = self._compData; + self._compData = _accumulate_data(self._compData); + } + + function destroy(self, storage, timing) { + _resetData(self); + line.destroy.apply(null, _.toArray(arguments)); + } + + _vis.cumulative = { + preUpdateScale: preUpdateScale, + enter: enter, + update: line.update, + exit: line.exit, + destroy: destroy + }; +}()); +var emptyData = [[]], + defaults = { + // User interaction callbacks + mouseover: function (data, i) {}, + mouseout: function (data, i) {}, + click: function (data, i) {}, + + // Padding between the axes and the contents of the chart + axisPaddingTop: 0, + axisPaddingRight: 0, + axisPaddingBottom: 5, + axisPaddingLeft: 20, + + // Padding around the edge of the chart (space for axis labels, etc) + paddingTop: 0, + paddingRight: 0, + paddingBottom: 20, + paddingLeft: 60, + + // Axis tick formatting + tickHintX: 10, + tickFormatX: function (x) { return x; }, + tickHintY: 10, + tickFormatY: function (y) { return y; }, + + // Min/Max Axis Values + xMin: null, + xMax: null, + yMin: null, + yMax: null, + + // Pre-format input data + dataFormatX: function (x) { return x; }, + dataFormatY: function (y) { return y; }, + + unsupported: function (selector) { + d3.select(selector).text('SVG is not supported on your browser'); + }, + + // Callback functions if no data + empty: function (self, selector, d) {}, + notempty: function (self, selector) {}, + + timing: 750, + + // Line interpolation + interpolation: 'monotone', + + // Data sorting + sortX: function (a, b) { + return (!a.x && !b.x) ? 0 : (a.x < b.x) ? -1 : 1; + } + }; + +// What/how should the warning/error be presented? +function svgEnabled() { + var d = document; + return (!!d.createElementNS && + !!d.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect); +} + +/** + * Creates a new chart + * + * @param string type The drawing type for the main data + * @param array data Data to render in the chart + * @param string selector CSS Selector for the parent element for the chart + * @param object options Optional. See `defaults` for options + * + * Examples: + * var data = { + * "main": [ + * { + * "data": [ + * { + * "x": "2012-08-09T07:00:00.522Z", + * "y": 68 + * }, + * { + * "x": "2012-08-10T07:00:00.522Z", + * "y": 295 + * }, + * { + * "x": "2012-08-11T07:00:00.522Z", + * "y": 339 + * }, + * ], + * "className": ".foo" + * } + * ], + * "xScale": "ordinal", + * "yScale": "linear", + * "comp": [ + * { + * "data": [ + * { + * "x": "2012-08-09T07:00:00.522Z", + * "y": 288 + * }, + * { + * "x": "2012-08-10T07:00:00.522Z", + * "y": 407 + * }, + * { + * "x": "2012-08-11T07:00:00.522Z", + * "y": 459 + * } + * ], + * "className": ".comp.comp_foo", + * "type": "line-arrowed" + * } + * ] + * }, + * myChart = new Chart('bar', data, '#chart'); + * + */ +function xChart(type, data, selector, options) { + var self = this, + resizeLock; + + self._options = options = _.defaults(options || {}, defaults); + + if (svgEnabled() === false) { + return options.unsupported(selector); + } + + self._selector = selector; + self._container = d3.select(selector); + self._drawSvg(); + self._mainStorage = {}; + self._compStorage = {}; + + data = _.clone(data); + if (type && !data.type) { + data.type = type; + } + + self.setData(data); + + d3.select(window).on('resize.for.' + selector, function () { + if (resizeLock) { + clearTimeout(resizeLock); + } + resizeLock = setTimeout(function () { + resizeLock = null; + self._resize(); + }, 500); + }); +} + +/** + * Add a visualization type + * + * @param string type Unique key/name used with setType + * @param object vis object map of vis methods + */ +xChart.setVis = function (type, vis) { + if (_vis.hasOwnProperty(type)) { + throw 'Cannot override vis type "' + type + '".'; + } + _vis[type] = vis; +}; + +/** + * Get a clone of a visualization + * Useful for extending vis functionality + * + * @param string type Unique key/name of the vis + */ +xChart.getVis = function (type) { + if (!_vis.hasOwnProperty(type)) { + throw 'Vis type "' + type + '" does not exist.'; + } + + return _.clone(_vis[type]); +}; + +xChart.setScale = function (name, fn) { + if (_scales.hasOwnProperty(name)) { + throw 'Scale type "' + name + '" already exists.'; + } + + _scales[name] = fn; +}; + +xChart.getScale = function (name) { + if (!_scales.hasOwnProperty(name)) { + throw 'Scale type "' + name + '" does not exist.'; + } + return _scales[name]; +}; + +xChart.visutils = _visutils; + +_.defaults(xChart.prototype, { + /** + * Set or change the drawing type for the main data. + * + * @param string type Must be an available drawing type + * + */ + setType: function (type, skipDraw) { + var self = this; + + if (self._type && type === self._type) { + return; + } + + if (!_vis.hasOwnProperty(type)) { + throw 'Vis type "' + type + '" is not defined.'; + } + + if (self._type) { + self._destroy(self._vis, self._mainStorage); + } + + self._type = type; + self._vis = _vis[type]; + if (!skipDraw) { + self._draw(); + } + }, + + /** + * Set and update the data for the chart. Optionally skip drawing. + * + * @param object data New data. See new xChart example for format + * + */ + setData: function (data) { + var self = this, + o = self._options, + nData = _.clone(data); + + if (!data.hasOwnProperty('main')) { + throw 'No "main" key found in given chart data.'; + } + + switch (data.type) { + case 'bar': + // force the xScale to be ordinal + data.xScale = 'ordinal'; + break; + case undefined: + data.type = self._type; + break; + } + + o.xMin = (isNaN(parseInt(data.xMin, 10))) ? o.xMin : data.xMin; + o.xMax = (isNaN(parseInt(data.xMax, 10))) ? o.xMax : data.xMax; + o.yMin = (isNaN(parseInt(data.yMin, 10))) ? o.yMin : data.yMin; + o.yMax = (isNaN(parseInt(data.yMax, 10))) ? o.yMax : data.yMax; + + if (self._vis) { + self._destroy(self._vis, self._mainStorage); + } + + self.setType(data.type, true); + + function _mapData(set) { + var d = _.map(_.clone(set.data), function (p) { + var np = _.clone(p); + if (p.hasOwnProperty('x')) { + np.x = o.dataFormatX(p.x); + } + if (p.hasOwnProperty('y')) { + np.y = o.dataFormatY(p.y); + } + return np; + }).sort(o.sortX); + return _.extend(_.clone(set), { data: d }); + } + + nData.main = _.map(nData.main, _mapData); + self._mainData = nData.main; + self._xScaleType = nData.xScale; + self._yScaleType = nData.yScale; + + if (nData.hasOwnProperty('comp')) { + nData.comp = _.map(nData.comp, _mapData); + self._compData = nData.comp; + } else { + self._compData = []; + } + + self._draw(); + }, + + /** + * Change the scale of an axis + * + * @param string axis Name of an axis. One of 'x' or 'y' + * @param string type Name of the scale type + * + */ + setScale: function (axis, type) { + var self = this; + + switch (axis) { + case 'x': + self._xScaleType = type; + break; + case 'y': + self._yScaleType = type; + break; + default: + throw 'Cannot change scale of unknown axis "' + axis + '".'; + } + + self._draw(); + }, + + /** + * Create the SVG element and g container. Resize if necessary. + */ + _drawSvg: function () { + var self = this, + c = self._container, + options = self._options, + width = parseInt(c.style('width').replace('px', ''), 10), + height = parseInt(c.style('height').replace('px', ''), 10), + svg, + g, + gScale; + + svg = c.selectAll('svg') + .data(emptyData); + + svg.enter().append('svg') + // Inherit the height and width from the parent element + .attr('height', height) + .attr('width', width) + .attr('class', 'xchart'); + + svg.transition() + .attr('width', width) + .attr('height', height); + + g = svg.selectAll('g') + .data(emptyData); + + g.enter().append('g') + .attr( + 'transform', + 'translate(' + options.paddingLeft + ',' + options.paddingTop + ')' + ); + + gScale = g.selectAll('g.scale') + .data(emptyData); + + gScale.enter().append('g') + .attr('class', 'scale'); + + self._svg = svg; + self._g = g; + self._gScale = gScale; + + self._height = height - options.paddingTop - options.paddingBottom - + options.axisPaddingTop - options.axisPaddingBottom; + self._width = width - options.paddingLeft - options.paddingRight - + options.axisPaddingLeft - options.axisPaddingRight; + }, + + /** + * Resize the visualization + */ + _resize: function (event) { + var self = this; + + self._drawSvg(); + self._draw(); + }, + + /** + * Draw the x and y axes + */ + _drawAxes: function () { + if (this._noData) { + return; + } + var self = this, + o = self._options, + t = self._gScale.transition().duration(o.timing), + xTicks = o.tickHintX, + yTicks = o.tickHintY, + bottom = self._height + o.axisPaddingTop + o.axisPaddingBottom, + zeroLine = d3.svg.line().x(function (d) { return d; }), + zLine, + zLinePath, + xAxis, + xRules, + yAxis, + yRules, + labels; + + xRules = d3.svg.axis() + .scale(self.xScale) + .ticks(xTicks) + .tickSize(-self._height) + .tickFormat(o.tickFormatX) + .orient('bottom'); + + xAxis = self._gScale.selectAll('g.axisX') + .data(emptyData); + + xAxis.enter().append('g') + .attr('class', 'axis axisX') + .attr('transform', 'translate(0,' + bottom + ')'); + + xAxis.call(xRules); + + labels = self._gScale.selectAll('.axisX g')[0]; + if (labels.length > (self._width / 80)) { + labels.sort(function (a, b) { + var r = /translate\(([^,)]+)/; + a = a.getAttribute('transform').match(r); + b = b.getAttribute('transform').match(r); + return parseFloat(a[1], 10) - parseFloat(b[1], 10); + }); + + d3.selectAll(labels) + .filter(function (d, i) { + return i % (Math.ceil(labels.length / xTicks) + 1); + }) + .remove(); + } + + yRules = d3.svg.axis() + .scale(self.yScale) + .ticks(yTicks) + .tickSize(-self._width - o.axisPaddingRight - o.axisPaddingLeft) + .tickFormat(o.tickFormatY) + .orient('left'); + + yAxis = self._gScale.selectAll('g.axisY') + .data(emptyData); + + yAxis.enter().append('g') + .attr('class', 'axis axisY') + .attr('transform', 'translate(0,0)'); + + t.selectAll('g.axisY') + .call(yRules); + + // zero line + zLine = self._gScale.selectAll('g.axisZero') + .data([[]]); + + zLine.enter().append('g') + .attr('class', 'axisZero'); + + zLinePath = zLine.selectAll('line') + .data([[]]); + + zLinePath.enter().append('line') + .attr('x1', 0) + .attr('x2', self._width + o.axisPaddingLeft + o.axisPaddingRight) + .attr('y1', self.yZero) + .attr('y2', self.yZero); + + zLinePath.transition().duration(o.timing) + .attr('y1', self.yZero) + .attr('y2', self.yZero); + }, + + /** + * Update the x and y scales (used when drawing) + * + * Optional methods in drawing types: + * preUpdateScale + * postUpdateScale + * + * Example implementation in vis type: + * + * function postUpdateScale(self, scaleData, mainData, compData) { + * self.xScale2 = d3.scale.ordinal() + * .domain(d3.range(0, mainData.length)) + * .rangeRoundBands([0, self.xScale.rangeBand()], 0.08); + * } + * + */ + _updateScale: function () { + var self = this, + _unionData = function () { + return _.union(self._mainData, self._compData); + }, + scaleData = _unionData(), + vis = self._vis, + scale, + min; + + delete self.xScale; + delete self.yScale; + delete self.yZero; + + if (vis.hasOwnProperty('preUpdateScale')) { + vis.preUpdateScale(self, scaleData, self._mainData, self._compData); + } + + // Just in case preUpdateScale modified + scaleData = _unionData(); + scale = _scales.xy(self, scaleData, self._xScaleType, self._yScaleType); + + self.xScale = scale.x; + self.yScale = scale.y; + + min = self.yScale.domain()[0]; + self.yZero = (min > 0) ? self.yScale(min) : self.yScale(0); + + if (vis.hasOwnProperty('postUpdateScale')) { + vis.postUpdateScale(self, scaleData, self._mainData, self._compData); + } + }, + + /** + * Create (Enter) the elements for the vis + * + * Required method + * + * Example implementation in vis type: + * + * function enter(self, data, callbacks) { + * var foo = self._g.selectAll('g.foobar') + * .data(data); + * foo.enter().append('g') + * .attr('class', 'foobar'); + * self.foo = foo; + * } + */ + _enter: function (vis, storage, data, className) { + var self = this, + callbacks = { + click: self._options.click, + mouseover: self._options.mouseover, + mouseout: self._options.mouseout + }; + self._checkVisMethod(vis, 'enter'); + vis.enter(self, storage, className, data, callbacks); + }, + + /** + * Update the elements opened by the select method + * + * Required method + * + * Example implementation in vis type: + * + * function update(self, timing) { + * self.bars.transition().duration(timing) + * .attr('width', self.xScale2.rangeBand()) + * .attr('height', function (d) { + * return self.yScale(d.y); + * }); + * } + */ + _update: function (vis, storage) { + var self = this; + self._checkVisMethod(vis, 'update'); + vis.update(self, storage, self._options.timing); + }, + + /** + * Remove or transition out the elements that no longer have data + * + * Required method + * + * Example implementation in vis type: + * + * function exit(self) { + * self.bars.exit().remove(); + * } + */ + _exit: function (vis, storage) { + var self = this; + self._checkVisMethod(vis, 'exit'); + vis.exit(self, storage, self._options.timing); + }, + + /** + * Destroy the current vis type (transition to new type) + * + * Required method + * + * Example implementation in vis type: + * + * function destroy(self, timing) { + * self.bars.transition().duration(timing) + * attr('height', 0); + * delete self.bars; + * } + */ + _destroy: function (vis, storage) { + var self = this; + self._checkVisMethod(vis, 'destroy'); + try { + vis.destroy(self, storage, self._options.timing); + } catch (e) {} + }, + + /** + * Draw the visualization + */ + _draw: function () { + var self = this, + o = self._options, + comp, + compKeys; + + self._noData = _.flatten(_.pluck(self._mainData, 'data') + .concat(_.pluck(self._compData, 'data'))).length === 0; + + self._updateScale(); + self._drawAxes(); + + self._enter(self._vis, self._mainStorage, self._mainData, '.main'); + self._exit(self._vis, self._mainStorage); + self._update(self._vis, self._mainStorage); + + comp = _.chain(self._compData).groupBy(function (d) { + return d.type; + }); + compKeys = comp.keys(); + + // Find old comp vis items and remove any that no longer exist + _.each(self._compStorage, function (d, key) { + if (-1 === compKeys.indexOf(key).value()) { + var vis = _vis[key]; + self._enter(vis, d, [], '.comp.' + key.replace(/\W+/g, '')); + self._exit(vis, d); + } + }); + + comp.each(function (d, key) { + var vis = _vis[key], storage; + if (!self._compStorage.hasOwnProperty(key)) { + self._compStorage[key] = {}; + } + storage = self._compStorage[key]; + self._enter(vis, storage, d, '.comp.' + key.replace(/\W+/g, '')); + self._exit(vis, storage); + self._update(vis, storage); + }); + + if (self._noData) { + o.empty(self, self._selector, self._mainData); + } else { + o.notempty(self, self._selector); + } + }, + + /** + * Ensure drawing method exists + */ + _checkVisMethod: function (vis, method) { + var self = this; + if (!vis[method]) { + throw 'Required method "' + method + '" not found on vis type "' + + self._type + '".'; + } + } +}); +if (typeof define === 'function' && define.amd && typeof define.amd === 'object') { + define(function () { + return xChart; + }); + return; +} + +window.xChart = xChart; + +}()); diff --git a/plugins/web_gui/static/plugins/xcharts/xcharts.min.css b/plugins/web_gui/static/plugins/xcharts/xcharts.min.css new file mode 100644 index 0000000..d5912ea --- /dev/null +++ b/plugins/web_gui/static/plugins/xcharts/xcharts.min.css @@ -0,0 +1 @@ +.xchart .line{stroke-width:3px;fill:none}.xchart .fill{stroke-width:0}.xchart circle{stroke:#FFF;stroke-width:3px}.xchart .axis .domain{fill:none}.xchart .axis .tick line{stroke:#EEE;stroke-width:1px}.xchart .axis text{font-family:Helvetica,Arial,Verdana,sans-serif;fill:#666;font-size:12px}.xchart .color0 .line{stroke:#3880aa}.xchart .color0 .line .fill{pointer-events:none}.xchart .color0 rect,.xchart .color0 circle{fill:#3880aa}.xchart .color0 .fill{fill:rgba(56,128,170,0.1)}.xchart .color0.comp .line{stroke:#89bbd8}.xchart .color0.comp rect{fill:#89bbd8}.xchart .color0.comp .fill{display:none}.xchart .color0.comp circle,.xchart .color0.comp .pointer{fill:#89bbd8}.xchart .color1 .line{stroke:#4da944}.xchart .color1 .line .fill{pointer-events:none}.xchart .color1 rect,.xchart .color1 circle{fill:#4da944}.xchart .color1 .fill{fill:rgba(77,169,68,0.1)}.xchart .color1.comp .line{stroke:#9dd597}.xchart .color1.comp rect{fill:#9dd597}.xchart .color1.comp .fill{display:none}.xchart .color1.comp circle,.xchart .color1.comp .pointer{fill:#9dd597}.xchart .color2 .line{stroke:#f26522}.xchart .color2 .line .fill{pointer-events:none}.xchart .color2 rect,.xchart .color2 circle{fill:#f26522}.xchart .color2 .fill{fill:rgba(242,101,34,0.1)}.xchart .color2.comp .line{stroke:#f9b99a}.xchart .color2.comp rect{fill:#f9b99a}.xchart .color2.comp .fill{display:none}.xchart .color2.comp circle,.xchart .color2.comp .pointer{fill:#f9b99a}.xchart .color3 .line{stroke:#c6080d}.xchart .color3 .line .fill{pointer-events:none}.xchart .color3 rect,.xchart .color3 circle{fill:#c6080d}.xchart .color3 .fill{fill:rgba(198,8,13,0.1)}.xchart .color3.comp .line{stroke:#f8555a}.xchart .color3.comp rect{fill:#f8555a}.xchart .color3.comp .fill{display:none}.xchart .color3.comp circle,.xchart .color3.comp .pointer{fill:#f8555a}.xchart .color4 .line{stroke:#672d8b}.xchart .color4 .line .fill{pointer-events:none}.xchart .color4 rect,.xchart .color4 circle{fill:#672d8b}.xchart .color4 .fill{fill:rgba(103,45,139,0.1)}.xchart .color4.comp .line{stroke:#a869ce}.xchart .color4.comp rect{fill:#a869ce}.xchart .color4.comp .fill{display:none}.xchart .color4.comp circle,.xchart .color4.comp .pointer{fill:#a869ce}.xchart .color5 .line{stroke:#ce1797}.xchart .color5 .line .fill{pointer-events:none}.xchart .color5 rect,.xchart .color5 circle{fill:#ce1797}.xchart .color5 .fill{fill:rgba(206,23,151,0.1)}.xchart .color5.comp .line{stroke:#f075cb}.xchart .color5.comp rect{fill:#f075cb}.xchart .color5.comp .fill{display:none}.xchart .color5.comp circle,.xchart .color5.comp .pointer{fill:#f075cb}.xchart .color6 .line{stroke:#d9ce00}.xchart .color6 .line .fill{pointer-events:none}.xchart .color6 rect,.xchart .color6 circle{fill:#d9ce00}.xchart .color6 .fill{fill:rgba(217,206,0,0.1)}.xchart .color6.comp .line{stroke:#fff75a}.xchart .color6.comp rect{fill:#fff75a}.xchart .color6.comp .fill{display:none}.xchart .color6.comp circle,.xchart .color6.comp .pointer{fill:#fff75a}.xchart .color7 .line{stroke:#754c24}.xchart .color7 .line .fill{pointer-events:none}.xchart .color7 rect,.xchart .color7 circle{fill:#754c24}.xchart .color7 .fill{fill:rgba(117,76,36,0.1)}.xchart .color7.comp .line{stroke:#c98c50}.xchart .color7.comp rect{fill:#c98c50}.xchart .color7.comp .fill{display:none}.xchart .color7.comp circle,.xchart .color7.comp .pointer{fill:#c98c50}.xchart .color8 .line{stroke:#2eb9b4}.xchart .color8 .line .fill{pointer-events:none}.xchart .color8 rect,.xchart .color8 circle{fill:#2eb9b4}.xchart .color8 .fill{fill:rgba(46,185,180,0.1)}.xchart .color8.comp .line{stroke:#86e1de}.xchart .color8.comp rect{fill:#86e1de}.xchart .color8.comp .fill{display:none}.xchart .color8.comp circle,.xchart .color8.comp .pointer{fill:#86e1de}.xchart .color9 .line{stroke:#0e2e42}.xchart .color9 .line .fill{pointer-events:none}.xchart .color9 rect,.xchart .color9 circle{fill:#0e2e42}.xchart .color9 .fill{fill:rgba(14,46,66,0.1)}.xchart .color9.comp .line{stroke:#2477ab}.xchart .color9.comp rect{fill:#2477ab}.xchart .color9.comp .fill{display:none}.xchart .color9.comp circle,.xchart .color9.comp .pointer{fill:#2477ab} \ No newline at end of file diff --git a/plugins/web_gui/static/plugins/xcharts/xcharts.min.js b/plugins/web_gui/static/plugins/xcharts/xcharts.min.js new file mode 100644 index 0000000..4788a98 --- /dev/null +++ b/plugins/web_gui/static/plugins/xcharts/xcharts.min.js @@ -0,0 +1,5 @@ +/*! +xCharts v0.3.0 Copyright (c) 2012, tenXer, Inc. All Rights Reserved. +@license MIT license. http://github.com/tenXer/xcharts for details +*/ +(function(){var xChart,_vis={},_scales={},_visutils={};(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,v=e.reduce,h=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.3";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduce===v)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduceRight===h)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?-1!=n.indexOf(t):E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2);return w.map(n,function(n){return(w.isFunction(t)?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t){return w.isEmpty(t)?[]:w.filter(n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var F=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=F(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||void 0===r)return 1;if(e>r||void 0===e)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i};var I=function(){};w.bind=function(n,t){var r,e;if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));if(!w.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));I.prototype=n.prototype;var u=new I;I.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},w.bindAll=function(n){var t=o.call(arguments,1);return 0==t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=S(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&S(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return S(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),w.isFunction=function(n){return"function"==typeof n},w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return void 0===n},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+(0|Math.random()*(t-n+1))};var T={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};T.unescape=w.invert(T.escape);var M={escape:RegExp("["+w.keys(T.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(T.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(M[n],function(t){return T[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=""+ ++N;return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){r=w.defaults({},r,w.templateSettings);var e=RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(D,function(n){return"\\"+B[n]}),r&&(i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(i+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),a&&(i+="';\n"+a+"\n__p+='"),u=o+t.length,t}),i+="';\n",r.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=Function(r.variable||"obj","_",i)}catch(o){throw o.source=i,o}if(t)return a(t,w);var c=function(n){return a.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+i+"}",c},w.chain=function(n){return w(n).chain()};var z=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this);function getInsertionPoint(zIndex){return _.chain(_.range(zIndex,10)).reverse().map(function(z){return'g[data-index="'+z+'"]'}).value().join(", ")}function colorClass(el,i){var c=el.getAttribute("class");return(c!==null?c.replace(/color\d+/g,""):"")+" color"+i}_visutils={getInsertionPoint:getInsertionPoint,colorClass:colorClass};var local=this,defaultSpacing=.25;function _getDomain(data,axis){return _.chain(data).pluck("data").flatten().pluck(axis).uniq().filter(function(d){return d!==undefined&&d!==null}).value().sort(d3.ascending)}_scales.ordinal=function(data,axis,bounds,extents){var domain=_getDomain(data,axis);return d3.scale.ordinal().domain(domain).rangeRoundBands(bounds,defaultSpacing)};_scales.linear=function(data,axis,bounds,extents){return d3.scale.linear().domain(extents).nice().rangeRound(bounds)};_scales.exponential=function(data,axis,bounds,extents){return d3.scale.pow().exponent(.65).domain(extents).nice().rangeRound(bounds)};_scales.time=function(data,axis,bounds,extents){return d3.time.scale().domain(_.map(extents,function(d){return new Date(d)})).range(bounds)};function _extendDomain(domain,axis){var min=domain[0],max=domain[1],diff,e;if(min===max){e=Math.max(Math.round(min/10),4);min-=e;max+=e}diff=max-min;min=min?min-diff/10:min;min=domain[0]>0?Math.max(min,0):min;max=max?max+diff/10:max;max=domain[1]<0?Math.min(max,0):max;return[min,max]}function _getExtents(options,data,xType,yType){var extents,nData=_.chain(data).pluck("data").flatten().value();extents={x:d3.extent(nData,function(d){return d.x}),y:d3.extent(nData,function(d){return d.y})};_.each([xType,yType],function(type,i){var axis=i?"y":"x",extended;extents[axis]=d3.extent(nData,function(d){return d[axis]});if(type==="ordinal"){return}_.each([axis+"Min",axis+"Max"],function(minMax,i){if(type!=="time"){extended=_extendDomain(extents[axis])}if(options.hasOwnProperty(minMax)&&options[minMax]!==null){extents[axis][i]=options[minMax]}else if(type!=="time"){extents[axis][i]=extended[i]}})});return extents}_scales.xy=function(self,data,xType,yType){var o=self._options,extents=_getExtents(o,data,xType,yType),scales={},horiz=[o.axisPaddingLeft,self._width],vert=[self._height,o.axisPaddingTop],xScale,yScale;_.each([xType,yType],function(type,i){var axis=i===0?"x":"y",bounds=i===0?horiz:vert,fn=xChart.getScale(type);scales[axis]=fn(data,axis,bounds,extents[axis])});return scales};(function(){var zIndex=2,selector="g.bar",insertBefore=_visutils.getInsertionPoint(zIndex);function postUpdateScale(self,scaleData,mainData,compData){self.xScale2=d3.scale.ordinal().domain(d3.range(0,mainData.length)).rangeRoundBands([0,self.xScale.rangeBand()],.08)}function enter(self,storage,className,data,callbacks){var barGroups,bars,yZero=self.yZero;barGroups=self._g.selectAll(selector+className).data(data,function(d){return d.className});barGroups.enter().insert("g",insertBefore).attr("data-index",zIndex).style("opacity",0).attr("class",function(d,i){var cl=_.uniq((className+d.className).split(".")).join(" ");return cl+" bar "+_visutils.colorClass(this,i)}).attr("transform",function(d,i){return"translate("+self.xScale2(i)+",0)"});bars=barGroups.selectAll("rect").data(function(d){return d.data},function(d){return d.x});bars.enter().append("rect").attr("width",0).attr("rx",3).attr("ry",3).attr("x",function(d){return self.xScale(d.x)+self.xScale2.rangeBand()/2}).attr("height",function(d){return Math.abs(yZero-self.yScale(d.y))}).attr("y",function(d){return d.y<0?yZero:self.yScale(d.y)}).on("mouseover",callbacks.mouseover).on("mouseout",callbacks.mouseout).on("click",callbacks.click);storage.barGroups=barGroups;storage.bars=bars}function update(self,storage,timing){var yZero=self.yZero;storage.barGroups.attr("class",function(d,i){return _visutils.colorClass(this,i)}).transition().duration(timing).style("opacity",1).attr("transform",function(d,i){return"translate("+self.xScale2(i)+",0)"});storage.bars.transition().duration(timing).attr("width",self.xScale2.rangeBand()).attr("x",function(d){return self.xScale(d.x)}).attr("height",function(d){return Math.abs(yZero-self.yScale(d.y))}).attr("y",function(d){return d.y<0?yZero:self.yScale(d.y)})}function exit(self,storage,timing){storage.bars.exit().transition().duration(timing).attr("width",0).remove();storage.barGroups.exit().transition().duration(timing).style("opacity",0).remove()}function destroy(self,storage,timing){var band=self.xScale2?self.xScale2.rangeBand()/2:0;delete self.xScale2;storage.bars.transition().duration(timing).attr("width",0).attr("x",function(d){return self.xScale(d.x)+band})}_vis.bar={postUpdateScale:postUpdateScale,enter:enter,update:update,exit:exit,destroy:destroy}})();(function(){var zIndex=3,selector="g.line",insertBefore=_visutils.getInsertionPoint(zIndex);function enter(self,storage,className,data,callbacks){var inter=self._options.interpolation,x=function(d,i){if(!self.xScale2&&!self.xScale.rangeBand){return self.xScale(d.x)}return self.xScale(d.x)+self.xScale.rangeBand()/2},y=function(d){return self.yScale(d.y)},line=d3.svg.line().x(x).interpolate(inter),area=d3.svg.area().x(x).y1(self.yZero).interpolate(inter),container,fills,paths;function datum(d){return[d.data]}container=self._g.selectAll(selector+className).data(data,function(d){return d.className});container.enter().insert("g",insertBefore).attr("data-index",zIndex).attr("class",function(d,i){var cl=_.uniq((className+d.className).split(".")).join(" ");return cl+" line "+_visutils.colorClass(this,i)});fills=container.selectAll("path.fill").data(datum);fills.enter().append("path").attr("class","fill").style("opacity",0).attr("d",area.y0(y));paths=container.selectAll("path.line").data(datum);paths.enter().append("path").attr("class","line").style("opacity",0).attr("d",line.y(y));storage.lineContainers=container;storage.lineFills=fills;storage.linePaths=paths;storage.lineX=x;storage.lineY=y;storage.lineA=area;storage.line=line}function update(self,storage,timing){storage.lineContainers.attr("class",function(d,i){return _visutils.colorClass(this,i)});storage.lineFills.transition().duration(timing).style("opacity",1).attr("d",storage.lineA.y0(storage.lineY));storage.linePaths.transition().duration(timing).style("opacity",1).attr("d",storage.line.y(storage.lineY))}function exit(self,storage){storage.linePaths.exit().style("opacity",0).remove();storage.lineFills.exit().style("opacity",0).remove();storage.lineContainers.exit().remove()}function destroy(self,storage,timing){storage.linePaths.transition().duration(timing).style("opacity",0);storage.lineFills.transition().duration(timing).style("opacity",0)}_vis.line={enter:enter,update:update,exit:exit,destroy:destroy}})();(function(){var line=_vis.line;function enter(self,storage,className,data,callbacks){var circles;line.enter(self,storage,className,data,callbacks);circles=storage.lineContainers.selectAll("circle").data(function(d){return d.data},function(d){return d.x});circles.enter().append("circle").style("opacity",0).attr("cx",storage.lineX).attr("cy",storage.lineY).attr("r",5).on("mouseover",callbacks.mouseover).on("mouseout",callbacks.mouseout).on("click",callbacks.click);storage.lineCircles=circles}function update(self,storage,timing){line.update.apply(null,_.toArray(arguments));storage.lineCircles.transition().duration(timing).style("opacity",1).attr("cx",storage.lineX).attr("cy",storage.lineY)}function exit(self,storage){storage.lineCircles.exit().remove();line.exit.apply(null,_.toArray(arguments))}function destroy(self,storage,timing){line.destroy.apply(null,_.toArray(arguments));if(!storage.lineCircles){return}storage.lineCircles.transition().duration(timing).style("opacity",0)}_vis["line-dotted"]={enter:enter,update:update,exit:exit,destroy:destroy}})();(function(){var line=_vis["line-dotted"];function enter(self,storage,className,data,callbacks){line.enter(self,storage,className,data,callbacks)}function _accumulate_data(data){function reduce(memo,num){return memo+num.y}var nData=_.map(data,function(set){var i=set.data.length,d=_.clone(set.data);set=_.clone(set);while(i){i-=1;d[i]=_.clone(set.data[i]);d[i].y0=set.data[i].y;d[i].y=_.reduce(_.first(set.data,i),reduce,set.data[i].y)}return _.extend(set,{data:d})});return nData}function _resetData(self){if(!self.hasOwnProperty("cumulativeOMainData")){return}self._mainData=self.cumulativeOMainData;delete self.cumulativeOMainData;self._compData=self.cumulativeOCompData;delete self.cumulativeOCompData}function preUpdateScale(self,data){_resetData(self);self.cumulativeOMainData=self._mainData;self._mainData=_accumulate_data(self._mainData);self.cumulativeOCompData=self._compData;self._compData=_accumulate_data(self._compData)}function destroy(self,storage,timing){_resetData(self);line.destroy.apply(null,_.toArray(arguments))}_vis.cumulative={preUpdateScale:preUpdateScale,enter:enter,update:line.update,exit:line.exit,destroy:destroy}})();var emptyData=[[]],defaults={mouseover:function(data,i){},mouseout:function(data,i){},click:function(data,i){},axisPaddingTop:0,axisPaddingRight:0,axisPaddingBottom:5,axisPaddingLeft:20,paddingTop:0,paddingRight:0,paddingBottom:20,paddingLeft:60,tickHintX:10,tickFormatX:function(x){return x},tickHintY:10,tickFormatY:function(y){return y},xMin:null,xMax:null,yMin:null,yMax:null,dataFormatX:function(x){return x},dataFormatY:function(y){return y},unsupported:function(selector){d3.select(selector).text("SVG is not supported on your browser")},empty:function(self,selector,d){},notempty:function(self,selector){},timing:750,interpolation:"monotone",sortX:function(a,b){return!a.x&&!b.x?0:a.xself._width/80){labels.sort(function(a,b){var r=/translate\(([^,)]+)/;a=a.getAttribute("transform").match(r);b=b.getAttribute("transform").match(r);return parseFloat(a[1],10)-parseFloat(b[1],10)});d3.selectAll(labels).filter(function(d,i){return i%(Math.ceil(labels.length/xTicks)+1)}).remove()}yRules=d3.svg.axis().scale(self.yScale).ticks(yTicks).tickSize(-self._width-o.axisPaddingRight-o.axisPaddingLeft).tickFormat(o.tickFormatY).orient("left");yAxis=self._gScale.selectAll("g.axisY").data(emptyData);yAxis.enter().append("g").attr("class","axis axisY").attr("transform","translate(0,0)");t.selectAll("g.axisY").call(yRules);zLine=self._gScale.selectAll("g.axisZero").data([[]]);zLine.enter().append("g").attr("class","axisZero");zLinePath=zLine.selectAll("line").data([[]]);zLinePath.enter().append("line").attr("x1",0).attr("x2",self._width+o.axisPaddingLeft+o.axisPaddingRight).attr("y1",self.yZero).attr("y2",self.yZero);zLinePath.transition().duration(o.timing).attr("y1",self.yZero).attr("y2",self.yZero)},_updateScale:function(){var self=this,_unionData=function(){return _.union(self._mainData,self._compData)},scaleData=_unionData(),vis=self._vis,scale,min;delete self.xScale;delete self.yScale;delete self.yZero;if(vis.hasOwnProperty("preUpdateScale")){vis.preUpdateScale(self,scaleData,self._mainData,self._compData)}scaleData=_unionData();scale=_scales.xy(self,scaleData,self._xScaleType,self._yScaleType);self.xScale=scale.x;self.yScale=scale.y;min=self.yScale.domain()[0];self.yZero=min>0?self.yScale(min):self.yScale(0);if(vis.hasOwnProperty("postUpdateScale")){vis.postUpdateScale(self,scaleData,self._mainData,self._compData)}},_enter:function(vis,storage,data,className){var self=this,callbacks={click:self._options.click,mouseover:self._options.mouseover,mouseout:self._options.mouseout};self._checkVisMethod(vis,"enter");vis.enter(self,storage,className,data,callbacks)},_update:function(vis,storage){var self=this;self._checkVisMethod(vis,"update");vis.update(self,storage,self._options.timing)},_exit:function(vis,storage){var self=this;self._checkVisMethod(vis,"exit");vis.exit(self,storage,self._options.timing)},_destroy:function(vis,storage){var self=this;self._checkVisMethod(vis,"destroy");try{vis.destroy(self,storage,self._options.timing)}catch(e){}},_draw:function(){var self=this,o=self._options,comp,compKeys;self._noData=_.flatten(_.pluck(self._mainData,"data").concat(_.pluck(self._compData,"data"))).length===0;self._updateScale();self._drawAxes();self._enter(self._vis,self._mainStorage,self._mainData,".main");self._exit(self._vis,self._mainStorage);self._update(self._vis,self._mainStorage);comp=_.chain(self._compData).groupBy(function(d){return d.type});compKeys=comp.keys();_.each(self._compStorage,function(d,key){if(-1===compKeys.indexOf(key).value()){var vis=_vis[key];self._enter(vis,d,[],".comp."+key.replace(/\W+/g,""));self._exit(vis,d)}});comp.each(function(d,key){var vis=_vis[key],storage;if(!self._compStorage.hasOwnProperty(key)){self._compStorage[key]={}}storage=self._compStorage[key];self._enter(vis,storage,d,".comp."+key.replace(/\W+/g,""));self._exit(vis,storage);self._update(vis,storage)});if(self._noData){o.empty(self,self._selector,self._mainData)}else{o.notempty(self,self._selector)}},_checkVisMethod:function(vis,method){var self=this;if(!vis[method]){throw'Required method "'+method+'" not found on vis type "'+self._type+'".'}}});if(typeof define==="function"&&define.amd&&typeof define.amd==="object"){define(function(){return xChart});return}window.xChart=xChart})(); \ No newline at end of file diff --git a/plugins/web_gui/static/restart.html b/plugins/web_gui/static/restart.html new file mode 100644 index 0000000..ed9c41d --- /dev/null +++ b/plugins/web_gui/static/restart.html @@ -0,0 +1,37 @@ + + + + + StarryPy WebGUI + + + + + + + + + + + + +
    +
    +
    +
    +
    + {% if handler.error_message == "" %} +

    Server is being restarted!

    + {% else %} +

    {{ handler.error_message }}

    + {% end %} +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/plugins/web_gui/web_gui.py b/plugins/web_gui/web_gui.py index 9873d99..ea36a36 100644 --- a/plugins/web_gui/web_gui.py +++ b/plugins/web_gui/web_gui.py @@ -1,9 +1,10 @@ #:coding=utf-8: import os import logging -import ujson +import json import tornado.web import tornado.websocket +import subprocess from twisted.internet import reactor from plugins.core.player_manager import permissions, PlayerManager, UserLevels from plugins.core.player_manager.manager import Player @@ -21,6 +22,7 @@ class LoginHandler(BaseHandler): def initialize(self): self.failed_login = False + self.factory = self.settings.get("factory") self.player_manager = self.settings.get("playermanager") def get(self): @@ -34,10 +36,30 @@ def post(self): self.render("login.html") else: self.set_secure_cookie("player", self.get_argument("name")) + self.factory.broadcast("An admin has joined the server through Web-GUI.", 0, "", self.get_argument("name")) self.failed_login = False self.redirect(self.get_argument("next", "/")) +class RestartHandler(BaseHandler): + + def initialize(self): + self.levels = UserLevels.ranks + self.player_manager = self.settings.get("playermanager") + self.web_gui_user = self.player_manager.get_by_name(self.get_current_user()) + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + if self.web_gui_user.access_level == self.levels["OWNER"]: + self.error_message = "" + self.render("restart.html") + print(subprocess.call(self.settings.get("restart_script"), shell=True)) + else: + self.error_message = "Only owners can restart the server!" + self.render("restart.html") + + class LogoutHandler(BaseHandler): @tornado.web.authenticated @tornado.web.asynchronous @@ -47,16 +69,23 @@ def get(self): class IndexHandler(BaseHandler): - def initialize(self): - self.player_manager = self.settings.get("playermanager") @tornado.web.authenticated @tornado.web.asynchronous def get(self): - self.playerlistonline = self.player_manager.who() + self.user = self.get_current_user() self.render("index.html") +class DashboardHandler(BaseHandler): + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + self.user = self.get_current_user() + self.render("ajax/dashboard.html") + + class PlayerListHandler(BaseHandler): def initialize(self): @@ -66,7 +95,31 @@ def initialize(self): @tornado.web.authenticated @tornado.web.asynchronous def get(self): - self.render("playerlist.html") + self.render("ajax/playerlist.html") + + +class PlayerOnlineSideBarHandler(BaseHandler): + + def initialize(self): + self.player_manager = self.settings.get("playermanager") + self.playerlistonline = self.player_manager.who() + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + self.render("ajax/playersonline.html") + + +class PlayerOnlineListHandler(BaseHandler): + + def initialize(self): + self.player_manager = self.settings.get("playermanager") + self.playerlistonline = self.player_manager.who() + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + self.render("ajax/playerlistonline.html") class PlayerEditHandler(BaseHandler): @@ -74,9 +127,8 @@ class PlayerEditHandler(BaseHandler): def initialize(self): self.player_manager = self.settings.get("playermanager") self.levels = UserLevels.ranks - self.web_gui_user = self.player_manager.get_by_name(self.get_secure_cookie("player")) + self.web_gui_user = self.player_manager.get_by_name(self.get_current_user()) self.edit_player = self.player_manager.get_by_name(self.get_argument("playername")) - self.edit_player_dict = self.edit_player.as_dict() @tornado.web.authenticated @tornado.web.asynchronous @@ -85,26 +137,26 @@ def get(self): self.error_message = self.get_argument("error_message") except tornado.web.MissingArgumentError: self.error_message = "" - self.render("playeredit.html") + self.render("ajax/playeredit.html") @tornado.web.authenticated @tornado.web.asynchronous def post(self): if self.web_gui_user.access_level > self.edit_player.access_level: self.edit_player.access_level = self.get_argument("access_level") + self.error_message = "" else: error_message = "You are not allowed to change this users' data!" - self.redirect("playeredit.html?playername={n}&error_message={e}".format(n=self.get_argument("playername"), - e=error_message)) - self.redirect("playeredit.html?playername={n}".format(n=self.get_argument("playername"))) + self.redirect("ajax/playeredit.html?playername={n}&error_message={e}".format( + n=self.get_argument("playername"), e=error_message)) + self.render("ajax/playeredit.html") class AdminStopHandler(BaseHandler): def initialize(self): self.levels = UserLevels.ranks - self.player_manager = self.settings.get("playermanager") - self.web_gui_user = self.player_manager.get_by_name(self.get_secure_cookie("player")) + self.web_gui_user = self.player_manager.get_by_name(self.get_current_user()) @tornado.web.authenticated @tornado.web.asynchronous @@ -122,21 +174,26 @@ class WebSocketChatHandler(tornado.websocket.WebSocketHandler): def initialize(self): self.clients = [] - #self.messages = set() self.messages = self.settings.get("messages") + self.messages_log = self.settings.get("messages_log") self.callback = PeriodicCallback(self.update_chat, 500) + self.factory = self.settings.get("factory") def open(self, *args): self.clients.append(self) + print(self.messages_log) + for msg in self.messages_log: + print(msg) + self.write_message(msg) self.callback.start() def on_message(self, message): - messagejson = ujson.loads(message) - player = self.get_secure_cookie("player") - factory = self.settings.get("factory") + messagejson = json.loads(message) + user = self.get_current_user() self.messages.add(message) - factory.broadcast(messagejson["message"], 0, "", player) + self.messages_log.add(message) + self.factory.broadcast(messagejson["message"], 0, "", user) def update_chat(self): if len(self.messages) > 0: @@ -150,8 +207,17 @@ def on_close(self): self.callback.stop() +class WebChatJsHandler(BaseHandler): + + @tornado.web.authenticated + @tornado.web.asynchronous + def get(self): + self.render("js/webgui.chat.js") + + class WebGuiApp(tornado.web.Application): - def __init__(self, port, ownerpassword, playermanager, factory, cookie_secret, serverurl, messages): + def __init__(self, port, ownerpassword, playermanager, factory, cookie_secret, serverurl, messages, messages_log, + restart_script): logging.getLogger('tornado.general').addHandler(logging.FileHandler("webgui.log")) logging.getLogger('tornado.application').addHandler(logging.FileHandler("webgui.log")) logging.getLogger('tornado.access').addHandler(logging.FileHandler("webgui_access.log")) @@ -159,18 +225,27 @@ def __init__(self, port, ownerpassword, playermanager, factory, cookie_secret, s handlers = [ (r"/login", LoginHandler), (r"/logout", LogoutHandler), + (r"/restart", RestartHandler), (r'/chat', WebSocketChatHandler), (r'/stopserver', AdminStopHandler), - (r'/playerlist.html', PlayerListHandler), - (r'/playeredit.html', PlayerEditHandler), + (r'/ajax/playerlistonline.html', PlayerOnlineListHandler), + (r'/ajax/playerlist.html', PlayerListHandler), + (r'/ajax/playeredit.html', PlayerEditHandler), + (r'/ajax/playersonline.html', PlayerOnlineSideBarHandler), + (r'/ajax/dashboard.html', DashboardHandler), + (r'/js/webgui.chat.js', WebChatJsHandler), (r'/index.html', IndexHandler), (r'/', IndexHandler), - (r'/style/(.*)', tornado.web.StaticFileHandler, - {'path': os.path.join(os.path.dirname(__file__), 'style')}), + (r'/ajax/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'static/ajax')}), (r'/css/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.dirname(__file__), 'static/css')}), (r'/js/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.dirname(__file__), 'static/js')}), + (r'/plugins/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'static/plugins')}), + (r'/img/(.*)', tornado.web.StaticFileHandler, + {'path': os.path.join(os.path.dirname(__file__), 'static/img')}), (r'/images/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.dirname(__file__), 'static/images')}) ] @@ -185,7 +260,9 @@ def __init__(self, port, ownerpassword, playermanager, factory, cookie_secret, s factory=factory, wsport=port, serverurl=serverurl, - messages=messages + messages=messages, + messages_log=messages_log, + restart_script=restart_script ) tornado.web.Application.__init__(self, handlers, **settings) self.listen(port) \ No newline at end of file diff --git a/plugins/web_gui/web_gui_plugin.py b/plugins/web_gui/web_gui_plugin.py index e13c95d..005511b 100644 --- a/plugins/web_gui/web_gui_plugin.py +++ b/plugins/web_gui/web_gui_plugin.py @@ -2,11 +2,12 @@ import os import string import random +import json +from datetime import datetime from base_plugin import BasePlugin -from plugins.core.player_manager import permissions, PlayerManager, UserLevels +from plugins.core.player_manager import PlayerManager from packets import chat_sent -import web_gui -from websocket import create_connection +from . import web_gui import tornado.ioloop from tornado.platform.twisted import TwistedIOLoop TwistedIOLoop().install() @@ -23,12 +24,14 @@ def __init__(self): except (AttributeError, ValueError): self.port = 8083 self.ownerpassword = self.config.plugin_config['ownerpassword'] + self.restart_script = self.config.plugin_config['restart_script'] if self.config.plugin_config['cookie_token'] == "" or not self.config.plugin_config['remember_cookie_token']: self.cookie_token = self.config.plugin_config['cookie_token'] = self.generate_cookie_token() else: self.cookie_token = self.config.plugin_config['cookie_token'] self.serverurl = self.config.plugin_config['serverurl'] self.messages = set() + self.messages_log = set() def activate(self): super(WebGuiPlugin, self).activate() @@ -36,7 +39,8 @@ def activate(self): self.web_gui_app = web_gui.WebGuiApp(port=self.port, ownerpassword=self.ownerpassword, playermanager=self.player_manager, factory=self.factory, cookie_secret=self.cookie_token, serverurl=self.serverurl, - messages=self.messages) + messages=self.messages, messages_log=self.messages_log, + restart_script=self.restart_script) self.logger.info("WebGUI listening on port {p}".format(p=self.port)) self.gui_instance = tornado.ioloop.IOLoop.instance() @@ -51,15 +55,9 @@ def generate_cookie_token(self): def on_chat_sent(self, data): parsed = chat_sent().parse(data.data) - print parsed.message.decode("utf-8") - message = parsed.message.decode("utf-8") - #message = {"msgdate": "text", "author": "test", "message": parsed.message.decode("utf-8")} + msgdate = datetime.now().strftime("[%H:%M:%S]") + message = json.dumps({"msgdate": msgdate, "author": self.protocol.player.name, "message": parsed.message.decode("utf-8")}) self.messages.add(message) - - # print "ws://localhost:{p}/chat".format(p=self.port) - # ws = create_connection("ws://localhost:{p}/chat".format(p=self.port)) - # result = ws.send(message) - # print "Received '%s'" % result - # ws.close() + self.messages_log.add(message) return True From 073c4bd8b94223428ae948d45b46201daf24d9fc Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 4 Mar 2014 22:12:02 +0100 Subject: [PATCH 07/18] added info for web-gui --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/README.md b/README.md index 07d609e..038b054 100644 --- a/README.md +++ b/README.md @@ -159,3 +159,32 @@ Please note: > > The other parameters are pretty self-explanatory +## [traxo-xx's WebGUI plugin](https://github.com/StarryPy/StarryPy_plugins/tree/master/plugins/web_gui) +> If activated, this give you a web-GUI to administrate your StarryPy server. Still in a very alpha-ish state, which is why it is deactivated by default. When it's activated you can log in to the GUI with the name of the server owner and the password you set in the config file. + +> ### Add the following block to your config file: + +> ```javascript + "web_gui": { + "auto_activate": false, + "cookie_token": "", + "ownerpassword": "!!PUT A PASSWORD HERE", + "port": 8083, + "remember_cookie_token": true, + "restart_script": "", + "serverurl": "localhost" + }, +>``` + +> **cookie_token**: A secure token for Cookies. Leave this blank. The plugin will fill it. +> +> **ownerpassword**: Password for the web-GUI. +> +> **port**: The port the web-GUI will listen on. +> +> **remember_cookie_token**: If set to true, you will stay logged in until you log out (even after you restart StarryPy). If set to false, a new cookie_token will be generated on every start of StarryPy. +> +> **restart_script**: Path to a script to restart starbound and/or StarryPy. +> +> **serverurl**: URL or IP of your StarryPy server. + From 413c7f56bf2ab0fd78883888af07b04e5c2c2040 Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 4 Mar 2014 22:28:11 +0100 Subject: [PATCH 08/18] added some nice colour to make it more of a warning --- plugins/web_gui/static/js/webgui.general.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/web_gui/static/js/webgui.general.js b/plugins/web_gui/static/js/webgui.general.js index ed4a1ee..85ecf4a 100644 --- a/plugins/web_gui/static/js/webgui.general.js +++ b/plugins/web_gui/static/js/webgui.general.js @@ -2,6 +2,7 @@ function serverAction(text, url) { noty({ text: "Are you sure you want to " + text + "?", layout: "center", + type: "warning", buttons: [ {addClass: 'btn btn-primary', text: 'Ok', onClick: function($noty) { @@ -22,6 +23,7 @@ function playerAction(text, action) { noty({ text: "Are you sure you want to " + text + "?", layout: "center", + type: "warning", buttons: [ {addClass: 'btn btn-primary', text: 'Ok', onClick: function($noty) { From 2bc4d09eed4c75c8c9bc3ac2f89370599b65da88 Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Tue, 4 Mar 2014 22:37:46 +0100 Subject: [PATCH 09/18] changed text since the page will only show up after the server has been restarted --- plugins/web_gui/static/restart.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/web_gui/static/restart.html b/plugins/web_gui/static/restart.html index ed9c41d..1c0e8b9 100644 --- a/plugins/web_gui/static/restart.html +++ b/plugins/web_gui/static/restart.html @@ -24,7 +24,7 @@
    {% if handler.error_message == "" %} -

    Server is being restarted!

    +

    Server has been restarted!

    {% else %}

    {{ handler.error_message }}

    {% end %} From 6b66cdf090933359f139194c15b0a6717c96564c Mon Sep 17 00:00:00 2001 From: traxo-xx Date: Wed, 5 Mar 2014 18:12:07 +0100 Subject: [PATCH 10/18] - added functions kick, ban and unban - ban is visible in player list - player list and online player list are sortable now --- plugins/web_gui/static/ajax/playeredit.html | 12 +- .../web_gui/static/ajax/playereditnew.html | 85 ------------ plugins/web_gui/static/ajax/playerlist.html | 14 +- .../web_gui/static/ajax/playerlistonline.html | 14 +- .../web_gui/static/css/bootstrap-sortable.css | 84 ++++++++++++ plugins/web_gui/static/index.html | 4 +- .../web_gui/static/js/bootstrap-sortable.js | 129 ++++++++++++++++++ plugins/web_gui/static/js/webgui.general.js | 121 ++++++++++------ plugins/web_gui/web_gui.py | 55 +++++++- 9 files changed, 368 insertions(+), 150 deletions(-) delete mode 100644 plugins/web_gui/static/ajax/playereditnew.html create mode 100644 plugins/web_gui/static/css/bootstrap-sortable.css create mode 100644 plugins/web_gui/static/js/bootstrap-sortable.js diff --git a/plugins/web_gui/static/ajax/playeredit.html b/plugins/web_gui/static/ajax/playeredit.html index f0a2506..e8496c3 100644 --- a/plugins/web_gui/static/ajax/playeredit.html +++ b/plugins/web_gui/static/ajax/playeredit.html @@ -9,7 +9,15 @@
    -

    Edit {{ handler.edit_player.name }}

    + {% set iconcolour = "#54ae86" if handler.edit_player.logged_in else "#D15E5E" %} +

    Edit {{ handler.edit_player.name }}

    + + {% if handler.player_manager.check_bans(handler.edit_player.ip) %} + + {% else %} + + {% end %} +
    @@ -40,7 +48,7 @@

    Edit {{ handler.edit_player.name }} Last Seen - {{ handler.edit_player.last_seen }} + {{ str(handler.edit_player.last_seen).rpartition('.')[0] }} planet diff --git a/plugins/web_gui/static/ajax/playereditnew.html b/plugins/web_gui/static/ajax/playereditnew.html deleted file mode 100644 index 3b00e0b..0000000 --- a/plugins/web_gui/static/ajax/playereditnew.html +++ /dev/null @@ -1,85 +0,0 @@ -
    - -
    -
    -
    -
    -
    -
    - - Basic table -
    - -
    -
    -
    -

    Edit {{ handler.edit_player.name }}

    - -
    - - {% if handler.error_message != "" %} - {{ handler.error_message }} - {% end %} - - - - - - - - - - - - - - - - - - - - - - - - - -
    UUID{{ handler.edit_player.uuid }}
    Access Level - -
    IP{{ handler.edit_player.ip }}
    Last Seen{{ handler.edit_player.last_seen }}
    planet{{ handler.edit_player.planet }}
    On Ship{{ handler.edit_player.on_ship }}
    - {% raw xsrf_form_html() %} - -
    -
    -
    -
    -
    -
    - diff --git a/plugins/web_gui/static/ajax/playerlist.html b/plugins/web_gui/static/ajax/playerlist.html index aaa5eac..ddfb9b2 100644 --- a/plugins/web_gui/static/ajax/playerlist.html +++ b/plugins/web_gui/static/ajax/playerlist.html @@ -1,3 +1,5 @@ + +
    - +
    - + @@ -22,7 +24,7 @@ {% for player in handler.playerlist %} {% set iconcolour = "#54ae86" if player.logged_in else "#D15E5E" %} - + @@ -32,10 +34,4 @@
    NameName Planet Access Level Last Seen
    {{ player.name }} {{ player.name }} {% if handler.player_manager.check_bans(player.ip) %} {% end %} {{ player.planet }} {{ player.access_level }} {{ str(player.last_seen).rpartition('.')[0] }}
    - diff --git a/plugins/web_gui/static/ajax/playerlistonline.html b/plugins/web_gui/static/ajax/playerlistonline.html index bbc833a..c735003 100644 --- a/plugins/web_gui/static/ajax/playerlistonline.html +++ b/plugins/web_gui/static/ajax/playerlistonline.html @@ -1,3 +1,5 @@ + +
    - +
    - + @@ -21,7 +23,7 @@ {% for player in handler.playerlistonline %} - + @@ -31,10 +33,4 @@
    NameName Planet Access Level Last Seen
    {{ player.name }}{{ player.name }} {{ player.planet }} {{ player.access_level }} {{ str(player.last_seen).rpartition('.')[0] }}
    - diff --git a/plugins/web_gui/static/css/bootstrap-sortable.css b/plugins/web_gui/static/css/bootstrap-sortable.css new file mode 100644 index 0000000..8924f61 --- /dev/null +++ b/plugins/web_gui/static/css/bootstrap-sortable.css @@ -0,0 +1,84 @@ +table.sortable span.sign { + display: block; + position: absolute; + top: 50%; + right: 5px; + font-size: 12px; + margin-top: -10px; + color: #bfbfc1; +} + +table.sortable span.arrow, span.reversed { + border-style: solid; + border-width: 5px; + font-size: 0; + border-color: #ccc transparent transparent transparent; + line-height: 0; + height: 0; + width: 0; + margin-top: -2px; +} + + table.sortable span.arrow.up { + border-color: transparent transparent #ccc transparent; + margin-top: -7px; + } + +table.sortable span.reversed { + border-color: transparent transparent #ccc transparent; + margin-top: -7px; +} + + table.sortable span.reversed.up { + border-color: #ccc transparent transparent transparent; + margin-top: -2px; + } + + + +table.sortable span.az:before { + content: "a .. z"; +} + +table.sortable span.az.up:before { + content: "z .. a"; +} + +table.sortable span.AZ:before { + content: "A .. Z"; +} + +table.sortable span.AZ.up:before { + content: "Z .. A"; +} + +table.sortable span._19:before { + content: "1 .. 9"; +} + +table.sortable span._19.up:before { + content: "9 .. 1"; +} + +table.sortable span.month:before { + content: "jan .. dec"; +} + +table.sortable span.month.up:before { + content: "dec .. jan"; +} + +table.sortable thead th:not([data-defaultsort=disabled]) { + cursor: pointer; + position: relative; + top: 0; + left: 0; +} + +table.sortable thead th:hover:not([data-defaultsort=disabled]) { + background: #efefef; +} + +table.sortable thead th div.mozilla { + position: relative; +} diff --git a/plugins/web_gui/static/index.html b/plugins/web_gui/static/index.html index d489530..99b2ddb 100644 --- a/plugins/web_gui/static/index.html +++ b/plugins/web_gui/static/index.html @@ -15,12 +15,12 @@ - + - + - - - - - diff --git a/plugins/web_gui/static/js/devoops.js b/plugins/web_gui/static/js/devoops.js deleted file mode 100644 index 7d949fa..0000000 --- a/plugins/web_gui/static/js/devoops.js +++ /dev/null @@ -1,2431 +0,0 @@ -// -// Main script of DevOOPS v1.0 Bootstrap Theme -// -"use strict"; -/*------------------------------------------- - Dynamically load plugin scripts ----------------------------------------------*/ -// -// Dynamically load Fullcalendar Plugin Script -// homepage: http://arshaw.com/fullcalendar -// require moment.js -// -function LoadCalendarScript(callback){ - function LoadFullCalendarScript(){ - if(!$.fn.fullCalendar){ - $.getScript('plugins/fullcalendar/fullcalendar.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } - } - if (!$.fn.moment){ - $.getScript('plugins/moment/moment.min.js', LoadFullCalendarScript); - } - else { - LoadFullCalendarScript(); - } -} -// -// Dynamically load OpenStreetMap Plugin -// homepage: http://openlayers.org -// -function LoadOpenLayersScript(callback){ - if (!$.fn.OpenLayers){ - $.getScript('http://www.openlayers.org/api/OpenLayers.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load jQuery Timepicker plugin -// homepage: http://trentrichardson.com/examples/timepicker/ -// -function LoadTimePickerScript(callback){ - if (!$.fn.timepicker){ - $.getScript('plugins/jquery-ui-timepicker-addon/jquery-ui-timepicker-addon.min.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load Bootstrap Validator Plugin -// homepage: https://github.com/nghuuphuoc/bootstrapvalidator -// -function LoadBootstrapValidatorScript(callback){ - if (!$.fn.bootstrapValidator){ - $.getScript('plugins/bootstrapvalidator/bootstrapValidator.min.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load jQuery Select2 plugin -// homepage: https://github.com/ivaynberg/select2 v3.4.5 license - GPL2 -// -function LoadSelect2Script(callback){ - if (!$.fn.select2){ - $.getScript('plugins/select2/select2.min.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load DataTables plugin -// homepage: http://datatables.net v1.9.4 license - GPL or BSD -// -function LoadDataTablesScripts(callback){ - function LoadDatatables(){ - $.getScript('plugins/datatables/jquery.dataTables.js', function(){ - $.getScript('plugins/datatables/ZeroClipboard.js', function(){ - $.getScript('plugins/datatables/TableTools.js', function(){ - $.getScript('plugins/datatables/dataTables.bootstrap.js', callback); - }); - }); - }); - } - if (!$.fn.dataTables){ - LoadDatatables(); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load Widen FineUploader -// homepage: https://github.com/Widen/fine-uploader v4.3.1 license - GPL3 -// -function LoadFineUploader(callback){ - if (!$.fn.fineuploader){ - $.getScript('plugins/fineuploader/jquery.fineuploader-4.3.1.min.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load xCharts plugin -// homepage: http://tenxer.github.io/xcharts/ v0.3.0 license - MIT -// Required D3 plugin http://d3js.org/ v3.4.1 license - MIT -// -function LoadXChartScript(callback){ - function LoadXChart(){ - $.getScript('plugins/xcharts/xcharts.min.js', callback); - } - function LoadD3Script(){ - if (!$.fn.d3){ - $.getScript('plugins/d3/d3.v3.min.js', LoadXChart) - } - else { - LoadXChart(); - } - } - if (!$.fn.xcharts){ - LoadD3Script(); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load Flot plugin -// homepage: http://www.flotcharts.org v0.8.2 license- MIT -// -function LoadFlotScripts(callback){ - function LoadFlotScript(){ - $.getScript('plugins/flot/jquery.flot.js', LoadFlotResizeScript); - } - function LoadFlotResizeScript(){ - $.getScript('plugins/flot/jquery.flot.resize.js', LoadFlotTimeScript); - } - function LoadFlotTimeScript(){ - $.getScript('plugins/flot/jquery.flot.time.js', callback); - } - if (!$.fn.flot){ - LoadFlotScript(); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load Morris Charts plugin -// homepage: http://www.oesmith.co.uk/morris.js/ v0.4.3 License - MIT -// require Raphael http://raphael.js -// -function LoadMorrisScripts(callback){ - function LoadMorrisScript(){ - if(!$.fn.Morris){ - $.getScript('plugins/morris/morris.min.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } - } - if (!$.fn.raphael){ - $.getScript('plugins/raphael/raphael-min.js', LoadMorrisScript); - } - else { - LoadMorrisScript(); - } -} -// -// Dynamically load Fancybox 2 plugin -// homepage: http://fancyapps.com/fancybox/ v2.1.5 License - MIT -// -function LoadFancyboxScript(callback){ - if (!$.fn.fancybox){ - $.getScript('plugins/fancybox/jquery.fancybox.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load jQuery-Knob plugin -// homepage: http://anthonyterrien.com/knob/ v1.2.5 License- MIT or GPL -// -function LoadKnobScripts(callback){ - if(!$.fn.knob){ - $.getScript('plugins/jQuery-Knob/jquery.knob.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -// -// Dynamically load Sparkline plugin -// homepage: http://omnipotent.net/jquery.sparkline v2.1.2 License - BSD -// -function LoadSparkLineScript(callback){ - if(!$.fn.sparkline){ - $.getScript('plugins/sparkline/jquery.sparkline.min.js', callback); - } - else { - if (callback && typeof(callback) === "function") { - callback(); - } - } -} -/*------------------------------------------- - Main scripts used by theme ----------------------------------------------*/ -// -// Function for load content from url and put in $('.ajax-content') block -// -function LoadAjaxContent(url){ - $('.preloader').show(); - $.ajax({ - mimeType: 'text/html; charset=utf-8', // ! Need set mimeType only when run from local file - url: url, - type: 'GET', - success: function(data) { - $('#ajax-content').html(data); - $('.preloader').hide(); - }, - error: function (jqXHR, textStatus, errorThrown) { - alert(errorThrown); - }, - dataType: "html", - async: false - }); -} -// -// Function maked all .box selector is draggable, to disable for concrete element add class .no-drop -// -function WinMove(){ - $( "div.box").not('.no-drop') - .draggable({ - revert: true, - zIndex: 2000, - cursor: "crosshair", - handle: '.box-name', - opacity: 0.8 - }) - .droppable({ - tolerance: 'pointer', - drop: function( event, ui ) { - var draggable = ui.draggable; - var droppable = $(this); - var dragPos = draggable.position(); - var dropPos = droppable.position(); - draggable.swap(droppable); - setTimeout(function() { - var dropmap = droppable.find('[id^=map-]'); - var dragmap = draggable.find('[id^=map-]'); - if (dragmap.length > 0 || dropmap.length > 0){ - dragmap.resize(); - dropmap.resize(); - } - else { - draggable.resize(); - droppable.resize(); - } - }, 50); - setTimeout(function() { - draggable.find('[id^=map-]').resize(); - droppable.find('[id^=map-]').resize(); - }, 250); - } - }); -} -// -// Swap 2 elements on page. Used by WinMove function -// -jQuery.fn.swap = function(b){ - b = jQuery(b)[0]; - var a = this[0]; - var t = a.parentNode.insertBefore(document.createTextNode(''), a); - b.parentNode.insertBefore(a, b); - t.parentNode.insertBefore(b, t); - t.parentNode.removeChild(t); - return this; -}; -// -// Screensaver function -// used on locked screen, and write content to element with id - canvas -// -function ScreenSaver(){ - var canvas = document.getElementById("canvas"); - var ctx = canvas.getContext("2d"); - // Size of canvas set to fullscreen of browser - var W = window.innerWidth; - var H = window.innerHeight; - canvas.width = W; - canvas.height = H; - // Create array of particles for screensaver - var particles = []; - for (var i = 0; i < 25; i++) { - particles.push(new Particle()); - } - function Particle(){ - // location on the canvas - this.location = {x: Math.random()*W, y: Math.random()*H}; - // radius - lets make this 0 - this.radius = 0; - // speed - this.speed = 3; - // random angle in degrees range = 0 to 360 - this.angle = Math.random()*360; - // colors - var r = Math.round(Math.random()*255); - var g = Math.round(Math.random()*255); - var b = Math.round(Math.random()*255); - var a = Math.random(); - this.rgba = "rgba("+r+", "+g+", "+b+", "+a+")"; - } - // Draw the particles - function draw() { - // re-paint the BG - // Lets fill the canvas black - // reduce opacity of bg fill. - // blending time - ctx.globalCompositeOperation = "source-over"; - ctx.fillStyle = "rgba(0, 0, 0, 0.02)"; - ctx.fillRect(0, 0, W, H); - ctx.globalCompositeOperation = "lighter"; - for(var i = 0; i < particles.length; i++){ - var p = particles[i]; - ctx.fillStyle = "white"; - ctx.fillRect(p.location.x, p.location.y, p.radius, p.radius); - // Lets move the particles - // So we basically created a set of particles moving in random direction - // at the same speed - // Time to add ribbon effect - for(var n = 0; n < particles.length; n++){ - var p2 = particles[n]; - // calculating distance of particle with all other particles - var yd = p2.location.y - p.location.y; - var xd = p2.location.x - p.location.x; - var distance = Math.sqrt(xd*xd + yd*yd); - // draw a line between both particles if they are in 200px range - if(distance < 200){ - ctx.beginPath(); - ctx.lineWidth = 1; - ctx.moveTo(p.location.x, p.location.y); - ctx.lineTo(p2.location.x, p2.location.y); - ctx.strokeStyle = p.rgba; - ctx.stroke(); - //The ribbons appear now. - } - } - // We are using simple vectors here - // New x = old x + speed * cos(angle) - p.location.x = p.location.x + p.speed*Math.cos(p.angle*Math.PI/180); - // New y = old y + speed * sin(angle) - p.location.y = p.location.y + p.speed*Math.sin(p.angle*Math.PI/180); - // You can read about vectors here: - // http://physics.about.com/od/mathematics/a/VectorMath.htm - if(p.location.x < 0) p.location.x = W; - if(p.location.x > W) p.location.x = 0; - if(p.location.y < 0) p.location.y = H; - if(p.location.y > H) p.location.y = 0; - } - } - setInterval(draw, 30); -} -// -// Helper for draw Google Chart -// -function drawGoogleChart(chart_data, chart_options, element, chart_type) { - // Function for visualize Google Chart - var data = google.visualization.arrayToDataTable(chart_data); - var chart = new chart_type(document.getElementById(element)); - chart.draw(data, chart_options); -} -// -// Function for Draw Knob Charts -// -function DrawKnob(elem){ - elem.knob({ - change : function (value) { - //console.log("change : " + value); - }, - release : function (value) { - //console.log(this.$.attr('value')); - console.log("release : " + value); - }, - cancel : function () { - console.log("cancel : ", this); - }, - draw : function () { - // "tron" case - if(this.$.data('skin') == 'tron') { - var a = this.angle(this.cv); // Angle - var sa = this.startAngle; // Previous start angle - var sat = this.startAngle; // Start angle - var ea; // Previous end angle - var eat = sat + a; // End angle - var r = 1; - this.g.lineWidth = this.lineWidth; - this.o.cursor - && (sat = eat - 0.3) - && (eat = eat + 0.3); - if (this.o.displayPrevious) { - ea = this.startAngle + this.angle(this.v); - this.o.cursor - && (sa = ea - 0.3) - && (ea = ea + 0.3); - this.g.beginPath(); - this.g.strokeStyle = this.pColor; - this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, sa, ea, false); - this.g.stroke(); - } - this.g.beginPath(); - this.g.strokeStyle = r ? this.o.fgColor : this.fgColor ; - this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, sat, eat, false); - this.g.stroke(); - this.g.lineWidth = 2; - this.g.beginPath(); - this.g.strokeStyle = this.o.fgColor; - this.g.arc( this.xy, this.xy, this.radius - this.lineWidth + 1 + this.lineWidth * 2 / 3, 0, 2 * Math.PI, false); - this.g.stroke(); - return false; - } - } - }); - // Example of infinite knob, iPod click wheel - var v; - var up = 0; - var down=0; - var i=0; - var $idir = $("div.idir"); - var $ival = $("div.ival"); - var incr = function() { i++; $idir.show().html("+").fadeOut(); $ival.html(i); } - var decr = function() { i--; $idir.show().html("-").fadeOut(); $ival.html(i); }; - $("input.infinite").knob( - { - min : 0, - max : 20, - stopper : false, - change : function () { - if(v > this.cv){ - if(up){ - decr(); - up=0; - } else { - up=1;down=0; - } - } else { - if(v < this.cv){ - if(down){ - incr(); - down=0; - } else { - down=1;up=0; - } - } - } - v = this.cv; - } - }); -} -// -// Create OpenLayers map with required options and return map as object -// -function drawMap(lon, lat, elem, layers) { - var LayersArray = []; - // Map initialization - var map = new OpenLayers.Map(elem); - // Add layers on map - map.addLayers(layers); - // WGS 1984 projection - var epsg4326 = new OpenLayers.Projection("EPSG:4326"); - //The map projection (Spherical Mercator) - var projectTo = map.getProjectionObject(); - // Max zoom = 17 - var zoom=10; - map.zoomToMaxExtent(); - // Set longitude/latitude - var lonlat = new OpenLayers.LonLat(lon, lat); - map.setCenter(lonlat.transform(epsg4326, projectTo), zoom); - var layerGuest = new OpenLayers.Layer.Vector("You are here"); - // Define markers as "features" of the vector layer: - var guestMarker = new OpenLayers.Feature.Vector( - new OpenLayers.Geometry.Point(lon, lat).transform(epsg4326, projectTo) - ); - layerGuest.addFeatures(guestMarker); - LayersArray.push(layerGuest); - map.addLayers(LayersArray); - // If map layers > 1 then show checker - if (layers.length > 1){ - map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true})); - } - // Link to current position - map.addControl(new OpenLayers.Control.Permalink()); - // Show current mouse coords - map.addControl(new OpenLayers.Control.MousePosition({ displayProjection: epsg4326 })); - return map -} -// -// Function for create 2 dates in human-readable format (with leading zero) -// -function PrettyDates(){ - var currDate = new Date(); - var year = currDate.getFullYear(); - var month = currDate.getMonth() + 1; - var startmonth = 1; - if (month > 3){ - startmonth = month -2; - } - if (startmonth <=9){ - startmonth = '0'+startmonth; - } - if (month <= 9) { - month = '0'+month; - } - var day= currDate.getDate(); - if (day <= 9) { - day = '0'+day; - } - var startdate = year +'-'+ startmonth +'-01'; - var enddate = year +'-'+ month +'-'+ day; - return [startdate, enddate]; -} -// -// Function set min-height of window (required for this theme) -// -function SetMinBlockHeight(elem){ - elem.css('min-height', window.innerHeight - 49) -} -// -// Helper for correct size of Messages page -// -function MessagesMenuWidth(){ - var W = window.innerWidth; - var W_menu = $('#sidebar-left').outerWidth(); - var w_messages = (W-W_menu)*16.666666666666664/100; - $('#messages-menu').width(w_messages); -} -// -// Function for change panels of Dashboard -// -function DashboardTabChecker(){ - $('#content').on('click', 'a.tab-link', function(e){ - e.preventDefault(); - $('div#dashboard_tabs').find('div[id^=dashboard]').each(function(){ - $(this).css('visibility', 'hidden').css('position', 'absolute'); - }); - var attr = $(this).attr('id'); - $('#'+'dashboard-'+attr).css('visibility', 'visible').css('position', 'relative'); - $(this).closest('.nav').find('li').removeClass('active'); - $(this).closest('li').addClass('active'); - }); -} -// -// Helper for run TinyMCE editor with textarea's -// -function TinyMCEStart(elem, mode){ - var plugins = []; - if (mode == 'extreme'){ - plugins = [ "advlist anchor autolink autoresize autosave bbcode charmap code contextmenu directionality ", - "emoticons fullpage fullscreen hr image insertdatetime layer legacyoutput", - "link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace", - "tabfocus table template textcolor visualblocks visualchars wordcount"] - } - tinymce.init({selector: elem, - theme: "modern", - plugins: plugins, - //content_css: "css/style.css", - toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | print preview media fullpage | forecolor backcolor emoticons", - style_formats: [ - {title: 'Header 2', block: 'h2', classes: 'page-header'}, - {title: 'Header 3', block: 'h3', classes: 'page-header'}, - {title: 'Header 4', block: 'h4', classes: 'page-header'}, - {title: 'Header 5', block: 'h5', classes: 'page-header'}, - {title: 'Header 6', block: 'h6', classes: 'page-header'}, - {title: 'Bold text', inline: 'b'}, - {title: 'Red text', inline: 'span', styles: {color: '#ff0000'}}, - {title: 'Red header', block: 'h1', styles: {color: '#ff0000'}}, - {title: 'Example 1', inline: 'span', classes: 'example1'}, - {title: 'Example 2', inline: 'span', classes: 'example2'}, - {title: 'Table styles'}, - {title: 'Table row 1', selector: 'tr', classes: 'tablerow1'} - ] - }); -} -// -// Helper for draw Sparkline plots on Dashboard page -// -function SparkLineDrawBarGraph(elem, arr, color){ - if (color) { - var stacked_color = color; - } - else { - stacked_color = '#6AA6D6' - } - elem.sparkline(arr, { type: 'bar', barWidth: 7, highlightColor: '#000', barSpacing: 2, height: 40, stackedBarColor: stacked_color}); -} -// -// Helper for open ModalBox with requested header, content and bottom -// -// -function OpenModalBox(header, inner, bottom){ - var modalbox = $('#modalbox'); - modalbox.find('.modal-header-name span').html(header); - modalbox.find('.devoops-modal-inner').html(inner); - modalbox.find('.devoops-modal-bottom').html(bottom); - modalbox.fadeIn('fast'); - $('body').addClass("body-expanded"); -} -// -// Close modalbox -// -// -function CloseModalBox(){ - var modalbox = $('#modalbox'); - modalbox.fadeOut('fast', function(){ - modalbox.find('.modal-header-name span').children().remove(); - modalbox.find('.devoops-modal-inner').children().remove(); - modalbox.find('.devoops-modal-bottom').children().remove(); - $('body').removeClass("body-expanded"); - }); -} -// -// Beauty tables plugin (navigation in tables with inputs in cell) -// Created by DevOOPS. -// -(function( $ ){ - $.fn.beautyTables = function() { - var table = this; - var string_fill = false; - this.on('keydown', function(event) { - var target = event.target; - var tr = $(target).closest("tr"); - var col = $(target).closest("td"); - if (target.tagName.toUpperCase() == 'INPUT'){ - if (event.shiftKey === true){ - switch(event.keyCode) { - case 37: // left arrow - col.prev().children("input[type=text]").focus(); - break; - case 39: // right arrow - col.next().children("input[type=text]").focus(); - break; - case 40: // down arrow - if (string_fill==false){ - tr.next().find('td:eq('+col.index()+') input[type=text]').focus(); - } - break; - case 38: // up arrow - if (string_fill==false){ - tr.prev().find('td:eq('+col.index()+') input[type=text]').focus(); - } - break; - } - } - if (event.ctrlKey === true){ - switch(event.keyCode) { - case 37: // left arrow - tr.find('td:eq(1)').find("input[type=text]").focus(); - break; - case 39: // right arrow - tr.find('td:last-child').find("input[type=text]").focus(); - break; - case 40: // down arrow - if (string_fill==false){ - table.find('tr:last-child td:eq('+col.index()+') input[type=text]').focus(); - } - break; - case 38: // up arrow - if (string_fill==false){ - table.find('tr:eq(1) td:eq('+col.index()+') input[type=text]').focus(); - } - break; - } - } - if (event.keyCode == 13 || event.keyCode == 9 ) { - event.preventDefault(); - col.next().find("input[type=text]").focus(); - } - if (string_fill==false){ - if (event.keyCode == 34) { - event.preventDefault(); - table.find('tr:last-child td:last-child').find("input[type=text]").focus();} - if (event.keyCode == 33) { - event.preventDefault(); - table.find('tr:eq(1) td:eq(1)').find("input[type=text]").focus();} - } - } - }); - table.find("input[type=text]").each(function(){ - $(this).on('blur', function(event){ - var target = event.target; - var col = $(target).parents("td"); - if(table.find("input[name=string-fill]").prop("checked")==true) { - col.nextAll().find("input[type=text]").each(function() { - $(this).val($(target).val()); - }); - } - }); - }) -}; -})( jQuery ); -// -// Beauty Hover Plugin (backlight row and col when cell in mouseover) -// -// -(function( $ ){ - $.fn.beautyHover = function() { - var table = this; - table.on('mouseover','td', function() { - var idx = $(this).index(); - var rows = $(this).closest('table').find('tr'); - rows.each(function(){ - $(this).find('td:eq('+idx+')').addClass('beauty-hover'); - }); - }) - .on('mouseleave','td', function(e) { - var idx = $(this).index(); - var rows = $(this).closest('table').find('tr'); - rows.each(function(){ - $(this).find('td:eq('+idx+')').removeClass('beauty-hover'); - }); - }); - }; -})( jQuery ); -// -// Function convert values of inputs in table to JSON data -// -// -function Table2Json(table) { - var result = {}; - table.find("tr").each(function () { - var oneRow = []; - var varname = $(this).index(); - $("td", this).each(function (index) { if (index != 0) {oneRow.push($("input", this).val());}}); - result[varname] = oneRow; - }); - var result_json = JSON.stringify(result); - OpenModalBox('Table to JSON values', result_json); -} -/*------------------------------------------- - Demo graphs for Flot Chart page (charts_flot.html) ----------------------------------------------*/ -// -// Graph1 created in element with id = box-one-content -// -function FlotGraph1(){ - // We use an inline data source in the example, usually data would - // be fetched from a server - var data = [], - totalPoints = 300; - function getRandomData() { - if (data.length > 0) - data = data.slice(1); - // Do a random walk - while (data.length < totalPoints) { - var prev = data.length > 0 ? data[data.length - 1] : 50, - y = prev + Math.random() * 10 - 5; - if (y < 0) { - y = 0; - } else if (y > 100) { - y = 100; - } - data.push(y); - } - // Zip the generated y values with the x values - var res = []; - for (var i = 0; i < data.length; ++i) { - res.push([i, data[i]]) - } - return res; - } - var updateInterval = 30; - var plot = $.plot("#box-one-content", [ getRandomData() ], { - series: { - shadowSize: 0 // Drawing is faster without shadows - }, - yaxis: {min: 0, max: 100}, - xaxis: {show: false } - }); - function update() { - plot.setData([getRandomData()]); - // Since the axes don't change, we don't need to call plot.setupGrid() - plot.draw(); - setTimeout(update, updateInterval); - } - update(); -} -// -// Graph2 created in element with id = box-two-content -// -function FlotGraph2(){ - var sin = []; - var cos = []; - var tan = []; - for (var i = 0; i < 14; i += 0.1) { - sin.push([i, Math.sin(i)]); - cos.push([i, Math.cos(i)]); - tan.push([i, Math.tan(i)/4]); - } - var plot = $.plot("#box-two-content", [ - { data: sin, label: "sin(x) = -0.00"}, - { data: cos, label: "cos(x) = -0.00" }, - { data: tan, label: "tan(x)/4 = -0.00" } - ], { - series: { - lines: { - show: true - } - }, - crosshair: { - mode: "x" - }, - grid: { - hoverable: true, - autoHighlight: false - }, - yaxis: { - min: -5.2, - max: 5.2 - } - }); - var legends = $("#box-two-content .legendLabel"); - legends.each(function () { - // fix the widths so they don't jump around - $(this).css('width', $(this).width()); - }); - var updateLegendTimeout = null; - var latestPosition = null; - function updateLegend() { - updateLegendTimeout = null; - var pos = latestPosition; - var axes = plot.getAxes(); - if (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max || - pos.y < axes.yaxis.min || pos.y > axes.yaxis.max) { - return; - } - var i, j, dataset = plot.getData(); - for (i = 0; i < dataset.length; ++i) { - var series = dataset[i]; - // Find the nearest points, x-wise - for (j = 0; j < series.data.length; ++j) { - if (series.data[j][0] > pos.x) { - break; - } - } - // Now Interpolate - var y, p1 = series.data[j - 1], p2 = series.data[j]; - if (p1 == null) { - y = p2[1]; - } else if (p2 == null) { - y = p1[1]; - } else { - y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]); - } - legends.eq(i).text(series.label.replace(/=.*/, "= " + y.toFixed(2))); - } - } - $("#box-two-content").bind("plothover", function (event, pos, item) { - latestPosition = pos; - if (!updateLegendTimeout) { - updateLegendTimeout = setTimeout(updateLegend, 50); - } - }); -} -// -// Graph3 created in element with id = box-three-content -// -function FlotGraph3(){ - var d1 = []; - for (var i = 0; i <= 60; i += 1) { - d1.push([i, parseInt(Math.random() * 30 - 10)]); - } - function plotWithOptions(t) { - $.plot("#box-three-content", [{ - data: d1, - color: "rgb(30, 180, 20)", - threshold: { - below: t, - color: "rgb(200, 20, 30)" - }, - lines: { - steps: true - } - }]); - } - plotWithOptions(0); -} -// -// Graph4 created in element with id = box-four-content -// -function FlotGraph4(){ - var d1 = []; - for (var i = 0; i < 14; i += 0.5) { - d1.push([i, Math.sin(i)]); - } - var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; - var d3 = []; - for (var i = 0; i < 14; i += 0.5) { - d3.push([i, Math.cos(i)]); - } - var d4 = []; - for (var i = 0; i < 14; i += 0.1) { - d4.push([i, Math.sqrt(i * 10)]); - } - var d5 = []; - for (var i = 0; i < 14; i += 0.5) { - d5.push([i, Math.sqrt(i)]); - } - var d6 = []; - for (var i = 0; i < 14; i += 0.5 + Math.random()) { - d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]); - } - $.plot("#box-four-content", [{ - data: d1, - lines: { show: true, fill: true } - }, { - data: d2, - bars: { show: true } - }, { - data: d3, - points: { show: true } - }, { - data: d4, - lines: { show: true } - }, { - data: d5, - lines: { show: true }, - points: { show: true } - }, { - data: d6, - lines: { show: true, steps: true } - }]); -} -/*------------------------------------------- - Demo graphs for Morris Chart page (charts_morris.html) ----------------------------------------------*/ -// -// Graph1 created in element with id = morris-chart-1 -// -function MorrisChart1(){ - var day_data = [ - {"period": "2013-10-01", "licensed": 3407, "sorned": 660}, - {"period": "2013-09-30", "licensed": 3351, "sorned": 629}, - {"period": "2013-09-29", "licensed": 3269, "sorned": 618}, - {"period": "2013-09-20", "licensed": 3246, "sorned": 661}, - {"period": "2013-09-19", "licensed": 3257, "sorned": 667}, - {"period": "2013-09-18", "licensed": 3248, "sorned": 627}, - {"period": "2013-09-17", "licensed": 3171, "sorned": 660}, - {"period": "2013-09-16", "licensed": 3171, "sorned": 676}, - {"period": "2013-09-15", "licensed": 3201, "sorned": 656}, - {"period": "2013-09-10", "licensed": 3215, "sorned": 622} - ]; - Morris.Bar({ - element: 'morris-chart-1', - data: day_data, - xkey: 'period', - ykeys: ['licensed', 'sorned'], - labels: ['Licensed', 'SORN'], - xLabelAngle: 60 - }); -} -// -// Graph2 created in element with id = morris-chart-2 -// -function MorrisChart2(){ - // Use Morris.Area instead of Morris.Line - Morris.Area({ - element: 'morris-chart-2', - data: [ - {x: '2011 Q1', y: 3, z: 3, m: 1}, - {x: '2011 Q2', y: 2, z: 0, m: 7}, - {x: '2011 Q3', y: 2, z: 5, m: 2}, - {x: '2011 Q4', y: 4, z: 4, m: 5}, - {x: '2012 Q1', y: 6, z: 1, m: 11}, - {x: '2012 Q2', y: 4, z: 4, m: 3}, - {x: '2012 Q3', y: 4, z: 4, m: 7}, - {x: '2012 Q4', y: 4, z: 4, m: 9} - ], - xkey: 'x', - ykeys: ['y', 'z', 'm'], - labels: ['Y', 'Z', 'M'] - }) - .on('click', function(i, row){ - console.log(i, row); - }); -} -// -// Graph3 created in element with id = morris-chart-3 -// -function MorrisChart3(){ - var decimal_data = []; - for (var x = 0; x <= 360; x += 10) { - decimal_data.push({ x: x, y: Math.sin(Math.PI * x / 180).toFixed(4), z: Math.cos(Math.PI * x / 180).toFixed(4) }); - } - Morris.Line({ - element: 'morris-chart-3', - data: decimal_data, - xkey: 'x', - ykeys: ['y', 'z'], - labels: ['sin(x)', 'cos(x)'], - parseTime: false, - goals: [-1, 0, 1] - }); -} -// -// Graph4 created in element with id = morris-chart-4 -// -function MorrisChart4(){ - // Use Morris.Bar - Morris.Bar({ - element: 'morris-chart-4', - data: [ - {x: '2011 Q1', y: 0}, - {x: '2011 Q2', y: 1}, - {x: '2011 Q3', y: 2}, - {x: '2011 Q4', y: 3}, - {x: '2012 Q1', y: 4}, - {x: '2012 Q2', y: 5}, - {x: '2012 Q3', y: 6}, - {x: '2012 Q4', y: 7}, - {x: '2013 Q1', y: 8}, - {x: '2013 Q2', y: 7}, - {x: '2013 Q3', y: 6}, - {x: '2013 Q4', y: 5}, - {x: '2014 Q1', y: 9} - ], - xkey: 'x', - ykeys: ['y'], - labels: ['Y'], - barColors: function (row, series, type) { - if (type === 'bar') { - var red = Math.ceil(255 * row.y / this.ymax); - return 'rgb(' + red + ',0,0)'; - } - else { - return '#000'; - } - } - }); -} -// -// Graph5 created in element with id = morris-chart-5 -// -function MorrisChart5(){ - Morris.Area({ - element: 'morris-chart-5', - data: [ - {period: '2010 Q1', iphone: 2666, ipad: null, itouch: 2647}, - {period: '2010 Q2', iphone: 2778, ipad: 2294, itouch: 2441}, - {period: '2010 Q3', iphone: 4912, ipad: 1969, itouch: 2501}, - {period: '2010 Q4', iphone: 3767, ipad: 3597, itouch: 5689}, - {period: '2011 Q1', iphone: 6810, ipad: 1914, itouch: 2293}, - {period: '2011 Q2', iphone: 5670, ipad: 4293, itouch: 1881}, - {period: '2011 Q3', iphone: 4820, ipad: 3795, itouch: 1588}, - {period: '2011 Q4', iphone: 15073, ipad: 5967, itouch: 5175}, - {period: '2012 Q1', iphone: 10687, ipad: 4460, itouch: 2028}, - {period: '2012 Q2', iphone: 8432, ipad: 5713, itouch: 1791} - ], - xkey: 'period', - ykeys: ['iphone', 'ipad', 'itouch'], - labels: ['iPhone', 'iPad', 'iPod Touch'], - pointSize: 2, - hideHover: 'auto' - }); -} -/*------------------------------------------- - Demo graphs for Google Chart page (charts_google.html) ----------------------------------------------*/ -// -// One function for create all graphs on Google Chart page -// -function DrawAllCharts(){ - // Chart 1 - var chart1_data = [ - ['Smartphones', 'PC', 'Notebooks', 'Monitors','Routers', 'Switches' ], - ['01.01.2014', 1234, 2342, 344, 232,131], - ['02.01.2014', 1254, 232, 314, 232, 331], - ['03.01.2014', 2234, 342, 298, 232, 665], - ['04.01.2014', 2234, 42, 559, 232, 321], - ['05.01.2014', 1999, 82, 116, 232, 334], - ['06.01.2014', 1634, 834, 884, 232, 191], - ['07.01.2014', 321, 342, 383, 232, 556], - ['08.01.2014', 845, 112, 499, 232, 731] - ]; - var chart1_options = { - title: 'Sales of company', - hAxis: {title: 'Date', titleTextStyle: {color: 'red'}}, - backgroundColor: '#fcfcfc', - vAxis: {title: 'Quantity', titleTextStyle: {color: 'blue'}} - }; - var chart1_element = 'google-chart-1'; - var chart1_type = google.visualization.ColumnChart; - drawGoogleChart(chart1_data, chart1_options, chart1_element, chart1_type); - // Chart 2 - var chart2_data = [ - ['Height', 'Width'], - ['Samsung', 74.5], - ['Apple', 31.24], - ['LG', 12.10], - ['Huawei', 11.14], - ['Sony', 8.3], - ['Nokia', 7.4], - ['Blackberry', 6.8], - ['HTC', 6.63], - ['Motorola', 3.5], - ['Other', 43.15] - ]; - var chart2_options = { - title: 'Smartphone marketshare 2Q 2013', - backgroundColor: '#fcfcfc' - }; - var chart2_element = 'google-chart-2'; - var chart2_type = google.visualization.PieChart; - drawGoogleChart(chart2_data, chart2_options, chart2_element, chart2_type); - // Chart 3 - var chart3_data = [ - ['Age', 'Weight'], - [ 8, 12], - [ 4, 5.5], - [ 11, 14], - [ 4, 5], - [ 3, 3.5], - [ 6.5, 7] - ]; - var chart3_options = { - title: 'Age vs. Weight comparison', - hAxis: {title: 'Age', minValue: 0, maxValue: 15}, - vAxis: {title: 'Weight', minValue: 0, maxValue: 15}, - legend: 'none', - backgroundColor: '#fcfcfc' - }; - var chart3_element = 'google-chart-3'; - var chart3_type = google.visualization.ScatterChart; - drawGoogleChart(chart3_data, chart3_options, chart3_element, chart3_type); - // Chart 4 - var chart4_data = [ - ['ID', 'Life Expectancy', 'Fertility Rate', 'Region', 'Population'], - ['CAN', 80.66, 1.67, 'North America', 33739900], - ['DEU', 79.84, 1.36, 'Europe', 81902307], - ['DNK', 78.6, 1.84, 'Europe', 5523095], - ['EGY', 72.73, 2.78, 'Middle East', 79716203], - ['GBR', 80.05, 2, 'Europe', 61801570], - ['IRN', 72.49, 1.7, 'Middle East', 73137148], - ['IRQ', 68.09, 4.77, 'Middle East', 31090763], - ['ISR', 81.55, 2.96, 'Middle East', 7485600], - ['RUS', 68.6, 1.54, 'Europe', 141850000], - ['USA', 78.09, 2.05, 'North America', 307007000] - ]; - var chart4_options = { - title: 'Correlation between life expectancy, fertility rate and population of some world countries (2010)', - hAxis: {title: 'Life Expectancy'}, - vAxis: {title: 'Fertility Rate'}, - backgroundColor: '#fcfcfc', - bubble: {textStyle: {fontSize: 11}} - }; - var chart4_element = 'google-chart-4'; - var chart4_type = google.visualization.BubbleChart; - drawGoogleChart(chart4_data, chart4_options, chart4_element, chart4_type); - // Chart 5 - var chart5_data = [ - ['Country', 'Popularity'], - ['Germany', 200], - ['United States', 300], - ['Brazil', 400], - ['Canada', 500], - ['France', 600], - ['RU', 700] - ]; - var chart5_options = { - backgroundColor: '#fcfcfc', - enableRegionInteractivity: true - }; - var chart5_element = 'google-chart-5'; - var chart5_type = google.visualization.GeoChart; - drawGoogleChart(chart5_data, chart5_options, chart5_element, chart5_type); - // Chart 6 - var chart6_data = [ - ['Year', 'Sales', 'Expenses'], - ['2004', 1000, 400], - ['2005', 1170, 460], - ['2006', 660, 1120], - ['2007', 1030, 540], - ['2008', 2080, 740], - ['2009', 1949, 690], - ['2010', 2334, 820] - ]; - var chart6_options = { - backgroundColor: '#fcfcfc', - title: 'Company Performance' - }; - var chart6_element = 'google-chart-6'; - var chart6_type = google.visualization.LineChart; - drawGoogleChart(chart6_data, chart6_options, chart6_element, chart6_type); - // Chart 7 - var chart7_data = [ - ['Task', 'Hours per Day'], - ['Work', 11], - ['Eat', 2], - ['Commute', 2], - ['Watch TV', 2], - ['Sleep', 7] - ]; - var chart7_options = { - backgroundColor: '#fcfcfc', - title: 'My Daily Activities', - pieHole: 0.4 - }; - var chart7_element = 'google-chart-7'; - var chart7_type = google.visualization.PieChart; - drawGoogleChart(chart7_data, chart7_options, chart7_element, chart7_type); - // Chart 8 - var chart8_data = [ - ['Generation', 'Descendants'], - [0, 1], [1, 33], [2, 269], [3, 2013] - ]; - var chart8_options = { - backgroundColor: '#fcfcfc', - title: 'Descendants by Generation', - hAxis: {title: 'Generation', minValue: 0, maxValue: 3}, - vAxis: {title: 'Descendants', minValue: 0, maxValue: 2100}, - trendlines: { - 0: { - type: 'exponential', - visibleInLegend: true - } - } - }; - var chart8_element = 'google-chart-8'; - var chart8_type = google.visualization.ScatterChart; - drawGoogleChart(chart8_data, chart8_options, chart8_element, chart8_type); -} -/*------------------------------------------- - Demo graphs for xCharts page (charts_xcharts.html) ----------------------------------------------*/ -// -// Graph1 created in element with id = xchart-1 -// -function xGraph1(){ - var tt = document.createElement('div'), - leftOffset = -(~~$('html').css('padding-left').replace('px', '') + ~~$('body').css('margin-left').replace('px', '')), - topOffset = -32; - tt.className = 'ex-tooltip'; - document.body.appendChild(tt); - var data = { - "xScale": "time", - "yScale": "linear", - "main": [ - { - "className": ".xchart-class-1", - "data": [ - { - "x": "2012-11-05", - "y": 6 - }, - { - "x": "2012-11-06", - "y": 6 - }, - { - "x": "2012-11-07", - "y": 8 - }, - { - "x": "2012-11-08", - "y": 3 - }, - { - "x": "2012-11-09", - "y": 4 - }, - { - "x": "2012-11-10", - "y": 9 - }, - { - "x": "2012-11-11", - "y": 6 - }, - { - "x": "2012-11-12", - "y": 16 - }, - { - "x": "2012-11-13", - "y": 4 - }, - { - "x": "2012-11-14", - "y": 9 - }, - { - "x": "2012-11-15", - "y": 2 - } - ] - } - ] - }; - var opts = { - "dataFormatX": function (x) { return d3.time.format('%Y-%m-%d').parse(x); }, - "tickFormatX": function (x) { return d3.time.format('%A')(x); }, - "mouseover": function (d, i) { - var pos = $(this).offset(); - $(tt).text(d3.time.format('%A')(d.x) + ': ' + d.y) - .css({top: topOffset + pos.top, left: pos.left + leftOffset}) - .show(); - }, - "mouseout": function (x) { - $(tt).hide(); - } - }; - var myChart = new xChart('line-dotted', data, '#xchart-1', opts); -} -// -// Graph2 created in element with id = xchart-2 -// -function xGraph2(){ - var data = { - "xScale": "ordinal", - "yScale": "linear", - "main": [ - { - "className": ".xchart-class-2", - "data": [ - { - "x": "Apple", - "y": 575 - }, - { - "x": "Facebook", - "y": 163 - }, - { - "x": "Microsoft", - "y": 303 - }, - { - "x": "Cisco", - "y": 121 - }, - { - "x": "Google", - "y": 393 - } - ] - } - ] - }; - var myChart = new xChart('bar', data, '#xchart-2'); -} -// -// Graph3 created in element with id = xchart-3 -// -function xGraph3(){ - var data = { - "xScale": "time", - "yScale": "linear", - "type": "line", - "main": [ - { - "className": ".xchart-class-3", - "data": [ - { - "x": "2012-11-05", - "y": 1 - }, - { - "x": "2012-11-06", - "y": 6 - }, - { - "x": "2012-11-07", - "y": 13 - }, - { - "x": "2012-11-08", - "y": -3 - }, - { - "x": "2012-11-09", - "y": -4 - }, - { - "x": "2012-11-10", - "y": 9 - }, - { - "x": "2012-11-11", - "y": 6 - }, - { - "x": "2012-11-12", - "y": 7 - }, - { - "x": "2012-11-13", - "y": -2 - }, - { - "x": "2012-11-14", - "y": -7 - } - ] - } - ] - }; - var opts = { - "dataFormatX": function (x) { return d3.time.format('%Y-%m-%d').parse(x); }, - "tickFormatX": function (x) { return d3.time.format('%A')(x); } - }; - var myChart = new xChart('line', data, '#xchart-3', opts); -} -/*------------------------------------------- - Demo graphs for CoinDesk page (charts_coindesk.html) ----------------------------------------------*/ -// -// Main function for CoinDesk API Page -// (we get JSON data and make 4 graph from this) -// -function CoinDeskGraph(){ - var dates = PrettyDates(); - var startdate = dates[0]; - var enddate = dates[1]; - // Load JSON data from CoinDesk API - var jsonURL = 'http://api.coindesk.com/v1/bpi/historical/close.json?start='+startdate+'&end='+enddate; - $.getJSON(jsonURL, function(result){ - // Create array of data for xChart - $.each(result.bpi, function(key, val){ - xchart_data.push({'x': key,'y':val}); - }); - // Set handler for resize and create xChart plot - var graphXChartResize; - $('#coindesk-xchart').resize(function(){ - clearTimeout(graphXChartResize); - graphXChartResize = setTimeout(DrawCoinDeskXCharts, 500); - }); - DrawCoinDeskXCharts(); - // Create array of data for Google Chart - $.each(result.bpi, function(key, val){ - google_data.push([key,val]); - }); - // Set handler for resize and create Google Chart plot - var graphGChartResize; - $('#coindesk-google-chart').resize(function(){ - clearTimeout(graphGChartResize); - graphGChartResize = setTimeout(DrawCoinDeskGoogleCharts, 500); - }); - DrawCoinDeskGoogleCharts(); - // Create array of data for Flot and Sparkline - $.each(result.bpi, function(key, val){ - var parseDate=key; - parseDate=parseDate.split("-"); - var newDate=parseDate[1]+"/"+parseDate[2]+"/"+parseDate[0]; - var new_date = new Date(newDate).getTime(); - exchange_rate.push([new_date,val]); - }); - // Create Flot plot (not need bind to resize, cause Flot use plugin 'resize') - DrawCoinDeskFlot(); - // Set handler for resize and create Sparkline plot - var graphSparklineResize; - $('#coindesk-sparklines').resize(function(){ - clearTimeout(graphSparklineResize); - graphSparklineResize = setTimeout(DrawCoinDeskSparkLine, 500); - }); - DrawCoinDeskSparkLine(); - }); -} -// -// Draw Sparkline Graph on Coindesk page -// -function DrawCoinDeskSparkLine(){ - $('#coindesk-sparklines').sparkline(exchange_rate, { height: '100%', width: '100%' }); -} -// -// Draw xChart Graph on Coindesk page -// -function DrawCoinDeskXCharts(){ - var data = { - "xScale": "ordinal", - "yScale": "linear", - "main": [ - { - "className": ".pizza", - "data": xchart_data - } - ] - }; - var myChart = new xChart('line-dotted', data, '#coindesk-xchart'); -} -// -// Draw Flot Graph on Coindesk page -// -function DrawCoinDeskFlot(){ - var data1 = [ - { data: exchange_rate, label: "Bitcoin exchange rate ($)" } - ]; - var options = { - canvas: true, - xaxes: [ - { mode: "time" } - ], - yaxes: [ - { min: 0 }, - { - position: "right", - alignTicksWithAxis: 1, - tickFormatter: function (value, axis) { - return value.toFixed(axis.tickDecimals) + "€"; - } - } - ], - legend: { position: "sw" } - }; - $.plot("#coindesk-flot", data1, options); -} -// -// Draw Google Chart Graph on Coindesk page -// -function DrawCoinDeskGoogleCharts(){ - var google_options = { - backgroundColor: '#fcfcfc', - title: 'Coindesk Exchange Rate' - }; - var google_element = 'coindesk-google-chart'; - var google_type = google.visualization.LineChart; - drawGoogleChart(google_data, google_options, google_element, google_type); -} -/*------------------------------------------- - Scripts for DataTables page (tables_datatables.html) ----------------------------------------------*/ -// -// Function for table, located in element with id = datatable-1 -// -function TestTable1(){ - $('#datatable-1').dataTable( { - "aaSorting": [[ 0, "asc" ]], - "sDom": "<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>", - "sPaginationType": "bootstrap", - "oLanguage": { - "sSearch": "", - "sLengthMenu": '_MENU_' - } - }); -} -// -// Function for table, located in element with id = datatable-2 -// -function TestTable2(){ - var asInitVals = []; - var oTable = $('#datatable-2').dataTable( { - "aaSorting": [[ 0, "asc" ]], - "sDom": "<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>", - "sPaginationType": "bootstrap", - "oLanguage": { - "sSearch": "", - "sLengthMenu": '_MENU_' - }, - bAutoWidth: false - }); - var header_inputs = $("#datatable-2 thead input"); - header_inputs.on('keyup', function(){ - /* Filter on the column (the index) of this element */ - oTable.fnFilter( this.value, header_inputs.index(this) ); - }) - .on('focus', function(){ - if ( this.className == "search_init" ){ - this.className = ""; - this.value = ""; - } - }) - .on('blur', function (i) { - if ( this.value == "" ){ - this.className = "search_init"; - this.value = asInitVals[header_inputs.index(this)]; - } - }); - header_inputs.each( function (i) { - asInitVals[i] = this.value; - }); -} -// -// Function for table, located in element with id = datatable-3 -// -function TestTable3(){ - $('#datatable-3').dataTable( { - "aaSorting": [[ 0, "asc" ]], - "sDom": "T<'box-content'<'col-sm-6'f><'col-sm-6 text-right'l><'clearfix'>>rt<'box-content'<'col-sm-6'i><'col-sm-6 text-right'p><'clearfix'>>", - "sPaginationType": "bootstrap", - "oLanguage": { - "sSearch": "", - "sLengthMenu": '_MENU_' - }, - "oTableTools": { - "sSwfPath": "plugins/datatables/copy_csv_xls_pdf.swf", - "aButtons": [ - "copy", - "print", - { - "sExtends": "collection", - "sButtonText": 'Save ', - "aButtons": [ "csv", "xls", "pdf" ] - } - ] - } - }); -} -/*------------------------------------------- - Functions for Dashboard page (dashboard.html) ----------------------------------------------*/ -// -// Helper for random change data (only test data for Sparkline plots) -// -function SmallChangeVal(val) { - var new_val = Math.floor(100*Math.random()); - var plusOrMinus = Math.random() < 0.5 ? -1 : 1; - var result = val[0]+new_val*plusOrMinus; - if (parseInt(result) > 1000){ - return [val[0] - new_val] - } - if (parseInt(result) < 0){ - return [val[0] + new_val] - } - return [result]; -} -// -// Make array of random data -// -function SparklineTestData(){ - var arr = []; - for (var i=1; i<9; i++){ - arr.push([Math.floor(1000*Math.random())]) - } - return arr; -} -// -// Redraw Knob charts on Dashboard (panel- servers) -// -function RedrawKnob(elem){ - elem.animate({ - value: Math.floor(100*Math.random()) - },{ - duration: 3000, - easing:'swing', - progress: function() - { - $(this).val(parseInt(Math.ceil(elem.val()))).trigger('change'); - } - }); -} -// -// Draw 3 Sparkline plot in Dashboard header -// -function SparklineLoop(){ - SparkLineDrawBarGraph($('#sparkline-1'), sparkline_arr_1.map(SmallChangeVal)); - SparkLineDrawBarGraph($('#sparkline-2'), sparkline_arr_2.map(SmallChangeVal), '#7BC5D3'); - SparkLineDrawBarGraph($('#sparkline-3'), sparkline_arr_3.map(SmallChangeVal), '#B25050'); -} -// -// Draw Morris charts on Dashboard (panel- Statistics + 3 donut) -// -function MorrisDashboard(){ - Morris.Line({ - element: 'stat-graph', - data: [ - {"period": "2014-01", "Win8": 13.4, "Win7": 55.3, 'Vista': 1.5, 'NT': 0.3, 'XP':11, 'Linux': 4.9, 'Mac': 9.6 , 'Mobile':4}, - {"period": "2013-12", "Win8": 10, "Win7": 55.9, 'Vista': 1.5, 'NT': 3.1, 'XP':11.6, 'Linux': 4.8, 'Mac': 9.2 , 'Mobile':3.8}, - {"period": "2013-11", "Win8": 8.6, "Win7": 56.4, 'Vista': 1.6, 'NT': 3.7, 'XP':11.7, 'Linux': 4.8, 'Mac': 9.6 , 'Mobile':3.7}, - {"period": "2013-10", "Win8": 9.9, "Win7": 56.7, 'Vista': 1.6, 'NT': 1.4, 'XP':12.4, 'Linux': 4.9, 'Mac': 9.6 , 'Mobile':3.3}, - {"period": "2013-09", "Win8": 10.2, "Win7": 56.8, 'Vista': 1.6, 'NT': 0.4, 'XP':13.5, 'Linux': 4.8, 'Mac': 9.3 , 'Mobile':3.3}, - {"period": "2013-08", "Win8": 9.6, "Win7": 55.9, 'Vista': 1.7, 'NT': 0.4, 'XP':14.7, 'Linux': 5, 'Mac': 9.2 , 'Mobile':3.4}, - {"period": "2013-07", "Win8": 9, "Win7": 56.2, 'Vista': 1.8, 'NT': 0.4, 'XP':15.8, 'Linux': 4.9, 'Mac': 8.7 , 'Mobile':3.2}, - {"period": "2013-06", "Win8": 8.6, "Win7": 56.3, 'Vista': 2, 'NT': 0.4, 'XP':15.4, 'Linux': 4.9, 'Mac': 9.1 , 'Mobile':3.2}, - {"period": "2013-05", "Win8": 7.9, "Win7": 56.4, 'Vista': 2.1, 'NT': 0.4, 'XP':15.7, 'Linux': 4.9, 'Mac': 9.7 , 'Mobile':2.6}, - {"period": "2013-04", "Win8": 7.3, "Win7": 56.4, 'Vista': 2.2, 'NT': 0.4, 'XP':16.4, 'Linux': 4.8, 'Mac': 9.7 , 'Mobile':2.2}, - {"period": "2013-03", "Win8": 6.7, "Win7": 55.9, 'Vista': 2.4, 'NT': 0.4, 'XP':17.6, 'Linux': 4.7, 'Mac': 9.5 , 'Mobile':2.3}, - {"period": "2013-02", "Win8": 5.7, "Win7": 55.3, 'Vista': 2.4, 'NT': 0.4, 'XP':19.1, 'Linux': 4.8, 'Mac': 9.6 , 'Mobile':2.2}, - {"period": "2013-01", "Win8": 4.8, "Win7": 55.3, 'Vista': 2.6, 'NT': 0.5, 'XP':19.9, 'Linux': 4.8, 'Mac': 9.3 , 'Mobile':2.2} - ], - xkey: 'period', - ykeys: ['Win8', 'Win7','Vista','NT','XP', 'Linux', 'Mac', 'Mobile'], - labels: ['Win8', 'Win7','Vista','NT','XP', 'Linux', 'Mac', 'Mobile'] - }); - Morris.Donut({ - element: 'morris_donut_1', - data: [ - {value: 70, label: 'pay', formatted: 'at least 70%' }, - {value: 15, label: 'client', formatted: 'approx. 15%' }, - {value: 10, label: 'buy', formatted: 'approx. 10%' }, - {value: 5, label: 'hosted', formatted: 'at most 5%' } - ], - formatter: function (x, data) { return data.formatted; } - }); - Morris.Donut({ - element: 'morris_donut_2', - data: [ - {value: 20, label: 'office', formatted: 'current' }, - {value: 35, label: 'store', formatted: 'approx. 35%' }, - {value: 20, label: 'shop', formatted: 'approx. 20%' }, - {value: 25, label: 'cars', formatted: 'at most 25%' } - ], - formatter: function (x, data) { return data.formatted; } - }); - Morris.Donut({ - element: 'morris_donut_3', - data: [ - {value: 17, label: 'current', formatted: 'current' }, - {value: 22, label: 'week', formatted: 'last week' }, - {value: 10, label: 'month', formatted: 'last month' }, - {value: 25, label: 'period', formatted: 'period' }, - {value: 25, label: 'year', formatted: 'this year' } - ], - formatter: function (x, data) { return data.formatted; } - }); -} -// -// Draw SparkLine example Charts for Dashboard (table- Tickers) -// -function DrawSparklineDashboard(){ - SparklineLoop(); - setInterval(SparklineLoop, 1000); - var sparkline_clients = [[309],[223], [343], [652], [455], [18], [912],[15]]; - $('.bar').each(function(){ - $(this).sparkline(sparkline_clients.map(SmallChangeVal), {type: 'bar', barWidth: 5, highlightColor: '#000', barSpacing: 2, height: 30, stackedBarColor: '#6AA6D6'}); - }); - var sparkline_table = [ [1,341], [2,464], [4,564], [5,235], [6,335], [7,535], [8,642], [9,342], [10,765] ]; - $('.td-graph').each(function(){ - var arr = $.map( sparkline_table, function(val, index) { - return [[val[0], SmallChangeVal([val[1]])]]; - }); - $(this).sparkline( arr , - {defaultPixelsPerValue: 10, minSpotColor: null, maxSpotColor: null, spotColor: null, - fillColor: false, lineWidth: 2, lineColor: '#5A8DB6'}); - }); -} -// -// Draw Knob Charts for Dashboard (for servers) -// -function DrawKnobDashboard(){ - var srv_monitoring_selectors = [ - $("#knob-srv-1"),$("#knob-srv-2"),$("#knob-srv-3"), - $("#knob-srv-4"),$("#knob-srv-5"),$("#knob-srv-6") - ]; - srv_monitoring_selectors.forEach(DrawKnob); - setInterval(function(){ - srv_monitoring_selectors.forEach(RedrawKnob); - }, 3000); -} -/*------------------------------------------- - Function for File upload page (form_file_uploader.html) ----------------------------------------------*/ -function FileUpload(){ - $('#bootstrapped-fine-uploader').fineUploader({ - template: 'qq-template-bootstrap', - classes: { - success: 'alert alert-success', - fail: 'alert alert-error' - }, - thumbnails: { - placeholders: { - waitingPath: "assets/waiting-generic.png", - notAvailablePath: "assets/not_available-generic.png" - } - }, - request: { - endpoint: 'server/handleUploads' - }, - validation: { - allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'] - } - }); -} -/*------------------------------------------- - Function for OpenStreetMap page (maps.html) ----------------------------------------------*/ -// -// Load GeoIP JSON data and draw 3 maps -// -function LoadTestMap(){ - $.getJSON("http://www.telize.com/geoip?callback=?", - function(json) { - var osmap = new OpenLayers.Layer.OSM("OpenStreetMap");//создание слоя карты - var googlestreets = new OpenLayers.Layer.Google("Google Streets", {numZoomLevels: 22,visibility: false}); - var googlesattelite = new OpenLayers.Layer.Google( "Google Sattelite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}); - var map1_layers = [googlestreets,osmap, googlesattelite]; - // Create map in element with ID - map-1 - var map1 = drawMap(json.longitude, json.latitude, "map-1", map1_layers); - $("#map-1").resize(function(){ setTimeout(map1.updateSize(), 500); }); - // Create map in element with ID - map-2 - var osmap1 = new OpenLayers.Layer.OSM("OpenStreetMap");//создание слоя карты - var map2_layers = [osmap1]; - var map2 = drawMap(json.longitude, json.latitude, "map-2", map2_layers); - $("#map-2").resize(function(){ setTimeout(map2.updateSize(), 500); }); - // Create map in element with ID - map-3 - var sattelite = new OpenLayers.Layer.Google( "Google Sattelite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}); - var map3_layers = [sattelite]; - var map3 = drawMap(json.longitude, json.latitude, "map-3", map3_layers); - $("#map-3").resize(function(){ setTimeout(map3.updateSize(), 500); }); - } - ); -} -/*------------------------------------------- - Function for Fullscreen Map page (map_fullscreen.html) ----------------------------------------------*/ -// -// Create Fullscreen Map -// -function FullScreenMap(){ - $.getJSON("http://www.telize.com/geoip?callback=?", - function(json) { - var osmap = new OpenLayers.Layer.OSM("OpenStreetMap");//создание слоя карты - var googlestreets = new OpenLayers.Layer.Google("Google Streets", {numZoomLevels: 22,visibility: false}); - var googlesattelite = new OpenLayers.Layer.Google( "Google Sattelite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}); - var map1_layers = [googlestreets,osmap, googlesattelite]; - var map_fs = drawMap(json.longitude, json.latitude, "full-map", map1_layers); - } - ); -} -/*------------------------------------------- - Function for Flickr Gallery page (gallery_flickr.html) ----------------------------------------------*/ -// -// Load data from Flicks, parse and create gallery -// -function displayFlickrImages(data){ - var res; - $.each(data.items, function(i,item){ - if (i >11) { return false;} - res = " + item.title + "; - $('#box-one-content').append(res); - }); - setTimeout(function(){ - $("#box-one-content").justifiedGallery({ - 'usedSuffix':'lt240', - 'justifyLastRow':true, - 'rowHeight':150, - 'fixedHeight':false, - 'captions':true, - 'margins':1 - }); - $('#box-one-content').fadeIn('slow'); - }, 100); -} -/*------------------------------------------- - Function for Form Layout page (form layouts.html) ----------------------------------------------*/ -// -// Example form validator function -// -function DemoFormValidator(){ - $('#defaultForm').bootstrapValidator({ - message: 'This value is not valid', - fields: { - username: { - message: 'The username is not valid', - validators: { - notEmpty: { - message: 'The username is required and can\'t be empty' - }, - stringLength: { - min: 6, - max: 30, - message: 'The username must be more than 6 and less than 30 characters long' - }, - regexp: { - regexp: /^[a-zA-Z0-9_\.]+$/, - message: 'The username can only consist of alphabetical, number, dot and underscore' - } - } - }, - country: { - validators: { - notEmpty: { - message: 'The country is required and can\'t be empty' - } - } - }, - acceptTerms: { - validators: { - notEmpty: { - message: 'You have to accept the terms and policies' - } - } - }, - email: { - validators: { - notEmpty: { - message: 'The email address is required and can\'t be empty' - }, - emailAddress: { - message: 'The input is not a valid email address' - } - } - }, - website: { - validators: { - uri: { - message: 'The input is not a valid URL' - } - } - }, - phoneNumber: { - validators: { - digits: { - message: 'The value can contain only digits' - } - } - }, - color: { - validators: { - hexColor: { - message: 'The input is not a valid hex color' - } - } - }, - zipCode: { - validators: { - usZipCode: { - message: 'The input is not a valid US zip code' - } - } - }, - password: { - validators: { - notEmpty: { - message: 'The password is required and can\'t be empty' - }, - identical: { - field: 'confirmPassword', - message: 'The password and its confirm are not the same' - } - } - }, - confirmPassword: { - validators: { - notEmpty: { - message: 'The confirm password is required and can\'t be empty' - }, - identical: { - field: 'password', - message: 'The password and its confirm are not the same' - } - } - }, - ages: { - validators: { - lessThan: { - value: 100, - inclusive: true, - message: 'The ages has to be less than 100' - }, - greaterThan: { - value: 10, - inclusive: false, - message: 'The ages has to be greater than or equals to 10' - } - } - } - } - }); -} -// -// Function for Dynamically Change input size on Form Layout page -// -function FormLayoutExampleInputLength(selector){ - var steps = [ - "col-sm-1", - "col-sm-2", - "col-sm-3", - "col-sm-4", - "col-sm-5", - "col-sm-6", - "col-sm-7", - "col-sm-8", - "col-sm-9", - "col-sm-10", - "col-sm-11", - "col-sm-12" - ]; - selector.slider({ - range: 'min', - value: 1, - min: 0, - max: 11, - step: 1, - slide: function(event, ui) { - if (ui.value < 1) { - return false; - } - var input = $("#form-styles"); - var f = input.parent(); - f.removeClass(); - f.addClass(steps[ui.value]); - input.attr("placeholder",'.'+steps[ui.value]); - } - }); -} -/*------------------------------------------- - Functions for Progressbar page (ui_progressbars.html) ----------------------------------------------*/ -// -// Function for Knob clock -// -function RunClock() { - var second = $(".second"); - var minute = $(".minute"); - var hour = $(".hour"); - var d = new Date(); - var s = d.getSeconds(); - var m = d.getMinutes(); - var h = d.getHours(); - if (h > 11) {h = h-12;} - $('#knob-clock-value').html(h+':'+m+':'+s); - second.val(s).trigger("change"); - minute.val(m).trigger("change"); - hour.val(h).trigger("change"); -} -// -// Function for create test sliders on Progressbar page -// -function CreateAllSliders(){ - $(".slider-default").slider(); - var slider_range_min_amount = $(".slider-range-min-amount"); - var slider_range_min = $(".slider-range-min"); - var slider_range_max = $(".slider-range-max"); - var slider_range_max_amount = $(".slider-range-max-amount"); - var slider_range = $(".slider-range"); - var slider_range_amount = $(".slider-range-amount"); - slider_range_min.slider({ - range: "min", - value: 37, - min: 1, - max: 700, - slide: function( event, ui ) { - slider_range_min_amount.val( "$" + ui.value ); - } - }); - slider_range_min_amount.val("$" + slider_range_min.slider( "value" )); - slider_range_max.slider({ - range: "max", - min: 1, - max: 100, - value: 2, - slide: function( event, ui ) { - slider_range_max_amount.val( ui.value ); - } - }); - slider_range_max_amount.val(slider_range_max.slider( "value" )); - slider_range.slider({ - range: true, - min: 0, - max: 500, - values: [ 75, 300 ], - slide: function( event, ui ) { - slider_range_amount.val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] ); - } - }); - slider_range_amount.val( "$" + slider_range.slider( "values", 0 ) + - " - $" + slider_range.slider( "values", 1 ) ); - $( "#equalizer > div.progress > div" ).each(function() { - // read initial values from markup and remove that - var value = parseInt( $( this ).text(), 10 ); - $( this ).empty().slider({ - value: value, - range: "min", - animate: true, - orientation: "vertical" - }); - }); -} -/*------------------------------------------- - Function for jQuery-UI page (ui_jquery-ui.html) ----------------------------------------------*/ -// -// Function for make all Date-Time pickers on page -// -function AllTimePickers(){ - $('#datetime_example').datetimepicker({}); - $('#time_example').timepicker({ - hourGrid: 4, - minuteGrid: 10, - timeFormat: 'hh:mm tt' - }); - $('#date3_example').datepicker({ numberOfMonths: 3, showButtonPanel: true}); - $('#date3-1_example').datepicker({ numberOfMonths: 3, showButtonPanel: true}); - $('#date_example').datepicker({}); -} -/*------------------------------------------- - Function for Calendar page (calendar.html) ----------------------------------------------*/ -// -// Example form validator function -// -function DrawCalendar(){ - /* initialize the external events - -----------------------------------------------------------------*/ - $('#external-events div.external-event').each(function() { - // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) - var eventObject = { - title: $.trim($(this).text()) // use the element's text as the event title - }; - // store the Event Object in the DOM element so we can get to it later - $(this).data('eventObject', eventObject); - // make the event draggable using jQuery UI - $(this).draggable({ - zIndex: 999, - revert: true, // will cause the event to go back to its - revertDuration: 0 // original position after the drag - }); - }); - /* initialize the calendar - -----------------------------------------------------------------*/ - var calendar = $('#calendar').fullCalendar({ - header: { - left: 'prev,next today', - center: 'title', - right: 'month,agendaWeek,agendaDay' - }, - selectable: true, - selectHelper: true, - select: function(start, end, allDay) { - var form = $('
    '+ - '
    '+ - 'Event name'+ - '
    '+ - ''+ - '
    '+ - ''+ - '
    '+ - ''+ - '
    '+ - '
    '+ - '
    '); - var buttons = $(''+ - ''); - OpenModalBox('Add event', form, buttons); - $('#event_cancel').on('click', function(){ - CloseModalBox(); - }); - $('#event_submit').on('click', function(){ - var new_event_name = $('#newevent_name').val(); - if (new_event_name != ''){ - calendar.fullCalendar('renderEvent', - { - title: new_event_name, - description: $('#newevent_desc').val(), - start: start, - end: end, - allDay: allDay - }, - true // make the event "stick" - ); - } - CloseModalBox(); - }); - calendar.fullCalendar('unselect'); - }, - editable: true, - droppable: true, // this allows things to be dropped onto the calendar !!! - drop: function(date, allDay) { // this function is called when something is dropped - // retrieve the dropped element's stored Event Object - var originalEventObject = $(this).data('eventObject'); - // we need to copy it, so that multiple events don't have a reference to the same object - var copiedEventObject = $.extend({}, originalEventObject); - // assign it the date that was reported - copiedEventObject.start = date; - copiedEventObject.allDay = allDay; - // render the event on the calendar - // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) - $('#calendar').fullCalendar('renderEvent', copiedEventObject, true); - // is the "remove after drop" checkbox checked? - if ($('#drop-remove').is(':checked')) { - // if so, remove the element from the "Draggable Events" list - $(this).remove(); - } - }, - eventRender: function (event, element, icon) { - if (event.description != "") { - element.attr('title', event.description); - } - }, - eventClick: function(calEvent, jsEvent, view) { - var form = $('
    '+ - '
    '+ - 'Event name'+ - '
    '+ - ''+ - '
    '+ - ''+ - '
    '+ - ''+ - '
    '+ - '
    '+ - '
    '); - var buttons = $(''+ - ''+ - ''); - OpenModalBox('Change event', form, buttons); - $('#event_cancel').on('click', function(){ - CloseModalBox(); - }); - $('#event_delete').on('click', function(){ - calendar.fullCalendar('removeEvents' , function(ev){ - return (ev._id == calEvent._id); - }); - CloseModalBox(); - }); - $('#event_change').on('click', function(){ - calEvent.title = $('#newevent_name').val(); - calEvent.description = $('#newevent_desc').val(); - calendar.fullCalendar('updateEvent', calEvent); - CloseModalBox() - }); - } - }); - $('#new-event-add').on('click', function(event){ - event.preventDefault(); - var event_name = $('#new-event-title').val(); - var event_description = $('#new-event-desc').val(); - if (event_name != ''){ - var event_template = $('
    '+event_name+'
    '); - $('#events-templates-header').after(event_template); - var eventObject = { - title: event_name, - description: event_description - }; - // store the Event Object in the DOM element so we can get to it later - event_template.data('eventObject', eventObject); - event_template.draggable({ - zIndex: 999, - revert: true, - revertDuration: 0 - }); - } - }); -} -// -// Load scripts and draw Calendar -// -function DrawFullCalendar(){ - LoadCalendarScript(DrawCalendar); -} -////////////////////////////////////////////////////// -////////////////////////////////////////////////////// -// -// MAIN DOCUMENT READY SCRIPT OF DEVOOPS THEME -// -// In this script main logic of theme -// -////////////////////////////////////////////////////// -////////////////////////////////////////////////////// -$(document).ready(function () { - $('.show-sidebar').on('click', function () { - $('div#main').toggleClass('sidebar-show'); - setTimeout(MessagesMenuWidth, 250); - }); - var ajax_url = location.hash.replace(/^#/, ''); - if (ajax_url.length < 1) { - ajax_url = 'ajax/dashboard.html'; - } - LoadAjaxContent(ajax_url); - $('.main-menu').on('click', 'a', function (e) { - var parents = $(this).parents('li'); - var li = $(this).closest('li.dropdown'); - var another_items = $('.main-menu li').not(parents); - another_items.find('a').removeClass('active'); - another_items.find('a').removeClass('active-parent'); - if ($(this).hasClass('dropdown-toggle') || $(this).closest('li').find('ul').length == 0) { - $(this).addClass('active-parent'); - var current = $(this).next(); - if (current.is(':visible')) { - li.find("ul.dropdown-menu").slideUp('fast'); - li.find("ul.dropdown-menu a").removeClass('active') - } - else { - another_items.find("ul.dropdown-menu").slideUp('fast'); - current.slideDown('fast'); - } - } - else { - if (li.find('a.dropdown-toggle').hasClass('active-parent')) { - var pre = $(this).closest('ul.dropdown-menu'); - pre.find("li.dropdown").not($(this).closest('li')).find('ul.dropdown-menu').slideUp('fast'); - } - } - if ($(this).hasClass('active') == false) { - $(this).parents("ul.dropdown-menu").find('a').removeClass('active'); - $(this).addClass('active') - } - if ($(this).hasClass('ajax-link')) { - e.preventDefault(); - if ($(this).hasClass('add-full')) { - $('#content').addClass('full-content'); - } - else { - $('#content').removeClass('full-content'); - } - var url = $(this).attr('href'); - window.location.hash = url; - LoadAjaxContent(url); - } - if ($(this).attr('href') == '#') { - e.preventDefault(); - } - }); - var height = window.innerHeight - 49; - $('#main').css('min-height', height) - .on('click', '.expand-link', function (e) { - var body = $('body'); - e.preventDefault(); - var box = $(this).closest('div.box'); - var button = $(this).find('i'); - button.toggleClass('fa-expand').toggleClass('fa-compress'); - box.toggleClass('expanded'); - body.toggleClass('body-expanded'); - var timeout = 0; - if (body.hasClass('body-expanded')) { - timeout = 100; - } - setTimeout(function () { - box.toggleClass('expanded-padding'); - }, timeout); - setTimeout(function () { - box.resize(); - box.find('[id^=map-]').resize(); - }, timeout + 50); - }) - .on('click', '.collapse-link', function (e) { - e.preventDefault(); - var box = $(this).closest('div.box'); - var button = $(this).find('i'); - var content = box.find('div.box-content'); - content.slideToggle('fast'); - button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down'); - setTimeout(function () { - box.resize(); - box.find('[id^=map-]').resize(); - }, 50); - }) - .on('click', '.close-link', function (e) { - e.preventDefault(); - var content = $(this).closest('div.box'); - content.remove(); - }); - $('#locked-screen').on('click', function (e) { - e.preventDefault(); - $('body').addClass('body-screensaver'); - $('#screensaver').addClass("show"); - ScreenSaver(); - }); - $('body').on('click', 'a.close-link', function(e){ - e.preventDefault(); - CloseModalBox(); - }); - $('#top-panel').on('click','a', function(e){ - if ($(this).hasClass('ajax-link')) { - e.preventDefault(); - if ($(this).hasClass('add-full')) { - $('#content').addClass('full-content'); - } - else { - $('#content').removeClass('full-content'); - } - var url = $(this).attr('href'); - window.location.hash = url; - LoadAjaxContent(url); - } - }); - $('#search').on('keydown', function(e){ - if (e.keyCode == 13){ - e.preventDefault(); - $('#content').removeClass('full-content'); - ajax_url = 'ajax/page_search.html'; - window.location.hash = ajax_url; - LoadAjaxContent(ajax_url); - } - }); - $('#screen_unlock').on('mouseover', function(){ - var header = 'Enter current username and password'; - var form = $('
    '+ - '
    '); - var button = $(''); - OpenModalBox(header, form, button); - }); -}); - - diff --git a/plugins/web_gui/static/js/webgui.chat.js b/plugins/web_gui/static/js/webgui.chat.js index e4c4650..baad687 100644 --- a/plugins/web_gui/static/js/webgui.chat.js +++ b/plugins/web_gui/static/js/webgui.chat.js @@ -49,9 +49,12 @@ function sendMessage() { var msgdate = "[" + twoDigits(d.getHours()) + ":" + twoDigits(d.getMinutes()) + ":" + twoDigits(d.getSeconds()) + "]"; var messageContainer = document.getElementById("chat"); if ("WebSocket" in window) { - messageContainer.appendChild(createChatEntry(msgdate, "[SYSTEM]", "WebSocket is supported by your browser!")); openWS(messageContainer); } else { - messageContainer.appendChild(createChatEntry(msgdate, "[SYSTEM]", "WebSocket is NOT supported by your browser!")); + noty({ + text: "Your browser does not support WebSockets. The chat won't work.", + layout: "center", + type: "error" + }); } \ No newline at end of file diff --git a/plugins/web_gui/static/js/webgui.general.js b/plugins/web_gui/static/js/webgui.general.js index 81068ad..c2e88cb 100644 --- a/plugins/web_gui/static/js/webgui.general.js +++ b/plugins/web_gui/static/js/webgui.general.js @@ -81,18 +81,29 @@ function kickPlayer(player) { playerAction(player, "kick"); } -function banPlayer(ip) { - playerAction(ip, "ban"); +function banPlayer(player) { + playerAction(player, "ban"); } -function unBanPlayer(ip) { - playerAction(ip, "unban"); +function unBanPlayer(player) { + playerAction(player, "unban"); } function deletePlayer(player) { playerAction(player, "delete"); } +function playQuickMenu(player) { + $.get("ajax/playerquickmenu.html", { + playername: player + }, function(data) { + noty({ + text: data, + layout: "center" + }); + }); +} + function twoDigits(n) { return n < 10 ? '0' + n : '' + n; } \ No newline at end of file diff --git a/plugins/web_gui/static/login.html b/plugins/web_gui/static/login.html index 7b32dee..884403c 100644 --- a/plugins/web_gui/static/login.html +++ b/plugins/web_gui/static/login.html @@ -10,7 +10,7 @@ - + l%J zTWcAwsBfVPxR#_V^e)~V4qdwBJ%~&*b&^-Q&@7nu05#23s?D;3^w9s{SU!Ttn_PBT z&clTBHN{tCkc)KMI`?{FI>{1cZQn|Hp6>x>){ox5!T}ey&Aei-GfYw1!AKU*MdYrCZD5#~mm1S$u2r@9`r@U;R!b05b`=Yv&}Vi#7_qq0ryS0TPWKuZGf-AL-9TF1KZruD4sKs}C$B!d?mQPsGA^0OGf&6T`qtlBoOEr1C``|G)pR z{oW^vdPv+uv>+%^&pHPn!q+Y@J8>>?X<2{*k zj~FBxS}c%Gk?^7-aGozxcc%ZtaRVrTs^Pn^pw9~6_+8M)`OD#^Q}H#BpIxSBXhz^Q zOyt@z-NnhUf16@Uk$jPYm(k==i6*pBzXDI7B-GK9a`&Jx>&lgyZQyUHz5~JEgeH=JzF~1c>L=dwY8J6ZV_x z+QEDE18f^I%R~1&Za0wTeXZy$I-PWsxihE#?qEB!eK%cFaF8ZfiA`Vr=P@yb)2 zgYfDHUvn2?cgY3r3Wo?R%{J9^{V&>4OhTlu%axe!=>y6@;{DC$#0gjc;sS3chC^6h z@Y~-z)qTds^|#K>eRJMCs~V=drn{F{9kZtm63ciBZyY*-?|g2J-OF>1f$`nI&W`0d zfIR>6NX3UX{jm1beRKK0)vq_+Cj9jF{2#Rc;bvF($Kq|TZqI7|e|}t#Pb1|Yw*Pka zU#!Ho?Fkpb^Z#L6=LBbIeBd>J-0%Ox`)^SI*h5Fj&$N2gh4XI^ANw`$)*?@fhsGZG z5R}G$v1NG|7OU|c3>vP~9pu&2WkO3wZPuoC`DW^>(u?v3OQpTwxUd+N3c@Q*=4IAq9csA%Hd+O4r|dG3M#*+6D{1UWh$vKX5HLOi_m>tnGr*!X>Q+}6qS zHq7?!ufX5oj;BWQ>bRmn+dAB|A=aV>iL~{n> z{i>a5T|0~iQ#7Ah7yzH}lpe{CP~aAe8^R*~kTXV%=1z}Zj@PbsU|1=o*M6f1@P~kJSSFBOHRjB;r)OO|4!>LiUw17MX#7jH!!O`XW2^t=U?A^$JG0y139NKg*qebYdlpreaX>$Yg=ff0`gG0-Sn=zn&N7H)iN0<`@8ISHdTAj zVKR1yZZr07tkd}=@4?dr}GDZC#mhT_dz;e@>n%f|I6NOT08HU^ZE_i}omQ}rr%}{H? z7M7D3NN$6^w((A!f??KDA-GxWM!;YhAci1-IUFj4uoOK4J1+g|l067j^V}O|35u5=~64_wf zp{X85m*HK$?H*&~$yxLL-uH2rdWWZe$&}HS9?rd5u4d^P!1uU0z(wbo3Y*aMqfkDi z>c;W#mKfKi&=@$RY4bz)V9-QM=8JMvlq*pC5B9Tz$#4mE?(;hpc5doPbKXS?@aT|5aR&p6kQW&T5J zJgSRt8h;Aj)P4HHJ-5CsssdZW@9#SvceM`l2IJ#AuVkWD0vK`%fZ|G9(txq}=W#U1 zvTpbL=D2Wp$M@V9F>27olc8ZpxRBo)j~Ig0pV02KNJG4{iM^-6u2lRA+7_VX+w$_j z`*Vfkr)5uy#aQZEpQac_H+{vIUtz78XCi&c0RO*tzfkMnYaWY1v7pYQmHvXWnIfp; zn?E9Z`~zi6)|CLA*CWH{<@TN(g-XrVq&s!hFh6pYlANkWoCK5Qq92fD`SeBQ<;j)) zR7tuM>vK?74amuWTzInUQIz-U&UQcm*hBK_?uj#9*>3noR9O3v<6&4((>?c(p;*Lk z+2)>q!GHVb${`3Ofczf7kE}-Rf7U^h)^x?XaBDi3FS!I{81M#08HUkx`$jyV1EU@U z7(njVUCfY|g`qQnm477TfZk-lx9&k|k16F-j<@x*3h-}(TZJpp8tR%0pP7JVOP(O%>^AMZ|9-yEM8-9Y z20S1P8O)BkH$oS>*4JXP^3hMeMyq6?3UI!i`A3nZezR;M*eL6-LhsWQbJp`ggH|@QGnwu0NVj>scA; zUQJ%WZH*dq1=PYmcPQ{_lfuC4rT)IIrs%H zLD*;9*Z)eJWCzR^fNaDhENn@$^_+q3w+6U69oanYBlo|(Jl(%MjGgp)*hIKl??691 zM4|BUW<8Kj+(Fh)0RTwc{n3uE#5D>tO z7ZLub&HhmFdOv4-zkfVe>lQpWAjun>7vz13H1q}aeRX`_pP6odIA}r74UnWD6})ik zmzc}laDS%(s@{3tp8xW@A4nhxScmKHuz!0edTV%n(GE@!u#@}r2QXqNoZ7p`qgwHn z3YEnITk410KXcdu7%r)iJoTp~e9HTsAJj?;qX_W5eOx_jpKnMYxp~SH#>5RGJeX>T z0DT@H5yEbJ>p5&-Rd}3;Du*_ByEy^!kOB_60YUG|CI^S@zH^%~6$V$&k$EG`H#|3= z)^D$Wf10A~{0CVC12qk{Uml@F9>AL;E=6U4oe2)+tZr|on?HU>eNmAIA<3SHK=kd@ zZIS@+Tg*s8u0fCT2;}ILwrmq!N%;KTuGP2(;k>Oww$R|6c7`yDo}U0+BE2M}!zi8Jl4s z@4h_WVt58VML0x%h<>5Qc^FGp3pfE=KTzcf9wrMu;ginytrHi&eMR6Bd^_Oi&KC9> zbmtQqAO)Ol)NzYRojh`MzN|ahr8Y2cW_N3Ky=}c-$SkfW969Fga4RVpDG3W=9|BzN zwQKyxFKn+NtnA{Ii3yZZtqyLIoX@-wMjDqSeI3N=!>b>)-fzUd#4dvtZ$t-5!gv}^ zHO+kS(VT=TOPWmlB4;qkVEw!)Z3&U{EMP47VjD0=&h5YmW zLBm8{kD21gaPS@EXw~{5C{Sb&<2t461{!c4GWIRi_hw|t*VGT7wvW)B^<6;AfxfKV z)L}b??|!UYa93h>DVSwIq0KZ;ZQ8r_8{B-K?WQ3I$j`V-2_s>pv$VgS@X$}VHuJcH zH5GkBF~scXpEiO8NxoNIOcBPqom~tYpIBo3*OmGf29FMPUi<7R;U+{2W(Qfe51+OP zA<~OF`MK5mQsvL=C=e7SVyvZUNn3dDJ_I|oxdQ`(V4)@E6{BZcgNx~xGQ^Q--Yyfz z5VPS=_iGehu6B)a(+~5zZ)^c~b7{J>BZ}S^?f~SEZRoac>8I#M(wkDRx9r4Aurt40 z*XiE~M~IoF3WbyW7`x+v^Z#P^qi&l%4}4h8 zX|fdw9}1|`?uPj?by?9f=2oTgy`l*zpNf)X1n#QY@&~Ub=64D7nB9D^AooMQNHD+0 zEKkigP2XirjJhqJnvLN?|ZI&uwKeeH2k3aW<%hSpLs?1Q3)6yC$@;ZWmcP;tNZA9XEPzQ zdtve%D(Lac1{B_|qtc+#Ov>K=48-UCA(Plzsiv@{jaamq<#{PCDLOOKsHWC3Dg}Fd{lZ^L3Y1|ZVHRB7C&kf5bv{rq zt=DE*p4ylj>p?@2D(mLxzFsXCxutk&(9hj4-UFKm=$!hXdr|ppSG&`bP@H~+ITS`L zqB-8w4A1VNc%k4&A$*vkmX=j=^&K787TO9sbhD(7O?C+Nk3esXPx)5SUG`NwcML%F zQE)lSd@sanltZ9PyXbxYu2+%g^t( zP`o5vBKN6|rXRh;pUHujAjG*(A6|?>FG*1I7(S0;N9@z!{?pWe%}o)@jA02FDvv*H z>@$h^qr?e6O;usWc83{Sq(H+o+P;vOa72J9AFRR_zeBN?0Gs7knz76C4AsRcO5bV) z-A=yfD<*S-(YCk_#NRdQqbBj!PhiQ!xP_e>b~yEc4V&>z-8mETy76V!wkPBA5Qj&! z5vG4tTOlwUWW#8`qx)Djn-g%OylaP;j*x6jQf#1tXN+P;`s=Ex%U_bbftPAshQ% zzPK12i4_#!Z%E5gZIJ6y8zKvLEj!!4r?4^_;;gN*C2R=@xvR|v7bZM*jdf3{w&RIj zrL~fhZ?#}C zsPS-4JAJz)tJCT9j5q{5pFD=W`<*_hr^z&Lx0pH@y;+YT*MFwkELO!^RKa3SkM8&f z1iF0vO3NWNu-kQ)OOrrdKg<2r{L-h^lss5@Qv^YHYE;Im1v102g?8`fr5y5T$&7F4 z0S?#I*6?w23MH6D&>@t9-MexZ&hfnlAzx+H`>}C3TyVZMHCdvTV2Z~V;IMrEYzy!B z_s71J5!by9Frm*D*_{ZX2~Og`Zy3aJgbN_(7U4$z^18_g8Hz>bq*i{mkW6Y|T|bHH z-wz7$heA-I>pyJnizoPJRK7xQbrE^&sN!~YmZH)w2@~D2U7Zr9Wd0`}AqU~&Q(VSv zZXbP$4*Wcea8#VVxYlDKIwMnLvS5KUJHV}?QaZbDP`@Oh4&Cn{ z1xA3ib6JJ$U*(8xk31Ee0)0}u8dq>W>cwTgJE#vmqg>hWiiJ-T;nsig5)fe^ULf7s@w!D-EIRk;`=c<3(d4{6aD1OT^D%21` zMv(~kC09wvU6-eP-7M>AbGZPNQqDI=jseXd zeBQ8&hoDxD{_|WMSIA1hz;s|8oD|0z@6?YKvZ$|)FvKN3rckj5y+1r$aYSpe@A``l zm?)uy67X#l!FmiTBgg6j9g+4flRhwqA4^S&6N>j=on~D8^4o!xUYUq~b=b!A$po3- zN7R(Jh5TaftQbn0h=z4YNJLBB)oz=Wt%hAxmXcEes*47dQByQ9H^3mMG|{JMpceC_ zGMvpxW*bNK+`fzLN9a=Ilc@B5{%hOmRR4`MFQ|{?in=V-o4~>8<(eV7<;#&6IbB2y z7ahMgy6t9xcnyV$EyzjH5fn8dJ6`?JQc=}!?3n9;n7IC zzV0JZ?NEWg{s@Zrw9TrO1iO`@I-7QpT&$6IyaM>*B+5)9(d7AJz zTMD;wmwx@j=(r#L_jMf%P!7R|dfBXzYTO=uz|fLUvOfzrc0~T1qn$q131Xc`^z%Yl zYC#k50w&`>DtTzV@S4pCKm8s>og5!H$#6%^hvjsYifW_B(mqR;!;D6LTP%qF%%WI` z?ewB8&7s>k_gRi0QM9GWCMZk!4_46f2*LgEqZoRrsh-q2l3U1>B20Hq#azSIn0aw! zcOB;Q!mHUjqdmn)L1{MgoWhd1MBpBs(ySEorADfZY>zy`I6V60>My_Qd-xL{T9+cf zzu(by1p66$qLew7i0KJ-e6CFL@5xL&MxC|ota|&hX-I<9xG%CSC)Pl)eyd)s&(T;{ zgE*5Uxy@C^=1wJ2zu@zx%Y;OoGv(P=pDlPd!Y6f(^gj84vv&AVRN}vW`sDI3)df9m zn_^YXd>90;p&dtgLn?L3FjdhZzg@o9U)0oRun-qO}@exdgT>d}|cjgY@&h2J6D0L-F*Im zJ-PL(4Ln;WO{j(=(-8v~!DUL*S3z0ZJu)#fD{oT+N+nsYjmvp{jBdxU=-kNMi1T_Z zn1U96M_+?(@u#0h1(@k4r-Hmw&K-`C5#&X z0w4&G6T%{)pkbgmZAXkti_=vp!uDEWb*>bpxUv5E%j3JEma69}q1TtPoRX%?LKuoD zg`1}`(B-;zay@M%Smh|Zf47zMb*b#9fb&ZnEuEEGdleltxHmi%O2|m@lb|)|-d6jC zuOvjjutg0Ev1zbofGHm}SW;B}gP=g}6U-Gxg6@!uJk(%VniyEy_%+q zK7)#A3=bubZb@5z6Rh96tu!V7($Jc-xDhd7nS>}#4!d!!TRFT&Vk3EwmQv6>3b^U& z-rTO2(C#z15$m7aFs-{jpLjGNV6c>BzBvK^(Rg{um;Ix0^ODc|pUnD4P9C`(mOv$_l~-Q#HtF)e|Q;yDH&2Wx4PD;lz@Rk>M&Jrf_kU;kL$g z?Wd)iv>4^76)KTCu~Cd1fbG|&#pFuXclxsyT5}wV);#UlkP<<-&+~J9^c)|>u`Y$N z^`Q#IVWGiQ+^w^dzN@xRg72^qey@X%e8!?&Z!b(#W=zgrJ~=TDyI#A2E$vIOYUbPk zO%7|BX?)S==^w$APSaW^AXcq!RK-l4H^FD+sl!pkho&mn2?DZj^aJI3VOdEVYSFJ z`djFf%bmC+%-$G9Drl>om^;e*;&b@BlzC1{AkN^dx62c$z->1()NRpZHq?t-!+}M= z(o{6VN8Sk+d}-escGKvN-;`4j_kDp)q)5oI%M8hOu^ShydO+$htJOZ7E9Uc%D(6~y zksOYDR2}HgE}AK|M>FYCDps4sGd3~T{UPdNFOJug2CJ0B!nITD$F{q=7V6Qo6+Q*e zONuB((^94TE2QFHE{XZ>(=I+<6Bd#KR(pklYU1B*Q94#+6RnNe4KO{tbK$os*Z3(6 z<{GC@$3cIKBVAW+)K9dzak&4er>#%%SIZ8s*lC%evK%|~76h@a>!}PCb}FxJdTGry zsW_w_!El?z6f&>Y%Yup5KQ*EFCPKdM3 ztb@B>MY8%a+>QbprCk_h>MP>lrfm)5;U1Xr7R|7K=vkQlNLH@kn`vLG8xPt{G!Bar z0GbC;n)oyGOVPidZZ;w1ESto?r)!d(nX8Hl82cDR1(!~k+edk@KF=91(iF6@jAXaV zn|>=Xr~7uq-N^^^Ya7_l;vUMkLURd~Ii}@-w`|h4b5<#ehE0=LP|!Y<7@tDuEEj_V zx5_0OAkYN!L6s|<_>msTM%aB(Y&#|Xm8GjEW^G;|!^0_;t?CP=WLtG| zgV$5T{P?V*@TS|=-jlELiBSQz74VhHrXgW-tU38JVy9>_LhiB?E%-JEg@5`~dPqf$ z5UD%4{R&&)w%=1*Yd~p|v$|B0JY7Yx`Lxq`AJ}FuZlOq5KO&e`o?mp9YDBdbYNsF@ z#s2l$w^3DOnTqqliFcmufV2JkNd54=eCD76e)8+YT1Mg^5iAj(0Ty1vtwhtJ@qN=~G&4h>7xBv1?(h(&9m%r+lq z3%61<1-~aDL~c zs|YBSPM&n{vQM|Xv;Xca{rj@N2x}Ol!ZfkqTSj^+qH-Uc?LHNMRf-{WJ2L~Ok$bKw zU`EhjbLmrh6Pq#n&!_t1)+B!Z#gxm5wG2t5gE(^kc!oJ|)Pl-2#R@w&>ysfJi;eBf zSFj!;zD}q#1DsnF^ylO?Oz^~bCQ)`%>$d^_392E5uMYgbe<}q#kI8S^TDf#rco$`j zJp+U;4AoV;wyD(3KcB>9shYyg1qL?fJfHC^K~1J*=PiAau^?M>tKfuA7NAK8EzjwX zW}I`!smvFFg86BdJtiGEfa9qi#=vV?nMJW$CbBx{ux9nt9<6CLZ98j9`NedZo_6ue z^%-9USwX%lGXa{fr3TXE9g%t>T0=i2vF|w!Nj1}Yy2dCax>Ye%_RE1+k z1*qB$|1#yx4E<4^*nd8jKZfM4wehPOrx>AvZovABz|c^MEmp-n;RutJkg$#*cN;M~ zbWRr{soipMpmNjZ-zu{d)KFodEK8trRW*U6?#tK#z7_XEqYW7+I>WBY zjwFH5SIm7Zw}a2(ZO!Y_V)eA46j0&zxWI}DZ*8RDNfgVkzv0ALr3-#vK^1uGo$gfa z!RH+Qv$tSaA;YG97#e&wU6hQi zdAExMNvw5^Ury^9>f2F}k~PhXg863Jcl{w4-bL8%?NJJ&FIHnXwpv3lfi_*Y$){*w zdQ)AP6MiBmCx~0ftjj5cX`zG=oW}5QI%zsWXL#b>wp}`+rggb61iN(q2P1mZFOcT< zcdW@e_-fU0w90fR0R=6z&>u{y*%4YkG;Ws`woST3HgZNR#ZB#hh3NST%a{(DvETxG zU>nbAt5wi4>Q66&l~dm=3`iS0#LiZh3yKbP|Lf z&5GBDOrzZ5TlMdnomf!7haQQ+d4yUQMYo3)oY5w7BTc;#P0;+*9d<#Ap6RP@D{9L# z-A%3+D#|dRq}8hW327@Dph}N3y-xb83A=o5fO7eLF*F$3fyIEsGTV4@Ey=%03-#^B ze2vGqX-8)Y<)jZA`_kzbQrEySHRlPFmh+a2j(Esc5WOPu+)Q8E8kVAxlG8g#Z^$|b z=s!!%fP+;TwDi|t`r>wX;A^IoV2qS&V&)eGI#)6Lt`WGkr<-=GX_wlbJ8EPUMZVlm zjfL%2XhdkFxOIQfj?;?BxED<}TrdVpbz*hngH}@Fdk!%o?SD58$cWm>mlFv?o2bdY zEtVJick!GBwH=a0DflG(l6{nDGjnOV@0FFsHn9FJ($$0z9%>Z+-TGt+7awU!vEy5F zb1$nO3hUXAU&(PytOram0j6rx!?^fSwVpD=sm1f9xEW-JWG;g4a<29^LB={%rZBNE z>)iLfPHj2k0ok1`bqL`T#2Q30QFa$Wzv?)h84=glJ`IEt-^~Tm3K%)?*;rtEv>#IaR#=G&C-h)X5xiSM!}q}VYHPsMvHKTj?EZN}hs&eJ z?mW=A3x!d;F}Xfbfr*u>cqeX+6>IJ9r-7qS$6ocbqE@EJDDoN{c79{OKW6xqsRaeX zqCse*?&2|dzy73-; zknweRz*_KdxcRO(5(5@{MEoR9h}DHTrl|zi(H8lKCq$Z{gZ+amr(+$SKWCe3pB6}G zalWJ8Eq&0lFGQIza)S6Vf58_UMB~%T)ei#vjpKe?ogvxV1)WwvD=|Lt zwh`(Yl^b|#W@dr2?QDX61u17&37w9u&caY`d1PN%nj%m3Q7&<}ZK2RO=>%j7Zlsam zi!-fo3+Oj739+iWL@?<#t}T7oc&oaVk}Wb7gjn6k)!9uGRz9BEGv`Y4pH@d*U8BhD z>g+jA633{x6Vg!{B|4APX88!}d5?TD z;rcu*<;ha;8Me4?rqN(zNB+q51YwpDe?BFeD|zD|BrBlTI&@P>@qr zrqQUbXkP}cLgt5hV5gWLiKV%+1}pJo8Ycc*x3dW;Jan@0!Os?Zl4+#C;q&H1+*g6U zQhNnfDpR#csSIxJKE#1CS_B9C-~vRb5rtAH2fJW$ay!6Vy%6gcht!yg%{6EV_Fkvv zgJ7QKULxU554GX&ajL$$AITX1N^$X39Oc$|kZi#zi5%Za$MgM;Qvp`J0wz2(%>M`Y@OOfi<_7}z!V0De1 zw5@Duf1%ztQM=?uI-A;GI+P{JmY&eY_7|Eo-4y`$gf_Onu*l4IrwtTBo7!J!w7pTv zjC3}2zYy_zsh=AOZR&oJ^ri#HOBwG=b-&QjQa0u=Y46$8{la8U^1uxfLYul@x&)UE zHjToxsr!Y%l)kB&w9#zoevzZ2v2-p@w%eBO7h-qs0N5r)!JE2Y#4VWwUbl9?(CeDc z4}00}7b!sF34z0|d&%w>hHq2OS`~U5yI<%QYG?f5T5Rlop%>@!q=#l>^NZx(d>Tvo zH}<|TMd5iiTZqE%=hXFVw%v8(r3J zYwrsUf;Mh6QCoXoXzOrCSx*RU>3yLUhgossX*L^sUj*m)Fan*ey)Q(R8eg;HHrdqr z!qgswIfk-pH@3deGj^eb-#2%@1ex~H9U498w@sZd^k{*z$`qo_oiB7m;U|x$plt1Y z>5_tS{&g|mn>t^l=G2aOX=C3D9lt(7J)-w5eJ>=GRW8M}oBLkqL3;0XNm6d@dyxug zH}*qpZF_k&mDx9Y<=+&-auLtsXlAp^$Q}3y(YMq6%hlf`r(!7G&yg z%R2H9^u$8E$ z1#y8B&sN;fZcYdexZ+9MW6Dtl>)MqWRq3~9bv%z%E0uMTefN4zlf~7XP+(PVj*~hq z#WmY_{FhH|s5SX)@U3iGa|EcbG(eJ({<#F3o%Bq!+va?w0VFw)Qc27>7PrIwUD3}s z*8oIMO2rZ(bZVI6)Fd=l0gcCejAh5Z@*f8z-%kB6u=*%?$ z^gSMIwAs>-yr%xx&jUoTsnsSJ1B0_w%TLXAL@_>R7+F@(j1-t`Co|>uHjI zExF~2_L|&k5BNYys^=+`+GJ(#N^iL=(X;g5jy?Azx5hB!O1T6!F^ zQZ919>{zQoLa=+GU6!6J`=C6$0} z^CZjz_~Y6ZAy>*J(zcmW_alL)m{-)Z z`j-{bF_5C5Mi<|)xy+=tTwj_RGAT2b*fHo3A?MBb4hU6H#~)iPQAuR+poX;K>|PM6 zpbmQnvWq1ko+%Bk-4MN8*-W$wyj(CCBmQuvbX%IL%4WgOnTN+sQgtDxcAaHa*(``Y z`7y)BnFGqU#qzv%RXPu&JeWN;>-bbTDw^(hOeH+SgTsw$+o-CnnS`XHt;8N!KWbfD zma4L5@d`B?!pCSxl3Q#Ox~vK19L7V{ISL=*y@t?SlXSHU2fD(dU?N~h0xPQ{JZ^9W9beOV>3G+EOpP^Aa}O`3 zvC~8H70y`o03j;gVc)N4H^r@P+#b_H%7Rg3fXP?{JBehe$3$(2jZPTcV%YnIEH z?AAo3_fW6VgkGZ!hQbMJ2vsgMi}zqrCi(kpf@|xTI;sZ8Kq;2BjqoC}WqAd!E0-E3 z22x}u$rcM+yk-i<+*YxvGnf)9lJXR5bld2;+NTD5Ho6?PC}kkts&?(>f$*G5z$?=# zuC??I_|_FYc6DG))tX^Vi_SHJ&vrZvel@uRzBSeXIDITTcRXlFg62(nzLpH#buSh| zK^wP*P~}$p`7z3DXLZrFRbHyy>d1=vQ3bPh!Ne8g6;kb1(3(1XeU^p4XZRP{WNg2+Dk`CZWo&b}U%Vxg-*ZV#12)8V5ovoNr=vp0wvc zI8)o8*Rd6z;gZzYGw4ZIskVBkV=Fv+#X}iSrYrO(q24jJQX5d#i*yHZ+%dMo!M%}( zo{niLj}6$YSlJJ*B%V)W{bcBxasbyW9_^wAJ!+~0f;(mndpqZ{7hGXt8Dco;&Ed)F zYwqZ>CIsVDriWnPI4pnLT-C9a)P1I>;-!0SP0Z+ekIKuU-hE{4rM=sx$+OkcYQ(OP62Q1<%;obiF*z@TvLk3JtrC0c67sz32V6U1| zkfS)4OsyEQa$tcNL$-E2>V)oTa=C3atE{49`C1prDvk?wO>C!xtF)qHQ?#*BPo~@@ zwJI4nbAX%|HRp;cfa~wASrJ97vWl)#{Uyx8Io=&`yjxPyarld~W6nG=tZ7U;`CcUz zf#c`p0Gu%&SLmk$yNZK@+~g!wdef_dE!FHUa@+$13}ceJ&<4QEU1xVu1b71K*q;Si zvfj0Wk=5)j7mSSUo}TCwWKLO|(0uJ++M*5PbQAW-fN*;vMK!z2Np*cH1;as1--_13 zYIK)l`ZdaMrJfF@U9Z6N)#xr47+MSC#I49K$(Y+^Gu7xW2V<)w{y&;cgVk@3sH;YI zIe=87{8*yI7StfeRWu3h=7i+z1#2d7z?-m!MVE6rM58IINzbng@>-ELy{ZYZeSI8m z7mszyp*`>+%#np7Z;f;a6yyaLDz&wCm~Z zrm+1s4ma!WOQq5|%EnYU9PLijYPcB*!L3kcQt@Q5kyp_1_0k2983zckPa03SV&GP& zg%aMRE&YD*<@))cO+vBWCV6s%q6}-$so7dl4>#k!jY*{vDrCPk$gUZ;HrFIk4r5g% z2I^SM%!cbWq4Qd|MN5k|78b259IzIXM}}zeRn52RKUvWoK8F+5R9nCe2<3s{C&dy}fXL9YL{R87S9CW6_vK0`; zK>$7}yJ8~5{0SXhZD_3G*Qu3Hcv(LoEV0d{X-5)La9Y~1t{T6={b+S^Q%5t~b~8ae zeFMy8m6*~cwIv5yrMQAcl@6s@5#?K4>8zb9s=W5 z5HhvcDeuxWPmz;fQ5EWHFIlmbbyDrjLDf2~Im4g|a2Qsq#}cP>GHu1QYh+v<;DD_T zP|pRpMS^d?hR|Mw!$cEDDPVI6+e_}4<7G$!7IHi)hRjdiwv%a9j+gMpX=}#L2?hO{ z)-;#QEsy8WisaH{5Sa$LSko17UK8S(4P^*8hcCmjww=-{$Ll2g57Sc;6l{M{=FUU& zNhmX4UAj~R|Hn0}Ux8aF8gIw>N?gRQ8t860UJ`N~fl_=nrc7*Hv-z+02(h<+k}_eL z(~6Mfa;y~O0CDrA!^r#8Zj0ZKm8#*Ogr1PaKG7>scO5JBGIZDZNd_jtxomH^y)WL7n7vQl-NPelt6u+R}6=>Izj9 zWAOwd{Vt!|m2!2=m8ucDt`w&6G!OQVuLyF5+Tt1t(}a-kI_>Wmb7g1*u4qXwG7Jab zv<>v?psQmTKv^}pBRIXLofNKvu7vqriO@)BRg&XCxNPpPt)_Os)tysY4do7ax~~Kp z?&HriJ+lc8%5lt2g-OY{%W&{kptB|XS<@5Q^VqB_)X$RXuuR)Is^+`WTUH)6NR@Ri z(?eNTp7e_ITb2dL(vzMZCb62{vIy1mxU0Sy+LpDj@l8=*OE$D%;ra)k(Q!Gzk zvSu7Zz@bDII{mJ_HYQ3lv94yDCnw1fqRH&goQj|x$-Nf%vUW6 zR*ow)E>EN>K+A4+!k~h1S*4@a$FG`sk#)b9G{f)w9ZmX@mibE%qy^-=YaSW z^SJLMm9~P}yE&mq@rh-yk@Cl@4(_X(6s#OnVoTK$`$4dVx;aklKxEP~)&e(7Px?Z5 zI77P+tD3!TJl`#V<;J}p*FT%n^{d?w*Z&X_^}IzF=@vc`b|Rf#0Lol4MRLh=yR%jd;0ovuw3Y6 z=%NDVJOc){UA9sM%Snjyq$Wq$^(V;PEmlsJGZ$AlC8yb{_Sk`4EtTx)OnEXdBwD50 zp5bm^D7|vAG(!h=NI2cDVcpe2Nshn_Oy+#>;F*)K9lBVXp`&YWs4#c`}aXgfnm^ zV?I)MSX7gat?ipngRr}-a1u9Y%6ZZ`;Bbp8HppcKO*twex@pK8rdF?* z;eT0SQ;xQyzcV4Eqiy$?EoaGyb#2yp8q{}s&EW!bGORlr2i{u;hzi$k#d!I-FtA@T=U}HpU#uKE(Iiyq6rQl_ z$Kq8P)?!23v8V>sQ`tebQ=AmNuPGEcFg~5yoJEV16VG9{eA64Rr>E2DWyx@$9Pr))QRC!oYcZYl{f>{*B->YIQtr& zGu$Omn5a5t4%!3RtJ&99PInArywKTWp6k)vzxC{E=(pn#c-Z&El&@*fuV-IFUGrS^ zI0bYN)izYEhhJN#Ige^|dU<#iWU6Ui>fzUxC-c})W=+d!FMx(?#&OT3z_LViOks2S ztA>GfW3mw7#~9zlC?GUPyc~vRV;TD<#rnEkEetxjrlVP8QXY(B4pnG|;Xr5( zP%RU>Sg8_S;OVH^v_~E5`LtUSf+UXxHLTZm(ElrhaaR-aEX^r7FqyFz+vfu;Pf#a4 ztW_><4~q>o1iZ;}Q)v>iYIfL=9Fg3PF$Gg;5?QX$hY5 zD|$vi$JBHZl=OJAi#e9~LQ@D#tw?w{C@UhycpkjF+ziEoklWk133)gEAY(8fH$I=Xr{4La`<^>8oKhw`=}tl1a7B?$hTbPHi>M zoN5!wwH3iOb!Cvhax#FUnVAEj^V+U4z!@gfB>-*ORW%?qS0#>hXYkynxjhfppsBV^ zrAi1IIPiLM_KDLgj+t3LJAqIlL0#)fCT;B@1F8l$+QX+P$z&t7+srJrDRbvoLdUNdtyv$!!N?1?myMIdGvE}26+`_iRl-&W z&XLX|A$DoC(R+0Y2cuINGCo!=usOrzX18yB3Wv?Gu}-COf{NxC3D~(6=Yq^t3E)hB zph(e@MDuITn3$`QS5lUAbMx@&yWhXKdGC`){QcecKk8)c=?CAxc>LgZ7x>cYySU`Z zgU8QbT=)OnJnDW^^3Tm9mQOu+_vyDUj{foJ`e=9b$D^~OuaCYwdVX|y^Wn!I;qO10 z{N>ZVzdU*P2`}{M=?QQ0(R+{N^U>MwzJKwD(`Qo8^+Eso^z3uc!(Bi95O@9bLog&>U%G2WUOavF zXdv|V(E||r`siEy`vnMohv)j@=$#`yA?rG-Zkg!LU!0TZ&B>EfKFR6R?nyp*dNC{o zd`%NCZk~Sf?E1xTlfe(4;Rnrf{Rgrhr)SSNyI3=5%+V)jcpoeB-u$ocebz~~OOQzD zl1F$OtIos2vy2vc)P3y)H+On+T58=+&K}F(S@MQUo(!UeC-E#4Du-bh9;}%XJHS6X zKW4p zuiT*XyH0lC$9(gQ*UNB|w30C?a(!6zV|riK+&tqgz)9q|WW%%+e|L!^ztP+jMBa%0Bw+;~Tpb$7J8aQzza&{#mZ z7AxT096LD51LT5u9Y?Km7}g-LW}AI}odnO}}0hs_6w<=(!)c7oY9IW?HTJw9zCgJ*usu==ns zI208MpQms>>*OBG7U|N>xlnchv;w)xV?%Dgvdr7azML@OfOvUQMgOebWCu%Dh#a!! z#*3UT?|=jZ?*dOnZCp0W9FxKQgPlC);X+Vy&$`P>>sB1Z&~l!O6_(5MgV&r~5m?J9 z_l5mrz_75tF%+{+GKspe1gw2DECT6oNdaj)tZV9*fU8V7?3F>_WNO6>*qjw*18B`a zq-FoZokUSjWswO_%Hj~&GMtW^qIbPuIL$d1QbBs!Z%2>qIBZwqE4UCj^(tIvc0gF* zze-Y#4N`E{)ZoT3rXRx&4u%MEBwf#>$N2LzQ71x`!Vt@SZ% z!--{@FC`)y5zOwvd2DT_9_#j`Woed#la~e6(6NVK7g`%c(``214=vy>^Y}u|-7Zhe z`5<(CyT|23-zY7H%X*riP)X_8-Pp`Q4a$mPma7`AWrU?K2BR~Cau@v6&`$y*>Vs?4i;n5XqDr$>;eGvz_$0HE$w-$s> zCOp*IK;9z34VV+97ZI;haEhd<^n)xEZ08B7dJE%o=M<#dF>Y+7}Z`WxbYNOCf5 zLtjx*!y*jMs+WqLD4gh^6ZDg8kWO8(K3VzNVpx5Vhb7`EGcGhaAwF7GW^n%Czp<(} zggJiDgHG}^=+4kJ>x9Pepos4K!U~vEDhSt0jWvMN{T`KBmkwa1g=!cCR3({I z^CC)pd}PT%2O=QH*c4Edb7t6!i(Yrjm@U`FQ$WyxBa-zHf8^6jC712-3!B&QAfZRp z6i7utJ19uSJd>BB%S3Te&Xi!#*{!*Y-5?;WTv5@r_N-RWRE}F?z%hy^fI(&l95aH- z4$HB6nI3AGU)o<>4x5FsRb@j9&eSj;+LD7^IUTIq#aL5TJK6!yq-=NuE-RL1mkt+K z{elDrD|Ko&;=baDVq7DL!E#mVU-!OZcd zjThJbopC~qi%l7YO=iS9<^p;6JsJMq$tbho0G$KyW|d5|%9vr-Fl+B!xi5gyzPY`- zp|l%7CnsteYM$F~C=g?24p8nnHA4Ar9|s;OZ*=b0h|_vI4L4&%-sutVNb_*(!Y)f6 zk10L~b^v}KkrovMw{x#cL6IXbix0vrhW#e37s3koEZ$O*`&&BS4gQ#tLkVINj(WI3 zJQ#Y&wQ6jQ9^!Ym#JUob#1)oXQgnj^ZuHtU9?Q6+ek%bLG9j5vwTmxyJq|EZ0AoYb zAV$Cs51czB09AiMh;8hp4x2z2=xv%4nFLkx6_Y3EI3QC|O&FXY zw!ie-O4Jq=X66vEo&ixxs2H@GG2m)9AOdaS@z~^-mu8itMq>|5sB!_vk!QZqi|7T% zAE$0_cV2>F>T=IX!&>sFdfSA)+;T9vL-mtoCxaTp1&|MH80_f-PRkV2oy}aW3KQco z;IM>d6hSi#%j*0*L=i@K)`3LBR#TQ|b+(4O3=W?^k7npco%iZXAlm1Pt_h zagm+0olrV@Wo7#(JrKR%!fC_0xfVPmNKt0+0w_h(h>d1)qKhAOESDBXaoP?zX%KTB zXdRXpAJ=}sSX$jTdY&f%+S{UNw?}A22=~MNLeOSw2g_|TZG+3rR2>NJQ-a*3BC}Ln zYkIIi$yAis5FG4)%&p=O*%cE$LCNk>3UIH7>JPZ1JZ3&Lt3N==?NNfe<%cQ@%XFP} z?W7hc`HGSt$S@oiWf^$v8V;M3LPbgNfKA2DbGR=2(N;`2#a2r_9t z{UXyK8|MaO>$DYTqdAtzR0mq*Bm)c!8S=}tTdz!YoJFRG2Xk)=Kyb%=tQDJV-Zq^h z4~tG^P$-cGAa}bM*;L0_JZ@)5ZH-yQ0Zdr&-WH zhq^9@>oSU&uoWe5+{#Xn?ke17KG-CC@_lV^U&ldleOUIHA@FU zXs(HTmMWM*SIhjV98I&W0fgqN2;e>&J=jJLAmt2|W(_jv%r(*B>|cWrq47RW$_&ja zIAOz$F~|llt}O(44sM`Bpg5EsqU_zEUaUbY=?_A4O+tj-S)ZN|Loh)#3sFI6u1R>t zGdBFtB;z=|!sA(+(v;`Oh8fcs#}Qu)Ou`hjOKm}Du1gHP6;lc$9K(EYHrh%u&v8wL z5>ncgGe@1At_at=sY~)4)-a0a*nM3H35IJ=(*vQoGSLKkQpDa9;vtAIktzGQ4TM3G9EABjpHHpry z8w#43pClG+ojYz*qVIH9AAq#B!q{G5=L z)Z%zUhKCpDHrzU&tH{J|G?wbJC9@P=x=?WZqK39;5Q`C&gx@g+OIX%(VbK9O*`q3s1Cm1b1PoIrGH0!-VXs#hGqubdHqtl!m z-sw}b1Q~?p8q&fXhFnfRb}U8-JQb%&s8W%ZIecAoHZ6Zz)2IPLa}{DZI17llKnRxl zc-uU8$edR?(r_YCR3#^$*vp?(vzY~i=DNsu9s;XUK}VX^BC%Os4MKBeWO#fIxjO*A zd~7^`b9>e1o?l`~F8jU<6lI01X&=*P&gZ^gVwzUPq3Mf9M!;)RZLhzYn3Z_8d`Ny6 z?MjesfZW%t{#+SpcESQO41&#r6_PQ{u>_`?m<6LozecCxM$pSPp*hymR1>q3M6rDt z1ux@pvumUNYG794+445qp*)+(5ZK+^hJDq*tfVCw8A?E(V`|{|rxlAf*G7!|+gOH7 za(bmPP;)C-bX60ATkVP%Im1fNu!cu-ZKO3;JC`%UIEEh%PH5Iuo9b9^DV>Z#nd12~ z^}tMNn~>fkv|NMPAjG`I0ze`?FHKcFJvI}siTqtuz(#i`o=?L+9O2b0_XijGFY#32_UmkGw3$@yQrXzmifzZNV9U9M1ZH$93KHfSG6fg*2SULlv5z03#NJ2 zCkS2d*|wz1VOla`%38PL(JE*IYuhKaJ3307$Q4gkBOA(fE-;d9ggJWGc1JI2WP?Rg zxeU%^3n&|j+A-~m8rcNewpcQ>P?K;dRC9m~2vx`?9!D0_4`PJhO-{PmsR=?AvZ2!; zhdK6yG{?_^cAL;#8?ngMIzJ#}t2qS@Mt8-d&9xEdpir+4dseeHD>mopnraMWVi6$^ z5FZweMT;S{PmMO!7|6sUp^^_J?VBJ)E;r|inQ97Ta*Ezj83oF!VZagB&iYnUAXzQt zS$^MdG{ZJ_$2t0KLY1Gz=(yHH(9a|}R!=uO#!NK@k{)D$^!2PZF|9iw&{RVp>C)PO z#U66@U5SEjHu{=s2qb-M4G=Q8w5+&+T50DEs~M1V`ln-6fM?;Es%8r-=*(3S4~M{} z8Z4S&6^cw?YZIEQqQk8s4MME0Sinad)|gE>YJ`1D0UD|uL)_KznmiK$$M(;to5M0e zXRb$BL)8sx>j^;w6wl{w6PoK0o~jL3uRIx)HhUnNefl6YS0st4A5$iLvnrqGD7I0} zu0l2NtbK5HXkjrdHpJpJ$3}qAT$2C~X~T}=o{;Ivz}E0+u1OeE*U*%MCZQSeMzs~d zZa<>UHs--*vm|KM3@Q+sr^gg~+n}X~RWsr<#pdiN5SpjQcm}l7DwRiL`MuI@wY{q{ z^>qKd4g<_4A&7%*NBwtIrd|_##yI%whM5w!qqlifW$J<0Ld*pq86r416m6ijt1|WM z1A#3oeJtYBxD}{&SLN!l+}e*hKh}uH#6Vk{&^*ItSUb>FEDnU6g6VFrT9vEEmWW|I z(}RSx!rHZWf0eDrCS_(MO*-MQkyUIf$SPYe6NuE{_DM$_aL$@1n86~CCJdtT6#5tL5%XC?#B01jJYh&%WbkHZc?P*_DsYp3E z3BoiX6zqyn>t&URbh;0RYLnIN7&GwdZ|-P*v3+Wx#pVBP@<+ z&U^%!s-}UW%)=K(&E}0b6-`2Or48E;3{fVu8HP&}XCt%;&6RePbH&RjY0>_0DccdU z%Svgp2`U6za2pkrQSG4-=CV@SJbfGP&}i5^J9c#2hrF!ItJoTs3#_4~WubLb)n3-s zRWL{3w2q_gSHL#y+{k5JU&V>IW1`+z4%K1RZJSV4Ulj>sQZd<#{RLJtvc38<;h2g^Ikabav+4SRV%0k9~;IE8PaQmzB6ha{vFi#r?J<+YcU(q{c( zghw(#wVctA=xR7lOSq(^L%_wYrsfy;= zg&Z2XV$o*WNUB&lQzsQy#1jj|c9OlCkSsO2O4(r^vEhm3Dz`Jf)qv!#YFOnm!H7LE zFum;w$)=i++*LBitcKGKOo+p@rWU2SLn_tPaBE!&NAQsE5Y39+c3D@Uvr|I);Co6i z;P6J;Rl}E;brrg27;EHHVp7wu5T(ny2;ECgeVE$Kek&L{)2>CkysV4RUq$u*&HmX` zesYytW)j@tB6E7on3Y=IC_P!K?P^pV2An24tL04`#c10{zSRu|B&1m?RjP~OF?iJu z##QYFJf9u#OAlvOSgFBU;rUk01)R65^f<^DykYusMe?NTEs*osyJNcgEDW(v(rs{9 zwH9zlvh<{tyinlS+xFC@y0aiK8em`)hC4Eng~@HrUNsg3cKdtnO-XrC)5jI~x#}wj zhS(<&^o9luyUF za%zY39HZSNG>5)`xl_aLLK=?4XwsQ0BX&3|_|bzr$|;uKH|ICkjRhV`Bft;SlPZkF z8tgV5JEz0BCaD}X#B;PAPh(nfLo;pUS#tv&Qf^2F1mzVa232Q)hkho?EISR5nsuBj z49Oh%vLV#rh6=9}r6{hbo~U{YICzDlj_jo1$!nL|ak#3tz{5A>$c3R3h$UFbuc_m! znhU&y-g(mEKuBgitndx1<^u2YP$t_G;us9SB5z(b7kCc1RJt@dv5=2P^Rxp4RdWHy z59FYy1%c5*AXkXdOc{B{8M|(X!LvfqfI({-U9RSI*hf4@b4e(|(`aX4tKI_7OjQcg z0ZL%|8W=K1y`GIEaOjjD2?2`46|I+Z(Ce*~H>otz39F)lX%2b4Wp{iiXL-qJD3jX* z&OvCdiw@72Y7koPzF?bv#*O4jDR+q8wD)b*ec_orhhI6CPJ`ts`gX}%)qTN{D1ceU z=~0-n*0x<=P<3B;7KX(Xw4I2z%d75au5CHy#j&1b+;0Gq?LnY*_l0Lmno-jNT=u!F z>Ef6xTcX&h?dPm)NI`R&aNT^tCjo{nbzxAEG3WNtKy~j0D|fwhX3~0Le0$nv-FeZK z+gd%|507*-s(JoS-Fd-o6x)@fe>VKiP*r>1R-G4)le@H2qoHMSA>4@-y&#u!LY{{M z`jAG8ZBw#sU0d~Dz@RbOt;h0P4z*A#R8rM@At**GUp$(`(I#OahGMfSkH*R( zt(xZog3$ax^&m$%`mxwG%J`plx-(Zts2#Nl!aC70=;o z6PhcdppO~4wG-cwJ@RX$Xs(O`&tK*l+5@4kRj%z8=Q->X7cZn(2=VL%9tW{v^)G8e zY;qd1rr0Tv1|ERfCNx(@EK`AtU%CKIJWf{H_?v{TYeFFgH-z7$>=sI8g%X(~zr&L- z8+4ZYrR2UsHf3HMlPS(LPhG0prAQ~GNz;T%99Lu8S>dW*ic8lwfA@qqsKTzOnxA7D z(uq#xAp_30(Sf)w9@>;#3BCzV0ax$+e6ertK z`KA@sZdJb&wSQ!`b69+~OmxA`CZV|^2@qo&OpzkbQ7$VwfhtTB^03q$8Th3M*tA^^ zQgutwU<2zF-+||f_-xy?3FkGY;c@P;MWuk3Fi<+xnuPW+&GLlY2A$>Z1Y$I0$Hz0A zP5^t-E-$RK2m?`okcHufM-#yMuOKv6Bg|7~qsDSzdhD)!Xj|Q!Ag+F3B&?&uQiotx zxDXe$YXtod(Q##%5H@W}t{pnAdK0|v#)%A7e3oq&(XJ>_ohuQ~lQjTh$LU5uS~{!< z)m6O-9=6rtpHfuLCuPs|iZz>up;$02hd>X6IQ$phCoG#6YTaIU1v(PQIervY zL@Pb20D$)Pu_kpvFq20B#32>&=By$rfi|Ief=$V+%;NlW!kva1Ur{$%C)ikk6$(aD zG9wLJrA=p^UxVSm7qyx6rx=|~yA`~u2WINfXfvWeP7h~a$%@L-d4i4gz{%xdN+?Ym zi{{#CsHz?~nBkPp(bk&Oj@DJxz`@A$^>SjLm5I^bueqOjw%>5#VlF3?TRCS->vkVt zRSk?)2O*B>8(~dI-nOgws%qfCN$4T#A%aApWu%O%O{mKD^TZ4vT^Vi2iC5XQ?MPJ) z9Hc&(bI1lrDupg>k9{|fv#^c;k05y#!n`OaRuS*9uNsc-2_hsY^E* znroJ-zkkqbFAE8I<;$>6&AGp+&tad?P6iW{M=UlryOKen^?hR(m#QTMGfS#f=f?mm zpkKjtQ3u#wPL9^qP9m7v>eW@QnFw-&tJL%$XG-%!#W)2{MBi7@WP*`Us-4X@#!h2G znURF4X1bhbGkBMKpE1WT3NzA0@m#lrILk`&8Q! zGFq4HegJbFq8$k3);N{LLBP!a|m&D>0g6{ulo@#{I2A$6+oB`=?zAt>~|>#WHH(`n?DvZkaj zvy@ece$Hu=3C2o(95fLNA%+P!U%pSMo>S@B4bBwzB9qPo+YAmoS~I7T8_LY6&W12)Lp8^_Wc_7*&A=+%EN)silJAbhIv^S`;}Jo9SZeDrq>$L=DKa z8mF>}0};5;aO%Jv)v}23Kou6@NavD(7P)DUS-PaH2n9JS!Kp<-^pSIu2Sy~| zV3ZV%mNI6f=wtaN4=lBk23jp+OgIl*1E&rUs$~&lK>((?sT2F%gW;y%JFm$DW21|8 ziW`1lQ$OAJ<2QL=#BV^jGL$=_W5I@z?7dnRafUObTK3~hzy|}vwL1>D%>>gXa?)U# zDJz+nC}EQiq`1}6hy$~s5pxCyv=Src1I4eQ9pTO9V7@dz;J5|NmcIS7){gLIyLA&x z;Snb&`GIasp&j8Z82>HaPRRrcE#kn=ZszW4N>*>P29XRp%p@|F#XF}na zX7oVHZ8O7L(I*{b*+-7UkK8~mNN8qwbIJ>QUWZJ`r2aVro!pxl-mGc;u{9MevL?jw z(aZED$@bz=4TSH*M%9GaN_gqzE};qNQXD93*i^zuLDF-iM27q%B(&87IlvoJ6Vh1g z7;L#C8sI(*9JGzC3E?w>9@0#R5fkGEl6N?Q{kntrAAGIeA0bW6JTC#wb6auQ#zK#D-_Vi1KJ@gN6Zpy*aB12{t{_c|;8f zVe$3An3GK=^UEg+M%;Q1)TPxceXTiOSi?%bkh{@H1<=| z>9!DpB{0-Czm_FwY?&?6pIgAEHi2C_wJ1sbNmR(j2njLkrEg+48Q`4371-0qEawgO zqwWWTnhbEoc}r3j-*TEu%UNGH?Z2{3O&Hjv$3%c3+5S-G4p#}gb! zBIQjExMVA5Wn@kRqVpi6`3rqQwI~vi`OMa>+!+C~a%4Z&vWRWUVAbSMpky0&z?=~l zHC-?0;fo~}NZ*mbqm86)*FAWcO%_BB-_n`IHW4G)?R5(tn#HR|g>3BR24rK?f01Q1 zQkAAs90@2PAp0xd_Fts!;7g}V!8(iBH?LyTei6#m+k%SeR^{NXK96fp59bD1Axl$9 zrW8gU`$k%<9X*~k7It|m$;xU!GL@wE^DsM>L%g$ZHf1%W!Ma^Kb$Ucdk%Fb`5+ia- z3}pS+ULHz!?~50lnF!EgeSuiJcpQsO=}%q4AHha3vRZYT7E2IJ@yfFQqe#;u`*i9o zEtWA^S^6Xy)(j+DtxKm#_)MFhgmRqmFSd^Z*F1y*sq% zBxlAi!9mX$#sHt|q;Z}CA(j@YtkrXU$8M~BJE>Gygwl=1vGc0XeGg%*T|3N)2-cLi z7f~8^(*U%ueLEV5LfFzpLjg2eH*!X6&yHq)rcwi^QmcWHhPH9jIGH)eF0T6Ga4Px0 z39Y?48hZsuF4sWOTf|7-fIzLCI+`U=Q7t`@Q`)#0I1`OeClb=zbv7*<>kVkF)}_M{ zI;CuZ$%dK}tomeXD~w)1;g&=?nT8n+)T=iB9Lo_yS`<3;E&GAG_t>~|=miV~W3oB7 zk9J`EX>7bXnxapaR@iJlr$*eSv2o^L``{#%WPFaXlg^JEirSaM^4(C(0+wSa>j%n| z8&8g8F~(}_E!%IT2~Ax(wIhcqbE1Sx81%w!9zgPq9|woR30LZr*a{{XH*hGnqM^gd zS0(YyF>zJ*-8cJ7-cnOX>sBR3PG~hU0ZBJx(g=o}M&%|~OkZ0x1#b-2Yb8n=E+a~w z>9c)0jSGjZB+8sIW+@mO2RZ>Y^=|BUuZ!D-NgQ*(?=BhNkb%-E0S@N5SZxQ=ott7e z#j(K3l|puIyGiVgICMcEEWN);0FfOwRt+Q z_H8I#By_3>A7~2Q%mZUiX#j}IC9(kWa+)&SrBheQrEwr7m4$WNkWAIjG_qs`u5jqw6bm~f5P7pSsJQgc~l^&4rO{XRRXC-Xu8%DbV zLStkXHWhNmENUn{4LCzSde;Xn%^)yqQb@Lp++!yKdRGVTr?!_I?2)*PO0$tO*YwB` zxVk)!IngCgkmb!D)>FUFUo!=a=}XazGL78n)R%sQPMt+=DMCvoB};cxL(!Yg0P`HL zVwcnIISW>(J{W68fO!fHW|w9qf!%CqMuVk)xSBy3?9bvwY4yRx zQyE5tPwlJWsD%(k>4-qOKr4Mm-&yUeVYf0E5@jqhXSNLG^q$qen#hE#W$@43z$OlK zFsOYsSmM+Hv9wZTgH$`NtUp^JS& zjkh>;8Pm4(chj(%^vKZ9+F>IlJA|0kqZtmli2dC8v)W@Lr=}I5^yi?t%<+8#)A4F= zF%72>bio_gRkCkYp4AQ;2{aa+4t7PwJ2}v4^sIK-08i47>Xz}U{#a8H_C|ZU=hxpKY4R6;TF^ z}|RjFw7{TD|HVfq*J@sKA}3KHkWV|mCtU&SiSz}pQej}WEV_PDmq9<0*#l-4`Xxq>h{RFHkI?1->t;h+`umulp%$ zP5%Op=8)c(_StL@n@W}jMs(Kpp-RK+d;#aIzM4jf^a#}^B6E7^(99lJ<2lR3#eqk= zXtIphr_L1}!p0~t@cXf+rhh@3{6zeT12)j8eSiM~r4z97#j5g*BSzIOfai zl9gem{P2F6LDRlKr9xWimTA_oYapBk`YF^NCe40IJ`}?Nn;R!@ARp(VbuocM5YJ@` zM5c&B1rHEvoJ_z+AuPSCQVbfl%}v`EFmNfDgfY=cy<^gRvp$_#hOiKxVdv7`)j`*4 z)5jxC_W~u^#aoyBu+%Zs`GGREi&m0I=42EWS&2H{=$*$g% zF2O9rF=D{TYWf$XtR=npoY+zw#%%1j__}CwgxI{oWo?aT9L&YLXj6o28f2Sq2!=J) zff;FnQ6n0T4q=wS%p$gY5COKxz#Y|taV-0dln&}?Py}S!$egx%wj%YTb$JgtlSVBL zsG+8Nfu#tuIb!Ra2H){m1GiI0={<+NlvH)++3C^SKD=t07qB8o%90!A*cTqSWMmv( zZSrwup>jEX12u-18Y3B0}UZ=mIO(FaRz zwaC?SK8-;HOzZB!O=B+@+R-w{M?EJ;8YUz3>C~!T9$N?vRqjW#WS-yZ(y28)2i56d z3YR5*Po>UXI(3Ot(tahC#&cAK4FipnHcjJ1=rGCbj7$f72gn}bbM4Y)dMYthrjtDT zYJ@*^!!sZ%CA}+jrcOS6AhbDeeY)Pp(!blq$g!HS?`+)EN}lZwWtw<3(}A#7exTdg zrkTVpj&Zh2HxHNzG-rIj2xQYtVy7LZT`tyluL-jJ|gb3%EwI2r(Pd1HyholHF$g^7)NRvrk1Fnxv zn*pUkVsDaAgO{3u1R|rt0teFdJ2|pss8V#>m>gg7!z>0E6kbb_}rqS?* z!-<10kH$XCY06udPVKU==6HhO6PXkrGJ52}YOgNKDmkYkuNf=koQ?e;@}|iFo+j&v z!fIv);(YWIM>fsiyHwa9OS?n|ISKpP_<`+MJ9dL2mKRyzv-1%Q*nZa9rd9IvHUyP( zIoV`Nn2{Mmn`Z1?OeIkvmyfd#mzD#qmo}G8G7L_-WXgA@!@Up(^0qg1cu7HZMNW;$ z97;o2fkXx*J!M#1O|wuaQd|l}iWD#I#ogWA-HW?JvEuH<-QA(MOR!)8in|1YbMt=p zPoC_Y+1Z)RW@mTKNM7|!Rj|aEb0HAt@XvEWy@OD=u^M8AwYZe!`GFKpg+;)-qpeWcRrg)zqp60ha!NfB7loV)(}ZS3uz+x8 zJIJQ#$Zp0tS~RQo8;~mwrOJkOgv}W-dPpPw9sRE_U6^@<0E%q=( zA)@;`Tr(rhNhgbPLaPHm{@G5oIcE1P)&I0*-eJW8?GIYkm0T zXWjI9&S_r@O_`e(fg0mb3b zbKI-f5_F8gH0ngadb(TOQS3Q4CXnl^gS@SRE^k6Z5g*r5zwo8Q`n+XyF$0B`pQFzv zRWo3onp2aO-Iy{o&ct{rD~_vKR0~iEK$78P`EIt((JUiCVLX)vOG8&{_ato!1vFGw zbC<}@)N_bs1XF)lFD*ceP%XFkro#3fdW1jblpVkoCy82};U|V_%EL2<>aq@Q+6nsD zB)|4g8@syb(zmWvL5S##FxN%IQj`sif@9N^gfYnG9_+ivZ!Ou&E>w3Y?7 z$^;8)oA!DUnJ}>bJYH(A;cQK5$Hkz)Mg!xaVI)5DAy1QU2zvC?N@Xirk5C zT;f7nN`jZpzrJu0{6Q5P{0fV{)Q(W8QB{HzeQg`#%GLOwu%bLbEjLMaBHXj!NfM$6 z;J`f+``#0TG+R+vxc&eemQ`BNTp4zKsxE=!zoLL5ssK=)ytt>LNoiT;jWs@6u<`lD zHYYs_!hXu{MQmfrNQMPAWfz&S2*_Ji}BfuHQOV*!-@%i;jmKrB^DWS8o$i8_4dVJus9A2=F!GR6#yC^tmhx07pbtq&|c#9B5ITH!Io>KokSA?Qz38Yx0=#F!_o zz6(CA0=Nbdt)lbQwsND7!~9NB2tXIR6+O8dw?G$t-hu>@7OicS2`<&@?h#hPtvop) zvTr1yM5wlSWn+S-aB05uv|WS(MurN423smKP;7=Q@|6Xo8Gc%l`RX$k$QNXCEzqcA zV8_sP^jTyq=v(tc%)I>-cH<8FAX|buU)>QkWk&cBlM`2m$36U{! z)e)`7(uFKY8oOikcn-+>av0c_Y;b#S$aKa<0*{;aMwHETiXQjN9$Uv3)XJRVH}?B2 zCm%%2hz@J&95m1p`I~x8Wv}T~tgS(U=4zaxHx>N}-d354(u{%6hYCwbwhphihDoJ2gfSxbugt zuyxzxxmpdCGH7GWJg-sMcRhT>MM>>BXZuJ?KiC6NnD}pR@HSZ^$|weas=Wc zE!{*?1Q=ta`v^a^@#HxNDKo~SW@o#MU1HB*x_$7Zs;S(;xF90^KjH5{R=& zuKq#oKc=No83F+dUo1(w#-p*r{}gT9C9gu&k(480X_?mkpCGt`ONbg8e<9u3{w~q} zgCQ6Fan%_DNe6tqzQ`!JJq8xFfY1$IW32ff_T&)3uZ&a3A!30pvA2(R$$V8kQou3B zDgv|(%SxE+Bam7jX}aODJrCV(cOUkIr^1dRo8hjlG^B>RF}&SOSz{SzKw~4d!z$7` zZu4oh@V$e0fpGkl!&sw(2yu&JVLue)Ab^wq*yAAkBj$EZ!a`f=CR8N5q{2EYNS{_D znNACzU>;})kF+$s^ijN(RRq6G=r;WKk)^sFbdZn~+{jMzdKcZM#zLo>3f}K{NAtKN zW2tq9bfkzgx?ew|<@J`m~CkF$aFdLlKr@`MtL`Oj3Og!Ga@K!-<}%)SuY+ zYL=Z7H&3G;Rn(tAait4Pkg0wMfOuh6?qQLHex@k#VeGKsY!x#iS~6+aRyB-`wu`t= zAk`hr0CL8Oc4ATOPF$kQEn}=4uazQi!MuC-1PK3$SydoJD45Jr=2wi3(nNPi4k_{% zU7ANb1CrxdeIi#Rx~R*ot;xdtfvB>k>LVQAin%G$pvxVe$-18<*A=}||5ey%{iKvF znX0sxgCvV~vVmx#M*gtkn2tjyj zhK$1mt7pqG0Y1>f4;qAa-54Fe28|rqRRG<-aIHEjnlLi74o|CR0hz@U`7sM~a>78p ziiKk|J+@jmoZ=hNh^SqRhCcC8GiVDR>OM;QktN-aG}|6_GyT2OrneuPnJTm`rg16n z)$b{6#!fU1{hVqC?gTVYe#9r~=CCZ@D$z0tV~&9FflCc^UX~5Z$YoLg^dSLFbGi}D z7`lfQgtwSt!l00p43Ip%E(@1qOD4ieHrRTk8sKaQKXxs*=-_0cF{}M`fo+XzwRx{z zvQ*d;$1xKd7v1)NF};XjgN9X$E7~b1R9EHD8jEa3NO#)2k5^oHWQLoo@nOz*o#9mO zW9bFbY58oetA9EbC6zoWg{1{pUk`ssw0@F#`tTHH>y69vDdzSy4JpQ~_oorTl81u% zB(8;NaH2dB>KOunMtzdvoB3Jax0hsBS4x(`Y`j0p73xHWX-A31Mq|Meb_Wv3hy*p} z1!AKdr|Df~AQ-^eaVk>Rbp{%n|8-KmI6b&(RphF%U@tPdn^ur6aH?`5n6JvNM`$L#r7;gJd)4K#MV1^m?H}Sr z93NT%5A>O563fRI@7@kd#M5))DUD9^i1x@e|@_u zY5&D8=N9kO7JXw;@q2C9Yuu z9Xq(e7qoiHwj*;5s4j#*SX4|^ucedlLSq{Mwm`yfM%8~sf2!9VZhkT+MnhgLPg)kxJZR9NM2l-nk28c;VSvo`@1ZnGZioI#2dY1*%>RFX4p@CxN` zU@T?ZJynL0WpQNFpnwuACe9?}Uyebzbb3KwG_*O%l-B|dh3QmM8N6qR|9+o#64a`SXk>EL{GXJ`X7IJ>rWR1%{P8>GC?>W$}f8YKDtk$nn=or)41CRXs84Ge6C( zi!9kt=n>+M1B&;mE1U}-uI%sY@j2%7X2t^%UmW-m4fr&uHSkz?&0QZm;($O61{R76wS+7Zm z7ZK?`wcddhgYQJ_k2yF6dOquYd4Gi_y4$8f@WpbE%#6uhH}jK)e3orM7;cEW4+jH z&~2s&D3aj%N>=>4HXL=0uv~Za@24Bsd6pIK{F^-hozWTo+Y|639EtGRcEZWrYDVxa z=GwYcaAkunR*;qHz0K*{0+*#)Jbfl5S=M=)@p$)Om<|FXfNh0i%uG@J~z%deL zFHmI??;hWemjPI~;?7)-1W!_(MwX%K^VyH3 zvc*Um5nuUq5B4PX?NsMi4|WegB+ZdbRgM0|c-iute?;OY*KU+ez5K7l%p|j)4ELec ztxWg7IlN-o_v08)ZO^WP`6|uK+-9onX|Z?RreVExR(vEqJU>@*>{*x@>If$3H$~hog?C(mhql%`%bXu>l3?o6Ctl2fm`Ob;u&a z$FN1ldQvAmD>$H;_N1_b-6N&~YSmeZkOK{RQ3kVPM=8%<;6LZ+UvC&aWVj2iIhm_v zTBAT6oU#^Za9gMW%QmKGOM0XY-s+~0yBK+7Z~nj%Q{h-GA+HZ}x&ktI@A=}(iur3j zupRQb0JFgGiP)(zfO1{5l5IcaFl}eOcYVG^M@S8{u&wot&SynSws!o<1Y%w@c_#Hq zMt~(7-_2I$@44B zkU7Nt1+;dTeLKPh6g37=(0>KTc?Ku^;IktwFiEf!|J*)L14rQd5aAME^G zwmz4f^W2PJq_DNGQQ@L?HT_8Um*b%Qd@nB4vt_{5G01?WX4)VR{OxP}`wP-i$6$T( z*#bzRF^qAk@cwwQVzAnzNyS2|We?ZXLc(aJbBzf1$D2*+s4R2DZwf&tExynXF}}v2 ztW=PM;@5oWRm2&7P*NonR||8FOKqT10uC^JVe7104)+ac-Fb|8&rHA0y?bRycm%eNrhB z&mFV&3@qxUTiAoe;Yx!E-3=q9dD7ACtytJgJnUZ9&=xjsgW&Y~tCh$QaHQ_1N{5?V zD?|34N@a0W6J0H3`O|LSsnyEl%IRWEaW^X5e@OAo=eHw>D(K+Cku=En!(ay`xxww{ zK?%Br6~SjNstW32yXeIfH@LVdJ3{+-{#5O7lKRn1_Cz#`p6)5m6QpiqJJX~3cqJBuIdo?Q6QZcbIY<{T%tGhr|(xfL!FEn;DC++CrrgUz=M!p7f z#si{JZ;Ia1BdgBA9993)dUQ;`2}O{UBTo?@uP}Kaq-pbY6Qk((+=Z%_9?GnYXy0n` zRMJ_HxZ(C;ltaUj8vZEm^BL)XeH2St8z^7CQ)>thfWJ~fF^p?ryQiy4GgJf@nYlQU z^i)3q?WrpkjdV@}+9^3gh!P~bN^qFC7M*R4dF%V^1{nF-G34UCQb)|qrV%vz@HWnh z&5CAPc%xe!0>}_Zvkt^y^vEaJsH5pPw8d89ks?YTG4Y8`xcIm-LL3?#77tysZb(8>J-rm!GweSaFnp)`{kwqT18j5Bqs%swIw}> zGdC{vlEx!J0SsK`O7*tk6!rIT>kY>ODUx_8#_-8MiSIr7@*T_3RA;tsN37CgO)n8q z;Od!0Y<+R3f@wclg#AdwTV??pa20S#8)PYCme9(G*aNo_Dx1X|5_oZRK9GvTCb}h* z2ZQ&OiHdVF4?~&%!G7i|&;gJJd=Pb~;n)z7MWCY-N!z5A7s}>ZM5r*Mb44m?=qqIJ z=Uu{({II?0P?N#Clq z=wC&>7=;{XQ4~au(!_%dSNhyvw6q}2f~K5)Fig1@LU3e+A8dUOJ}}oKk=ASJWz`Ob z+dHX^4!%Hjnx3#9eD^1n7%Hv$ww|VQ_Mr>Ybhf@%2HQ@5aNK32)70MC95>ztk~2iO zT(ADcGK}^Y{0#DEbyDkL!sX)HnN2 z1leTK;S)?_ZMDa72cSZs8B$pkGTDZWOPCr@5FahR8jwr<>Z#`Yum)*F^%O*ZMab&M5(JU6VoOO?r*Lf=Sn50Dx z#Z>PS**VhB3PyFgoP}YSxVwFOr}Z0B5xvae^l}%&cN*S?zI) zQoqlWawQS`Y|39s3R9@(ymfR%m)TBvU{U@Npt&w(b5%KKnD*t{WUE?sDtduyWP-rA zs0zw@M?4?il5R-&g*S!l7ek8*6ZE7~K>|2;*uz-Low<#Aj^Bz{HXr|N>@Rv#$Y_6? z+PbB(b^;{dvlq`0$@~q8vuS-0k1WzDB&nyI&6b=Enf|6Z;1NlAKYX;_dZ zr<{o_Bk>o`!2UlB!os19gkVa!%AdB+W>Pcjg0pF2R`#XI9&H$}va7cvfZa^267@XZ zztF$A3#qa4IT^nFUd0 z^dGps`n~q!Smen!2pAS>Q zai4{a??TGge!!dvOtoB1ECKLh_G-j(dhEZ%j!fSDo|!KP86TNmH>M_Ak2_?7%LXcPF{HNKrOFn6Ya=F<;Q{m_22QPv?Y8~V`mNmBmrWE;ffymDqyG%n_u-zy+H1W2 zp?Zd_26gXt%!I`_viSEi1=Vx3WQSmKd|0?FW^x2HruNBArx~8csfk=KUorL!KsRiY zA0E%1LJ0RbklxaUB_}_!meY{1=1C8LaOyA5NJ6U+YX@=xOdc~9{V{ed&TX3oQ!^`w zt<42n2y9YabbJYcD{**gd5Mu-p^v*y!e@;h9E}pxZq{QR-Q=-U>2RHe_w1!ig#eah zC|ZzcXo`5xvgg4Rr&&ivUX8yJCzz~~Z;l;W@Qi1+=mOYFz>?t7I{ zH0XADi~uV2*k{h_bqA)bL^u1dlsP&jihz%TE>hFdys6ZfsUi6Hs8^cc;rY@LmXXhSxN@mFU;Hru zr3kFVl;y_dY4B$GE-wg;9bB>5telKjhACNs2P*Z=txDx2GNW_~k`t!J3+U{u_f4qW zoJl*lZpU&o#-){nWeDFwvn>tlpm7bPuKjSH9%nq_)%5FJ)7^&Jf(&~Tjf^gGV=$e7?vO!~{0~^D*h^_cIhtWl+OzsI%cd zZ#P8zV|k8!X^Q9g#rm!hItq1e`2>u~FV`d9bFon8Z{!o`Z+Airf14tHrBc+$_n;vxF0DSP%AK zKN9A-R)N#bfOq=pXSVL!=|cZVgXt3bSOVdy_0x4BgDcS@$I=KG=YWf|-UN;vzhst| z(Ve8xMYv>Xcq2!6mhussV;F5DVRvc;M|H<<90`7a2GryA&hhHu;`088Vkw&*1Jn66 zdprG1!vk;k&-Kz;(qOJ`iZV*+(fMEfEth&_f`b}0 z$uKtqWem|;>Y)HUmaN;a&h-(_{uqo%8Yj^Nf1?%TEqQa8(8YxsvqcpmBo%EJ*s(tB zVpdNRZM#<^i||EZ|5>3M_4yO>*=@#_cZ0KHss9Y#RDzy}3<51`7PeZvmYx~0CSm^z zcm52!GUao2gvi7=ah6H4s3nQps|=Z&4$dyFvc^KCTc_A@mo7#a)cZP*18d@I!`~0S z1*h+D1r7?4fb;ZH+N@jzi8HIGa<5)yK!ogf1V$Gy@(6KQ&Ut($LXU3RoL1t&qF+`^ zB~ov`HU`xHnjAa+J5$)|4*P0t(}yrymA}FA)LBz56acjQNn5BnoXSm6R5=|hy8259 z)A?EknR*O%G&;02ZEer$rnG)GVN7zVmhn+I=f7B+iWt8NvEbcz52^j?bWkFhM4C7f6oVYO_8rW>7 zC|?YLmsA{r$l@68#|N7{^?Va9zrYJIvoNmTqogjRtPXa zL_J!p5v2_Z%9pLOMZm5mFi`=(v1wR-Y+w+`-zx* zKA{#@`!||{qQv`y?KQ3Kk6IhqjSW{fI(?k$7o(L)BvE(7Z;EC3T!dYiyFc!jh!G1q zVH3^tjP(%6rn?$JwS-|OZ(@p#*?p`gJXFRRCz4nq<&Hw)ppB3X652Il1H|aR#qLvMp4JVzditlOD3=WSq#EA3rx%Xd92PWy7GtsL&G359s^~ zPj=ETXzMdBy6(EF0^2tKy9G-_;h@0$FIkEdUJI`~Ieh1FOkyc?*Lj80>;m(ZwI;)P z70U>uKwS&;ysbp3@%=rKmu`?Sr#mce=opb5YEG6dtElgkZ<^&u(-F?>8*L1@GbK1H zB9g>JhLR2{fM6N51n_@O9qrPOV1Rx04Y1SA)>-@-Zu6fk8?0QDg3zcD6rHko+J%on zc(EYcyF6=3EXm|OWdlcz{m{!cYMF{sPxQk>QS)`%xPpDB&eF+?pV5IyC#&v@H?v67 z52VswS{|oAvF5h{moX?ooBO%-o3zA8z+6U5^Wz$6rx?@G#o7%)r$1)slOC}_u>JgQKC3v5khzC$^CGVNv2dxz{> zgw^^%{Hb|WwDb*VyvZ`Z(@(UNJ`+vPdp6%S`S0NHd+!)KVqgCD1@p}0FK|UR2BM6$ z!GtDQa`!{*Ft&&XPC?54V1*N{W{#M8x7W%5Clbs`=U8WTd%5rYc1jF1ZctlB`^cwK z{qdwDnKl&m571N^1Dxa6{}d{C*lm89o}Cs^WBAzS(@p9lbGv)VYq|QjI2!7*`Y_=4dI1qY^;9 zIxRCl)rdkqJP0y+<#h<@{*3+54t`ldy~uLZf=*k{Xp-YmJ=k+6OzWPFgiPHxzD$y^ z5?v(NhjGUN zTBIdM5B71gHYAwHcX9-1gFZ?qjDZ^--pXGH&wJhrSaw`rD385M#*OvVL?K-6(X3aR z7NuP}KNqCcU^ELO>OM3RwbzhNl^!ADarm^g7DH`%_+_EhMCJvW`A+3tA?rWDf*Ya% zjH*jx98ypWq4;<7KUXZ2DCBtBh(h%-wwM*&-wZM2#_2}Yqu-RZFe`_-in7)idgPG0 zO;p@Yk)Rr5J&#ByEl!@lpXH;2r#>svl4-VrvhlApib-4Doo9bjk@7T&e$EAPt&Hgf zPP3;9eW=R#7Pl69r=9duoA!6f8O=9+eU3*s;wsAYW-@jTW(@NzFl@SHM_Q4RREPXW zVFOWxCt+zF+LCYUE*aUE&%?}2Py|Oi`@$u%@1qO3u!<{xBQpu3YZe<5OIDMXAO`mM zoMFY}#Qhf~4!L~G!ke%BVKIcFF5*PPuBQ|%h5~O#0IeCy(rTahhgZO(Cus`1R{W)q_nT>#`!T7q*UwL%F!B<%{~`A6 z=!x22V+8nOv|T+6I9-FP;uSBiHHCQn)0wqsFfRUa<>d(mI(yu$myz<1rjrWv^!a!{ zU6Kk0nzR`@@<{PFNXipqY4!QO52Ovw?=JaX3YjSsb^1JAr69n1IX|&7|Gd2R-;(K! zPo`1o^>vO1dO$$__jfTxZE-X4OmS~N-CUY^o<0Z(2tB==ykZFT^9c>`8Et>{2HSN% zzZ~^lMa|ab2|h$_bU`j6qHem%sK-&o$g+8w6SN zX(DGdr$0$JPR*UHo-hm8zBAPKISOaUIKF>}@_xGe-1zG6znp;G0t6nB^qZ_6244oh zzy)%$U%kzzuj(6x#IEYDx}7T3W+MNM%B~*enVN2bb>!kZ=l$>FY(H;iNHh{?fR~rI zk-f!}Yq-MjI+|GmS@8A?aARc$a>TPyz+BQk+=~j;*2aJpd(#u zwm<){A2Z+6W5JNA2UbG9K@`Da9tUc0W)_HW^B6HF#^e%rUUS!@V!^uegJ zk^+5w-LJzY7$T~@q-80{S7YJW z4Gj^pLKkQ?)@Qq|Je^x6^C_*l3&<77X}oykz!zcp1^)~9+`L(TlClSqQPPItA~TYy zbn?PG$eiib#`$_LO3B$Et5D5`Q#Cd8on0qDb$AW@uZXfMoC!e0a!YDu8HemnlJJ=* zmte^eU@t9ndZK~vE}hDFx+)$^X}gOS^O1~8FftsloZ;|>^T=) zuOre$cQ9lM9Wq3ySQ+_~kB8u&#&C#YpV;)Z?^c0jEMOp?xFW)0HN5kY>pRj=Wt5Vt z0qUtz2LaxDa_xB=i69mdk+;Sa=J19`HpQe$VV$D>t3?`YcqTOg#`FFeHIBgE;abJ7z4!`X9tzV@H zKOXz?g*48NTG17HJA+BNfyH9KiN(C0c{1;*Kkhxs39Z>Am!f45Ji7JhmA(2B#l5w| z^fnc}A3f~-9h&*kz+SNNnQs`fnQpmzKuHF1l$X>QS9V7eJ3rHgWy|$*b>7NmSK6FX zw?cQA#Xg;y+Q>UkEsj_H_5qG@_J|C+jvhWS_#YmHK9)_-Yf+r_j60@!u$>rgKllQp>h0j-uP=JSx`eW?AyzV^{w>^Fc|pd!r-f@dIDQ+z9N$Eb1-T-RDM); zoNStg+%eAjHKUQ9ejQWu&q|`isM6<-@K$Y?QmWf4>dkn_Fm(4(@RRrR&3Z^3kloEc zxxFk44@8yDpHBR9dUpae#BnkwGIXrHy)no+cW1_hyVS)$hMi*@8-V}ldE1y5z+tzQ zT!xa~p_iX`K^XSD`aJvm%Iz9tem3{4NAg5&z-~5luJbQ0&$EiBZl)XPd2s8f5TZ6) z=4Tk1!oey9y3!p@p>BS4TdONmvhrqmpYdmC8+6&$qSuk-%V7v$^v!w;4i>1fEcjWF zrQpxgHANlM*HlB!f8Y3Is<_^r@$pQ;y1{F0`Z3~_$p49a{hxk%v#@@`xG1RUFp!IR z_!2vtyNQUB%4_R`mV?!Nca6mD{TY=_`(+Fd#E!dVwlycHKWk^W*j|j)pJZ!FR?8&6 zKVvGN1pj!vry#Mm={CI-0AX9W6O=4%UKNXKYBT$%{aqSof*D~>dtwmnOQv%G7P5>& z05kW~7Q@AEvfhj2c=?nN|EqO40qa?b+XZ7e>w1BdD$O=`czYMNC%xeq#yyLO`u=6)vo`kR(zIWq=k^y8h) zA=_U^6ffpx%xUiK1NxO)i2K+!Uj5$fY%K_P`bKY3;FaJX9&^D0 z>FH>Ikqzrb8XFW@rnDm5Y{|_rN;2s_CHLnqN#K$%&d*Nd{4FNL*QS&pVXYHOnvdoC zSzR^BN^xDAC?+cMg9+q3@MymJQ)XRY${c6beupxY=w{|wyO^a-IehrxY`rc|axNUBR zxu?@u^RtPQA?a6Y`jLw4_B{+%N70BfZmA!S#O%&T-j!p4`-fgM5@MGEW2}p{Q|E>~ zT|%;plwJB~RtJJ`T{S{RIT=kl?Hdg@q zCWS*vA|StdI1fNPrclaPyzJrb@%x)zC1tnn&{@#2oo?yqDtGEBDEKgQ?kJj)#di zM~gPraemd39$OzL#AwGi|3={Y^>|D#Y0PN{g6K-0BXv3yex8$g$KMgur(kcLetA4K zwE49q;Lu~TtZX0PIq4a*|NPkPr!?>fg`dNpCeR-5`p}}{-v8iV@a%@8$!ux3K$qUC z9>bZ^L`N|oCNG#k%w(hbPK|fZ{In?qY~4%=0Ps@>W`5W8DOS{ku=serHD7>8@jk zV}ria=b{7}tCO6iwcAO)8iBrU*RGPToV1G@$K&3Jk!OR6_VqLC?)^(r(ue1BJO_5h zwF4-}5j6pgL&VW4SIHq1E0_L$)4pwb{pZa=>n9^yOkFmvZUJDjnlURn$|Sf8Z%FfH z;D-0R2REJ7C94tX*k?0R0p%s9&ZlYhK7nk!ZD*Hg(D`z~rVqW~tN8%{pdRAP{Bfd- zIIFhzy|oZC$3SSPfR$H>CE`Z$`?D2L&0kPq((iRT_R1z~24kwsXvWVcBgsbMKP}vT!=;Y5Nfq%8Bs_r520g!Rqo;Z)MC&zu(*Nl-0;d zpL~=%h}fTFCFrezc|`-)ii^ZcvM)Um6gopx_^7#QePt*mso*Mt{`H0|qzqCe{TxrfwGQ)p-lNz$e&OcVjo#H4|1Rl*y5VZvHd5XB zF7?L(9TD#V>AdEab{5GVe=pTMD?nzTmuqPQ0e+s>i{a2`jK_S?w%Ys3e16;;T>FVi z5=r)6%aiTBu7B8NU;sG1sN#AezrLtf{`r#r<$PzJYf0ZF!vFVd;Ez;G1A+GU^=6dx zXCEtfE3GQ}_rk(!L54~?qnAhiUuK11$SwMoI_TBrZWBYbE(sD(G6i}RiZ>*F1lRH< zJ!lbE6dCTd|20TUusLEft7mui^FAf-S;)> zBw0wu|HiZ8_fdAy?7{5Y*UR!J@T_M3%%i@M0+;1uoKWL5G#2eU19)-fTWb41&V6p; z_Okqv`LICws+^2M?E3I zC(ywAdAI8c&6D@{4}Dr9;o_cG_$Mi9mW*?dBW*R{tAw24(_!~9O8x%+bTo~!uyvPrt* zXag6}LxFWsqVY_fn-6Hd?d90^k02fuT z94qpIWDfgGjyEQv`HuZ)azW0Ktzd2a;S+d_~cBG`S>bKIGRGvV#2Gtq$~!$NztH zE^F;cQ*cQMHcAY8D>Fb92o$vNDM{_>P6m3iJv(VzR`F%}(=>s8WcFAI^W|1o;Wc6mVw&J80O zn62Zxz4)JWUC?L$i6(V*i;?L4|1A7REet9o1@=?KSa;X|q-BEQi-Kg1PAS3JsZhM8 zOY{5x@TPi`fq^jlbqh@T&MnunvxlcGGKYRrm+Fw_E(C83@Xha){9GR(QyD#nmDwxs zmA@=ZedTP-fUe*=cKPt}d&?xjo-;q&0|XoVS8kqZCBO52>c=jC=%UqVs>>ns%WcGo zT3}4q?1mTQwT&XM4N|-5YsH_tv<20nkmZHG;j;H1mxA9^r7u^g&$kR~BfqwF4)&RF zRA%G2e2Hz%IIhEwX`Q_mGn?-sZtas~fLfPd+d?FqzCowIa~7c1LxTL;v>z>%{tg(k zcBd)2GzaJY?!CpwC3uaAj=!Xw0Qe2e($imXTpxP-IK9R~HD;E%$0gG;{{!e}*2NCt zx*H-u<`J&;PJ@?`U++B%)JF%Aih6rbrGKRz2YEh#qEF)EX0ib9p7l{DP4Dqi>7gXQ zNOv|*XXUz1p9uGfJ+k_{SZ#hOEYMQR1XrtA_vG$?7@MVAYaWh+Ky3*-=?^bUH6G*Z z8t2caZ8sQ3?=v%`>jEB<1nXhUk)r%>oDY6m0)#@jWv{L}lxEUMmf80ND&vr*+w+?H zEv3qq*~^|h|F-wFI;SOd-Nc~OkT4ngp{6N-|FZ_sfNw1@+n-@svp=pdLrnK!=|~!I z*5BsL#$52PPr(hOvuQG;)}hqFqL3I^L+A`jwR^n#ObM+@=VwGBpj7p6w`3N_6X>-0T?|FE}<)|$ulP(thZ0{6WmxVyxQ;@fv5xe_$%uW^uV(n zBRWfSONYl`N9^1m`49U!x36;D^hs}JxbfqK9rC<}XGiy27jJZ1?_4I!p2i>d)t>I` zZZ|Ibd}_S=MxOZ*@sB$J9dCop5R5g0J5Ryv^R6eo_pcjGe5x00xvfqJb>OC@!_m4M zye%5ix3KqC@cuTy34IN?BJg@sb6qCnS0bhq_^Pp1W(26qe@jQq>m5rDU0xzbZw766 z1`2@&!?!*MHl*WFXg%8u$8MfB_XfWbXHxA1ciBC*ZxKA|=4IF3+ zXeoMqYq>k^*6i?a@~u=le9Uu-JGwEV{MuV8cvHhImTZKpz+_ZG{T|_d|7N#_a>ogR z-!h_pG))rXocWT+@9sNO;bn6OrkOOlx)}O5Ym|-Q3u;->f1V$BI1`*bi+5%YRBX`L z0vbhcY{k~}wM3KNG8h`-&1tzd7JdXMRzCs^5`*We4DJg z=V|}`FuS3DAN5K6WAo|t3gngfw&X(m6S#7mH0$Ai-5Y@cYM+HDJ_~*HeS8+}s=rlu z`%b!xuU=aw_`WN@34GtC)3!}MH&c8?Iqv_m_`dx9dbqt@@6F?}d`Ue1@tm>tRm$rA zqU6wioNB`IJMWZisn?rBd;ML!`c?Voq{o&!_(Ss8ew`{qUxu8#j{ZJ9Y8yTHFV}qk zo54DUo9;aGN_XDd^2-g7n9}VcUB^2Pu_kd+P}UY{T}qJw5$bNy|{PzVidD`pBKU347r( zdGmadxiRepmu&S|?S=E?&56}s;QzPjvzs4$FR;4g&*>>AzekQ-<;eF*LTZd`OqlJ@ zDUbMhih8_L@#uB!kDJ}onoob9cGks88?@fMR~sQCI^86FvrSPIBBf3GM&2=JNqVqi z$fc;YNV0m8H4*R7m%NLVrYiBeo+o!HdM~Z&m#@t_ef`xtue%1kuEBZvUE|!&cluS} zviU}@3Y^}{o7Nt+c}aJ5;8V8MT^;z}P91n?cHel7+kPpWJ1~EkBq;qLuPYzrP7=Qi zNqqBu9Isvy@7BTJ$>KX%{I@5I$Loz#ed*Q7yU)IRaqs?<=P$PNKUa^Y-$eT7>d{G& z*8iBiWq(-uVa)RSN2|Ylyz`f*4?a470Xom_J?G2AN9pDCgXb?4etY)(g}i$7^g;T_ z)2GvW?@ceC@a5{+C-=U4kuUT(iJRv~UtE1~`kU`w{O$yw3F7L#`Ssc9??DfD{p@|* z^|SXMJb&T0mu8##k39S2Q6}_uI>lck8{)mATwU`HWaC0sO;pu>qG!QfOg6-{I`0ZyLaHwV_@<25t!)`xuHllg)`6B2m*=zYHY+bKVDhS!JFug^&D-%jr( zjz2j`to{&pdiD793IF!w^kcp}m|mWorlq-m`T@W8@ct=p|HDsDr}xrt?>+l~MBaNg zS;h~NjHg!p&-9uy{jNTFls^0Z2M@lUoZpk${(p}CHU0Y}IUFx=ka!&b3xD}IITOE1 z>DgbT|cZM^Yq)l;!>L=^1n%9^IsX1!SOtXQ2zSr$tSPtN}qi2fY1NzX<`w$ zLEe1w;N8TqN1vp9`+uj;K8NUf_~>2&3%vT}(O<4U{J?zo0{`KTNiW;!MNTiGdBN)= zejcaDUZof4gAY#yXddBJ&aY~I)#>%&hxhrpXYW2qH+u3rzI?)ElUMieeVjgX|6baX z_wT)%{`%nE^xK0EzI*ZH(X;Ifacr-ieRMMY@bvxpFZVv0f4I8;N!n0XAAE@0`{2U| ziRRVG;}5^4=j;Rw{bTYoa0{gEdGh{~>4hKtKY(TKgUJ#95BNVlgAY=c*MsCO6ba@0 zI=ye_yfBr#gBtJM!|Q!~_WsdB>`C15)ss)Lp`X0_DMZ_E9`iCEKb`jWY~??}{ru%< z>YO33o;*o>`C!`rAKXvJ@WK11e7XOG;_o5J-Tw{We)t3zIC=J7`NN$A{hku^-qRC) z=;Yb-Bp*HFlRW(pACk`M3v9bj*d^iFN1yWLDnheM;hR4zO+}sMnX?^U2 zj@r#6?S-63%6P1TW2=ZBNu!Rv6;2+Y=q}Vm(cGT1Ati2Nc>eJKoegs>hHG00HztHnDm}4(hw61?idmL;u(a)ER;aF*~-d=rjGJU|| z58in^;;vy7IE2Ew@t$3|Fb<$Mdv2c}!tUYwU(@FHR*`?p|@T~H?4<*`k$HoClJg+7KH48hDd z1$pGO4}Lx-PF!5fthUES3ae%Jn%IdF6r|k0dQM(k&X1vRM71>i$Iv)08q0TpqPp13 zHyMtl2to7?0feN-;}{3t&Wv%#!b51tych;T&*E@r`QgN|fxI#EF>(50TXwZHK7{@? ztvC*lGf^)aLK_i^_`v%To8FjZgD7XP(#w8;95&j|w_q+sxrGpd95@CLJjMj=@}6`a zdlKiT$W?p*e2`g!IeF|L@v;PS_HtH7)^KlY-Irk8IFOq5(BipEwGt18*WO3+>X44U zSW6BE4Wm5hFBkLPLl?CgTJkU&JYP>1wG<(ct%4a_DX$GcCB(__7}F&?0}Xh!hS zN${sj5ekn&C@jhw=UJ*&F`7UnAG%5kj|<7FY>`O~!J_p525{p+cki$vxN`!F5~H+> z7W(jJ$33hsCLHAb1oHCTI}0@3o_0q~9HZ~a=ztZ%O;HW(CAgq*3NdSJj~zP%@w-zB zN^j?|V^e`^-P0Z@vMrEFJV3FWb`Ki|a4UB2v7xvFx0d4$1q6-M#T_9exgb?IK(QS6 z;d^W-?mYE!+-cQl)xF0EXao%aAa{UbIqo=|QUVC?hph)UDs<-R{-GVbm7<7(XpZsR zAuC!haK0q2UTi3N9HLQbXDfpcOl1{%Cp+LELg@l=&R6u}m_{2kc2f0$%D|{Vk(^Y$ z2Vt*+3VZgtk=P&IH6oS-qr6|hg~uNWHu+3G!fvzfddQG;tJh!A z!@z<`yx6)HUsTS=6`J+a(#;48pSL2w*1P}ow_LDRK}wv22oThLRM@A`HMVR=N9Z=A zD4+$PZb;GDKn5}cvI$DpS1rd1N1rkxc9#@O23e}j%A&9U9I*MOB~8d%>-_Ylcv}vyfpzNuDtjyHJv|P>6@+4e2JlCjtu=!K z9HWe7^Wp#t<-M#gyjJNr^fvUK82cZ4PAsR!Lt(-+o!1oW4VkMY_36osb9B&9J(&Rz zj4|c~fIKzMh8;YBo#CX#|GFm%Qc!qXwpgJ0)^@fR$!_Z{G)5L0pewLiro{_VP+rIG z<8#5SSJvk(77R83ZPt8tXaobwWWEQS0jz?OEuK)gq77a9l!pXR)`fg@aag^kIbVD> z7F?KZE|1%T1q0+$E%Ra);{+Hd^}ut=V`wi(q**0`K`{8G%ljHf*~3nkSyqDYSa+@J z>lWKt87`>mJ}&o9fTqzIk3mQS3(JuASFqG>mbUezh&&Nyh}q69wl&qDQnD*FyjNhb zhsBqlR3AqV?3L9(pb%cMn4T-oUE5mL5E{-!?|S~CAh2ezM%CJ11Xkm$&hi+%))2=& zi!CT3Vx2@rcms;HKdqF8O{FQ0v&@5ZfkcdPM`07ZYI^`8t*)pYK$oOr zd=_?4C_zv!w60=^HOTp{jpgYYGC&!2c?OLe)w9Cz#7j6MBiOhpm%^M+<4rN=z)TcgA>J-+X3{pyDy1xpn-&z`vHA&P(x{j z@Uj5CV@%3uDeY?p^n5f5HmUXjdgvw!%HU?)OV(O!Re-Q-5&eM;wz_Np;b`eb-HYfU z8;?zd7_=`7(sP^2s7wKP4W#EL62QxYfW8YTDQ{tfszqAXfF9e0D`dkQ1#u=Yyn;vh zo`9aWF7Y%%zGgs=o5SXa%c-dWJv7rXqpl|G2lUP`s+gjyW01ZVzjYQGPgxtoUPw=d zhlnF32O+)cGQbhh2wQ>-4Wv&`G{J}=NDrCWJw^g77L5D6JWLNGq5Ggjx>#Sg7t=eh z$yp)t%32Lm4nWj>PfYJLV1R>h<@aNH3NHvzXXMMm^a+tbIOQ;Oi|KJG{O$yuO)m%2 z6URlYXps9cJv9aPFu-e;ThK)~dQNpP{SBi_esxa}Q^$(pI&W;qEPXJH^;Z=Z;d!2+YzI^qryw(+x4G9)mT0NB;+k9MRj@P=r_{uhb6xMy;pR zgkZZiQ%i8Qi*_|OWF$mWmj#T2t0?sDzMPm&Q%EVZV+{bsDyXAw0uPtn85pP8eilHh zKBa(6T!w)5zyxOAc06lBI&Ej`mfJ!?rRyT@06b;neybE)QRUdZv!2L_Fw>vM8`;WcNIWz+UkWz!D@N{W**Vi9B8>VTOFSh z{pcc&$uaW{gxR6r>};HIoXdV>sinwpgA$J0q1oG5Z7iSfK}QQ{4CB^?9eUF)02YS| z41UMXO`_TNZf+A%0=O58MPK2w+_hQV=yU|15N09t{{T}}|=4GVxO ztJ?LVOUnZJ^bRZpI^do0eidPW=uj(j9fmASkok#mpoN$G_&<>tEL}f)JzF zue7lMmZV46aNYnU^(eyX zge*ElZ}EoV>@n8a11dGWln@Jb=H}#61JhFl8qKqPgO!4^lUdXklM;ALyZ+9FK?!qA z7pEz4VK7XNomLQc4dh~rByP7Za}b1c+5Sm5RT$Oafnr!PFsw`$p+l4t?g~?MWSFCm z(_H~@6D-GKgkd{HrT5sC&{O~^12O~llZfV!j9=0t!F~vg18{Z-(7^a(bX>(%b^s2r z&@;&5!#jd|y(0m!I406h+It#-RSddhAVM5qkEoIzDk$*$$~ytGk7+d3qAgk|g#ih4 zd#mPn2!$vfczG#Jbau%2b}dFvXCs%MuJ*2KjCF^I z2Dr{v48$I`n9eZ{jROrh7{kgUFhYl2^{kou9e^)857%BXIXrO%wS%WMb6DwI=~1M@ zr}3!|P+Z57RMfWX4%aR+mpK*(AMGZX4%y35As`@k+dUiL49 zZbp%w7+PYpvsDKP8HqzHv#AEfXO&euyC~%#0W9>c2kX;E7@7Hck_j@3{^Dt;cnIMD zYi~ZynrY8CQqdf+4Pm$|rUUmBBGgSvlCs4hGmNt1FY|>7cCbU`DmY?bTg=vqregu$ z=W)sgA}}y?=m9UV;^i3A?cJB5mo$n+s$gRaZ-ZQXHr}TgU9nPhiqjwP0vpF5tnFH; z+S7l<9li(%&2Ws)3}K>0GKVG(&{<<4NcADD3=qJyg`Swx%!$GWMZRzfsR+g*rVG;> z3p><@#ctEm`BJ2^=w-DA;O~WPAx+=n;%0(D?PamKp~4jl!t$Cr2CcQox>MU@ zmUCp#05lCHE>nVkj&;moq{b6WKL{NpUDiVh*#K-`v^n#BA!Jwi`vL;MmUE?!sVa4S z-WP{3#5sUTKW|v4C`IDw;-r$y;+Z%B1Z)^6Ea#mo!u+ay-jkVM3!y)~7_`J3LVhSK0FSkhEX^ZUl76Sw*It~x0?W>df`0ELaJ!j>ew6@~wQu%PW zT=3-SDL!!Z+lSQn^xa=Q_&8N_F8cbT4-?&*;K5?S4neBxeFP7d3U=sGS?{BFxKgk~ zkh*#=L4O<|5{g5ZY3Nc!KS0nll$iISl6n1PJ_*>RN_H2+LkG8%=Awt0l4bY`DzZz+ zHG~cpId&)!hwSAR%we#r7~+xHH7=;`GlrdK)J*)8i-pTj0x(qfA;Zo?9xR&dP$Kr( z_mGDxB0B^LYIX@;QxDmpM=-LF-l1y94mm=MJ>(A8LU!m8Iqc=%!Ai&uK>~vV1Rc!x zoY_bSh1Kx@7+r$rJCuTSDwOz1U7pW-@)?F4nYEwy#xW}OcXvJ0+#~frnjn2Uy6nhPERzpcx!E7 z5Si|{E~Vy{4wjpC2oVJBdqmKSb1qW8Gg!y;h<6FLlnz#*b||s@bnmSltTF8nWbx@< zr1dhO+tm(0yj)B6!?minf``{ss@@76UQ?%fD|C2Gnd+^;;WbsNw}MaC)TrJHsa#W` zdOM(UxIXoEK;>|C>g|xq!P?YY0hPm*skeeD*VLun3KG1W)4MAn;`$l~%Uf?HAPyI| z-by}PQ`&kf`EX5P>#gL&HD#^0k`LDuwcbiTTvO6|JNa<9p!Ih0;brW;-3@*w);u^| z7JIub4tl`mp;!>ig)%9*wM%b@kY+GGOP|!!NT|MTZm_v4LYkg!RZtU?^n(X5>l4x~ zAy{cfm*9kDS}zmPx`a$kh(5lwZ%cZv0O65^wKXBYI0(E@c%*WVfG#0d6B4wELb0w` zAr^HUL0i5eME?^^+mKN>bC8^gBg_spA&-3&i=)^3V_1I-J$LEEnhsMor7cAwerg`1 z2MC?jgy^-8%R%uljd42tz{WnW2`R?ioLoirXiE0|F{ZX;0k@ea9!epB*LYOr`Ys|< z8?r$%nG-faVK!a9j^!y`LYtZpn+dojPr^$EyI@lF32kda2TSK~rzsB?#@|X)dPc{f zc#EcF!o6i?aG##83DNMfqSV4V3*i*Q2*fuvA z5Q;4!C<0L`rrF%YCnVY>bXF5$dphkF1BD$~lpW#Gc}vJASHt4d(vUGDcXZJba?E5d ze!IZbXNHBkgf4do?QaZmD=eAlMXO7B7$be@PHz~8NIVxT>n?so;cQ>8`1Y7c_R4al z6wm@?C@=aFz_;gwyU-LfX3Fw4tWN3@+BqkH6mh9!lWgP^eRmJ|_MEUv28&f5EfvQO zxLSRCPExxOTXI+!bF@+Q)q!u%NvagHWiv6e%?BX4KB4ngN`fcBmK<l0VfpGMT>f{OT656yX$)(U=Cgd0e(E~SBt6o7Tj#s64 z&afE5_yHrZcBBSDoWqi*LPxWxuuG-U+@`9uA{nKl9*7!V)@Hz=hB3D@MFo@cTq$?s zU3t?-xlNc4*oY;Py421aCT7U~zHWki>~G_x^(7?7jAOy$nq?OOhO^mG zSFD8wzq8;725<@LCHK5$c0iX<1K?#&f-Ywt#6%x=hZev?LPOh@Bb&VGLiYVxp#|^< zn*iO;4RN@~&#l}LH0FS`7II8S(xQ(A&RScJ3HK%z(WC=ZTx4NPmr!Uq&%D|t%YoI9 zZa~GIwR?drVr?ukC1w88y6Y1%c%T8vykQo$bP$R3Tdk0U79SG!2Ayz&8veu@Les2lV|g$aw=Q0&}on zNURPVjRDgY1m_K?2o}QE7ylBo-n^G1H&kPapcybxiw>8^se{tM;%{q0lIe6S{iJEF z>VXuG8dR`#k%rN>F5(l?G7Ys$sJ173s@Zg61>mH#fVq7_swU)FWA2Mr(9rY>P!fGY zx+Nr%Fj?@s*C~IlOQ^PR*wWF(u$W3XvO0vm34eZB+c=&l0;YC}H`B}U|FiaPJF+E5 zmRP+A(1SigKcIx)FOMvCS9fE&rwgo-RO}ZaGb0kyfS>_10$&Q}-?f%Uxb5whna4b% z$iWO*93DFnJA9klWnFT$krFSLq62**?e@^3YkV;D@p3LHIh5?u;#H-RN&y+1XF*+1 zihHB_dR3W(4?K47WgdWAps|>|EX`x-RMn5S^FE?^);7b{4qk%Y@5hm*t(~FX?M?=IOrZ%cPD$ z-Z9drT#4^Hfv)^y0Vd_GcqBw1|u*0J_EjMQHW}{i1G@Pqh{w+HikI zN%5f#H=E4vPs6yD2ky0)PhMf(*k%&{@6Y^2H_-cLAhjuAHy#9Ig`^N#oz~xTpM<8aWvauz4Q?m;81GpgNjC0wD;&9^=sc{8$wr(nt_w^@9 z?7^;<-_*3iQ?J1vL@3U#U2o1j;%{qJ!9d0LE*TE*&K3mbZ7nJohg;zzPJGG^U(G(- z7d7(evl@|w^L_bb1}ZubF5NC@m+>;AF|iNzrRqQ*>ydsx&L`N*@wxC$$R$1|e7Lks zl%CTsTj&2KNOt0cuX|!T%|KWE+u`kxT{v)_oHO%@BhK5qLy5c}MKU0exK!*1rQbHZ zB+jKKp9i-t6^ZOGrr)-LLaR8De{v+_3>ywJP|yjfEZ+>7oTcu@CyF{jW>gg-PUFZF zA1$33NWE{ATk!t)YV|2}dt`z*?k^J| z@?26rPE#N2Vl$8)2sF+%a`s0c94@|8;q<<_?(I|Q)jWWzCg}Z+M}!&$ zS#smIQ}X~+wK?UJx&yn)YG(ki#{r+}PaA;^HJl+_WC0-t%*X(#S za-S_GYVF)4P`&8`m|@gO2u~id1j>$Eui@jEtsDXceWa*|C!7i2Z`xWm#X+A0av@{% zf_rqsqQ^euQ5^*oe+|`gK2f6*YD%-+MIg2PCNIDCc0yuq;a?DFy;VLJ4mSdQ%#q;I zv7)?P$X^4%V8?s6cWmxJAdPPry4|cIP|(*MJ`qJbCD6^P(Tt-i3lv+G8_eSnki_IR zzFE?>PDKGe7rZ={3{*D0nJO)KkvGvICi>yt?#ni}rX3fz-x|%jzLRBsp$4uxxxawXq`2i57x05Rzx;$?Q-ONNq3ia0^bQ zR0PASFqrdd1X@dru^mid>M`&NN0Z^rMGOM1Lj^Lzd~lL(anaosNX*?oQR&3^bEOr!*H(H`T5sIhfA(l5Af2!R+MD27fZT29jFA-g`OKs>fd``iNJv4zU# z4iFEG)c-yy>3!Z?I56Kal6WZZaT1AssLLkzQ4Y))X`(9?{pm+JFbsriNT8vQQeeig z_ROYulmf%?F^bs~iaP z#|v->wmry!;m@61&xi8fgB%$C+||`XO5{-v%#fw22O#WG3Je!^ct4srD?Cbp;g5tL zKg(w8Q3?!yB;3~`GW;k5<~vq157kcJaguqccH+g2d$P!$`cVc983uWLvZJ(khyg=% z3ffwCFjpRAzz{Ek8?43?EaV{y3Hs>b32h~9^$~Tg>Wq#9I*!}FzjjY z+BRw59;LvreviYW>6F$Up}>5{HSeLZ%Xd8S9vZt0f&H@q+M^tp0Zl8>9ezs>a$tr# z7CwOF??*W>1Ec8E0XBY=14A4qstJEEJ02v#uzSPjNiv&$lmx>bC*%JSWrRmbFyFB} zd}!*%JRWfWr*`^akC0$SbsO>2Pk|mG!Hi2h6@SPtKS+YP6*{9~mOu}YUAQ zydEOK4E}^ewkyXQ_YetYah`5Z&TONiYl)&fN1y zNig5BLw#s;KR#H9N8R)o35H=}D^(8DgCv;oz|YQskCI?`1W?DFQ~)0&!7vbBfB#20 zFg)C@OR9a80mCq;;iBw8E)V-b3d|TSrepl}CA@_ zHsXEEfZ;oW{{2u8d6WTjTMYPkTEjj>fZ?G==hfm#Ozsf|49|3SL9l@jQ($nbA)aU}kI-M3_e1rmr6bNm^p{(eHI^;+Ko8Pic%}Ip0Qes0LHY|pX7T1W zAb}pDzwpw|!MSk6d5HbOia!th+!5#@_RCmrCOmP0@%|z93mYvLYcD5y&qM4NE^}H& z-Ea!@5c}n};EE--<1jtMeqmwC-qf9FG>@=fhIKT4x>QfE+av53*6ul>U^{_=A7a0Z zw&XN;eU$yeuIsEH_D9(-1As<{!1>nwLG}yBx2<>YB;JGU7q*2yg*;n}2iY&|;!;0x zXdWcLjNMyq2c-W&?h98Gnci^1!+4PUG6q1Nla3kaLGBCpp3WU$--o#`!=VIKm#_u@ zAoqp&*X7{lw|kWP!VAHNbX-x7a$k7Y;S+U#3iJr~g||4am2|k-Jji_+bxtlvq4OyB zg%zd8AB)Fp@(}fft34d%TI8*Lkov;TI29ScKg@h7L+#^c8a?ydL(CU;w5YR0h3H}C z3mZ}N$%hNdqs*7vQgHZR%k}*b^JQR8<54d?$a`VqcVAE+)%zp77Y6FC3z+s{-U~a( zoU@lD<)gfpfq+g2AL3Ek%ijl?{p}t6n}<;Tl1y+kx7i}OgC3z~d)@yr`kUcgEy5-z zzM<36a|7C}0^w&pp5a)IW@nE-6!x28ZX>F{&bA?>7QOAjAN5Ya>duG#NOJl$D zIQNGTAVD(0XM4P>px>Dj7}R&}LFS6-?_V|NSk{3M0>Ljjr`7y zVk_010da+jXB!{rbq$0D+|gl&yKmD}qH zr{(yYJ!t=xTbfvtzs}w&wjB%5tTI3wlKx$W&1rBZY}#B_8DK02T9d_0BDfvx?*^Z5 z%>b;PoU1Y+Om6BpnSs_6Q0Zcxn!xSja9=Jqh9#>MFy`^;P_~Lxbwp~}2(+evN&%Q~ zLLC%pdir3d?W|G&u8ngi%|N~fXXER#N&(z6I($L-YWY6IG~=uppiq*k)&s$mwx9Ky z0&sCu9_y3VZOSx_u>-9sV8C)}7kxCse44K|>L9BWP)M!_v7A|d-JTC4&YA&`@A1Ws zJ9`k4ckst~9T4GG<=q<3zR(F>fsND8>r@~UgN{=5z^`q3xP8p}$oS*_yyV{v_c5Yf zhuiLeKY^rXx={MiUHodik70?K(EoUF?ip_9V(2Ql6p|PZ^7iPblS?)f{>tK?E>)YF8acx%jKGJ6;V>N+Xl69~nHf!q*!HRC+%B-K#c_S2XLSmlZxztV=gy?W`=1^P=Hk`PtYICMxkhK*nUqAHz$Q&im1 z;wO^JLbK2HCFqjLg#%*8p+m(vH|IMDq)MIq6!8e3r+-X%;db4qs3fVj=`j(Fk8#M=9w2$Sp zZdGm_hJ3O36!xBzYE(Si@7iQML*wv}>^n-qni*&?+GO@X{Af(}SyHg((G_|U!jEZ4 z8z0dQbkTu&FNdi*rSNgQcLJ@MiGR#)T3!&a$; z!v)+w!c5@MZ#46Epm#$Pq>?VAX?Ay|2OAmve0euEX}6KCK#%+|>#_r>xe3{IwMviD zxcuuO+i$E&C7oQdC#?ai1m-Wf;H};|gDn6v0K&q|ItBo@0tf?kDpN3C5G!AL41a9jGO+LDYQKnF^&wIy4AG z-^vW6`szf$a__Q8U=>p~)HOaCtx(@2`hKG4;BYqkLf5kudbl)qa0WBuI%lT`JzJso zN=7n1sVm%_P`@}^(HAK3A~z$BFV0pd+*@gSdaR`~UO*GE@_x9|=uZ>#Np#I66xSPH z?L`+o?wkWkdLoA1-nqORu5hu8V|e1`&{=)w6J2y5Tu!1Mg7+rj=eMsbJzHtF|IIy0 z9_+Q9nbF(3D1Wr-eP3DU^IzeKrti6&N1R)NZJ$)uD&8N}XhbE=My`J~+Q)a|8g2i( zesUxJU7p?h-zPqwKQhihs7<)SfAj}Rcs1~@1_9(a>XNw)k(Ez=AkL6uJgiRGp0?EO zTT^Wn6X9#ONtQG&cx$S?5>{))L{fB!)t^-En%i0iE)7u1Bh4kb3efuJ7&fMeYO9!T zsb9t{)bYL*j$d0UCW^nLc<4v0jM!wH}cabZxw}u(#Z*x-SpP5 zMQL~OiDwi6QzrQ~+CcI0RqZYw0Xm=_{4AWMn3Fw>RN7ssgdy8~c62I3r_2tt{&u+9 zYAlDk2{|$dY%5YI?XEP?^-Tc7Wn6t5)IlZPmAHPbLtN<|ho{|d)bmQZD;18`%AvSb z$&#$yhRrDHu7u0hjrsp^Z3g`MwnUwh?n)?9gUbg*i4@c_>?+JauWO*;y%58x9LS;U zJfh1Qht+87?!@^WLS7qd)2j|d`uZVmSD$?A#TI-hYh{u6Y{Os(NackVs@Yk)tb6#8iz28pm^9>>>S56li>AgY-~?%#i<9kBP6$G zl1!@KA#O#n9*_Ih7D-cygkpcu*K^~r1%uY=W{C(uhkE%GD7Ubo)1c(d5(QsyLA$Sl zQ$8MeC2|A0I~h%HhWmKnp~LO>1s^Yh6H!woeL3343P)?SAzXm$N%rJIiIXG>>*FkhQ=mLNe(XSNhM|T>D2HGf_xm07+{PzbGfbi)K{~WE3Hofw z2JL?$zmbqL9ey?`q9_EAn~NKY5bHNgY_*ZGq_1g|sskQfON2vQEiw z@O_NFrE{a%qfI8z>Kk~tM2R^stF2*Z)#}D0QaO~@%1FM_N_U@}4bQ&l9E#IZ(#e{O zwfV-1>|@mow&c$B^yRU{$D$d3p9#bV3*My8ZN_1f0dAs3Wp?%{`DDzI(gfT}yd3@4 zHS@LyX4B%|&r01iO1KA#cu)LB)vafxd5G?&eA>V? zG?(@Z_ik9)*_a%XmP7=5XIHoHW~B|6G0I|zL*2a`ZAXxI!_qb-EboDci)kCj``xg# zu08-HA@^j2+iB{%-6_`B9=YjzBkc z(l1V3k&0@SPO!4?%H2lF>6t52Bi=dzrqRuV{PB$;SJ5|a;9)ui$~UI{7iX>L96 z$s?A5vhJcDN?dvK8~!aHAE3xi`fMh#9q;2Kq~qO$mXZyv`}hpSHh4?9p1@kj17!yw zu;i3T_oWyP83KwDMdb9aa&IDyebQOc1Xp^Xht(JHA(4ocUc$jqpvu|CNJGIxB4xMn z(u)T#;^bO4#<&U|f;x+AHut}vv2I!&c-D5GeOLS)@mya<5~;ig_UW+RHF5QlwI?`NE)AK*1R(9#veOdpWk zYCqn)u}a%`*sp7#%HvZ-*vRFlE#p2#Qi#K-BnoPYd=UJG-joyjWHK2!Ye5_4PrMMC zGuS*VrM(_Ay;z%I>IfsIv!LD2EAjQn?m5SPJaRHjTHMg6R)+wAB94=|3_FK^&e`5p zyy!y^D3R>s#_g4;-Hn0Ni#`PYi9N2As3bv@9W~JxeF}zJ#i5$q#~wc0X;+D_Gmyir za*UGE8u}1zY^G9Qk0>r{$Oj9DGwDPPeKXLy_+X&oaS@*u`c!qd)z?2BmXCNHxk!q+ z%z;6)VJm7_&Op?YI$7A=9pt_?E9WEUE>51*aIx3FOCz+3SGmA3g zM18+y(riw?SH9&9pz!O;p5l$0QxO~;XP)TgH)MHUSNardfZFrne3;4;UbE!v_jT3& ziWIgl^*GlYFmLG~yk1nD#22*neqs(Je8i0xh6pa5mCFZOKMok)0H|gM2{n!&kRt z>~s?Qx@D-pkpk3~49}Jjx+spiJl{TSfHBmTETR)cE-Qi$ON|`Q4M$zIC5vqkTHN8~ z!SbeU(8HBTee85^3Ps>p!&uR61p0X27AZ(gMv)xzK%jlx&`keu;TDNfM$VL~iEdML z`mz3D#KpvH_bG4sFyM4jI$gwLh!qN3^7861ASY4gNk9;IUr3Ans!n}u zfw;3n@IEG#sA%mraJE}L zf!=q3BA>{oGn*5%cyc_)y_L;wT&t(E=_O=XkOc_T68)s@K&b28_`6 zlMYoy%WKPcDgkxY@U5P(@JJ;oAobZo%pYoBqjN^Pgb1fp$IXE)$gZ@n<8XH@$GkAb zC;EDr@2}RrMt*xLg=XKUt9*x`ueGm{uIZ~@&jlThs$HsT@#~m8^{9@fm*!PCQ|9%e z#jhisd14W*>EZT*(r`zPdp!k_5Yc0WP4(N{?H5jIU&lC9X-`^v6yrvvVIFUS>f}j%#%|VHXIOcii z?z%aON1*iX#pNL2WD$cx#dg6%pm(VR3GpCl^)})9W}u>z8 zyc$k(Z{#mCOw&30zCM>Zb@cR{vIBK}i{Ld)BINJV5a2L3a|raT?==oM%Sl}VrHzfM zL7+92B;wA{xt(`=8Lfetwu4F~EE*_yeeym@e#2(wWA6l(5)J9vpEhZ`CIe0vH$J1M zkY#chpKIfT=~9B)u};vzR8OyY!z4=EC$MhoJ=SA~MnT9F&Avaj@tgD zf7pT641f~X`yzrjRG;&?*=%&}pTOZM*QTNj;_)K4Qcae$_D|quD5Iy9^$7wI&TEVL zN0kBCPegwxc@V0foSjLcN&(!(jn(cwPH?2hdvlVHKx)nCpQ!wL4pcjC@QqKT){JC! z`r1y=VpJ)?uG*tY0VR)%B%h=(GrAI!G>AZJ3Lq|mE)}Oh^`_x!22$;9=axE%?i^9h zaf4ciKx=2CW|e=`hJ$m3F*7|qbA&VXoU{uECyaEx^rtv^Lt0ataB%X1*DKbOc?Oz- zvLWiPQVFRJ)RFE-AhNXV>Rq{Ta5~j-#t-BI$r+)WY+vod5j*bKlD>WWhhP8nx8J}0`~Rx4+*0ZI;6_==t`4{`}j2{vNLG+duO^Ue8%4L2`Jb+*SSw7m&f5OA~ z@z4MIpTED||Ml&s+dsMSuWvsQ*!AZ>{rW$C|KWfB;q8alAO5c&e)-|Q|L}kR@Si_i zzWvL8{Wtvg|I_Ke`QP9DH-Gtuf9GHH)2~1B@%{9VKaGF;<=^m)@lU`0C!W<$fBA>; zKl#gFZvTJ(eEYZG_;25S{q4uU{XYMqfBND7{oxs5|DSLF_RD|y+wbGSwfl49^Wt;! zZh3HTm-OcNEB*T0PczW}^247I=)eE)Kk$G48v_1+_+J0*hyV2le+rv!QPamkU-Qc| zgMRz*FF*5}{QT?foBaE)FY}O~3l8<=+pqur+uQH|TMPIPf5m_BBoh32oRpt``HiZ| zp5ttavi$N_9*>{@as6-q@vpacE;YO>$Z|j7{~PC#w&s0^9{qItV?W}<{ruz4g2Map zmwz4qJ;8YRD}S7a9^WJr!X!2wftH`Gk(>V4pZU*`3JUm#U+$$%^z5>4Un;a0_wB#_ z@(+lE1cUOM?9Ctl1Aq6A|M6!&fgk_$AGbp$e_=;0QnE|)Ho9@_QQ7uyzwz(uXyCjX z0xsk4N3HS1zA%PwzwslWeWj3d;KGdmoEpW+^8NGl7k~Ra4T+qCA>-3DG{gjjPo?%u zgi7wHaqgdnR)Ha*?z#Q#Ee=n#gungIfB8T7U~hl#^Gmot2TziyYq(sEzuD6gb)e#I z&mj!`@nK6ezBgOz-1sBk9z7)j%OF`VfAh;roWB5@pAxJepcS&#k_e`U0s2WiiQ_Ay zRp4bj9O}mbAZ4pL`2iZ81a6Cs@xel*qkZBdyM3b9mvsLPXlIKe(|Q!>yPgtS_*o3% zcs*6`dzrsMA)1^F#M=qL2XJhK!uljGFM0k3WAzz6{A<5`_EzN6CnAZNL%cbqW}V^j zC3)-dBgH^5?>tZh;}9mw;1?XrckcyWClnN+H{&7j9X}J?vLnFzcrPf|imQnJpugSD zJ$|;zW^;WC@&+I)@Tt$ye|@Jae8Rnzw1qNBJxp;b4WB$9_RGqH=v=n zNQHi_#$Q{9!pdw+af3h6_6SMtx7%MkNM&^%!$_r>I3D@<{&?2Z)F?!mj?abnDd2&X z_b-Oy9&Bi28$SV2nSt<>`$ux<0TO=KcK-?ZEAt%QlR=?ow&QMYeH8Knc+U}OBs1en zN70|pB3H3Ii*x1{sN36WPWOY6JQX+ww)N-x>zMI6&exTdADWxq?kU`Nax)?-Q*}~9 zECUK>X7G@>3-02`i(ebL7OCm>c~FU=jOx@jA0NO|pPsLG{N$i=)a42HhVY)WDGgI?iIfAf63<$a#{}Q>U?_=i5HMF_lZ$ zl;6HCwT9~;KYpC2S+2SPiu>AQri6rx<6<6vYw&)EYi7AHZWrPB6oK^E=xI7J9tPbN zGKy<7O6rVqenKq}>veTUy??Jg#$R-sOqYKDdxpL%e(W&+p6g4wKW$_gc2Z_K!e<`N zAi`}S2o;AO4|IHQkNYd4Ri78-kk;#XTJ`?bDUnS6S)51R;~a=#J`aVsKlj`30;QLYaozPte0KqkN3bN3JcOLjel3c66d+0V%+zwN-7 z#e4liS{=SfxmVOYkd6iIOpuNnuslrFM&jZ*bE5`bK3aNtod<-N8dsC`&U%MTmH2AR zI>ynP3}<%MF-K8(tL2ERX760qzdECNyuU1*`np)Gaz>Z=$d;6xrEb~nEyiz39A=#L zOzVN>yu?y1e|34e-hYt7F{*Fow{C9ua`r6co!PK_>v z`PL9mkdu5a6s33C{p|y_*I9H@>oYL(eE$O#)|j2r&i5yEl=8RtxX|oA_~PgqZHH z5~@P3N?TBG@yqMI4hRF96N`BvR+JwZb?#hEy8B;iW)Ms56FRyw2J*1~_ z1Z`d?L!(MIDW`96djdnRHI&%|k(hITtw!2n!t9hMyFY+Bz+D`tEf3)OIx7Mn(ecEV zKmKX98Z}<_s0m${;<(a{j$Oq4;N+)vd$(_0Lf}&MU6Y325)~79{zh%WR}NS1#AQWt zEZi|J!1=%ngLnFqrsZ7I{j#)LswT$QK*LhZDT3#Kn7n~LrwB)Rb}JGCNw5Tt-R>IZ zGBkYov+m8`e1LK=i(>o_T{`5txEex!mlin&QWytzZ?-H^JuL`1;%k#O#soLMHW9d;NZ1r>=@PC5Gkujqk=5c$SQL1c%wp^k&22m>Veqg zo~P_D`cZ4yf=KmUB;Qaw&2Ja!NEK{y7$P+l$rE=e0tReWP|;))F^foDMZ$}nyx7um zCR~P;h#hHJaH7zmP`(fYZj2h&b`HVI8i-ry9wvu^Sr=WQ$;CjN*EJ3a25kbb$?-r} zlFeN*;#}4^x4vt}LE~P~H<|rv!%@0K^h3zjYGXsCOg`+ z(t4hFo!h)G*;uQfd^XshBVCK_FNgWGvoQSvgYwxx@r>fL$GJ?RCQ6L0nBZRoS`$&> z6fO5jzZ{xh=<`faBLc0NDEEQSnYnr>WAz$L!UY1YsR+e=4}RW_lt!hxi;0d#oHY}D zzWp--u{3^PCv}cy9h$KD!8l|?7iS-Wz7{vgAxIp~&nf#&LKwe+1xG-jHIuNyzTH0e zKpepoXF_BVXw4*apT-M6={t$C8X4c!JWYMAY`8J4^$;K9U=mk>4FX1>HJ1c-D?uO| ziDN!A8+MZHYhBZkgq%;}hMI=&BU*1Wm-Mx);S?{C7cPND4QK28A<&vkJd3>nufGSP zJtMBjjbCj|Ce$ctUNlQM>1d@SyAkNBsByF&q;cL1)M-v`%jzT0noLly;at}yD{eQc zcsp_TwXA7ucGHAfaX-mg(DX+_nClvbf(M87Qyy9lB<0(ImR!;rN4U{X6fpzcAmvt^ zwWw)q+L7(6Y+lifbQevSW$0^B)94Wq#p{l7B4+_++27Zih8uPijmP(j)H1VKa)`5} zqVIqkj6fU*yic}`Iq@W;GveW$u~Xagi~3+(iVsTh@uWhsdy(fgMdD`TP(RgE92dr_ z(F~N=Kyj=Vj}H`RtK98!>v>I)jXXI*b^H;?^Kp`Mf5`Mt!&7x|dAbs4$f5l>NLW$c8eF z;Anp&+R%3D(dRWkHeA@Th1l|u`a3rq=4<<`@?&h2O*n3T`r_7HOe8u2tr;?My4}+h zbxXrmG&d6*jX-OLjJOU<7hmQ?FiN3cj~Pg%$jBYOmz>R;zwJ;+5NJ&yfs$URh^2%e z)F(&N5h*;Y92uyURGsYP8&w9HGif#mwC19aX;15#R7aj@k!k|J5ok?DfyO?3y0h@> zPa&glwtuy?^J@ePlaVf^D6zZ2HV_QYYwy>%rge4F(P(CYuFct9ztZw*biFSvPtjQx z*#VXN&ab~FBTtSlN``r`Y5CAXFa;BW((=Nk#=gckX(QNWhhhqj2BqcI#uPh?Nc|A% z?a8kCm6TVb>wWBT0>`-w!M)qbqAxA>qyV!S-)UiWyUIqyvVUQ}V@Z(i)@@ejqtOdzv?i1gbg^u8tr%fTb30IQta5sLIAOodr>xMYXoaMns^l z-(CFZb09SUjtSYttZZIXWrH{^I@!|>{f!>;&Nq9}NvX6bicpcJ05`EAGtjF}lO<-~ zWq?cyY4LXT_o7N0Ka`>CT(eT=qM*|;g)I>1s;`n3Q=M2->QmHIg6TqvKyUBvw&um= zYlvUPm^QweDs6Dv-j~|9IBqnN8{bSU?KCv02qr`VC5;vJpf`YxDV|5wuu}?Pnd7 zKxLy@Rm(-zz73}+byMjqD1FM79J?bCDJ5zcP&Ji;;gBNwiS4(=8YDJLK)g{cAzyCeNGiI z0uf#DL48CS$sWW6g}kML3}w#{U-i7EFGnDem|DFl+IPBHzg#>+s{aC>QS+k+ND4Wtl-d4*oD@s+SHQ=g1bz3ETgAM8&&PA+STLd_W9WP z5hGq32W@tsb;A~j9k?MDXQ1S8b=$w1+STKgsO4}QVIc4D+u3iw+ScPG!Kg!>v-8c?1>2|8JR=Utcpt56(M3Ak{NWT1r^~bkK)m%q4X8A| zqK-gR@U(BHi&{lecsctJWX1 zW*miTpfy3ush-~3;A|x_1X8Gm0R!$w9w9iwRHH-~g=yeXrY*#g*>V_7g&Al~+PM2s zLx^@<;JCC=wZRUwCha;L&qd^VWPh}j_Jr)Bk~T?Dr9`RQn4p5Q_7@%)k!BQ6M;q=SPW?+MP5|S?o_nRWww6gA=d1?UDRGw z&PIz?Q5(-C#i^7W z=%wzuz42Aj%{SDr>!PhhP7JPITe~?Z?dBVjxpp^w7ec91N6Lz{HlzbxjkY$)ID+=$ zrG|~S?V?fWWJ(Mk{5=vbaC9R!YWQ-|DD=!R*72MgmzsIwC|xuNJ&&FG)DtJ)3Kw0l zv1pfz2BH5w(Es1wyJqFn-|`(zf-n3fYdmhu1j}0oC(GHbhGG~{=XSyJHi|?>+l)>V z3>e50DkbP*bPUQ9mnQK?$sVN^rs{PV|(toe?#y07;#_c&M^wq<%%q8$ji?@GXH8lh9>%#sMb2 z=?-ybxonE3Fmz1k_j8|VqeEuioUrHZ&<}y%4r(thk6}KRBQ`O2@Knah1 zrwm!E-b^A18akJcKqy7(2K90+dUG7`CfANQWos(f){-|zvg3=mj16h1&~52;1X^>^ z=NeN+ppV%Xr0I8jkbZ)4mzsn9-YWJ*=JFhUBX2d^kT=D?pd<>)tdRV1n7a4T z#uq5|MJ6z;w&LUIc&EPgiPmgOnU_R7$??9SkhCRAHTxoyk`~+gs4vS+=wya{$ zcRy9UaSBYGV@=aP+^O2U?A*E1P#0 zoz#7W;49nNO_MK(lFh@6YX%}$iNq^A(CYMFDTWfeldnc(k$0wJAp)&d?`4=w<^$|n zhy0Jd?(E9!okT}`BthSj3hFn=fXbJdu-!P;R5K7scX?wcpnRG63D9AQ^-kjMBO>S8 z$5DB`Q~inl0rOd-SPC)Q#k%rkCa*E2+WeWp>F5w>2U?R+@lPDx##8S|j{MFkT9Z+s zGc?`3XP_HZ&TfnQTK0_=ue2(G=n6rjij80Yq63lSG`FUBQ*at+&1nZ(lM!JmXz_&w z80u4tgT`+LdeebQEoqM52J99|Wh05KmEY$|m`0qB`BLL^l^#Sdj?0u3Og|`1mtvgO zPNWIfC|48ht+3)t@u$0!zwd!4R1r5&^J`7RI5oLGH}D*=6<=+!d`*|)>89ql=zx$L zxYdj(z7*d#kK`{{$05WMwjNQ_8Nm6&*pn8I$VkbC7Ae9MQ<5VgX--!&dgHQDYAe1J zbEHReR7Fh!H*fSCh(N`cN<*)yNRu6zeA@=vP4T6e{VTVf^T#J;;x^ng1Feaq;26ge z

    E}xoj|jR83R*{HbqY(3dvUrZyZzv88xnqt=t&fsQA+M;n{)tZNz?&EqZ-058kH z!BjH?y{l


    (Ete9TT@jppL<^#auiaG%)lLX|~0h(ZY|4?NH`0k{7~pf!zfPuYVz z;K1zIlWixb$qA#?FPwzk;t=Xk!bS`6qFW>6e;l18VnTRnTTAxnSaB1wzsZSA6kjCm zqQ(t~>Y79{JwH&y9_mJ@w0zkZ)hTX5#@(9mF9DVFo04;&cXzBso-jC#<*$nU;T?U&<#!VdJB>`J0NH zkcY=*7vF0tZY8>H*nr?QljJfK@|=@jjS{kc0}-Ie2~xxBXW&AUKn?8Bao4q&e@H0cu2Wrg1 z)#D7r95!^x6d*WvcGju)lYAR4e{VNi3J{zLzYWO$;W*wn0?sZ+6(Bfw5>k9QjyIaG z*f!+N6d;)Lqqs%9^G6Cm(QX^AXh1NRM<|F(ljBXTA|?Sl(7IrALn~97e=6L0r11^h zq+YNQfK{YMazi5xuZkUK-LK)|z#sJC#7_yn1)B=4@W5Oh1|N>6}H^Fb-VNM&4iNEcBsHwH*|<0W$6ONb7YS zvk;+Cos-Q7jU0yu^hTgH6%qZ{%At_QCIXLXgPO9AS#JLEL$~xEh`8Xq^M0(Eh~AdT zm${@R!Li=DE;G=YittEKQ;V7m+qKNA-+s~7DGLMDP{l?x(vf)R9NK~2A((J^bm_6F zN`?!~o{ha;f)0c>%ZHQlV?!5UGq_&Y1>4^TqxJ0_5G=gK)8FzPN02Z4Eo(gF84*7W z+*9Cp=zbLDvGu&M%3bSJlFM5xy-J|;L_+Ki%Bku=)F_x0 z2FZf4P)ywpv^r?EL_z-~k0|4tqQ$rOiV6vaQW6av+uRw54Ai#u`Pb_rNWz>%4?=6Qp7E~sK^8&{EX1jdbV zw#}uTPD2T}p_{K9fg`mNYoGilPqPhFG#dzT

    ;x@>-cXm7a{j>cYmouN;ACL({ns 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 Eg3XGF=l}o! diff --git a/plugins/web_gui/static/images/firefox-gray.jpg b/plugins/web_gui/static/images/firefox-gray.jpg deleted file mode 100644 index 73801e8fe82491d4f9d45953d88d7094b54e5978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3550 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 Wwcx^vboTbXnGj}v>8Cx2IrTqTcwBn` diff --git a/plugins/web_gui/static/images/headerphoto.jpg b/plugins/web_gui/static/images/headerphoto.jpg deleted file mode 100644 index 73c1df549f5ae0780e4f24af7fca2415a47200e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25158 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 Date: Fri, 7 Mar 2014 21:49:52 +0100 Subject: [PATCH 15/18] - made the code cleaner in a few places - fixed: Chat window didn't scroll down automatically - fixed: Chat messages got randomized after reloading the chat page - fixed: Messages sent from chat now have a timestamp and the users name in-game --- plugins/web_gui/static/ajax/dashboard.html | 2 +- plugins/web_gui/static/index.html | 4 +- plugins/web_gui/static/js/webgui.chat.js | 4 +- plugins/web_gui/web_gui.py | 69 +++++++++------------- plugins/web_gui/web_gui_plugin.py | 22 +++---- 5 files changed, 46 insertions(+), 55 deletions(-) diff --git a/plugins/web_gui/static/ajax/dashboard.html b/plugins/web_gui/static/ajax/dashboard.html index 618d1b5..0c3210a 100644 --- a/plugins/web_gui/static/ajax/dashboard.html +++ b/plugins/web_gui/static/ajax/dashboard.html @@ -30,7 +30,7 @@

    - +
    diff --git a/plugins/web_gui/static/index.html b/plugins/web_gui/static/index.html index 004fa2a..cbf1858 100644 --- a/plugins/web_gui/static/index.html +++ b/plugins/web_gui/static/index.html @@ -49,12 +49,12 @@
    Welcome, - {{ handler.user }} + {{ handler.get_current_user() }}

    ;x@>-cXm7a{j>cYmouN;ACL({ns zo`KpE+vp9*t#TI+oJlt?=cv&9sBB+k&hYd-QUJbRyz319s5_BI2p`3Tn!-uUR{VLSFtG~6)*t@()3ROpl^Bg)x__A~xW)ZMl%pTHuOTLK*cAU(%r6aYn;#ATa7p$L%`WD){;fgZG0>qrmsT4hwW$N z(Cr9>PGCznf6XPswk%8b=MktwCeVztrjnsg654D=7>KAByTw)raC&exYWk$(eMA2k z?PZWcfCu_5c`vi&;Y&-eudnLwhvAZPI3zNa;1}G0f+z^MC*~V1aVI;s z`3VE!@SqL<1v}81id-k2IhWHoqaj!BoX0g6QKk%C&0Ga~%DAJ<*?B}t^@0<=F1tX^ zjvT()4s?6f;31l9jYi@I`S;K-ClJizlh7VW~qufR;6*5{fyU14}F8O^CBuqNMVoNZqoWX=&9sb zOZ>S9%;u}QCg%iWiL8OiJXDatC?{W z;B$;pn<)2ClqhXrQ2ILFp;SRa%^)&4;R)|W+$e(A=?*(OPtW*cIas;F*m%w>Xq<0> zbB9DKxq8JO?DloGGpNF@i5g9z@~VsWgs`up9bzI{PO|r6m4?%_QQEJworsshWl_-x zC>nFwc}LgDPNY7QaNxp_8rTuE?N>EqrjK1e>Eh6peB%vWr#ca51(n?7Kyg~cP2NUA zU57f66sR5!P2>R^PaE%qn(1_w^!bdYrLf+{t))jgw9paS0>Orn4pw%UwF~1E(3Jy7 z=ZBfm247Xpb22T4qLVnBE!Pd+dspKeP63B)SZ`No#l|e+oUZZ9V6trK~q+f98WUF$@Z4=8^fW=jI$1M2$^%T zF5%J(r+K52S92V^6vY+cDNzchrLyr-yg3zz&Q}6_D+I1adwlaT$#=b2S;f>4s7@WXxxlyWw&)RX+2!~P<;xk5+LdtzZ2}tqXsCOS_ z>_QO7UGLirQ&kvTI&GGOa|W09zsZnU^XeJP|FdJESblDlHMF|m@2Fdq*s&%BR2Hgy*j2Zi84 zDt4peZ99%75eFlDLlj#1fe};MP()3NEDCvla~U?{tSq@< z2O>}w^0qs-+h279qZzTM1oVuPPz<>Zxx;5o+JC~c4RgGn#%6>=1v}2lw55Y^YVx(n z1P*Z{!z-mG6wbkA(G6o?fuyl>3Kc`{iKGV6G@yrkuf;A}lo41?V3!Khh7YwA|^r7I#eGR(c#U(Sj2sy}6=$vUUEH3mD-`y*hCtFLCJ7@5EVA1z2U$Ai8wM$;2*g6l2-}4974YhTRl2W5Z&< zT*@ee`YhFn)CYm5zU?HRbyh>Gh1Q)YA}}th6?@S4yv}N6-7by~woC>~EggyL}Na4Em>yRXAy*Ek#& z?N=(!wPCtw2U64Gp)wY;=(|O9O>xKca~;@tPlb?l`f7P$PzFLumGS9ou*+1SDS$FI)a|-q7lQ zzN*a?s|+;Br%yx|%8eK8sy0`g`IIa*YbS=P#SPQPb#^m$)B!2~q&C(_)ZO5Ve2c39*tJ&^TsWF-8QTYUI;%YClo{V7N00i(48tvQlP zaU_D&BmE;`?ikUj4v|LTsKpP@XZ#s-(022pR15~x{kUWa>iDXDK_Gz^^}Sq0w2ef* zwjpauzkt>pzE+XXraP=+CSDW2yqlvRl2ImJ%Z0WRQPqkM4PV~ z1(lI*_;8zMpyUg}AkzABxLKpGL2}yAQ&=ZVk$OtCN#lUSjW=%tkMpWWOn5>_&vFDh zA)>f~Hv*|46Y8VZ4(+P3gGO)jRrvxgE*(J_w>U#PX84=gan>9{B0Sg5BJWyo*T!Vm zBTBs>c&d0u!G{gS&{8*OYOgwzcw#c-5oM1<#o6*#?aa9Ori<|`Y%=Z4df4*md((Lq ze>jUkEJtBIY_MLGe1Y$jW9?EQ<;bN=+iHz37g?@N?`0U==?7s zO_tIx7^tOq%$z8xj%K#o5?`+xBSi6vGH+{q$4xBWtA+^WVPrc$5E^S<2WdwHW36at z9YU1A{Si^}!8Pvzh5e4;O6oH(!ZK=^p$2W0#z@SN{=<$<&_dIAS1|o!G;y;!lN$PvBO(iK6)00GWR#Q z#_-Q2Ze$OI5PGWKiG(J8H+H0HLyBjeI=T7hIc_3=*ZT8U-16_M4^nQUn{2r{Y!FeV znP>2-`h~tf^+4G1(70&u0}pLq!#Q zEfVLZCAmGRvm zHh7UsEXb4SuT$MPj_Y8z1=jLzCVVO%p@FqgYgc{AbK20t#Bx$(%B39-p{ugJ>w^;2 zCViYbT+wexFI_JR41+h_6Y@Rd@GSHV-1c={F9lp(ovtzS2@MlgR3aPSY{k`}Bcz?^ zoWvE}{kX8R4I#L$3nn(vov7XU)!dK_%J#7Gx^9>T?W@-=&)TK2Ftsr;Z>VBEn#g4Q z`6Nc{6f2D02m4gMscI(O7)f0MQ9y)BjCP>4oWTng({W$Z$EiD??2F`04K8wIqu9l9 z2Ny{}F1LqQZ)$QuJ#p8?{B5Xkma^el`KBfp6dkHT474*HbxYeIq`j%h1vQ+5Z(@~G z>fp!QM42}Yk)b&xo6Z?%_`hrz*1oC9MI+xgmswr2y^pzc`)YerGtfqbx-L40v|mD3 zz5%>=Q!`M)XN$l^^UxqdaQQzJPW1qG{c+-;23V2hBHhxH&`X(beu0DOS)mz_` zq7Bt3eHLlz?1zY+-}!1vL4s4uc>HQ~@!{HO;}aXOD>U`;nIePz?%}Zp(#Z;9EnEz-<(a5e^Yuk zg-r~)nE8RY#43J64DwCs+0bAi9Zq|+CBg4l?djE<(zC&-i31CA59Eg#VKT`)(V?dK zK<|-$(A<2_c)`={Hugtnc=qK~Y7JJ3Z3Dkao*I^IZd&b)0AND1{hjt#_%JyEwI z58kX9NJ;fk4ETTtWfBQc?pSwZbXuy<4@YlV##0X#ZL>*lMIa^Bhvpxrc}{0(cY{mZ zrbHl+f&f!Ek~-TnNfJ~Vy*WWbAf?rZuhI{I&|rtPYTj&!v!)VMqckFroJ8rqXs;U( zXU!zsHHCu@!TX5o2a~mpKx-yJrO$o0ydQK)<6?i~39WSvuGSb15)}8<8SmN7kFQii z9YvN7BkIO`#U36ajuH(;_2EN2iik>AQD+K2AdnIbWmn}=Jwp{!ujZH*fs|-yrnVc1Fha)o(|iz`aC*giqD#hZv}B@XytJSdUnLqSK|`G+mm_(T35ux1=9>~9>_!}x3^tZ5lB(F(Hhls z3KaLCAqcc`xg*sldX@Z`G7A4tHtLWS7d*H}fhGVm5WBu)12GV2b?hR50=aeGMVWS# zJMb9K1!>fIw?HqQnj%sq>qWe?xst z`#fG1J*x9%uL9?yfCBQ<#=XCiy2(H)V_!W35lxfqbtnR@=?D!i^0k){5d6Z42T zYc`^uJ2ku#gDpUbKx;Na zFB7Vd@}mu}#9lV?<5j6jpjs?d)VUd`7u=T{pGW~#Xs(Ta$uml%A==;t1X2#m9!1RI z|B(r)am|}cC5J{6 zd^IWv=e|)tzOC7a%ndXlsULxQ2sYXkfmXM7>KUOLl9@Pp;=S5*2LxK(-l?#Zx@bo+ zP;R}Oln?}3eaNW!RJq+b0##z)Hv+9bWK^L-6H@#U2$g6sr%(vA`j8D-EFWc*%|M0s zr4`7(^p7mtPyo~<*n!*U>b8&z!YP3oww}0ePoE2~i8o0B2&5bdSrdh0=gHirPk%v z&UQKK*O3qR#KE=b<57^LTDqN+ys{A^4E$E>ORa^fqML(p1X^{nh@T5FO6}M7kRynr zT*Of96#}$opfpIG_B6{Y7culzE*(Petk{EdHX;gvl#3WX0WJ=yY|xB^nl{=auWZB; zWe{DIWk35YpQ}Aw^~y#J57*(V$T13Jl{H(q1c6o`G0KEGFZ%46wj(z~K{L>b#4Q}o z6ff)oG;pDf$(=jT-A7#){ZOmr^-Ne*@0)$whP6bh zM1A!E@slkyZeP1(3u}c`2f>iIvl*ui$zS_@3u}c`31&Df$H)sDMDC3*wnCT#jXg?{ zJt%vCeQD0-KpOtmP5v7h3z}+K(EddJ4PQf!0JsKcz~@__5BQ62s2JUNaFX zYUuHLJj$cyHdJ;IXiY`LtrXlEQm}<5WX5V&eqk+-Dsg@INXI%OAz8b$b0F7T#F=V8 zv~5PCj8@6+M1t1Hp_Z+SLM$A1!W$;L2(%_6LUiz5Ce{ZP7u}59#?P-LjnU>&P1ea4 zf`js6gV+#gO-JQsrWa3iP?Q7Bp8Ew=9@x8VBhA_R{0OwBqsl3-Pw})C!9Umr+X%F#BUFqj4Xr0xiv;d%H@@1M zj!2Fl1H>7KgUGzGe-7(btkyQI6QwoIc>i_|_L`2`K+*LqTL}CaO8jj+qct7T9=6d^ zV+Nv|RLi#1e7XpH=M#NKkYb;J-Tt${jGl?TneaJNZ!3_H-0jv7~vsMq8`j_qY@)5oU86(188)Mpt<6z%L>sqXpfvXAqJkZ{nLq{|-@0+7GK1gu=H1|c(X0Pkw z+S9a}Q2*6<{(`73x(OOapvxMlKMi4`(?C0o<)|HKd375#JN$Su5{PcY_HP&0uBJ8m zAo?uS15UJ^GmT#~8SId+Ev;(aUE#!(J0UY%x8}?@Fts&5oj5-ZQ z@vG$%x~7#4`g@FPThob#_XDsjg>7MPYQJl1Thr-il5!Ii0*?bKW_y(x*S4n9tsx+@ zo-k3U1*2UeMJ4}9SND8)A>|1FiXp6*A7BB>yqo+*yo7 zB>{>nmDfh~vORLth1~ejlwXu9$kD+|91f<*UpC+Vgqr39twi*VPZY?kG9@8JtJy4e z1iYw7g;h~?GLx!LWL0i_vX$%YhO0!a0<@ue1@qL#M|x9{3Y|6M0o3Np5{r!=O-ftJ zjd@0ihdv?Yt|(GwM^X=*1}rqu5Fy|^OF1*rsxIXcO;1Xai8O7|O6>MTI%)X{TIQfy z6FyUAWl-$4D=GO2N5k3Xgv&sy)o4pVBhIQm;n*DGnajR~tIkXbZ!?e*73Rf{BRT6* zE`ab&y(v?MNJ>_iI@!1gs*r2wSrTmz6+}|H!fZw(y@X~Ye7Vqe4uDE31AZcA&%~4> z)opAfl6Il1j=)+`j!1ZK=ptZR*&>p%p(73QW;k$*L{RaL{3aqPA392tQRIKVCsa}@ zINWCLO-h8q@yf)BlAW8&bI4>yQkjXqZ6nkzQlu>KR>ho@4uxyfFmQFACh{frV7o~P zQJ{jP+UD)KU|1RO3H(quLs_shFTDd3u&hCxI<;3L{YoQy)}qsoaNt>rHMc_dvq zpX{P8>w<^;`ikd1-PHP!I%=l=IU>Eif9{RX>mG?hSCzv8Gmd`>>v;?szvik`+nZaqv(16^I>&QGUn zo-)aMw@9J$j)*oED}PY)(ENMi%xLS1>a}mYEAMI^@=4tUz7M4-`Z3#2>0Ql31L$LH zO?`A42-=r$)-?|m^^s6!^)zI(kWoz0U_?^MsdBr3#(6#_V%SjqZlpO~^;9IxfP!wG zaL>J*&-P*_>#C=coZ6yz*V6YGDaNi0vaWgtxG)^QolBIV-C)pVUG{J`7qS%Nfhye@ z@AJmD(+ycCWztUut*0PZVR>jrdf$=76vc;>GI5-V*sJ-h3!g&$db}Oes+3>43?BdO#xHqA{4!c^SuNCZ2FKxL=Q zB6=u*-XkU22~-;bpOxbaM-FFH1tkY_3AUb7%*yfw9pc0o-y^Xdq7j}QNu{SWd`SC5 zjCdM;`x@=OJYV&!h*-EXXLD30$L|*G8EwAmQ4!GxMI0E1BMA=I#!aqVUmS1Ac1R`r zO4d-d4K@%-WhdhE8hYvZ{!+fgahGjJQrU^v!_fS!2|O}GB+7H+GpX!EcLXHgIjE(C zd!@4P#%EI5iJXd?@$@|smCn-!5hh<%b_zs$oj(&^mLbMtM^f1-to}&8M51JNnyITw zPoAk@Od0Nx0)NZ0Q9E5#dh&@?nBZzX(iQ$OnkssTq$k;)FAF!Sw@9SbIx0@tkyLte z?8lH9m6)wlRy=2WR*|W3Z zO(n@E%4n!@!Z$wAx*Owg=F~$m5ZyI5^5x3)>{NGkK?Hdztjo7|Bcr^j-PrK!7CTnY zWo_@lo;~I_wHq6jo^3KK{oo(8jdFgadiF|4Tv!*cgbHbxK5-1x|N7eW2EyJ!dHEh^SLlBlcSTaVSweReKy$6zYd!{vAF=cZfQ>M14lTI@@yDAW(tlVcR`M<&U*;mwOUYbK$1 zvZD;vk^Ljmw%rbtbvQ(zR;2G}I4-1&lw?E4$~qh(bS%1_>v2U=o5gOK$~qb%lxtu-FI=r-T5(lWOjs$5N1|!hwxKil`9#UAUBxl=fBG5YkVjIbA2BIfS z+Ysa{uL^*O{|%K-q`n=n{kjuq1t1bnmx*SdfynWX-qwdK>r|+*N=pX{$#WFj$_BZj zDBl$xWY!RDPUv=S`moMVz_GMVAnk6)wZZgQI5ZJ4}jLa7SlKG42f;F$7w%!|0Rpq3`BNVH;djJI)FnCWkHe zFh|v%F2o@_`>rkPG^o-3>4anDl*9L(nRi)-L5<`d^tb6WckwsHCo|BRj?mZy-XJmx zLbZ&m$gYseItpsTe5VSPAvm|^LW)3ZI`U%<;U?~Y-UEedq2>^;tdpQd+FB7gjX;&Q z+HHPbS;s)laVCv6OGc&~q1IwQ>WX^i11>CXq>kh!pUYEru6Fyjt72&umZK3bFC%Z~)YBF^>zL>$E!=W+t?zTiZ7Nmgf9Hudt3GoEg)p?By?pp9^}+4&7A z`-3YWdXA*x981JdHy?RZnVX94L*8WuVh=#gc{|Yhs5revg*5?jgu+mw$G&u%%G}(R zA}Kk+)Np-`H`jc1o66jQD#N+Vq-#Cs+ zduUh|$TET;oPx7$>*=<&A*J_TO?8fJ0<|A98bCXPto7q$PDy;G2^ok^_>k0bg!wLrTxQ+N#(C1}dTDWSgHL(5i%n zPcXnB0tw1gqewQIwyh0mA(go`5%v!p2ILa#g=AYB(h>+<#ho@EHUaEgI(ThuNDIx! zixbCg_7Id1v6o|QZAoc%M_R}6umj~4qutfC6_`*+8$}s%JZw5)pmpE)YHK!fgaJko zFJ_?9(uRIrM@932HYa6ykZr^HgP{xD2)C*#HjXoDPN%jF|F_yzL|3Yclr76R1^Ea> z%`m$q>1$m>XStM%G+VTc;;U@FCw(nzNEJpK;iQqkd%_FKF0}eu)(ll=oF0KXk*bHH z-97_-Eo(^eJg0xY$gZWG545C`;Rjc<0C+MOHa)m{ zI+Y!Vz-D+nt3*Pth>V6Uo=Sk!vz=?7RU)A^2nu8wY*NECrHy&y^XogI=lhj^AKF!9 zq-tBTBG8&i0goJ^<>{`&nlI$1V#E6ybkF;vDw-7S*4Oh zpKH`tvLYeVw`N;?>{+FfM4^}%f^2^%B(pJQe_k^QMX)1rw-ZCs=n~&Hh~v*|e>99& zU94Vqh@@=~nH3|@3sT4jDTz=LbT>!5I3VwK(tS~>gzHsO4d;?{=wxj00$x-mp=oYA z1f$1BI-pQCpVW)WB%}yadtR3Id3;kFA@!m%2?-rHZ}D3oTC?=H(Mi52p=U?2h|{ti zDT%rmc5nNlgq{QG8?;cl2l9b|H&kq2l+bfTDoLr$LXwm!ytTIN$cxr_&NQ9LGtM~O zwb@MA7d2_AL_~!!T}LQBM3no+16l{h%AsbB1@KYzhX@xjQKk{lg5X&xX{Bf%z3U9`k!dO}YmIgK!2ti1}g46^-A|*tm zB$OmTAc2G=UwF^C=lz~@?|=Vu@A>lVJu_>~T5C_)Ywewx*=xZ0kjt|@AC$cU!cRH# zkM?+*UEf%}FQ_wdJv9qqHHA>H9#pi=t#e;Ts2U$1Cx5oeP_%I+;q#?lXw)@_Mlqx} zO$DL1GaXT@wQuB};2*~-c_Ec6KVmM|&1v4_fp!K>M<1LQd0E0Hb^Ewx_<@UG-TEe~+#TfuG#! z?zxYxf4?3{ztVT7NY@#Yt}wE3;Y*bz!+FJG<(;ssTIL@{O^&C4axHVv**Z7;6HBWN zKff^bs|J_VDEhPY3fe*uA$_>OZ|PZFFVESPG08T zc;%t~M%Xh5pPD#dwrHy|*mPA5K3pIv9b$}fmE6!}gB}V$_g5O=rgjT>nk?P}?bv>i z&|Kcg=FG?xgQoCphlB1xOZ;CVq&w?2?PWi8^xFHzKhHQSMtsa_mpT*p3R!p~_sYy^ zlgX?%%hm77%Ro=n7x{`7_Qv5Q)a={O$Ul0pYB3m}UsRM{7c7*OYAmsM<&RHqRUI(R zk4iIdn3bL6nmu<0Di=^!Evq9uoaj+>kN&9aaPydOlgIbr3bhzbq2r9VqaA75opmn+ zz0eRzl^YhWF8kyPK31t@-TV=?&*m1IB z`dj}~P}ewmW{8HE@OXXg4#s}p$M0n|>)2P^g#26l9!#yHwC`6E3r9MidEw=7%H5~C}&I@w4bW1EGES_ca_ha%3O6;hrU|9$5mJM=TpulB2Yx=i5{lm+Yf z_F(;?d>Na(hj`^}C94mWPaE>}!@ha^JU_J7E{#jM7v5}p_6Dh4>g>TY>R3!nmC$_Y zihfIadDs28Hk$kD%iNcm1@1D3r#sBvBdl6Y!=zta*LKn3N!Am+^Tt!^ zqt3ZKF9-E{-t0YyF|$NF$-ek@-@bp`L1*uC(BX$hZw|Z^w|Sq@n1kee~!hcizh=9!JW~d0py-uf^yi=rAuaW%(1g!ZIwQ?qAt3s(M{}|L2@wX0hkt zEAr`6ooW79jM@95!c&CV4{pFSZesYDw9hU&<@_Ye!`dEd@plDcIU>v3Q}H)XDLlM+ zS9j2?|Blt#ncIedYdQzjj;((vR8>ab5jro8KK%BLfoW;|LhVB{jGib?7c(c3c{8E$ z#t>VS5F&IwieY(B#W@fiA-5<&@3*<2@3E<`6SI{5TV&8@A`orvi- zb*^%583w^8Z>mgN0(dUZG~Nk!OW@4ImMXg}1)8qU^$0Wt>Tw3A#f4QfUwyU6e4;#6 z;g`Xg&O3Q?$xInHFL8OIudS%QrBeLUtGH)hV}Exmw#FL*INsfIF3}H#y zebNFX0WEZk?*6FmYd?Kt=%o3Thx&1Mt5h%Qn1=T~GOOkh!!CM})RYneszS48IpfKq zl6^e>T4wEVJI^}VgsaTb->(_NQ^t zhi|Lo-aWrUyuDuYY#%M^%0p2@Aj&CVGKus0Vr7tfdUUkF_59>#r4;`PRr};Rv~ZP& zjiYXBmi6<(Qw2Gh&m69b*Bbx+Kds@@RI>2YYj|4Q^_d&9`1XU|kdkuw-6MEGR)SQ5m*z_m|%Dt`BoKH^IZ%q=s3z|2}jb(d=i5YHRx~?@+x8Z;o zH&x9!V(`$;=mxu$v!Xg=((GUl)n}v7lAmkMoW5|O<@Y|1C zHx7`0KEj#PHBGiGJ>g?&^g~9(7GTa-QYe z%TEN-M!SXjWy$*iiubJ4VN3QTAoY}vQE(~ z5-ZId>2T`QU*(=ch1Z$us@Rrv}qj!nAf|}aF_`Q(}@64S|2f-d(wzdWHGFgC4 zrkz6XjHG{1#vYfcC-di;@A9`^b!m91V#MXD>c2NKX#9&HIrN-Y%1!O^*i*mDhkTDk zSbXE=m7$9vic8a+C-~kO2HtI4;VakL?ngrH3O@X_v!ZI@ck1uG4^DND*?VGBQT=`C zvKsQh$<8A=Yl0=CVB=%of4vgqGPKS9{^a9DM31bp>4{Dq?gZsarWSi|n?mRJDxdpO z6Db{if#EZ-b|HH4QbNi~kV&upScqrk9`Q>H0jfm)4vrJ^8<*V6pJb(9xo+6haV+-( z;A-J<}>uRMHl-F9#C)NQXi1#`34W!OZI<8pP@NkW~WeQSbz&x?N=%9v17+l&ovN7b#= z3XT6!^f|MoR`oZa_h~R^Pg{w15=PS1Mpy10wo+Y|-y`aL)VYi+xhm}#ukwd>s!sU{ zy(7(-x0q!$&PS#v@3g&A=dK8ntIB_o7nbv3wNk-KD?L8mxtXZ^EmcSRCeO%Kv{b*O z#HBYanS9ADrN(!}9MvI)PN%pl+8?dR-jVG|N<-`U_FXy6V;3Q2M;s<)+8XRVSP6gU zaDK1ytVl`Cv-|*azpDu2#9jjL>Flui*CIA;soZ8(B~MH**+}iTx$Su{oN@;ly;lap zb<5ELboo)AGRVLCLRH^h2cfhpL9@s0kE&E_cKoymvbc5h`p7+}z~!ms)Ebhuh;sSy zV|GpECY0>%qr+Ln<}UkR@7w1g7($m1)^jj+?KhOraJ4=mYMGiXAb00MK+C`->%4t3 zF#^)J&flubmx+kjOMu-z?pk156TGFb?*2si$l)Sh8HbF=^yqJBEnkhkyWfDH7)y-# z&zozbxGCK4?ad%W*)nOYdiJ$frzK;Nm3@hx@!4|4L)fH`_1Vb@rRp2W^wiZ&V}4#3 zp}el_>7Yi(x@n?=srPJXzdAx}z?I>XE6YIvSv4m-a=O;{#R@#0YOB5BR19!jaMx+6 zexvQ%F=A|a+8v= zWy!auzDalAQLp;~UQ2{7vLz9XlCTl5XAt5M?rV5lq)ImE>*KAoVu%#%JH^^S`D^gn z0aL4=tq+)9=ch(mKP;nOE|c|vtBxdnOf&(>Re~NeRDB%%mWzw4i?eI5OLU>v#eU($ zGomYlxK#-j?IPdqatO zTeIbkX>a6y!=K_PuPn^aH*?v8?{;LcuXE21ZnUmWjgJ@GypZ^ubOkJ@MZK_(aruwC zUoNPgOAQ=ON-wUS{+e;`$IU~k=kv}TD&OPNuIN)~*)V0r#l>yTsmT@kP#=p6a@LGf zvw!;+T}T`c5&C2%%7@O1=PN(Vz3+k%*E9*-0ib=IWl9Jj_p4tK`i*Y%VE7#ddLKl2kv4Kpw+Uk!rTKnk44k zX~uX86{+55<73$l$f@ACKV#Nce;USCkwotFZtVef-JOmbpC)d*nS#6ScG2GDG4J{T z3dT`>)W-ivQkPiH3W?g(o$;0JMuj)Lm-^U{|7rD0`gmPxe|>fqdCTD9;yM41#)P`H z|4&8zSM;35oVXk!XMQkw=FX+P$(QyfT-tk}RFtPwRLbt~K?~0D-Sx-GR1eh_^1yv6 z6b_m;p#WAUdPm-!a!QMAU3G5n8GvZEHy*Xs&udn4m5w~Kcv^=_!I)n2`uVYZa^R;& zq-Rf7s7|aW)>Xl|9rcZf+Hs1w7I9(Gx~v62K^~kQxm;nCHsKLtE09gnz2&(mq~O`^ zx@k;7WszJBQ9G210#{P-8W!|4^r{|`=yM!fdrM@#^}9_wws{i1Jxx2ELy97HlD$;1 zuoS8da=7IQh#-7Cp&ZpS$kAu&}VUoogc-F`CjV-lmlP) zwxvN0$#hQ9*yFP=IokmvxkBxl z#Yqvt1wUB#hgnjC0c2XyWCa9R#t4Q@TDSP97AN%w;0mY+*H&5qtH*g9TCg+TR!l_% z?jrw%fJh{dC?)3VF}eS%ZvF@E7rzN__h1zqcU>!mqnr(Y-B0+}{~-D|61(@4SIFlx z2jeg69C~1J;(-Mx-1orz#Pi+6p$EFdqdBja)_oag*9^bYy5>%Bx`XRouVkWKfs2weaSD?+tPBt~mm|}Pyb>9|KYWYXOa0$VE2(kd^pGxtwLV<#E zN;52IC3l9ynf0FQj@O(w;(UHcc7{T&P+RVp+sJB_*fAJxliJb#(w{|8A15C!MCqb(GqvOF`6}IWOcM zm7y({AL=*K3jKH5)^S6zZ9~zx@X03X6Mb5UXKeQ*k$RIP18kj??(mwdT!~!CDe4MA zMaFh`84VypW?Ku{$p5dtiBG0?ic0R zl^Jpy`4cW2@BoQvX;xyHKIQFK>ZQ zBXI&SWC)nG#ZV^z!8=UdeJ~W(l>8azghWn1Mk0@M#IlPRYf4Bk9=g*56lWDPFvTJ) z)BWwh4EE36t2VCEJVt%NJ3S#%EbjxcLyBxId(O4D!6vJ;@p3$IO{w070ols%95v+- z1&Oh|A5U<24Kz4KFs~n<1z11cm9R|RqT!D0Afz_+z&ngkvbPdzR(Ek1>kf5d7h|?o zm8#2qSJue&C9}Js)fSjo?n_)FR~^N~ZP73Y)V*0iq{UFvaizw-eQe?O6e-l2~gG8)Tc8*S?l3?(`H^2;-9F}!l zngz|j?Vo`R*={`)Tu)mCmPxIwwZ7g6j@@c4_(3t=AqEdBvSXVAGGIj>%{|CCjmcS` zmNDX*<~0%OR*o8(Sa=8c7{>G%$9zUYvsO&jTGe`|#o6@vi0M;co1NvH`c0FXwKYJO zEu@yR3aFe$(YBD@PN?NIK+7?(`p&ZcCs`3TbACDQ8A61$*$?jk^iT7%+xPrnOhu?$ zF1N8PsZv{*kdE$*w;4%n$_!~lDGJUq_a%=1W?#?Rsl_800=2<0Lu=5Tq%rcPLoskE zHlUxep37Jh@u{q;<*{2I;7Al8ts?c^nhZ@Yz-D7zX6P>biUp#hzm2XauURrt3r);V^7`dl7k=eWiy2VFDc&5jZl5eF!>vEjK*^F*btph5EDCin@AsidnPg zIFJvUgxM})*3Yzt|1boHZ-rcs8M>b1Z?Fj~#?v9pssP*%+;V3ZYl60k>8eLkA5`X^TUNL?+unHST0SB_Y={j9ZH%|y zcZ^EIP+a}{7YN=E5_YRIW4W#Q18!jjPlmE`DabTNq&*0*v=bcO85N$gUC>Pnv)`$K z2eL-bDB*eoppVH~%gZaJUFt3FJ~51H;6!{4K-y|sSW=#&s~t`M@n=Euy64UTK=$duX7Z1)FT zTmt+4QbX3>e?$BJ!OBs?B4R|Dv1oGDgXd=ZJQM9M?0f!HJanI0g1B>{-B0lo$_iV9 zoo@bG+)24&vIEBWDF8zmJN(sR?~^~4&^sq~UNOb2Q;(*xcV<~+w)~uvg?&bZd}+F3 z&vH@9TC9ZYO94E;Y$udWI6mql8x$I7kbR2#8K&y>nwvt5@x28&U}?{Eco5&Xft1;% zj*nb*cAvt5gcMXvE&Vs5%Oig2M{yZ&zI~gbC^Y(F)TL;aOGYu+p10WM9B;Fmp>PQS z8_P;aH$(=X_^!3gEAQqqxP!XlFAk@eK8UF2=8ec6LhAhTdZ~G`m6e=8x0^@#N(pU^ ziTViW8Fk+fI`pdcJgboD!&|IJ(bN+7U>2gXP8QtyAzsgGM^yQ22ASB7+GDb@0Y<`V zF3|CXPcMT{i*BVh84KGgn2?zE)R9*7{t2J&(!|LmLERdh3cmDgBkKC$Rep11LQ2CQ zGR)eK;pN@T{7HmDUA@?-L1kMj#y^_yoDSvJ-U(O$ED)#1JR*YwYH3GaV8MZbOoK;z z7)nW!N;Y$Fx5)wszcxbi^#-*65Gk0HtJypT=hfjjXaWqM-e^5R~qiku6=Rx&bcm@LI#w7Z-v+=wsh@-GYqisT+21US%rV?RStd%uyQIR!z^O|iXy zl4ZEZ2VkK^n7y6vEX<8vX3J z)RLhKt2W_2nvZ`s_3?v201xkGp&Cs4jBx%3GZX)QWWBL)eo2^y{{Y~sqJZP2wrrgR z&9#|rIDp-37r2a-tzo_w!FhfP0o$!E#~8>7at3YZA-f;- zJ^XZ$bBKZl0Iu{PB>4LQgxhOg9;MtS$qQs!*uvgVk$N-X&Qq_aFDZy_eQ*GKkbf=v zO+Y8duReRhV3%M9;ltK}UYy zfJ8Tx;L5nXj>0M>o8Y?MB6d678oXg#CChWD3&?s%87!FF9?S*i_ELvg&teB0j@~Wn zUA?{^y}1s&(52|Gk$84O5LLnDr3tfM-o{=;Tjwmc@s$KGpe~H@{BaeXlB~x?*wtxo zWFzvv+_SZ6rimFkg5v*ah}C^znthD{{#6o;M}ds!a!0-Fb$Q6nXJ+w1+Z6d?u*sPU z>1Z_7^2HifUks4Yp%=XK7nZ3WW5mB5#!0TD+HA^+aJ{IE zHr=0#o01g&7Sg@}<+fsnpchL&_dkHvMkhRbSWDRw{~pXemWkpwBm78}K0*Jv?%m^m z-dw?Us#}bll7g<1)VxG}7n!jt^S$|oGaZY2W=0t15Q6uqGiyulD_&R%d{r-YZIhsR zGJ1rMN9hvv6Ud1^nb_TU+-0rv3%=^9`vH_K5pld0rvlsDDNtpGsF(&?E=T_|-E#YU z-iL-98DQ9L11L?Btf@ezRHs!SPlCt^u+L?oLxiaG&*Gxd3GZ^$MwSitsni`vKL{7`oH;bWouGPfRYxVAp7p86r8gqx zHOlDKRM#=S=}X^6a?dO|@hbM{4D2yc2>02~lVR{dX(ZE|^+(Faw0mg5}L_$j8 z_YUu{^vBWHY(5*@_Z-w}Y2+$8%4WA=Lr>@Q&xf^L|97I3^=vN8W?R_SE6YsIyJ^lp z9*Qun%6~lB{*46Zp*TgpUtlJhvZkS|a(y4^Fz80qy~PhCuBcz)_XIBPF;{rSXLsq` zy)V()z9Rhh?@f`gCgcG!_DITW(jf}-YQKx^9ELD)!4bnPuHJU<7d(AC zkN;|44K5_mJ{gwecyAclhP-co+|W5dIZXEokg1Of0tj@Y5+X$kdC#rAM8XaP84Cox z$IZ&;I;qo*S}U`|<55s7-b@1(Yamd0|0NP9f4zJl>R}Oqd{(-`L>2TBIWkq)dTJuz z+%V2Ry$95wPIUL5O>hP^~& z5`P0 zXkcsVxx-OL3s!N1w>;NItn%gVmv>6d#bh`_UpGAplu(oylgqYye5jcAb6z_3u^8~z zAuZs}UB&It68(Em+{T7lS~Z70G|aS=b@6URb#AZfD3JDHAlrxh&P~Yzf8~mH!zSli zHu%#8Zl(YW1T%E*o%&gs*CeA@$5@w~#U92$V#2emG5F~ZJ3p(6n%Yf){0lv%Ikwfy zpTN^$Q})rF32kCM*~=dqIkD3>BX0j2-e2bLK;GjuoxTD21b8V&OjTPy13UVg7ucCI z9mwm5si7M;F3S5an#Pk^>oIvEI3{OFsFd!ZT#=r9u+oPpmWYJ}1LiHh0e=6DEw7%iVKMmRH9NrNpcA zPnvMpM|C#?xEnMk$durFKM0~n4&`!hh$!5;!H)(Il+H2Xf&<)i0cH}*oLvGdUu6II zAdg;VkAILafe|*?K{td6o1EvH06}R(gpCfNl$1lIZOLIN|PG zKZ??>%cPDJOnnuPh@<#;$^o_O9(OnuJlV`L&|QbGTXwiX6A znct8CpEx?STxvU|n#Z5V9%cO+%89ZyIu0=R?<${^J2zt#V273o*SKMhmu-}~U`#mW z3&QtE&vcv@BnUQxqAnG!ZoicTg{o2cXu`uMh5}F}6uZ|(s!c&z6RLzKVFr6KALR*m z!(vU3J_Vxl4jb>ICFu}OJr({G5kK@HvEG@?;EAPXgUD&kSfvvGP{$}3`m12m88oG3 z>2So9dKvyM)_3)GKbHwk97N*>V-KJkHF|x2K5|Sd4h$rPXmak1^H`%#mfzkAB^KZ5 zr8=`9+_5PYo^%SA3DU%Ey+|xJ61*NWyP^?aJU$J=J+nI}QG#!_!RD1b*NZRy;T_?h zC_a=-FeHwPk8#CX>;2qL;pQ?a@K`aXd=rX2tv9}H^-OZZA*hjJr=moN84bWoI2=be zzWOnAv_QTDf2mQ5g%XP8*9)G3a+xGeSk-fb*q|No`B54VhzvToIk*?A&usDOJ-LTa zya-gvnROPxY9h|!!OHE|Vr#*w0aDr{d|36OvzQoBtZGrK&o{>dpbXIXs6RId_8$@U z=2=8E8gUt*gy(s}hn3#c{~C1!Cwdg=eT|6XuR0))MSy4sRdm$zj2EfTHg;^jHsUHfF2e>eZ>84nrq^Wn{r zXkQYqu=ce2OK`~y_1f#u&yZ`e+Gqix);2-C_^VqECw^2d8zlYmzEr97l0i#~`V?*+ zsCYa}u%}2JC$wS3bXa5j4t0vrL(6UI{9sEh3vF0qhq$-WIt?T9ywwz)mxr>x^Rg_`kd zFbOx|l@EET81UW@&YfQ7%&Cu`a{a;8Q#blQhh1ON{nQw*59DqA$EnS1_h#KKEAgBfJE zXfQN-o)Y76Kuy_L;OATSUNx1TKVk#C#b{jq?*)EYVR;K<#C8OOBHbKMXr%q}ztj;h z%?C)zXNvefnENdsZho9&ePaHyJ_cX^SLWuQm^jua|BsO6GopLEF38#{s~t-#e|qql zweusu*)3n=yBEeAZg1ra2!fveZs@l>(u`BDceQb^evC-|k+~%~gmBM~7%*sTqBlldl=%)Qzjn#APs=X6JoQ@O zRW^Pnlj##-ziOq#{sZ;?k!D!oz;@ZEM?Syv{q0{|^TIR~=M7r9D{?lB>7$(Ttb|`F zbeFr(aixoMIpLOqZ8nieTupxjiLRveI2?tT7aZ>V{=1NBvr~LkpRMbi*}UrQfKUES~YQ zb|*t~Eri-!d=aKen6*uB9;f+HE{`Sc#Dc%A8IRl^SUkIUJ1=zGh)_S#$F6vHxr;YD zgaHQA^oYlp9~gXr!+p!N;t|{1{1fS?PT(a4j)#^Y# zpC-g+V@}mxMjj{K9Spp>fJ|k+n_?XG88colq<+$A8!8StM)NlG7s>$}9)BCvc)WA+ zTz}s39}yXweq;IccIRZ;xiN%;ddRh&4VkCcyvr1;zQn4~Y;zE#3T=29Dd#S*jD_-$ zYw-hg1?y6;bx!qY5RTSRYWD%IYOdt?db3-VY09EtnTUbrz9!eoafrW78Qv7XD` zh8>}t*koYYjoR>PUlyuO!Ds{eEJ9;*O%0O7@%L%m;<}~P;eV)Qj(HA$v-{rfTlgkD zaM6|y?L@|lBv|m8a)@e3U-9@ic9}Mua{3$8b4(3lgBxnUl`-sQHRVu`$1ukkAM@{h z%3gYLb2O=~oS~0jAJ#vFqT#J$HqT6$;T}84NdPFtFWP9$_5pziGn1|j z!tVbSE(J4z=fA{HBt+YU)!hG(eH+__z|sagVcG+8B*+Z(TVm(qZ$`ewt(IN;6hR^~ zvtJR3q$8f*BJP6PzP#-j4wq>@DS@2rvTU=XLG>lzUeS7zBuIaFcAP_}8m9QQ6}$&~ zdGv121+GMr+O44b^(7st+4)oIgsvkMXKDM}8&A9*=8$SwjFoxPc-uQBTpBqXK7+5Z z9PHb%^Y=JHYqTzN7)}SN}w2sN?6jqGS4CQh0~t>_g` z4{Pje_s{74?QI@K)X3Ytn2AaOM{HZp?Oi6?(;7}8X@uL6^(Bld@TmX+P{tl&0;!?I z3vD9RB+}lK7->OsLwgex4@?MQea#uA93q=tqCa+tUVIB0OSzR4sTVay8Iw?K(%faR z<}gg}GAQgabf`q_p?~9_m>Iom|2$K)$!3?tmP2CNGuL)WAkW-LL6(fP>9~saUgYo) zn+g6gARpl-Trg?dFw`BLu9-~gPm0`eA5&3vWF=4?IIMN3MhzpcF#d@sKt?j&jwL|c zIW)bdRe}hP?&+ENXhM!LK(jFORToajgJAw=0AVuE8MR;MzPXB$V#a7m&0rIsbEPg#5a0h%#+yP^rqnTB@^WDm31g%fIvtc)4sZ@PA* z?Js}|>Q3_fv2VBE__$qCsA=;S_Mt#&O~IRT_Avk(uB2gWU(^e0d*w zA0}`}Gf#SYGfZc*t_KD3J@XZSn@#=fMnmP^d}i^)izdAr-@~GWFwCj{9Kp%>1s!%= z7d$CrilQ)WT-bp-fW!BGX=6)98vOV^m0Lgma7!6N+hKMb!OhRjb@hK%)Q^Y?0}|3unDx*CWxu+G;mH`#+|ViF)y z#D48_xT3}s z!`9PCr#y^{x3j+&qrCZWP8-qYsGxRz;vSrB<>AYCqZ!5GUO*8ebr0R)mMVy(Re{Ej z$ENgCrz%^Jkh5BG^(Vj1W9 zOySF69V0O4O*lLjVZ_8sZmdI5LJMLWEYb$t2EB=01ay^5awx7V(Y8x{IbiW91dG3X zXJP~j3#Xgh`89Iq8VnG;{?bt%n%dgY^~e~5@AIRHlnvm|G*g)vo`lAu%(>XTD7vX?oRA? zFX`hwBgmqX7F+-Um*GksB;dS9w@|TkAI(>|Mk6|=IcO@vgb9?^!#5VQfcE%Jk#|4~ zHdShnT~ozoCoYWlkFd{G$4yhF8L%-o9D(4IvWc6Z8hD@I9v>NIC-;~rFyZCwQc71B zo!c4*D(&1kZEa^-WSb zTMIV8t#@ItnfBbXM8KSc>&N10Ah>Jt=a6kAQM#e4wNS(JmGBsi>ieU36Tx(A#sjs8 z_|u-Rg@?$*o|lkV3_P^c+i!)sLR?Wr0FiSRu5TZ4h9umI=7IX&nmUn;jXHmzKfu2k zi0bIdXfWva`O?w#ups~`^*+?ElUg`K(^;I1S*F%d=(!prZA^E5U#Cv)_cjW@OVX~j`#tI9Gx84dNfrqY#Ci+V=cwrfBA9y8Z^W13ScV&0 zGkX(7j;Wbcg>kP|h2Dfej$Yub<#G8-Rb2o0r#th11#(nnY$h=2#=(@!0{6uP?u$y_ z7u`)XbS4~VtyE^G?!zZo7C14M9q$gg{O7eRO2hZ%@m*vmykUQH6b;$#L<4$Z!sUCy z^DBE$D~Fh;XrqV-ss4Ay-aTgoVOX; zA6o=rbdMw3y+@e+;ay}OHU=L9od94~*pNGuu_O$6vV}<>py82BWIbIGL#w8l)%}QK z6k7d&D`0~EQ93$}|6gv4Ei=IW?V9%{S6)Bjyxute)x2)-e_6(VL&#~~LZSPdmGk^U zrJ{U)9)hK!!WJ@D1U>lACUI8Ym|a-z1^xEBWfMgsQJKU6@t?r*pQ?tM4?oYS6fG^5 z2((-2!rAmY813*9@cD3TbDuFmF>|LYJSz|F_%eFJ=-X|=X|YkNK3l5Ykq=4q_B92` zky%rKJv`W+#+;;S1`9y2F7~3K;?4Efm+JGy%m^11f9%AtO+e}yL99-;V*3kyr-<$Q z1n=qVZz)jHrLeAX?ozhs389KhO2P!OW8zH&5!TH zqv9a{+S3Y-8s<@BgfWTHL!jWaIur9W^VYG23e74*!t})G7Qn;Cf;Lu(!N<``z`5ngg{aJ85hYM9*FQ%phn9Ethz?JYR`m z;wQK5PPRdV2XyI;(-|fDd4Wwh>Po`&?aIdv+Skwp1KR6G#Tg}0d3Q!>3_#NKo$TsM znm}~Nz!}sI$r7mZd1pFGDYigHvEr8DgK58%$5&20L{C1U9?9ub*)S~|BttSvX&h%N z%WH>X;lm4*t{ybw$;PRiUX2awqZ(m(Qx-to@2;n_JPB#m`EkOC;S;FDG-FG$Zr_og z-*h%EmR;W?7n3p__`KJYP-GpQEjTA1TP-HlYc^EcDtohdoBVJ(=t0Z^QYltFkYYkU zM?jQg&o6I1oVK4R3s7LA!L|(7vl(Cl;@BWl!BB7); z>+J=beS947@7V2uR)tujeOZwNV(cJi)l3O(IYL5H{6H+y`*C!p8=A4%o+|yv9)wT* z-@*J1b24Vu-PFc_AOs$WGNqU5uQYta?-fAY%!nc3L^x4(T>8Bo?)W+LFqbi{Z=6@0 znZFE+&;P4se1#$RCodh`qqMtzkF$!;f@4cK;qH-?Vm?@M=V|)!#bW?^W)u$LZHr$S zU=7?3yXxEjtPnpoK{3~xMGKX&ULCR&ZTB5*zHz{ckbXHQQR85#k#*65mP-#vhc-Rl zCLaOyymI*{m5NpY9}(3)qjcs^R=Xq}|xBa7B2@2?0d@5gesvDSKU z0@VK~L&ZLTgEes7#eQeH6SBn|6+!ki|58sX9pT6CPAEpysi+eyXdswWyMMiX@BVhQ z3Ao7qDmt08$T|f=dDs7$y%KTK-CVl8iqVKR!NQYCKFXC`Z3*g zk~npH#8SEx!)d#Ve`~ww+Cvrx+wXj7yS4W+r=c*Z%I8ZxtvCGRjS1P8HTQU)u!wp> zZ@VRE&gmcI-@5?5XE1?e@KWYssKHAVcXz2=Iw3s%J|X4k^g8}&QmDa_3PenU04+0J za5}OF3%mjomQNz(%&345Dib1QhQ`bGnz#0^W}Bpnf;vt?G*0kiHSA%UhdI%RJxNy_ zJ*e#!R+Skan!QN9o{N-23t&%q;v|-mNUk#~;U!s?t#9u2$`j_$wQmZ=_0Q>ms!l?D z2)^i|lbeVcwx#|X5W{#&4fw{zLjTPenU|eH3KxMm{vxA8Nb`Du^^N9HZ8@gWTRI?V zCEin@EO1AW2wibl4kWS*9@q^8oZ%v?LIJJ5X4~VJW7!A;5mNLO0+u#6u~Dp0s*fv} zWF<SjLhO?Pt@%Eo1Qrjx$Ku#d4ZS;w1Rf)KH8(dQ!2MXy7){HYB#_n6Wf5bl)j& zdX2z>IvOnL9g9Uawn0R;C(-ff{-JijRME zG}8ow!F3?4O;ngBXEC+?^r5zqc`Rx=a+T&5T-!Y6!3nZy(nQ5+iS9ajI!D>9|5Ell z#Q)~y;9t(-yhRkvgiM|hwMGg}2>s@qE1YwHbIx&2T?-rZUIp``xB0F;{B$DqOTy91 z#?NSqt5DS$-o>(8pT(d5qWq@(Zq~lZ*~nptx`E^P@ax{7Dfc2ZnUF0tcFP9s=5yFJ zdJev9BFKpy=f=RTlWp1S@}quWIGDGrtK=Y63?ClMtB(4`AjU$ zK&2ZyZqhp3S;1aeV(oHMM0S+7F~==<u(B zodwVDdCN-y=Gqa(9V(c^Wg)zalO}T4Lh4}>U=!75)E2cP z?N$mdsXTVl>33I`s`R!#lo+S%SFV90g`<`>*AD=V$FK z7zYm(4Q3q6xB0qoGQX#6wDEdAre``_ad7!gy?u=jWYR5qx{zXWwrTl2zNCq zByGygmaHm*hji-@-NE& z2A3~>InGIj#!29g+3H_hb9@Gx&DuI{+dho=wX)4l2z^$5)Fm$Gpu+a4F8kDU`QIJo zgm0&JlX0Rr6{~BpnrFZ)m$(8xFT<~`w&)kiU5<%$8>VK|ov5`CaS&%~%H!t#gtPn3 zS#ok^+8q;z9M&LLF?niTsHJl{Uuo`M{*_y%)yo5aLwwmqr2L5x#ra1R$^2&2)ah8p z!GA>fJt8-@4+;Lst^6nVU&IbDfqWD8f0B7{S452DZdf{bj39_TZhnofbaLEw?ji}C zmTLF|_^e#6W4F#q4XlO_@Z>td!{3QVcvd9L2hg;_w`GRHb7z!7R|@ z^Iku{wq6)bR_?NTc^ZV{-~eAZaDw!jf^)<#QJk`?z{Nk4u5k~q1fE?JdRAfhMgKzf z!a>|&_k3>}eh7(Sb{>OFC*_obS)Io=Ce&?Uvt(r}Hg3=|6@!#_@dC3Z<WV7P1jHsWT*$HzQ{JD zgC&_EIGxT^Qyg2c{v`u}THP<46v3fDEWpyqgMM!-`vzf$YF@KCkX%hqyTsft3CVH( z;Hv$lNP#u~jeh*gSsX>e&g_og@A;*kAby2M!A;?q!Z*&SeWXA+ZyRSQzm50YBfF9Z zUu4S~o(|hanJyAZ2z?6kMmK;uooH^IE1hFH_!W>CXwnhWZXl%S309QL(q3~vab2&W zfcdqD&_I^RNONplAOBX*^i%yh;O$(&SD4fF#@fiRol(Et;Gc863#H|OTW#Cfrp)G| z@^YW^48c3F_|x9l9n22;qe-##hwbpOO`r3m(l#IeOLp9N6t>_1BVQ?qd{#C)7iIWN zJyP|_2JZmNtik(y@EV=Mqq~Ob09bA4Ah`&I;RoI<9GPKvam0~&G9k;p0yoa zsB1J@(ZvtOP1tGmD5Z_-O?BN~>|)?a!ghc{Glh&0iM?otqk>DFS@Z!029ADp{AYpKrYhXfXPLD9Su$9@SIRE z;Qb`|PRoA!)N__U{b>oRxRHeT(LXL!D+dxVoS=g{H3_G~MwpsKwa6YuBI&4Va3_=! zfG(Q*jryK^S01F<_EU4JXUv@TEGgsbFSS7Eloo5fCXsDG@1=UIK(7mIH!_f(RsdP(Ue> zE+q+A2t70jJyJtWgg`<_*>B_d&OP_t|9kg+cf4dG$laGe5-L)@SCu_N+gsco-GA2-I0neOI$ z`;3fcai=^5>(ciG!qT!ne-PUX!n?K9g*a;aK66rJWLLKRvdpdeXE})S3Gsot7a;sY zWYOtL7uNob*6i3RokwXZCuXUqbRPZ*PnW=E8rY6-;V){(V+)|}6t4vffVDb7kunAR19Rbb$Voi+Zuo4~9daUX`tlum6pB|h ztG|IA2>AnPA6QJH6&A6(@CM;1FTdh^;B#$gE~!V z&5^WXb--MZDR3jb9|lIw|#h)w(^*?G+?F z@>!$79F_V<(UCZanK1&L7R`w2FjuHxdRweZ6Y(`UkjWc;!%L~^X456o3I+o|yuOnFZs)VxW^M0xXrk|OHj<}dbp%;DQR)fSx5)*@a zWPh(1xJ+~L4jqk~%Aj9SSY#SxdUc{*@D$R!&Onm5RN`LZcio!TvsFS~!joSEgj?#y zl(K)eGiN>i7<>*w_YzI+G3Ommx6|lyEcBW}=nVThX?%pZv7b{i+4g+tWn`Y;kICKI zx0H9$7~Gq+hGhTs(m+IfIZ9M{2=3vi+CLhlH5pz?W$akMVQrVRMIGg5mbo793_ena z9X3WgEpIX>t0;!a#T%%1eQ@3MA0W!@I2TqbgLLa%G8iny30p;C6)gC90@683livjN z9l?NFLuSXqk;RQ$m0dj86t4uTJr&BOQPAMld)$?h{Y2nojNQpx1 z;kSR8C;hU9P@FC#Z@c$Q9Nl?FDCkmRIIE}oTjrBLZmeB46hwH?K zyE#iD&a-5Rtz*}Cgq23#^uwIv8AScMtxl=!uJFm6h38@3-dPH8dd*U(pCaQX=#(qY&@%lN6r({yHifKIHQ`(X!%yrTuyd8HbVuAtU+9-ag- zwY-K&EYw8m#fG~ZpuMG)jXN|@mBqP73hbLotJh|wenfeD8&(SiwcU?oAo9+VRKEC> zTwlvqD1bh+cX~H(X?hJm;){@;J9#)(W-7RF;ga1OShT;7>55|liobO&_&1_*4*S`{ zl1b`_iD_4|W4@%hza&$LdkI;$EUs<6fAu$R(4@MriC2UF;&Ba;Eu-nHz2;lQFPU~_ zW>sfiRn2;s1JT8Rh}4px|FF5K*cR?_p=w{f+Pky*<5|H0Z!TV7pUr9-qCn4i@fi&d zex3M3ix2(X`_6Lr;b=nek-`IacQuUP&#S)Gd~%DgD^{bVMx^g4Kx}AHv?5C=}(!BGg zL|CccY#EsI!9DHM2Jbt) z3-lf?%9bW?EN=84QCW~+I((~O#yB{F(qJzQcQPdX+z*-dK-SQ#h(Zfb@>h8(tF?thLGBG04Jf@OBN7s zL6WonLRK^8;QWbGKtvgoY5og&I6}4NlV?Ft>iQd}qEk4smi=^`JIH}shIeMJ)x#wk zF7bu~T2y&jU}|+f@lS+A$>n1@fnpfqwP>~qm_&n}x{W;q3Nr&v{)w1)LAHR!AnA(5 zjBNu;MpTR%D;L>B!sbRhbitAV0UH{v!<*$ms>DB*-KzE+-#ugr((nq#W~n5Lxd$3f z)Zzy>nSZb|f01SQxlQsYTXfouxkc^wc{mOf&Mn|Y8uyQa{0;g3s2wf`x@Ai@*>`!b zD$xSs7gsR62*92%_Y#j%_8KFs_WMM#16wiL>HuJUyY)PnZ9Vy&bn;fU-+w?}1RES~ zXs!cH{l01oh=(zWjFOps{D}r^XzNa#SVMCmWF-o0mgYiaHL1?C2v{j3Q{vbre<%T~v zEBr0ms@p2LoRNa}={H)b?ie!VRoSzf$!EM|S;HPn^2p($$SHVcWirR-zX}~dA(wn0 zo{~oltHC|mYJYby2|oX(4kpW|a>PL7f#5IKL!dDP=zs_`h5(Pha1mc9t!6Mavx6cZ zMqV=s=;Txw^tesl9DD1jgX5a|xp{R>#8)kM%ngq{kd>7Mly)_hosU_JhNX-qr&CwF^Tpo73?z=oGIVUcrz7}8mBEay7FR_H6v|HWYL z;4SQ*KXc7b;hNr~(FGk2+0AT=OtgWb@aR6P_rSYwd_eGxAN()oSP&c;3!t0P|+%SZ5rfAbtuL zwhQ_d>9Zbr{zo9MbJE)ooHrUUyVx@Siur7_pwj zkiN4`d0OfRH!K+)8@gv2H^Oj|Z?Am`l?e(0E^|!)p?)IWU_cMK4sS#E!8h3D(LDI= zaNx*fkomQEo~RsfS_1R&q4ZvT!6lXj8q%y;RI>d;7jl8C+9+-aa=B>QfgMel5~$cR z^!VhKCh^Au+i&S$IwwvfmOpOgj>QY~E zU{QdF`Cb|y5NWm5u6bX8^txTS{mKtTS%zbtPycwgE|N<%G1c_xELL zQW^yxLl(b^0Lhv@Uvrr=xs*obL^AE`F?BI!$w8JS4dE%DH$5!5#NQ#Eh^@w5>qw57 zUxvDLdMcEB{xr(p5tv-VjF|IF3jMN$LkpfbE?y1E8C)xh5{Q58E>mz6NVV(K>6+&7u}w7r~HdiVFWP5O15x#03f?E%7=v!DLGz9y*D;Lq(n(KkMXM2poUh~ zW~!k(!lkoWP^*Qvm4|>WGanT0y*5UxyX^zRFH9lh#{nZEt~&FFL9bDC>@xRq_O8B+ z!Km%m9|5bt(43q3mQKwj!Dq{(m$M}*V2ZtRFW1p7C3Ba9q>TtW`Yw+t+v=oWjjOK# zrXr==GL&m9yWu-e^bMNF-I#!M*mR~J#At<;$RwJbb$xg)8#=QSknQ?hbNvfLbd?=j zL3ovCd~%uW3Ju;W_$r}DGL4pST#Z~nPrAZU2=nNHSFO6Jtc(ntkCfQnp8md94o-z^ zSsKrFhjk4!>INNtD*!mW%KwHmQ(YHPCcoIHLrK@l7XX}AgmQ>drk>oqEb$rK~*2alcD>TT+6#(X<96fJCj@%#1U0p9R$abLeJCgySfE(wXXw!-p7KYruD=_(J z3wVMy!c#Rg85>vCq=p|6tj7U60~xln0JMQGG>>R$3^1l z`RWalY&gr7d_XV@`4mOoXIC(eJ7fC;Qe1v>hrThq>!UqFxQnu1TJQl-H!E`Z%6#jk zYjH{Z&Lc=OSzGUSLEUQkBpm!gtRB^?D}k-5hQEq|73D22Y;nNJ);)0R^8X^qrftVK z-=`F{`CEj2Nnn%h=>f5%u=@)|W<|H0N5G2Eonev%u2+bW}~P4 zOv0&blZvf|&jss00W;iU`68@~V$OT@*_t&1Sc3SP_olaDA6H||icIAT@&YA6mn_WP zK~4gZlvV^;`Fp3BGo@GjlXor~VgAV*s{~kM^+5DTv&e7W`ht&6M z9k&zM_bmFs%jgG|0{cupU)I@vNnH5H4-0|ae0y7{Z)?#XY`P%FGtGVWnKPFGR^428 z1g#V@$Q(c~nk`x~l^6<$1a3=kF@NAgCojJ2NqL6C!T`GH4zf(z>umOFg3^BHwm5?t4zg37Krl~>)=TCNE)p4g*{MN`mi?s=dr(sP7hww$-*|4I zsLi6~|AF|gdH$gQ36{WSX$g6pT|S8J;5ilo{O`*h|2}W>pM?Yq6V>$B=@=61)M9Tq zKp#LafC(i7=yta3;7Nu;At>yMEKB0H*j85q_KU>INooiiJqZfgqS@tuJt*T4Np0i7 z<_6H-rU*9r_F6WP0citEjs*(>$^~QDgMbJg)Z(D#1yRIW|MYS z;<=RJ!7*O>k~4c4SvBf~WD_?l4K{}oEvyu<4@R*{fe5=_O)=Q1Da%09G#UA|UP~|_ zgF3)02OPokf$b4Yz@fRY+R01|mlFOD?NoXc1HI50Da$4XP;kjyN*H+As3MV3(0^q#v>x82YCSBx#wHhrTx-R!MUT+ z-?wMlzilOP33Ly=XA5R?|IULzmzU4>^%-AL)4!yrW_C%qW?xUtKum9p;8C?$IbK)s zu?|F=vzDG=l&;3HRLzT2b#G3LKfJN;oyIi-5bxX2KoNKA4_}aJ3m$J;_438lksPDc_L?Q zL9WM{S(LAbzF-cbHe*Rs4s0mJ8}^`eUFIN4@ExMI=E1L~J>3gL=Q!xqCOjep zV7oGC!`ChI3w%G-CG9jSd`szENMO*83fl+N*?Vb-m_Sol$YjlQj-(z!oTw~3+BGP` z6qtQTtwnF?<&GGNh>>EcloGa9G&Q|(^lsp$4O*5-?oQAK?T5x;r){-Phn&zm-_^O7 ziU!-oP}5pQZ-#H5^~lH~^q8I1ZkzEfFcKYA%A{Y5l&Q5d36U3!e&gUCC?mlqGJ3L5 zg}gsc-@Q__J^BIlh5aK<<60|^^gJM9+vth9dAx)Pb1;@|{fPf;^k;N+X8NoJD1X7M&w_ObOWxjqjou~Y1?|`-L zObuCVWar|0sSr;JE2;5mgLCUAEEd2vVjGNFnKc#bLF4BOi30YHLukbIx-(7L4MT18 zT9mZZkSAJV9)8vr?Yy&&p#c@@w|5>}<9#+GqNTU=+c^^`pAO!%Yw18vKWZ4d;>*)6 z9^2{LNcyz@CUlc|;$zeEOrW^ou$eDUX)W=rv*m3=F@qgNm2NY5f2EK8VB!@g;T4wT zXqNWPs_TmTz=7`S-#y7|w|~<>H$48d_w1gnU31ao@8=+4$HkQ# zZtCl(zF&Z3#Hg1Y)9gZ41)ns6yk7$8DEcXn9HK$0#H=cDrdmGo-RE$MdMj?j(jzDN z#;woH*!dguj=NM|Dx46&MEh^GutFMon86KXJ4cbXKBHV_c-CX0omR+525L+?mv?wc zSN`T_HJRw5EdfmOsoPMs06>ux>)Hn;Se1)`p87xynIp2! zfADIPo?~x)3HaR3&9Bl{6AoaIU&Yn1;q8qhTy3A-Dpp8tp=O=d3~xz7+pL|%){F{z zTtnT(v3J% z>5OQNQC2Q4giC4zj4)RE`&Xy;R0mCnS0f1h0gd7-ywb14!Mk2f2ud8cxzd%DQjd`$ z|Aw|A;{Pujsy6SNhEvY`Oh>KwxQnX6e0;k}f8ST=(0|i?mHjkDN>L9(TGo-||Lto@4KHw}n^(esu32pazsyS|Escj(XcHac$hHvwIntgg5)s~v&uc(_2o$>HuPa_f$Gi+dRUn`%?ms*aPZ^$ z8Zq}m=SyOwwXpddPkB{KQ|Z-k&QszCfI!AT@w_PN4n1~&xqJ7Dy!i{FrafBTkg370 z6R|=KZ_6Z*yE5{g&=MUS0}L-7&Zg^BL|!y{Ybw_Ke(nZ!J!j`oS*tYZhU^EJGI}|Z z#M@{;Sj0ivdh`Qx$n5%$PPNOZAS%Yd)<3xRtWoO`2=ky# zHkb8`*hZEBXzF60zVT)aHssf+Q}1{$xslQn4OIh%JQD{wu!>O+i&m|M63)@zSY)XD ztX5H4N~v*nN4oV_YPgt!(=t;TiBLMg^pL#qka{*)3WDLZsJ|hRV~zLB|b?4 z#ke7y&%hs?hyOVIA_Nm*?IBje9%<}Fzd$OX`{xwPt2^~2#3~lsP57q|l~?HNh3;Z6 z473oK6N;*jEv-9uhLtVYY@}|MUSq7&U9eTr)?HH}q~rx91!fA%NHU~d;gvZ5$E0n? zSKMP(R&0=**DIS-AI$a#3`_GUG6N}E(Y`YFGbN{(TPb&Lh9E?cTP9?S@FD%jM>p0o z*blQ^nt=xl2vfGoLgbOfD)!+stnCm6XMjMJELG{FDGk-@=(^uP#^E6R& ztCx{TLNZV ziJEQ{{gy&K*g4(i>)B76S7{NZc2O_WsiY8zLXE-&{S}XJ17kvR3i)@~;v#eoN%7vx z+Q@Gc3+v)05qo&3ZxiJ!hM4T~2R0es*QCQV4N-EEz)OeKGteb=%@CmJWW$BFQ5R`a zs~-TbF(&{sgLDE&Wq;}(y9Y!kDH}Z;M+ZjCtt+K_YVit3e1T}xcwr|RR(q?%KEhy4 z-6HH;QN%@Up4Y~oHDP{)td;Zw;i_JlBP63KgV#jB@M&jCqy@TTx=uW%GoFRwm*5yp z2Tj|B6}uI+7L{On+`^^)dU#IGjyOW>bQ(-^pSO`@W%-E{0`_%mnfC8`vD_Zwg@dp{ zhAR$ckg&6zp`ldvDVjR?oeL-|*i{}ZJ%dI0`3|5FC}IEEAj;8@PX;|VyjD9^GGtaA zbNt`F#Q9E3TK-_uz8l#rCcoMr<@!ke1|)Y`sbm2a#-JhUtyrH=C7*K6_A`-Iz4?tD ztW&Gf{~oq~oTM4K)ck2e!15Xk^xP;C<$G-Mu8r`R>FM41l=Tx(c6@+ugk9tf*zr(j z(7#FQDU&5`d=-Ip@Z*>6;!nF*3Rf$YCV$^)(AWydD@CeK+Jxww>%4v!N^GS~bw|`` zY90~wN%MEqw$V-WnJ1q>eCy7>pPhjVb|0A*29wKVitCr7SJl&H}FYhCxBcE zf$6WEqWF?~u!2MI5S?15lJXwXOCE+uzJp`}&D2TA2Eo#HuHKOK>DC~W-q{35vvcL~ z!R{Q$_-t@Zrv=om3CJ!_I{0A??>}aLHF{wPuAj7r^%32vUJfhMy>ILM(zG(lD8m5? z%73!3thQ!KOP~*G{vk_!Zb z4fq#s-3hP7lno0z@+XZSIBdCi|6LMh%bi0w-`}DR{fsQa?Iyry!(VEOFL%G%(Q7$NJ;Rek{fFuFK!;`71Ae>t1^6mr+sD8g|{3tNcbONaTd5nWHHCZqc>g zy$bI}PC5^~DZ@Ks7BS0yLxw*448tPK=qu~N-wNG1Plg@2ul$>T&pypxi6+PzCS@)o z?B+jhjH>sr*+SX+hNIQfE1^CY?DmY>eIP7B&OvC2~kADr>I;j}k zbAnPZnbVpQNnFG`m`)2Vv!p``vd~mQt$_6K>LfyWA`ZTal^U^@b|bxnwxMX9q_|ez zy2f;$w7%z!HsTdA%-YLEMQr;w3YglEpU{yof11)UR*AJhU1XTP+7al>D0oRb7%&@z_w0 z{O%gncJd%UDhQoxP(hG0I9|xX&uf|$hV4K9{*$<>80&Oeu9QDP(bKS!cTzQ?Gs*dx zQ=3(dMOU`EUy^Cfwx{nxjK0($reBWlG%)$FMyEgRY_#Q}{mV44zJp`n^3TB2fqX(l zsZSL=vr0f=!tc&v@zNi?32jvWY!`Rr;=H>@DR3}(_RJ17;R5gQ=jZ_AF=$zRq4-Ct zXiuniY5!t%?n$amOz>!v}i+#^M?(Tix!ZJx}R7pJbj4mRYQFQuY~BmmHOUR!fiQE*j-se z4H;|^MwW2UZ3{+_UbA50w4QMlj~;nZue!MtTIegKgy`l40bdLkF?9U=h<{FbCeyDY z71v(wWMl-ixpha1D`D3;#OcEkSL@@~CVs4`F@QRC4sUbOk{a*Lt^VCTx_Y&Ql?2m^ zFCo<~SN)!ia}xUWBx+QL!^d1NOJEz@j^(*%>UuD$ zNpW(U^jBpA)b5bHdKGT6reAyHOVLRbQX%+5(9e+HY)hXP`5sQ~4jx}QQRZJ(`x*FD zqLoC`c#nN-t#9`!p%w5-gc8lVi7)8II_Fe{M;o*6vSu$5zvsxNDNJ5*>Ce|4PJ`9DJ0|vfcO*HqmrYxXu;q#Lf<Wv5j#lR3T@(LKmsO=*nU z4-_%5<%Axx=Ux~1RYuqYqagVEFJw?J#97Ex%vH z;9WoCDUDqDzUSm8~ez@%rX|4LA zUeTiE@Ec2g1E2^9$mWElXHwtvMP~93W#YV^L`H2SQcJ%_RGL43NK?>}IDbQoSMsI^ zu2kS)huVm3XCz|RAKGM0y{FNvGS;~M3JfNe>PSHrD}a%Qvu@abB8IH~-X5-Uf&R|0 zV8kw>wXUN^E#864#AATZM~Q-owM9)Dmy?T)pf#tb{+T~8@7tioal z8fl54x|3KhW>T=j$&4S|pMh6@WLcj<`?;J4mfG)0d2lN<)8yOcMm~a*fbZ%%fw`qi zOBkLL^K~la33tu$=#pJq`vbGdS4YqYj(sZ~J@m)B&CqOovo6<5&((L-?6ihjkLj5o@ z8XD4rS{>CJN;et``yIUMZ)2_L%uWN(UzwL#fQu6*%9m? zwk_3XRfYTj7uMI11X)W=qcH8ITvuU#OWYc9;Lvc=Q^osP#e&vA4dLr()nubmn=qhL zf;q0X25rssAqXI_1EjS$N74PSHek^{%-xIPNc+qMkwi(vja$rH<*HYR!Z6A~;)0pQ z{fRfc1$(I`9kHUgU8v9kK+m5zP3%{vP)}%tj)Q5JC@XfPIJ<>U6JbIc27O3FP4%Wg zk&Aev3lAS{Boh*>DByv@!s(Q6Ts+L9;!bFM~%(Z&A!2*haTvME!f_#?22E?OmDPkf>L<&PO zT=d%G`ov%3b4wjyI5&cQ?u-V~&C)Xknzr1L+V*p>*8xzR8{sAdnk`}$uB0b~qPKn3 z+4G}3pTM)e4wvHw6MEc_I`7nQHI62toY|JkdZK+lr1z+7W(8Mq=EOtg4ZVIw9T)k$ zrBj8lI)-e0x?0r84wBm@rc)=Sc@9tv>8V^BIQyw#aQYRB(OvEsDZM_oDEdo0u?KHI zij7cZOG(#AX&$QVBNg@$QPLo4J#-T^L zy!v=}!~64K2-htS#00P=OXS1=yuWPbd*E?s5PHlqE7r+){YaM?*Nc~o837_vl(v}) zg-3qpVNim*A1Dc6ad!aanP{Q$gtHh-AF@r?C1pIH*Ym6cmw+{Z%CLy&Lx!0wfkn#YwdL|K+plsF9!ASnz_dgqF#Xk(n+{fhreHLWH^^lq z@0VSJqO91e%k`C393{0i+RGjy&uN)0g8`K}vr^_le%oLgI&T5baa|wy@*U3#5s}e( z53KZc0%f=A7WkY$y$9+)(jj5Qg;$bp8}9+i@+&qaxU%9sGWqITn#B~&z;MS&r|$r= zCKabVYW(SFm)DC(os<&TRk4k@pBHjSC%AEe*l>LKhG}?G7jQM)Xz~M0Ku&7!>~{pP zmrOS*8`2^Qoz*$oRY>7kGZ!84puPJge)X+F;cG)kJyk?IJ&Rp`cZZbOj>qcYb6(Bs ztr_t0)jp8u2MiZ9+?Luq_a0cqp(rC%Hgm(Q^Pm;K`fj0c@S=GP2T0R&xyimYZAFJd zRJYwZwGDh)6#c4;@s1wD;g{QDMi`n#5VErUnR)J!J(I@IQukV5{m-OZ&gq>7D4(*x zpdkZfxuyf-<@rHSl)>xaHy%y_Ef($D9{V+d_k4eLm|uuYE)!;AHTQ-GrO%_3?_rPe zkMo-*6Fon*!`82O^#DeajNTUSdwmw=Ufyc9RWD6gQd9xU_$X#3Sol3{I&Alv6pHnTfa zj9$n5z`_kkB#J&>iXEU9R?IS&h_Cj|0ryImYMcfPMrbtJKXt(S&z$o9gEzt2btQ*) zbm+!h57^}w{5=E|c!Tu+DR9)kJUW18xSjmF`1rO7<}g(wU1yK~CdVosmHC(R|8v0+ zHJLts;L@`sTW~ATkH5=Y2$h(9ou;Y7;A_9h|<5D%BW51p!(N%>z#pAit>iuNB$&PEXCo2 z@5yp1t=T^?*+as}r9Pu|uY5)$RR8}65$l?`4cdZ{VD9U8I~y=w`ChUWNKc{!XxT^f z+kM=_rLPqopr$UE+t162LwdNpT|q|fKG)fBX$dWfiR?cy>)|prftD;;6WGxrk~qQ% z$X98A2@1;F0TGr1m1jJ41?6GD2-7#0Bp{fpwN9ZtaI((Ys;PD>0ZDbJe&ZDr(>=to zhF~JSn{W7RHSt;{GULu`7F+=(3X#;2;`JyOmx^E@0x~=N_+@rX_aP3rDKiMYT_mw; z0LPGrFTD1&)=i-Gxo8r+2J5aj!$>=3d6Qh~hp2sBPUO53t4@h1Q<)*mrs zmqnKVs@LW@KmUJ@?i&w4aemN1`F%c8>8{HIWKAcS$I@_(%_k_&X$$@e+9y8-MfxUS z#+wYL;HK>P-)B6V?t)=!EZ;=os>jvhtS^Qfja)yD7gYoGn5UArONx(^^I9lpL8;->6S6oN zplfMabW{T9db<7yLx2Qo)A+$`@Zk=`rl#RDKV)$yczFINv*-!~!73W~6o32sS;zSO z&z|akE)72G-HqED+M(44*uqcPfhzWrXoc!mx{zY!|~`p791`FS(+J73fOMULO%ft~ ze312X{0khv`HkiSa|j3H+Ub4}`NEE=Cr&Vartxa(s*=9L6_6#ScDoQpQJjJP?^k$K zz#F--I!7YI$v7@&Wx5Ty@drb!60@RsQnhnhoRVU}bu1YomJY#LslnL}p0}XiOK%ge zbY}BZ^;k$AhebNGW(g?QybyV&t8oWHxxs5bkU`>ki>-Qf9)ncx9}<|BWGqfWHCEO! zvr|O%sdLCmk(7YSgG~D=g4PcsoZdqtzE)R5^~J#!ponM53ZaS2hD|vm3zg+aLsh4^ z?KfM<;e4~~m#CmGT><7SdD3$mrv;-+Q0A+KuyywiRh3%w{#Ag7vsB;^Bi zxGK$lWpqQvao(%;%vwq4gSOeFd&0yS*rn{BX$)Ll8k3&QAr34jM?4HeF@tblRj@BP zz(XGWkRxxk{5J7RUXuB7Zphs57qKa?Ir(hjvyI;%olY!4a|--zqGK|*8Fy+}b%{Lm zE`6n1b^_e|-b#)-BO3rwjC|60szy%I8@EWwTHQGSyD2BX7`%mIMX3-?Wx%SXheVj? zP#K3-sEdOc&aLF2)q=^G5l0SL4U17W#^$!JJ{jI#`>j?ynAh|IPh6O?%xcY8z0S)bvA*zv7ahzX4#tu1 zAj;ej2Ivl_&!_u)3OCZgwAppq?7>UCdgNnpqs#Pi=*-pdu{;?W8{QW+kmT<+(Rz)tCo8uC8VhYzMAVNO=rL8|mQ$Up$or1bZ7nrnogcvz)vlH~ebvy1 zV*TTt0c#xS+}3Jc2q0Z}t$hTeHCpGm2Xo7z{U@@3${L#f-yeGu=jOy~2HFUfm@y^4zlu<|88z{YTA zKcgxF6`BT`&LrVs$*P*qUO$W6yjiZu#^crZ%#<>-rs2q=?kgJxDwC}!m(0d_=M$RY z?JGpaY|svLW1jc0(wVvqa&QGT(;(v^Y0nqTqg^;JZ6`q0yVq6H!G&u%#9(##Mq){n zmDdjnX**L)TgeMarCVQ=r+xy8mm^`JSh=l0d`84^jX=QVy;Zv>**>W`Ra`+-- z1NSO9#gfVl4`n7IYK{*OjTkcY)-FO-?yXP7;w2Bxw@-nRGo96pFY*N zYziX*O9-W&WWnm^NRo^HC1)pQ z(rl5hs6VR{(SaCjA-gxzK>rS=FOezg8gqo`?gk|obTIV@1QTWlnQ1%)4{*l~` z@jU{3HZo*VMh#Z#&k&IMtVu%QY5<2h%NzNRfSQOOp>2s7j^B`DzmKx#?@NbLsvv5l zgnBV~Knq3wu^v7{=uXavbHzL5m6yE<-R-s-UM5wX;^JTVucuf(z@&Vj*$Pe(uoJeFiDfG%d$NeIC|DV=E-Mbsd|zgh6o z2GOlxZ(z;S1xQhDNw*6ruP7_j{zoG%WS;|<63#FdeHv~84#4OYUOe|%RA+$76Jg;JYz zWnr=UP_533q(lXyiRU-ZPNdcE?zAdmTX7HH$^9|px0;l_5)%4k=i(ivVk&-t`U%=< z7V$DUCAd>eZfr!IlJwoY{>&b)ZSH7yWeq|mZ9|KN)=j5NL(H6$F4n${dZN2REVZJQ zme`k&Olow}7La>IEg;iT`g(>}4AN=CWZoO)#X!F0+ON;UER4q_33ISI-g#cqcE@qH z1$W|RtJ!>dfTF^jvl#$$jGCZmL}s2@itH=LSC7*aYh*@zoh<9v{$tY4lI_g$dyk?X z9<8P#Wbe<^Ot3U`L!!^TkovCLr6Pq6R}Nm%V=Hk9KrX$^95H5>F2hY`U$L*j++r5D z&R727a;!RW*HX`0Z{6hh`hAp_OQ@<0sqYw~yd}{lTxqt^27u^Ox%*iGNt6+{*HJRT z%ReltGap^Zrf8p3v8NPDDh2EHhPmsnuIsc#=0(i`qY?4dWlCRC#^Nn_y2#ugqYaTS z5$Bpv@_}11bFWCD)Mu05ivyBxw&1-miPlB3wo92D)$f$Lpeu&(c@a}C{-;60_qwYJ zKyDfRYSD_G=+p(LvNI$1iafG2R$y0OEeM5Yt74P}unvf%46<~s|Ig9$tL7#4B)`0< z@mYsDDMWHuLVa$@N=Mk??XFvz!;SIzW2<$mDP#J*)DYT(!qRAhZhF!F@RopZJNygw zrIIZABHi}U?NCjCFDG_Gu9%ej8JvCV{ihe$mjCw6^j}N_UtmYzej{pNj4&`Vd~BD- zeF>phIic7#xjiCB+<$0n6G}IhtN89{7*aD}1f*0bErh|M$aZy_RTlm$<`;N5x5&Ht z_+~_1+IObL98PJHOYRjf*zXx?FSew&7pl6TDPADvr&VTzjS1gtsXE+q zxIkk0beZzl*^bAPHdXoR*R+#%lGk(x#g>Nr9NC^97QPr>8{AqmLZO+%Ty_l*kur06 zKb2i-HlBp}n!CD44^SAHo$}qz!c~ZjtSQ__;ZtpL1V#jN+~HZ7fqAlDNPUdf?QBCz zMDm14(avOPT?*nwW5dSB#jxOTLa)S4*_kzZZo)pe%hOkBD>aZNiJJ;}?;@yVkLFLu zi+WWpPWkExe>`TubVbn(b|Ck=m@NjNw89|QR3|R`b(SB;NZz|}IBqJEN^Zgw?VbBt zOB&r@eNC*VZOs9$I3m2z6;2^Pf`49-yg%jg#c>xcDSq&`` zR{tQ^^~7UwYuqu%`dKE%E$)RrTmAN~p~zEK1CaDG&~d%e2KH39goo@t6qIvlq=`0P zF&g*>x%YaO595f%D*INfW@pq@uuPTh6HdPEI^DEVo6#6t+KZ1COU@3~ZHwo@pmD>` zUwc4~7una*4)y7<_b6lu_vx|Ki)V?^gA4EaHH|%xPsO-lQ+-XI!|$)Rk$0@$+@)`S zxEsBzoMf)R@>mwL5Q0l5syzYSF>d+#_fzz-;9s~$|F0sO(?GA6;NIzY)j$2O{yP2& zst(3gk9XPT{;@*}Zqd_s**n=pm5k_Q!c!&Y=GD_&RnM*!z{MiA7G#!0>N!0Y>xn0e z8Ihmi*4H-{lXsS!#nB&*jQIse5+()@p_8BCa6p|g^~m`s*o$^Lx>*y+_$l00yCU!E zP~oGK`jxpoLG)N8^2{MO{QcH5Tij(}DecTd5m5Pa+Pj}0Wz0U0)P92_q)j#`-AOt% z2y@7$6Q4!o3;LJ~Pd@z+z2SWC*}~rHTrAHeYwy8pWW1wSBWj^3P_F6jb1i%oT$dDW z=r4RH@wW^m>=G06Q+Pv;nyCJ~sPpH&J)(@5VF}m)^N-6%#)C^_f6}n2bGun}y4F|i zzu*)%j#3|M#lFS(m$3KNYTjZMC1&I-nv>x$v ztsi^oN^PS=#yAR&L35{TEk9L4!|kFw*%Gx_#$$tiLZj)7PVbdOQ^%QC@78wKhQa-y zQH2J+?AWRqhu$JgrE`J2@qU^yC=8?2o8Y+hu|*3q47o=cN&KVn(ls``_Ec;=KtT!+17PRThXyP>1-y0#|0sXB8~z5#KZS3v;&b&emm*~O9H2|QJ`Ee}$;Fnyx6 zwpF>+t?$vT5x4s{rpxeW09djR$(+!56yj$G4tqKmlyvp;`p%3uuxNssdJ$PJz0@x2 zU{3hG=Wmb^r)01@^Py|Rd`;-C(`-x#(< zBLEqFZt0}jHr3HTDh+>AW*B7jIZCHW8oCTP79s~(8^Vq$(k-7oZQ2k3Gj4eoz3Bd7 zU30S~U?LbV){1cf!cXrK@r#{9eSYM5UB$wDaR;E;H4vO%e3CebwEAW_+^`#)d|$Kk zbX{P6A1FPm72i7fx@7aaK7%i^@&vE;hOdZ564{|`QUM>~C=5VWT4>$d%%RR%?cUh6 zJku*IxrCP%tIm87 zzc20PP8}VmMJlXxQ1E>#H+4`~gLL|R*&OV{(ottFc<{X<9&-Lwrv-09vfrntr+^-q zYxQ<5*ha^`4K<>1F^S~mr;&)Bb}-s-!^*f4XWCh+bWrs5gejdKaYEficu0kAfco20127ulp$0{W z7xKC)`19JvufUs5FiIM%s75rC;LWk;{5T=90^_%62>CZ&X?94AqxQD{omLz{4a)4!WS;7 z47oLB62>)#urUafb4wk4T;<;$kV{hDQjJVmu?o*pR~w zm&3(mzpR~(dt#j6bu*z@`uf-D!AUZNkLnfcQ1*lmtXvEV8ID(BFbC(Z6mj!gR_~zB ztbvkCHmQ%SkFUWsds6i_^gn4&v?;&Uqb$Mao{r^u7O(x=x$ZZaBUQCNnGp>4o7;Nx zL6-VG`U6m;U+SaX<8zh1znr9|`G}w#1Y?VqpBB!Cj(t>?6!gs|7z{hN;>U8mQY*W@ zehks~YZp7Yn?OY#44~3lL(bo$5{^uJC)9OUFkb6!#jE&-bV+$NTl|<``!g+os`;#) zuMM~2buEpN5*=Ue5h^y&vrnM@!XQCPcuMVlUhGSx756>6 z8Y$39axq`O{YNhou3}K7k9=Emvs&H>XoC=YN%k#yRo^3y8>Lnb2<_K84q^4nCoZKz z6#>v+r$DE+zMP5wFThZbmVXne1s;Mp_@8F#UsA;g#FX+Jl2!ts;c7y@xOWF$kRyQ7 zSET^>fo9PCOdjHY51K}5!uYP?i;&2hAZdo^f9dDl5rn1#{Bk`FRfM6Q@6vx3h$g;& z;d%dWA*ce;SBn~0B*b7s1}!mc%*!cY{I`kz7l7pV`~T$Egwyk({e_gyXKvI=BHe$A z+%@h&f8T7h9sBs7$W8GtP+Jjxz((z0^KS?LzXdXd)l(X)>;XU8XQ2kISm5)h z9X`&o$FD;sDbptS?B{{^xC>mQWDfU5+E&zTIV z%vxo}l}g67itd$)?zIZ&N(FR1Naa`@L34DzT)EZm#k+>@Bj z0alpmDuSBjt?CgQ*xJS&mmtO|?V#VtKZcrc?bUx=ABj>gjPVM&Pd_*6!z-yM>V|42 z{@tRYKCJ)p+4&bE|91P)QMO%3UuMYnQK9Sn?d<^J1AA z?2Rm=BX{5vNRSXo@J(E?)GLj#ei?B(_+vTkys6u&L*QB8?T+n+Zeu$MZ&&hfr!_F^bt@+*z z00j$W@^5@#2?Id>x+I#|JX4P%L25u7L+p^*!-}uKQ{TLlrmozBJxDbQ^_P)dUQ>`y zo)9gdDEImccxUI|M|3Uio&3dV4gjB(3!{)-OP4xj9VB?O;DkzTKhs7f2z(L00s4tx z7F-QQ&ChQ&-T#2u04-nI`|Ym=4Ja@qngy4Zz%wG8M5yWMO0AYih~wYp8iFf>0s)2; z*f@ind`-x!z{VF39xmT6R>D@h;M?osJ1sLhzh9SiXy#=UzE^+*w3>eTfY$)ESzP-W zpka6nA+S3I)^)vweQ#V?rkVxkmBgT~_Xkmxe}h=zqb!eFg4I==ck%qM(A?9m{F_c` zy=+f#*a4E=+ueZs0|^}RDCmUh>zpDaV9_l{SIZC3XtW0pleNA({Mw+um!rVgJWcaCmfcmLMgLy#3v7A4dV$6YM}5H z?U2gM^MkYQ-(A_2qgJxx%ak(Yj1PjHh^{JpXJ-ET?YoTtB>Z(!CVbMn6sMWOpE;>9 zql)RCkt0>2?G=coeopwCkQ`eOGb*IN+dAJekw1}IoRB!QkLjGO zIp+mP1Ly=S_eJu-e|ePh;p}JZ^aUN19%s_t!mgdFE7qOGLS@|U&gdT?$~7t<&b(;< zfWLLGIXw5X#0jcTI*!46=uoa_N12s)I&OlBuv79g#|bJYgM{EcyAv!0%Rf|_=(Dfg7E{B@)Kae}BQSS|=2jNio$ zU?JFED{nn|P*06j&b>UiK>-!VRq57G3#^~8oi%9*pLNdEi6nmLC0-xhO>Yar=p!Xdu$^-d}cN%Pp*93P(6l%xArEU$&Xm%EY*iWzT z{Tjku&9H+AUgi-xO6&b)hzo+9Zi@hdG}WkaF4_|;Q~f#!ZVfr^|H?xDz%v``0rtWS zA`uD79{Fv9fl7JVX1e@v0ut$hHN;)4=Iz1h#1v^sQ1%|;|4a^qQJ}<+>qW_K*O@tT z+YMHjDrb$wgkEaiP=49S@A@QG90fv7uY@_M(IyzS|$j^CpVp+cv~hYUOV^h+utmVqptf`Z2^M6&&?j8 zMErY^J7|EovJV)BhB_}wga-VE)q81OS-+Uc_22!v^~rXthY+RUToiw96#so|6agPa za6%ERf*=SVh)Nss?=4XFIpKo2bEC-H4FCw@nEu^gnQFYW8mO1NyTS5ve{UYm1O2-= zms0@jGFI*e_!kr>cLO@<3hoN~MTSzd{2Z>)^q|zuQ~(U+gRV zCopN8)CN50Q0?s&s`mPKJN%C7|0fClN94a96x6;P{7=xyu)0=tTFAwJTU!G z{>QM-sDFGunWO?&sA#BoI^cP7!fqSpiD_1}WK1z@H^u*{x!@=M*;iB#0xeyeD_yJG z5?0N@8P%(Snw^Yv>_|@hqq7tsd0XdehkF%|>}ddxhQ%IyJG*}%=w%l@d}fPX>aID% z@Zb%yIvlRWUVF_lzIbICnIRt4r3QnFzyZ*CSzyBwxw-5bK}Y2k3GlUKjGx=CJ1sn? z--h!8)SeO+idZUU{nTIrfv(Lio7#9yy`K%Px(JMMm~8AoV*TeGjn zGTD@JhSXZLAk2+P@@59{2cmcGr8az4STgbX#?BM=4O)i_LS4-k5ji!DP3s*V3efcS zG>v_5A!tARghxt+-J@xp)5M#~a+qZ!0H)P*Zl<4e#xPMQUHVe#zyI~m(`h_Nv`AS7 z?bN>^H09*@a0^j3p~9!^Xgrr5{_N+hF$dj!t6}oFc+(S8zvXSlbdrXbFBr@7MHn z@}NsjN1p=^rBUlm?C~qsY2UM$H~Qa?0Q>h`(Cb%X&wWls%e4X$e;K3vWeg^ zB=3@lUa9N+`$j;+sF;Iz{%Yo(2^D0%v~!!D_j~>-%vSFx09?>Z^SceF&j4s6MQ>*d zG^mcUhRNGj$9;fx_OGwM_}xSVaa8nMo&<~jZc;zFQEVyb#&B!gThxG~ND@m?UJ_O7 z)MgSA_m{kTuBxk@T)tN|>8TJ?0!FC{_V=)Ys}MzU9SC&c2*Ad951Ymz8onj*J(HrM z3Dh`36{U`URsv&L|D!VVpMd`srN0(sNtK&0_q$PhQ+!7mm7PKNSSQcNG{xcUK~dh| zOrqDMFov5m=kX)I^m?-?R)5c)92F8gi>sMgY9* zGtr8>^~hIt*!##{`XN?#J_-`hmhzqe++Ju>akQ6HVQ{`B7q>8RDkafi(NQPsa2g=- zi)~D7{>ya$x5`{N6cuu8=lbzJuRv#2Z%|F3QnUv9YR6ch@?QGgFWMt-PE=G2DhdeG zF-xPNHO2&=SaQ~2>zVQ)P6tsW{lBEDT%tTrUj94}b?>q2lF1i>x!$Nyy%}S7sZEb; zuqM#L&Yyl?3R!UOnSc6_=A33f*m;r11&R;YK~}jz7IYCKHzU5arw@0${TViWbn9va zjbS1d6%Tv=aHIa=rg@g~#^xY@zoi%d#ab5_LbFP>3F~RUtfX*#d zKon}5Eu*2ebner~y`%eL%2OaLE$hSudyMAzvP*O$AjdhFFVb@VvL|d|PZ`muq)*!m z+3zqTgAop|rEA{@CsvUxW6YK`NuV#~+q^1Y*i%C^#%}u2bxZ7DZnE9@q;&Cs zPjJk_;xS2J(PpDenm~dNz_@kH0H;}anEDVv>i*b!UIyJ?=+&|(##P7!3C{q=RaE?= zRn19>&4!~#`;5kX`%BuVL@FRc(uBP&^HT)c`P7|7YU!HdjKKMW@uQ(psiXh+B`NW?ObYb*8c%?j)PI!izrB!M^QcL%uo|rNm{s+B3L)Z0)(TrPL0Yy1Ao8!8}VxfZRN!Av|Gg9&*h%$bfSCIBz~x2L)t2oL%M3fFak_ zOhECHGlx7)_(9yZs^M35X!Vze23HBJ;>{e zB;@+E9Hj0%+K%qt?QrH;JWPj%_JZo4H)8e-rHKEtbMW74=RX2aHzI(m`Iuw=CRvr6 zJf@#HN%c7;4a#Rp(tA!$6B8F38ym-+8Ke#Sev+Gea5sybjW%#UkbUn5!mHsuZR35n zyB8pui?&ps#4`X=Hj66i!*DVF^T-};Eh4b*(t>_H1fLYW5ubK4_j!-kYRY15c+dH` zzx%_vqBB}r_NqMBoU2e{r-LTNlXdSLxebm3{xkEIYAyg2k34_n9e1&59A>pxNVB_9 z&N3MI%|yXLfb&6->@sbdgoJC>ewpJ$*++v}{5suAOL5Fpf^ukDRuh|_&7oYlIpLKf z7vki|Dbed>S%oUW?N7~ZT;@8uwDzwsS3HubCwN@d8Fdk=DFKA{1ywyC3!3PIToYQV z0s})0IeCjjEW=_%x##bj|8)0+Iuhs7V|i-k-=3C9xES5ez@_`@i9QI^O9!Gw z5d3Bk6MK6|8#1_|u{x)q4ceH8TppE{rFyEbL;VusVIo7Uyb3=whQAO{+e=d8*=K8X zw>ySNERa0xVZ12y40->@U$884kyUEylq@8>oW9vudBYr(%n2m;rSpK;!%V8V*_PXP-2iC_n-jN&fhcY0Z5HGdeM~+k=U{)HC!y|C;+$Bd7 zT?P#v&N9Z9C&hXI4Wk^C>ub zv?!cfk6gcNTzZ4*7l5=(-`N%|SUH#KfnQW?Bczg1^tJMNhKk`?#3QfIoLN9I05{#X zoL4-49JZ7C`rwb%$BtuM3M`S4oywy}}HlKlv)Z^TrM#y$XL$ z7E*1mbt9hrvMJH=;ugQEe@4F*jk36)vlP46B$K)D?*W(iJ59h^mNnr=z zV7XUPE0b=~YjZHDy{bHc{?J>^4j(APZxJ9Ey+?4VCESQtc1!@A5kmeRX)-(GAVqiKhJDMVua~Mm2xjEH1J`X7yFab$SgrE8qymgI?tam z=Z8m883_c|>!p;05D>`xm^v*o#?XL@Mp9OKP+jhIk;Eki9HV0M`HZVE1$qHmfQ)Jc zC80gmBtmFlgt~RB`tG2v)uT&0MJ6Z|of}VVU=X`utqp#BxaUsPFPpekD0JI+3SJR4 z{4r&dR+d4i^CoT~?pN6zStWp~iGwhX&1;ocOpzr}!4EgoxOxU3w3+dKRu`j=P%Lv= zAjr->F!W=prAk|u8|CQW9pmJd(gH6nxy;q5+V7QB2iG@v`bO&~;72ppZb81#5sPEIf8y;bjJ1W(j9nXe*n~f_#9-4nP5R zNT7f0$kD6&%4H*Dxb`CWoS@miLokDDAHHrR*mT1L0dpogtcW+wdpJ-(qU(_};8o}d zE;^;gO8a;o@ii_?=k3~6$UvB*tkt(yAqNNt#MK4629bHBRezz1Pz!5ZWIIbaCt$xF z`1}#NJ0sm19;T^?%;P$UKHZ>#4hxSxv#W|0&*VpP1oNJCWe;xe2J8G!9$<Dp*{BlFDVrUY9s0AEgiZ7ZzoP__lQPw48!92 z+|BcBnqN^+y~GvV;r7Lx7FeS42%(iswtq7)vp3O$T`&%z8_L8b*(v&}!nsQ~>qjm& z;(Rvx$H}Vfws^nkY$MH2&h1+3n=I*oeXm!nJ*cCzfPkf$#9oie+9!#8{^cMvYe@d* zxI(W)ucta`%`#Y6OQyvXYsMitall45p=u#&RU_@m980>XQ)ZOPX|W5Y3jw!51Oqwp zy=S)QPzto~!;kEln&ut;mug93FZ`R})W+3*IS*nY%0>sXjcxb7+6xreCcUFK)0t#lKJHMAtb;Optr?XAOJ0D*P)lh90A7u+-5) zTJW*5YKo3)O&widi*g6U&ekndkFNDo+;)83wWec*iadOkwCQR(K(g`0)6UVyo`n6@ zj}|29_q4vR^p-3=OI!g zo9zGwxORmbb)0Cuix#GsS-W{=Wb=WEOgK(Bd{}3%(UdCkIV$TSVPMj0z$F1t{`a0kxqq}=r_sJXJnDkI3-{XdLS{+XR zHy)+}Z3h=U(w^4=FY%Rzd>wkvpFdHZAtUBG)xf1Ur4T&sa>ubmU#{l4a8phCz?)A~ zUlM)w6ge?FpTHiRbQ+r(!4W{P?u=Ilku=_~C|wpURkn5Ts*P-yi=Flz@Dpv-GR*`K zqBjz~JffXmrJl5{FT7c6DGKZRT)3-NPRIvSIAB(vM%39#b%V~&@2U2%CTk0vyN)<* zbTAy5`kq&aba6AKz6|qz-~jxReB5Z${r;#Sf=anvI5+dKn+b1!of7x5VXdX_rEqKr z_OtYQR{*KQ_BWiwYx$~c;^;g|ebgcZcS%PbhF=^iILI1FF*KjT`elkuCU)asw zhG(??70(~Gw9*CCh{ z%NJvFGvq5#HOg4(^j6@f=KmL^83pGpna`FKZ;2#oR@%9hk&I5A|Gf2Nme`tC zSnzcT8>^WA>`+qaAVUyFn!rFY+^m1RKj@Q3vC=8xfeDZJF-=AQa(o#U;+xC$@QeOb zowl~~t8CeuF8e{5uWoLH!f}{)$A_g4Pxx%$Bv~)J-N+H$fm)H&Kb#cS4D+juYz!&< z3d*CBZJriw=`Uk`*2&Xlr;Uul_f!5@<0x71R)KK^vuTj+%c}0*e_jRREQFo;{h4#wIeKJtOed`)9rO z7rN-dA#Y-{4M5jQ->@{)(t1iBLB|T-Z($P_eFyeK;j2==vuwu5Pu~QZa~SVbgP$qb zectDovc4F+W-RJzxiV_HRM>eGkSy=13e_nn&L_j3z(AX`If8yWd8*EMLQp0x7DcG} zwMlXaGGYjI6!nCBzKLHQloE>HZIBsyIPs!CDD{eUV%UeF-s0{PGO&t^gDs)Qr5utEb6lsAQNUj^GY1 zp`EJI9Kx^re$C%vi})Nhih9FHmST`;J-t@{z*_S72AVzcE86X$6s>!^S2#zNnuuQ9 zZF_MRTkSY5c-XrYB2RZEIU-23ME0?p_h$tg#x&v7x&!4WKLG%BlQAA6%|NzMVH&q z5|!7e%8X8g(jEPTpBYOaH`*#eE3bu}4xTJL7I{769_|&oVnX;!DGzE}MiLr#73+Hw z+SXXK1{X)Bt|_lAc0R6ZvQ+l7y3C+m zUBjer?Qo`tM$38q;g8XF*Q(xXA$T0^kbyCK}^xPp7Yr1;`J{ zlW~{H?Lpe}@K~WwuWe~pxCfEJ_gnWdPt{tpbfTeu`p*g}`g@0NhBVR5?uYgwM(Wxk z6QrMA#u<|4Hfwk-UNxHcuiQ2k8U)98d&d~*czn)6pEfag4Oule;y@o^7&6GzdYPVZ zggjvq_>u)KdQ@N=zYfhg_QB?dzC}xX^K8h6cw8G(i)1X96vCn-H&e?dTy35wL5jgH zIE3b6-C9%L2@W=$988vcS&@fAa&FOh!d!Y z1C``hOq9x?(-xBLKnQPe-m^yE&02__P$`I`!;SKvFxI2FG+bv5AD4fWK5T`&J!m0K z3|%;0;+nB@KkIji4R6L>W0hv3@$eG@#1`RJ_-kNux`>fkWX@s)oopQdX3dK~Z7V%) z&~?BKN~T0F=s1hk%gDp%HdvCC^1RLAEVg&XSx&PuJ>7> zxI#iChRn3$X$8O90rhnc^%t_nxlFMo*<7@DE(Ib{Uz-;Fg%MwM!dKhS@XVCTYM0`0a&voW;#tOzX*3#um#bb*}n5xi*7m ziFk-6U{#>q`m}!PY6S&#Qo--(=L`UmFKPLX*dB+T(Z)& z1#KRl$5cYyQup{1Nt(q1@_cSzyRbSlAK}vukO6gGh;*Zxw9(^FD{OWwSo#ctlC94T za5>B?t#;+sWZ8Z3bDv;`gWixnP6NH$V&nQa0_vy7RGG()TnbmD6n7S5I%g?bRuV@ z0b(h?y$Ed|CcMTTC_bz?9Rq9o$=KV9Wp-1k?^Jht>1p4&JQ#gG9Z#9i2*N>6f;$`E6syMk438`3V|<#ETbl}}(Rhl5dCF(q{N zk(^N!q2ZsNOx4))^Xn@qpOb`303)Wjhaq;D;lZ;cg8Pz&=iH1FRc|VrKBhA#Jo5dq z!}Fa}Q&AVrAzFpzw zg~cLoYsa1DGm7e?$yj=yNW+DNd=gefnSW8_PwT)Br>@q*6hlI_v39!HWSb2W+F9@w z&{W3$iKPP3IviJkt!yxDW)J(Z*vt>Bnskj zZ8YM@wlCpG*wd72)gdf#1xkC{!@cs?J@G6C#XM&BA3~fAs6076yc%OtKizsT9;T<-QHebgb4HvLHZlr$B8#NX zva(LWLf>N(tq*#5=rDO1MDaS^@hkb0Uk4uGA-@vEjE3xvF~tfDOS6uXMgEb9&kQ2; zeZAh&+hLbR68acTt4PZY7-(`kKwybqlo|B<*?huf-jT$im4hUEIw4FzmAOY+RihDu z&6uEH1bCAm+9)yjjPeykK#DnWnBn$B-&-CCQsc?+xejvlw+&*st zM=iMTTX@aw%WW(yyaa_S;(oxtg>~EUv@mHC{~GH>)3i$Gna7&%k<|F|1kXyPG-I?x zeGyS|zH>_crJmx|`@hw%3%Z&}A)k8zpSoh54KwwEUHd5WS@!w1~w< z^o4hc1mjs%_^G|0YGReNZerODE@VZ4QhO~D#`= zIaBnbn8g=OV!KrD}gOq5?MRb0+6-1gnIlN#z;1?cya9lbC-|TgXgD_`!~@dOcKuSKh&3e zGVrd|uz04HJ--xtQcCQu;3!ymi>XF^$n2b7VEbW8QdXVwO!1<~0iD|B4KWjvUpS^V zsLAIo6r&`-AK|)K54N8?J4Ro;AG4@(mqfR2W#^lG2<;}O-)gUydxkJ(Z3$cPWdX_b zzb!SlJ8+VkIArf`b0B%AI)10gn zCdPE5Q2WISEbwivgU3X;L$!PUS4l@^LC}^+lLh)mBV$~n3&PRtm2E$7^R+k5Enl@~ zf*iEG)WqVB4^WIwN@CDV%(>?nO%VW)giqq%yLy|5r5GWw{IJ);vLIaqmMx4&QSy-Og#|d_mDNtD!K*^OG-#sZ{3zLzpmqe#dD)l`@H}MdI?w;~ z;RV05Tww^U@p4Lx35S^$3E7A%q`Wumb7SR4>n8LA;O7(eEKPYCgEc4r2TR07v{RB)22~u?D((k`JGB)3agcxz4sGfK?JEre5xrc zW5Y^>8=jaGt|SKOMoY0OTsvtEdIUko1|{!gec8#x?zE#qT*ttc}sC|N+?@c}@RVk*Ncsz49yZSvRVR;aJ zGL4!cw))Igh&`mcs`oavDFu7bubu7*dTka1gOt>KpmP3=+KG_ZqE5)I`u^dM1OLRNF4y>n~ABp zoX=|J4a;Mcdv|f2=l2M_KCxlgo1`j!;P8-hdC(P{fz}aU`q@rp)bcr~W6DKB*#3J7V5SP|Rp-q1@{G+a%gy8KX93j8f|t?feHx z^q9*Z70x{|A3*nVe#IwKb)y_pFQD@&%rNTnkC zb@rY>;!|6w2t%qYx3eRrGOugTS18~QaH^LMjw-#S<}wKcRJOPml)YsNDyF-h5%nN_ zCxheiN@aa_rmOb{4a^k2>a=X5lB26CPR-~*PYCa|l3vWyuwfBBrzdn-Jq0%y*;3$u z#@TXKJxxGIpdj1b>H^(KGmf&Gon0Xrbs>F(cyu;_kNn8MHr0z-T~a)19Nbt3kdWKqXUWXXeJ5Wm=5xQ@*6Spvl*WrqEcfY>Qk_|+D`i-)Do;Z2= z?Ui(*eGY`Uw~;7%v3Sd*@GZzY%kb+yPTjmaad4%I5>@jCW%m|GBpO#t2J_3JmU>mE z`AB)w>Q=`q@`$^Fv+FjCm80jr|ID+k12>bEFXKu1U3Ldtx#%3rPz z!9K5&OR*04R?;|(-20>T(yrQZXz8=$srC>9eRLPr=``3)qqEx3YwRk=cm2gp?H3U` z+^?2^LOaGhUtAl5cm|&oDw4~4fQRd^+-OG#_fDZ_p&?Yi_j1YE1BqS0 zbrt;NS-GwC(jKp%@$qU4Ac`&RyO;ciPW10i<-Y#TqsC6M_a7@m%W+uYIaa_?2MpT! zPq!gomk_Rq40U(5J<&|PY%fY4wh0DGeMo175JyR6riw&Tg`XuTWNf}-5Y-;+u1XaZ zRvyrO2A|yrJB2W3OyHtJEE?!rII%jU!$6(mE9X%kP0s`xDd-=*yX@~n_X42h0s>d7 z$}CB1`g&m@E)>PCPo5fQthmRc`gh!hy{s?T=nAlF<-+Kd+O049rd#Br7Bj8gQwcjp zxy!=9vRw!veIVUz8Wpb8o+OLy%QqFE97A*+O{=dXWF{&HS@LnCKdsjS^`F5-E0-r;y$HciSKC3&aYU~rl{G=G>gpG|Mlv^`lRqxml%~d= zid6nmH*xgB5~rm@@~QW-SGa%ic&=Av1}prdt&UC2&cZ$V?#ixJm&D%hhq1I@qkW%q zg}OfzDcNMk+3v~80+1I%2QjvJ`bzeRHi}yum?JHuy#FA}eOU`|lHx z32OH|NC^MrIPU;xsys>477~sivOco3tZ&qEcENlXtZyEcuFFv*%Q%RXtMu5?6OJ}J zd!zDWG1nyx_v>&tYUamQ)}I;&2BTs_iBLdwlP4jQOlF zs%ScPZk8YAy+8G^8AzmVflK6$MhSYN_0qd7a&RF^YO@<^soO&p`@+cxqCA)JnrNa0={i@WONz&W7{Qg-9dqH%Mg|14*NO8vukv9r>l0jAi zNz4X|n$Nk^yrG}Ql4VZazwNwkMg-5={D>YRd=$9$$xz3aJ(9XT3ui!uBA2E5b5cgY zl57b;H_(N#+8vk=$VJ-MgXN(hwLZ5$4gG&6?B&v5o%zd}c%Qj91K>t;XJ*_=wENrF zW69`0V{1_3_SHBCIl7os3Cj<|CPk0;Z}+?if|X`y8q{&3Hz;rQtWCwGS^XK%9*dhE zXU4dYYh4ONMr@sg>ms@x9M{6WrF^jl2>U(j!N4_I~|Z zi}#N{2izM8iciSz0Qoim#K`#vboG>1iaMQXF=J^vnySAF`4WE(`4Y^J8&pGCMcQL2 zUZzuYs8U;K!Xa zH0x8aS}lj1s*Tey8@bZ_mi;RC+QD-Z1R7+|LWI&nq^rP#A0VN}KHdl1&lK@@GcD?P z^AB+ytmi>HJ-6({;nO`vOrX38AY|*v#*>?LqP?j(%ZrDP@@h?Jx#X_(9HLPJ+0^66 zwj>IRpV@T2Rwq+BOL8BfDKu|ld0^r9vn1*n>ONy_@Kn-OR6u`RVh}8UFm52)#=VfR z2lIv#a2T*g)ix~bc?C~(Z+ua;z_xv7A$W(7ehwXYVcFfji|b?$txq+Df)dlt$|s>+ zEPhH{3Z&AR&o&1i-tx8EATj$A%x)!8D|tVO(jC;35M@ z#>LpKIZ@&LE( zeLlah4{eunmJuujWFl~cCUx#4IiiMOi19XDyVQAX9LjYjPE+uuCu7#;W?ZE?9*5PH-}bAj+Y^ktGBEK4xl!xa}DJ@nNEP;zQ)bkOh@` z;*+rA@o$fycJgDEV%VJqjQHEevIN2%HWoMd{S@%?Yj-?BT^)A{H5*KbC>VElkBHq} z+?A2m_x#;E!&IGYL$7|can4s?GbC9xP{C*_ihSGJWrEu54_od6p)fZObX$maQ0>H?RvV-pCjOB0ObU zsI4EGWn;V$_<+dPwXwstefvu9J#k7Bvw*yaGDDD?FgA$X?_p!*NPauxz`-uhtNGp8 z#76q6hp06DDW679K2w|#toZt}T&Kii5JvpX+@EmZQ`y+KY|J~}EL~@mpDLhn}FfZft-iNBvezo?#}>TxBF1N?3j?<{cj8^8Ok*!4$s8m zBj10Y_g8ee-JLA{M>ayvH6oWCHy_I|n>&A+?Yyz&F1AC_AS*+65QF{ThedJ|GFNt2^? zX0)_bzZU9WRxI@t)X#vC9_s-=xt#`lbd}XU<0kZm>!p$lr-%7V!{QXUu=4k-dc~tZ z$t3Vd{l=}=!xN!%km2)oIJ}JaN=x5?(mT}~A2Z?8taH6xo@wXyo6AM3=9^62{D4*f zYvYoZCR!N7Ew1WzW@54KjUYgV1=rE;06+`17DyD zD#F`-V3}~&AYsGM()fo@nYgtX6LNFf-&X0Uq3c;6LB&V_K^2eYOarlc`-IRg0<$Cy=al` zeKYbZMps$7y}+*_3!4&mTf{)Yw+!_eJMu>RDf&j=*L-9K%g$8npq*m}gV%F~z3L}& zPd8&dW56 zcrM&gv|Tp~9F7+c!>d7AK9M?M3aPgIZYo&tsC5GW3}d_M-N2^9weVne2OGf2)ssnzAPBkZ+r1nuWx zS3!&(jMW`W0NDM0DpEh`3_)b z&9l1ax3!VtG1x1Zr#tqxP}OogKn3dA`Z3S>oaEpNcz+?Q28A7}4Q&gp174wI+)~mu0$LU{V_v zwwus5zc_zKfV67BCPO=4AmZ*;>L)PMR8DGA;}|ctgS9KADcr!Byd@(b_rCsf<#&ca z=D9eW7(e6cO%?u|^xd3xKc>#fm6lbRb#t{lgwD?dro^}QxsJnB+jKrBLI-Qr>gSjp z4CVD&yyGp6KU$bd(;2T?Ws}=J-&`lWXH^lK=c@G);Fh1T1S_{moNxdB!qUE?&54Px z=#{;bGE?LBie{D^UyL?5DdmHsU%T%KT0kQ~zz=hETcoKcArnNvv7hj@D;XTqccdn{ z%S2&m)18G)5L)EmgXF}>ZS*(UXyu>Awuf3tQ@iVwY4?ICKN;U?T~$`9>cJ7540RLO z5%+bIFl344v&tBaTH;Rydv>FH%yguse`KGNo#|rE1UOQ|#mR8Xg+Npx)bh2R+&H(2 zuePKDs%XyjLaNa3;C)GZfs~lCteFS0rqXe>NFAmMWFpe}uI2w?@4dsC==OHuAPOQ1 z*eD_(2&hO$Is_F3=}PY%5s}_Y2v$@Ol#WtVq?b^ng%T765d@`$79vGr5+Fbbk%S~? z@;rO*XTN)&bN0*oUFV~{9?o|))0EmNt{0AIFkVK0C4Z;ja$auCPuNg=+rU>T!mw9S`6 z3-StjsAUKjvQX)0bVqR1{PlSnwJDt!^SR@KQ1t~N{e{xyT5i#s=Q`8gtYlTaJFtzE z`T|p0V&Tic4F*4+(MJeBAK=t_f)KuxfrEZHwIN-#ZAvfoy@Qm>4IPU&_y%h{M`q}K zbu_d4>TS6(VPE!TxaA_;e=5e$^@oOpmf@0>QeAWkJIvPM$SU6v+LKZ(;q1u`Mx|}v z?r7gAXvC$W$>A1OIHOwNg*&@lBFt3Aekf8;*H{OaOIt8{OP zfIkmPuZ%Gec0Wnh*6Sbt5G_xQ7BMpa^Q4sI3*e+NQ{s=!$qwB?)@XS7%_(&^Bx68k zBWB+ch0$`ftRrukj&4yts6sA$t;!a==dz3bksC|2sq7kh#NBAl#~p^GHpGRQde0+! z-c#bNH+$lnUM^K#x;>VXg~hb@Tv(6afV@8&C| znJdW*by5MlM^m=q$THxc7^Q^t1PK{**~OcCpJ;(AkoniEZnQwTSi!ow1xELG1$aw5 zY%tIHb;&ucT8muhsB|>(Z0zO|(G{VHBzyrNvv`5ej?+AN*sj(;eSh{9QCM})$JnYUt zo$E8j`z?fnvo55DWTc#dS#Xt|bvMD}#CDS>R&yH_$K;XFJd1J8CfsxSRLDD_AWixt zR8wxhTljQ6V*?Gm*Z3aI?lnWhBm3~CCzg&^ciS7$HAccAIs}v5L~dCT=*xHg94Z*$ zA~gqm$>;(0h0i!fYS3p3LV~AtI3ueqVd8{tI3euwt<@oNkdJ2s-QshE7y1zL8HyBe zhLJPPLDSNU>lwJC<*`7H@k@p{ze7neZhVfR?b-uf&Ftj6*9NR8)A3ghe!ST^2>-4D zEuBgw&dnI`XDdNwsb z%xJ;_DCu|jBpgF1@`jNsL)oJT4I|b{HwJ^Ep>n9cp(xn^#Jh1y$h0LkF7tCsB|hd? zdZ-!M7&YJOo+5G*HKA>efa>tZY#+g{EIQ&z1n*1=fc!U?Il+dD?>3f+Vo8R+Ru)HzNr>eYmSOEDgt7PhXqliV={5AGdJt!Z~j6eZ%~0Eo0zG27c*ht_*s@V{RhS;1v(K06#46q&%0dL2PB;JC+A(P^?@?e zeKFg8SG-aX;394MU5Zt^ zU4{z_dfy}HH*0#(B?Gvc9w=ihj-Yo&mumGwn@+W6Zj_(T9D?;vT-1^sbD<(Ka<6T%%tv1jz*ZRLh_V|K=J*ciP9Om9jIu1;Yr>kVsuhn2k@ zoS%m}wqu(R(XYqs`ia`x9tDJ15o)X)9I8lDk@FEdIvXWRZ}MGkciL_u`BVIy<}RHE z-dp{Ney{*L%Mj|>9;Y8C&Qn7AQ}BZdI@LPNf(PLVt$#Y>jSxW=VBocYjv%st9OX_W3VS;;-fc{soJ=?OcEsy%V(fLQ zp#hX-o-o53inQ>D8aTG$fV-axE0t&j5lDK_KuO-9)-wlMp0YyE7YDB1S|2y3B!+R6 zSW{${g$|}N)vOIjA-OWuW&S-p+hZ}^YWy!@1G*!w`%jbnj2y*L_jl4T{vkrwX`bYQ2h!-=uMuq58;OVBqii ztEn#jk6uEsLH)At+fSwojk95YfAa~>Wx4g;A0+6xTkq4}B#`wJE}x*|nwg02;n)#lL$MT6bH3L~9KjO!}!9WE~?~b!mRfEf+ zhyXXR*=W?2ENo<89y%eW&MQXIVV=PaM~0}-!ONalO&vo1mg%YK;gn1mk%tkYM?TiF zg3Wp#n^jQ1jU<=-@;!jUgvfs(L8Ks)x*uI;$v@Te(OHY4*n=m3Ik6Do@w=NL>5vT&%g;!R*YW#6#nsPLYweCNn100rCCXf?+z)t1LR;xYrNFfzWEkDSKYVtE8$C?E&{Fgf{qYH+J25tm#;MzsW5WZ*G2=O z9xH@tO@>l?C5AqJO(WWmU(ytSj>T0DOFamyRVyC9k99{@xV(;)k?S=XX^;$->x1|S z)ycZ)jL}6G)ons+HFXjBuHfA3+R`4A^qMkPf32CN-l#>~CaZSp5b-{6g~ zQO`h~@2ic-C`v=%&u!c2q}(3xgP2D&?}?(Gk6TVXE7P{o($Xau4RM3i|NIwa2Nro1 zF`kW zz-J>#CL?Ji{ob|3=8)~Nt{z$oNw#?-cG~a#U?{5JYk>5%wa~%qV3*zOA;KvN|4NQMVoc}a*lFYiY=7}*n*Zebxh}B* za^-0ae^_%c)!oxlSM3?x>Ajxyfx2pJ@%D-RpAtE9}ZTn(wu=E^k%-aLGJ| z1T7XdD#ve?VYQeWP1M;jsA;Jvv_gu}7HI-&G+TGuFkR)(WpF;Z< z82Srnl|fNPCiWt|O39o1JS0?3%H%M3YwE2TU1d29VM1L9_<~3|6v{fiQ_ z6J_2*ITHVk^A*qTS3LV)@$|p+x~g|HTu#FN(eae#w|)`n;RlAR>aGu0%x_ z21uivejNNiO?^9MziFj|cV#k1RJKp+Z$l%Ote38Bkyy0BlTCfQ=q(nS^i|1U6;_V1wEVY`z@vc#C92 zYv*EtMP0v5;-M`Er+|&eLer2=Pw6s=F^>Ec@CKR;Ss;JY>51(~L+LS&TO@^a6f(l} zP#7#U$6`ShIFs^;@QNwb^i`+lG$ELTn9(9=>&3CtLT-^F8tt7jASv7Ug7)&s%k+i- zH>-0x#EO9!3Q}|a8)Nh*A%p~V$%u%iAgmw-F742d^$=RY7sjcxRE;LMo;S><6-pwa zKGRTS{AL6ihC)LS{!lUvPRk>XtPpZb{Gk|X1J#Doet^bUZ1+deHz^HNk&_IKO?b5T zVg-tEWD8k?A+b*ymR25E+2#irD*qQl1^xepZ2zM}fT0s^PXLDA|JL)8XWuKHU9Wg} zFNy-Z{PU0h{l)R?o_3#aqB7E+K>RSru~eP>k|4=m2dnmf8~?1Q@I_fiD|P!K;2TxZ z*oGS|aHE81xpv7fE-^?EU&m;_=S{;!1QHZW^2r|{tvTsPwwr1&$ELSqB z!*WRqSlWayR4SyP)hfDR(=rCZC@19urP@=`P9!w4=^W7)OPg}{TU=J6^$1bhRj}>T zh7Pe!X3u7j%E*<#nB1*~4PjVWc=uEcZM8@UmAR3B3SZ6;S}EFubnB$$-;VMw@>cZ5 z;LsQyUnfLMwL!FAN`9E;RLn2u#`KM8|0>kC$@XnqT8j!EW-u61Sxq6vN`>T44b}TG z67ul0*r|vm-Ig?oxAozK?P|g6QBImo3DMPr;r~XuD~EN&ypOR|cnVAall8H`xTA3L zzoGpfMgHK9-~03Y@w0<0ha_1zGUD$UX73h1;dV&!)uE^H_Y7QVyG))-dU~*~OoGkU z>GypJ=G8swVgvu%3#anplzrVVgNqso6?bY&`?pK{(6x7fM-R5SxsE0o{8-dchLr5< zE>T@N&;Ps_)cR04l*k-Ris5cYG~!wnWak360F0ZTt8``rFn8NV|FdnWoviSH*_Cj2GI6Kik}OavV5X zbw6x?VLL?@7<+Gzfl3!}ZV3iGUMKsMeYw2CH`7I307}ar^+AWmx->A*o3`975o(vW zs2W+BQiI1TACU%tw~MBHg8ZnF9gF1++s3pzrp`twR6dC%{B-Z2CJx`&ruw$xmHmZ7 z2ggbU8Vb?}(^mAz1L&$jb>ohDp(ozd4|ul!m;q3BYk=l^U2M2T1Moe}F8jYStSj)J zmH)E@km2cBlc}q~_@#MKe|0Ykq;gvD>4BjGpV*e!1YV&|pkAKzyq9#o#ZauWw1`DL zu92WVL_S;t@za?=B_6Uid_qHWWeIy$Op(#MDEyzTiWW zDiV=I&zQ;lu^ulUp}DXD7x!%e=p}!T{KGnP&9thN*<6i5%1V(LL3{OZ21a+qVy50+ z1brq0spotWpWPFteNQ%->OgWF|F~vfsz_*BP#Ev7Lq6>C5eZp#{!EL#5#_j^Uz4&) zJob7zC1Ca#<6%!WCdzfO>od_6hrg49wyx%kigg%lae-=kACH1G&>^DGxS2Gqt_I?f zc^7;X1FJW#TAfC|;}{X3PIfvD3oAZDc(*mP#9L36RuyTo<<8Es%7%tj@UJ+r5YzFS zJQxr$0~5c6Y}`kL`5#?$L8D-Wu90CE z*3uFL+f_5@ftSTZs_RV+1n28wm>WGKuYjc#cu^MX4V(@Bz{@fd<|biG@Vo_`EcjoU z(HXkU@?%Z$sLoWNEpV5p@-LPd#Qs;w|Jf11vb^P>$*Vk<1K5Mut$}}~cbi#%p1^`4 zcp^YTYC@lcJ_tSB=N|F>2Jyp*!}5E@m&FEh)O8L}XGW<v!|sc21Cub%yH9 z<#<6t2BIwyq&njZjpW-U+oswUQoZNFNm%T+o^A98XV)d$4kJi^J2o+rt^0A+no2j> z3z13t-dqz#vr7mGfQObIhX45LIH)9VDoth=QbiK?Cne?#<;}FT1n96Xad@QR8AQjd zVA+QT)tfP`7EX^eU!Pt$CQB}EEXgLJ)W(fu3#KOy|5CI_nr=egZG*9OA=Z>F$keTB z$dQl>S)PWF$&Xu*(-VBTgY9!)*8CbMMAI0rX-`8Bhy-IPlIy{{F~b->BnDz~q#$Fl z!S|HK=joZMXz#h%a(`&JwVX3=xJ|gseA^Qhw(G~xIieOfk>>LbgVZ?QI%{nqRzb8< zQJcU#rqz6sbMOcO=m#y4cZc#9QwJ8aa1JPBN*Ka{4WiAbO2VL#Xwp?Exg4W1hXt!T zssvAAg7E>_^#}jkpP($_XB`$?r<;saz}XU(o9||&&mw$u1zt)np>2v<=!q)EtRwen ztzUblk?AZqyXewVh?}Zt){z97t+nY}5vq;^j0N{$C8Pi+PXsm0t+oi}@KZf%O;&t) zS#aI6A*$=3hWXVN*qL2#S*CnjlnG0wZpU5NZ_Mv$2Fd9o==(8Ac7ak5Ks5P2)`WFGs&d~ zTSv$2r+m$lKb4qelM`w!kIh?2{F5hpISLUoQFSfp)E zI@+DCni_*stViu;6o~+?gq~`! zDC%&bzA=$4X&$GvU9a}&+vJ%cf`1*HjT6~^7>M8oUy6cpcBS>{M68oVCkaumw)?ic zP3hqN9|fvgRG!&NeL8sjxyxrA-*xi46{GeLNvKF0A)*(ZQtAudBAYEJBd{*Ht@L$X zYda1QNKw?s(l*rA#8|^4z)#lAGr-+THqtNfkH({=6B+2{;p-K8!rjZ;$6s5F(25W{ z;p3?-W}|E(ZxX2Mb;IXMbg-92w5g>>w6BM{rV8G8S)a^v1-!1N$+p&fFo_O8=;|r8gggr50ii$FTgiJ`3f2doejDN_mfi8Bo*$FwxKr_Hqji2(}CexCQ>R z=6XKCUJ(Joz9A=cEtF3v09vvNvZ^Oc+&p~zLjyu?XvzJn-d}z0?Fmw#vo0HeZxh0)VP<9a}_ zpIa!{$Is2%OD@pgTTAY*!vAZ0e?|>31t6*1KUn(r(EpL$|0g?t;r{=`{GUdDJJ}Jq zzv21~*Nza_k??PJ{f28t2<%AsH@kkrwIc*}B>bCQzv0>u0y`4^&92{Y?FfM#3IAr- zZ@6}Zz>b7}v+FlpJ3?Sb!oS(|8?GH8up{B$?D`GYju6<9@NahghHFO%>`3@GyMDv9 zBLsFN{F`0B;o1=bI}-lQuHSI&2!S05|7O>3xORlVj)Z@+>o;6GLSRS2zuEO0t{ow; zBjMld`VH5P5ZICMZ+88LYexv|NccCqe#5mR1a>6+e`VLczn=T>@&_LFhyb4I7!rws zfj}of2A3{aM&>S|2w_v#8^KGOh_DWal3gKEHO0W@q1m1}OCB>;nDWsN7Pr&)%~_r( z-lci;VOgi)o;aP(W4(2ku8G~IftsruHtXg;ji_9>{rw4MkQ;cW-M;?Hx@7OQRF|~v zYm)~$_s4Fn7s2;{K;M&94Q5WY7_Uq8_K3?FYVOK@Cg;+z-2?)~A4?PuNQ=F~mponV za`H3_e|pVs5a{Od5<%^C1vI-jGR%5Rs56Pf2n2Ff3rNj9wUwK|nu@2C6<-G3lK_Ff z78HtCOzX5?cgQ=kv9HtS{UH!Yt@5(4GjySrlDk0qF2uTezzujpW+~vA?1_m+`X|{7 zy%o2qY~O{MqLKNRH@UA=<2_Qd?uK)B-esDsX}!$F_jH=e@YaF-UwN3iw<6lF;6+&v zIk2*xGq&9Y0-~cQX=@ct11{BH0R0)a5l|8YQOV>>u zJeUqTX9j3>9+yeYm25F)u=Fm!{4mxDI(b5x1>`DQjTCM96v)yW=A?IZm;5niSjGOO zVONBu0DnnI03PvY>^*<^sE|i5@0I`+o@8nnT9*NDXK~3RQO)+elw<02uc-A>_t(Gp zQcbExLKQ&mhk)4R^^l1TamEn&;3iWF)tgm*H#0bo;9UROu}r;Zj!4X2Ly+VJAiDE- zd*RE$nx|`(n9hDz;p8IoRcosLn7w*b^m}mu?VkAxTxYStRwDN}Rj~ro&H$ zO1aL5S0yq{88AzWyx@BrD(;u`00ujG_FXbmU4zG#>Zx6GaH(~<4-|Lxw zxe1=L(Z3>%Rp%7w+!dxWI$3F;j0tWIvjShU6qaw+SAlx~yz0dOJKvus4^`<0=TM&N zUftDM&x};<-sM!X06AJb0`CFjOx}nY>}Kt!b7Lm~>{nfwhxr~kK9%~xE_p&LKD%6# znC`VcN});_h2kYSW3Q{YM|<7!6+y-4 zfe<^LLiQPePennVdLM}IWl|u}@0q{%3-x>ANPt|dS^*&AKhk!&xP?Y&q+~DrpqmMS zEX0BEvtgGP`BEL(CFC~aHbL3aKsq|Nr4o5IO6TkHfz3EJ zmh3%DsSTMl$2Z{0(#irdUG$7@u@q? zS*hXLhff#aK(q~mX&jxg%!bq*a8UHo%iZyJnc_)Ev5Tp#B!xSNK%2|}`GE#Sun;kR zYb}!2Ha;JnN0gk1m9v!?un<2_SP3TfyOT~MKZnMB-Qe}566uD4!obO_?9wB^b($=-iya* ze+1PC0<}9YGX>I-IUPl6D-i&Np8{elbrbwvGTH<1jQ=6fEL7kU#hTHipc z$C+`?N)JO;VO%2JmOzErm`Xp(3@7Pk0yX8kE4?Xm`8Kjpg*rGu{OF+)nR zlAfVVQ?OVwRnYNd!1VW;%v#xAaM=2S_i+#xv&{$cCyHarxCOiI3(~fKeZU+CMKftV zj`lHbnNS6y962QfqA(d6+2I9XkZ{1Gx(|r-29pWjvAhPd<|5~k+QE`hYi~=0K@?_a zk1E-P< zO{gp=*jQpce~>9f&Q$oZ_%&=jofQPiVCGykIW@NgY@2P*0U&jh38nW@z_1fD@_Qa2 zkO`BsAx&3;pHW=hZUUfJptxBmg#cf!$;oN4#*k9^j{t{1t|aUN zO)@*5#f8(o)DiZ57BWEKY0OS+(OqDQg=~iaIywSLl9Zh?SXJLs~U=q>7<6N(NSRM1Y_K#z?a{x&}Tujaw-~J}v zHG&a`g=JEpx_`|ca5uW*V$%CBDn#FM^UOC^_a^DLS(IgI@T`ZFj6 zbyL;PuQbkQ8v(dvO8~gY^Olrxb1z!*0X3Gl0L;D&>%r=&SthWDl-K7a?*|z(hoc)4 zQ??(huI>V{G6^kHClP4UKK0`}sB?trd`#NooWbS1rNCPtS6%@9^G3Hgq))TN2Q$s> z;SH)P8#Hhx1jd3~t(j*Vtc+XB_8B^B$3=o%}(;-94s+A&i%7$yQP6imW;}A?tz~k6hSpu6UO(@m{Bb}d1PwA9KG(7d5LtDa ze##-x>IpzQ@Cwim9O-XoT06x&-m8xdcP!)Dx9AK2tp);$YUHMNA(22{L^Q90I{lf! zf~{-824N7>b=Gkr^x7@X>5I&P1=P-DhnX8BRR!mf z%9nEdEa-a<(@Ztf45tJDK|T{?r`%$&_*K9y|2@Fq_~L2aV85ccCjdX#n1Bhpiz35u zOV2#^fQ~-}1eynfD$Rxrfi%0i0@eOrt$Hy1tvR56n#opwha&Kat4{4xaiyU64xk^4 z_w_F0-fL-dis}EQK2zg#?`0h8E~bA;K)`ioDRS5vF!z!LIGGKb7tdlUG`(C&nd0UH z$sYl*=ufMPgr2wNz%pS2AqlVh`dX(ih(6e=(27q(5-!0)c3S&0tpUiq_Fb^j-yY_(I8UjHK z*BC<7UhW3$Z~#H@Bdl;;EX+DH2er=TDsvGoX1vCa0n^>S8I(X~ysp7azotOLVIMKc zyQOUp>MUiNjve^BcqUW)^3@?GV6JzV(!zIA8<{v9mH=uN#FPHk>JCunnklzlhNUWN z?ELB8wM+(do8;SQr?ZN&F#u~9o_g7B2hR(*(IwR@H);X`b^Uq;XUT5alUA z*QJHSY)rv?4@K;>PoESs2w-g0`ZDJ$6F{R|2^VlF@fDOuTHnW_zcrxxULUBczV~7@h30e2-#qhKL&h+0E;Ia$~=$xW!*loQ9SVWdfE$+ zmyku|cNHMB)kAwQ&?96Pd7B8;bG8e!%JfXL$Z0>{H53gxw*2CZ8%Ib(o0VSDNULE} z=aNQm0)N!|SfDPVr&)gX%=w~bw${Q=uSfsN3~w}0{h`&uajn{)Hglkp<6x#dU!TM1 zI!E?^BO{!lSat@p)V z{o=W%&{u#bw%&7pdKyP5qN~?bv(7KHs9^PqD?MZoiyTJTj|->ooz&@m`~1w|TzTa? zso}t&CfvAfk9_q|na+iY)_{YGMBg9kz6D%gt3OI3IXbbQ!hD2uhWu%@IVksq>w=Y| zFSlQs?D?%DFGSOUpjCRXVB2ke-RXM(G zy4x(2dA=ff7_zs+c>QvjKF$Nq{c>i(XTq$EVRy|5VoH7oay3m(YcnCgYo%ya<~xfF zL%{YAW`LQ;55yiBJ8|_V@t3p_;F6fbcDpC*3~7T2aCNi2hVklZhGcq3{>rosgl?4p zk<&D5(qds3mwqLIJhhfmrh_f@8BMq{B|-si)B##4+lF?O+0C4^yW)d=+*Mx}KReN@V;tC7mLU$q&~ z@Xmh-EmFD*vC6ntaN{PuC(5+^^S1B5W@3vkSr*8rQ&Lx+cnJJN203;%0-cttRJH2) zRr>3EdrT0m^{^X|nsL4c)6lrW}UxwGJPYfkoH_d}w>!I3V^P zo}O2(rYMIG&Ia-Z(S3_{OLS&e4WY)%z**%!W0=ssli9CB5^C;&r9H}@9E)gAQQf~8 za-@};*-^SCCC?WZ9&5ZO8L`($?Tyu&nVT9U^#_vcS^xonmYnoOs=CC=kHe(nP-fuX zifqlYVh6t3AIHp2p7tpO9N9__LDZBVUuv+d=Qg<~vE*@7^wD#(JT~EoObW6bha;Wr z+4pjiWcdO|EHaBGX|fLtjKw*YkMSFt9>4cF!?`a)r- z37*W=BNclM0E}{q@wXZbX?XLnusYgRmUO$14R4P@ojfI5_4gT#f0Qy^GDOJ~8aFor zGS~hlV++VUch0*$htJt-G=5!x^Qcrq6>x1VxVWT7g6WQq_5yLa-T)koyu~Y`yt@s6 z>J`jq>z9pK;G_?mjkO?ymK?tt=4l02f*!nOhFdY9^v>7KjiX7%{jz^izC-bk{=RFD zdz;J&!s^x_UAvDlcb^A920rKk9BG&sn9)W@7DU$uQA4$JAhxpMNbm%_ovl&ZsZjec*j3qn7e=_s@bd{MCRXtz5_K6u~_J zLYD!@aR6`$ILS}f;Htiy@G;8M74Kay-4Io(HXKIr*_1PK=Q+J^}_N8xL_ke2Wtjy4T@#IJ+sful$@H!ee&3 zB}Qj}YtiEaQciniPv7=&coWF3>t>LLzwan>Ztt}BQBG}<_hxHa)|zJP1x#C!B6zcR zxzZMIC7=1IDO(4nvI~3DQfZC}LnE~>&jy|@uI_51o$Q4Z0^E<8Ry6@vU#;qoi629p zTr4dxQm8L17dUEQc#=UTaMchN_odT)$~2 zpFLouQq%ouhZ^fm4YXla-+5-dJGn1+mTqgKNZs%3>OIx&90FedH~)G~VeCv<#L>d& zcv{}a7~$2L3u7CHGdH{sUf>9{Eve<|QPJrkTKHuw3^M(|JH9mo0o<4hVzV6{JeM2i z2pji{lL)+l4|OP6tFl@;Zn+Feg<1ijXC9pBw4llKEu<1TgSQ_(L!M=eq>kWM>YtvkKqF`$B-VP!BO zF7Sd^%{VbdpMG?{FOhKav>P8@lR-N}hAG#6B8zNivJ)PZZN z|1SPKt0iZ)<1-rUwo6vF!Tfg)RaXrcWxtr-Eec(%89oVItb8(gS=UdS-AAk+*ls)& zm$s5D9%h=h-3kO3Y7Nw$wx!>JxJDCypGuQ)fAP7+9$E!-yjN(^2lWk{i#W}IC3cU( z`nD#hPuwmgr#g1y+fx1R+{V}fo#}=z!S{$;Z(Q=wlhd`-_ga+!qqYxTAWZpk+a4jY zj+IIU-y{&lF@6^FQmCyTDRbcXAiLt$xCg)uh1CZApeKD@))O9Q-Q0SK9EQaNson$_ z$stHCq2|iE2R!Woa{28Sx6nseRnm;)mRZ>0&eCi+IKT$GvI&KgsJdo$2w|VR>7+X6 zSee3VjCY!UEz;3jrpZ>)#4@2hOXZS_&!KMU;vZY6L%MwyxC*$6YrGlT}TzqiGUnXV?(C6%drR23j} zatl2uCJ-mB=yZ^OZV|n$DBmUvJGSwHdOFpqxlFAiddOSXtvCDucXGX~hq!@An`lx! z*n68#YsGX7@xU1j=xL1o67+WJejYd2@X$A-c4UHo3P1zGk~FAMv%v%3FYeA}XjSU$gNj zPa%tRFA9C!fZ>keecAbEf?}^8w}2$ew{hz$e11cUCV&6ds%skzOj)^KPgco#d^R~6 zz&2m5P>nwMwi;%WA}j&&HF{DNm;53L;_z|sQbpL-sv9-4W+BFWZEd8LJz2C%!-(d4 zLEG7zTc}fS;(ldEagCb%R~_H&Cnd6qc~0xy-_`U!HQHN9_a9X7NI&-F$>o}b1Sk6Y542;aQpfU6 zZP}z&%z=N+NX-kj%d1w1BP>;G??xDyR=mh=@k&Kkyx@QJBOl7JXhSH->PSSnpmsYz zuB;ELHCbvJMF{C>(p6Ko9jAq_DUxeGe2ki^9?JWvW2ySyx&pXD*%a+%SgEc(ybRZr z_c*pkN!cSZZ(~_a74{C8EvKw6mv-A=8DVgPbqo@X<}x3Ph`Yb9FLYSr#;_#nfF5#S znJ4@055H8#E$S{e18;#-)J%wB#B9fzmAj})F?pW}^w8#D>cO}MU>0i)Jxc!8gqL4f zfx*tch%N?3saP6m7&#eBJ4&g0=-TR~m-g1kbtoC=uR4}FE3Mo~D`R-+nTI_;rAaWM zFla-Y$#+H4;NWz{4`fe>^w9l)5-eD&-*4tuPw23XnFmIV%hzAW$fLY0uczeGpqXaF zc=$`{)yXHP%fMG~^x!&?ruq@YgAp<*XzIe*@Ei)pdth|k*Ml!HGy*?U@*>}y7Tahq zf&lARj32#=Q8%LDZBdMRKh}FeH9vhd8^SP%mIR6L)f@HT9-*4DRlTp*Wg3syOA*W& zZT;=eI??Hqb;hdh?m{Ook<0o*3(c$*Qqy|c4QRgB5Et(?qNYk>B;n>O*(RYk>Io7( zWjbm&YU*RNKCzj-_LXCLelq5a-2V0fVa+QCY!@Yum&J7yJ0ee-wef`@#b$;bDkB_{ z1^gU}>7>HOHuM)|Y4yjmGcuX?-xvGjP>`7vx_1@OJ=4{5n4Q|(x59I6m*E*WWEnJh z(LM{SmuDNA^Wny~Faxd*G(*Z>c-$ z+85JXvSS*~4gEBMUptUh26Y~3BB|d=Qx935wsz|N2|IJ}(%9Ht)q@!R%xvEY=R7}c zcjNo2cN%e?)Y)VGUbuopb>xrvgwlwBA;@0UHmFvZfJNBihlUUbFY(O{TjAFoykw#5 zmirQo9R9EY;6_!k=RqB)%qYwuWlUbW&dCKPqHRdyd1_n&?w+f$Se$IBI+SjV1VVHP zsgBW~7?6=xkn5<@n2Kx8e%Vw8MU}lMU)a^w@qnv8`Q(Y5U?;O-g-K6)S#!puxl^8Y za3#O0@6EBXj}Ue*Q@2N=_x`w>_3>U#@~|oG*QZ+C@I+?Eh&%}x58fgQLq*F9s8OSr zEBzGr=rI~Byn*|B#qThqlNA4vF~|3ZBIKva>z5M}A1TSz=S2sS2>DS5Mv$%gDMN9Y zSUmwthNhLDQ}>a)T8(61j5YKA;>Wj+Z|KUZNXm-j9AIELVDgXY8!<4Sf_z;*b@A66 zhjw|Fjf=w`ks_*V>_jKxT7y-=@RuIG=Sd0QT>VBSJlG%i+7;8o{+$UsCCr@N@J4brS~FgZ`~v3Jue6H|8n1b$2%VPn z1DN*R(Km>C-dLN-8?)v^>8mw;BM30Y8Mswk)TNGHL%#~IKmz+cGV|408pck=FW{Fo zf$+D*dO!poeetV)=8Ie3ya3!9+D0U#jQ-p{A~NK#Iw)RH z{^F&NjRD;PwL5B*I4>d*HAN)5wi3mm;57o!)rj*2Aq(8v3?g3PVinrzactLDEK;Fw zT4nD5ZyedSMt#^Xqqt^w(7ag%NAqCc*RihT;DYwc2zT{9uq}vjEFiwUCXr~{Y&DAP zXtHbXcyee3S?>47f)#aA}k-r{^AmFf&jYHR=Ca2fy8M1&zapIF77_CXOJ& zG0qTm-|uJ@4DfCC$3p!w&bLXc=2e;3Bxx;IXlr>PRl?dA`%%;pgek_F4{1gp;f-v+ zLQB&m+k?ZOerFLeXHfD&+T*r)v?pHQh9al&sFOW61UO$;=uT{C{r$H9Ya>2tZ&b^4 zibG^A#wPB+11V>Sr|mN`HD|mTXg6+m6R80DT#TcRcJ#gc6{eY7d~jc_`r|Nz5jDJr zWXG?W^Obzo4tyyhV!vPjldfZ|dkiESuJ`(cu_}>84+U?A2v>C4Xl(G1y^_vVgi|^T zVD3(by7AF6X;wiZ9%R{K6Pp&pCR2_j92v;V&(=J#p5vKqiLLuHs)zgz@2A#%_07{w zkRWhvM{0eM?3Ih4-+H#qDw}nYpmq=TZ-&huq)Qf4$IB`;sZ*^F0*V^rb zNI8)XJ;e21u`#K#w~sIdT}nqw1|o<`1#SW&_T}yEB>ZK`bLmHf1JhR;R;p>?`ax+G zkHZYdv%-uXG&R#iJoX#SSgFc~Fp|`>j^{_^gz>UR?#KMF$BRRYso#HvRAM^YfO&?{ z;T5v%0Ed;MQavmTKzHMd$%oqe053V(hoEx_nQ^fXIUh^)v2N2KB6n%AhN_kkcGK*Z zc12VHo_(>t2Tul+=k`1~vDsAZ@A{xaAV;&Y<^!rv!$yJjAWq<>tw${e9pPL}RsoB@ z4}yQQisSX?53=w`TW}dQk>{|%I-BkH4x;LGAIX$B_)@?7Lhz(E%CJ&pBKD% zEIW5WJ~4uL&L-$f|16~3-_<|v*K7jA6m#6jc5cNh58A_S`@jR0daTcTJFkEXwY!t$ zi?V#JRiMytz|XE?_-z3SAz961uMw|8`J2yHZL^Bf*ex~bxwidp1Cnp|n$>>tyB}8B zuBYQD$Q=+wd!cYoLN8;aw)Cv7gN>@ZMc=8ocA}y@Z^%C5WcP~iQpM=6B_@AVm2QG} z>%9ilweHbnCxQHpHb|nH9P7MdR_B6Kl2n=NXAMaG$$=VPB*I5qTH#bj^1WQCF&TlG zbq<%9A)CV>?dQ?1bq}ve992>9%A>dBs8xO>1=w>L?U$&mPsZ|$tUdTDi}7;puVzgH z?kqv%wd=YO9-lR6#AAYEa}-sX1PPt)tM8>4)c|mZGe;uZyO6eOJp8SN;)v_^n7Yfx zDU~(JXYl(yEKr^O($&!6VB27ORHt#3hb2dY%IJaBmsVk{Aojpq|9icb{8r{&UoJnW zEBhP1g>O(b3q8gm4;T2=)-1k!N*|w~cvQ+gBW-G}megpaunmGzI?csz18QkLA-# zc!=1im(kgFPPNX{3P_Sc?``Vw5?X5o2y!EecIeNb`pqnSGx>2&^I2DVZwn?mAXEVt z^-Vqj(am9RZt`1Qwx_77N?hY>1mB zNB;=7&UWDRMcX={F%}P02!fu!?WaxcW$m}(Ol+?%7t9v*rM_!xFXb}g^*LEpAb1Me z?Fw+vIOh)QYSsLRX^;9Np4Rukm~p-eSM%XW?lF;a!FZutfa0q{+d#qZ-~bCg+sels zgj^agQdB->)UCJt7j^KP)jf$$T3oXF8i=fJ_$4%Vp8vknJ9~-qJ^-W0Y@Ic675<vX4*a8P2CW@UKt&GYlRGu zdH?jf&Sf<6Nbc;!9(LddUplMQiqKa3r8zZp+^SO?Eo`mfdv#%`@8j*(gdXP)Pd@I$ zj2-~_mF+ch?x}gd507I5eHQ>1ae~LND-{3K?F`i2r%u~(7z7~>(I9UzD#i@WZRFh@X2lY}n(pguUHtzH1(3;@3shPC(#UAe#S+sjm);>IoZN5Jiv% z38hOw8fjQi1f&E(x=W^XC0-mZD) zY_Sbwee6Q*`ip&&qW6W?1XTstxO4L%Tq~^=_+!{c@Th)VpagJYa0r-39g+8(KhXSS zCq_PwZ=hbONkx!PJG&k3IjK1N$n(p#R1SjXru*c2VFO~`vM|=ZaX3+ zrxD+Pq43~29{=6v-%O=AgAKaEwpiw{zwpc4@b`!fN0#nWj*6n+$|L+QtgRGqCx6Oclr`bJO4Q_8&lHAW_8t?fbA{KEg-gWp9x2f!SXKX|W7tCry?U>q&JP(pF0Vsb&;!*#dSAK25>nAa^5zxB7x?Uv z@YHSB^h;y;zd!by>QJ(DC4v~nDZiHiqWb-vc`ZJiv^CToTy-EkwY*o1GlnJ%{)?`j z6g|A2n2eiM6X&dPU85wR%)u3Vb58Fw7+wNurX}~Mx^{MWZs*_CW%2}_WOg;9eO;)l z2`M$1{;A%oAv2UckniMLdz+Zb`-ZeL-^stn+@4Bg@Lk=;3&oSPX7B>{ZA>fP_ZkjF zTM6&&TrvH0b-txOIIMP}8utx#e!+4rJZC>ig!nyD1Uz$wFm2%4FFfA;@7b*cTM46g z*j9YEfqXDZ-))<_g{3|yXWkC9)s5!1M|kRhOhn0G}?yd2@0i51(R+nqvrCu>04-hcsj)mWf1XhyVJhB!E^S zRS?KlQTS_~gzweszsf`q)I~)r?vEj*r=f0>RhVh4YAKjXcoT$Fv z;#;aK{LOdjO03%9ZtMg~4ou#*Q5+UwBI|=QN-tYr^C6#w6#2teG7l&@oimNFtVqm_97|9p`r}stA#$mvKw*f&SO*xtkpidosOFHb1##l7N_qgkB?lz4^ zV5N(HYH}<1sv(i&Aarr0r0JPWU;D7AKK;x3Yb4NHp8M!-u}y8Ul3x1-rGV_G)CPe& z19bF@LFVc^TG0J9*up61j{q($HQ++G@@`ApW3rzRyPEa~FxWL8J(Q_|-*(^#vI+HG zKT5oP;Y64G>7Ix#+_0y7t!vGPJ(-jz_wRx>2w$UP0)lnFJ(B-8=+GsWs}Eb?R4WdD zgw2H=yjWED)K7Ghk5p)D)(XX{ojO|c8M3bIW#+!ttnj8*=tVx)#dqF5FHf^cb^%`b-zXVNEL_-TVK+eRPD{ZTrY?i#H|?bM zK+!?_$1@n!>!%?-rmBQIr`ogfCJl*zs_*v; z5!lbN@=!8DO70KihtEgNG|JZx%G@XKn3e;W)}8NU89TWc1hpEzZ&$H+A=Q#P%)Yvz zl4k6mKc#akrNJ!<+_V9%R34Y}#8&K;Xi(5d34%+j;IZ_ER1&M@O!7B4l5V8-y2g&z zsn9k8^y;8Tbe$HObCBb0@1Jt5cEv`|7Zb010e^;+9s$zQ+C&8)Y9bj2R3} zdv7vqC@}o_B)IGHC~m)lRG`=hjcR#yx~6mWf?p~TQe-z^@WUsZI`xSVY3@IWU?FQ*+#BQWV<0tjxG;z-LY!~=DG!_a%$%Y#S+fUJap^bHqF z6*QFa|DOGcgqqAtDHrjDfy2W?$KWgAfViU9n{W4lGizz#<68Q9;Hf*;LhcPH9lZrd zJWgZ<NXX#??a(3^wgrAC#4&DaO@-#=`Fc>3T^&U!0B)_vG6mt^Y0GV@^E z=>8tyekbEBm!H5{yWwl7C6Ia`#1PT_#rVWDFxNdT@a3rmvP6~CnOj4D^{i?8pN{P> z(!u3wudo7v{BkMBTuVr_FP4X_eao03oBKSp*UxTrZ|?l1PLg%OVbhQh)|%Vg-mhaW#wjN~|_yEo5$pp=ud z*Y`&3{A7^=iw;{DDhG++P%ikggM@<+#KIAQ8^8d%u))>OAnq^-|9|(T5=S-Q*Po%S zu@j;qjP+$L&yA0OU<#BLCV!Hcfp(mrj#L6ufMaln`0kDW7lx4~)O64~d6-j&A;76( zNBUU|=pZHVHU*sJd7Z1fR1f9+SnfcfLWXNdCQ~B6?zto5Rd13S%>TU)bjSc*Du-KA zZ$jSx9Rn{P;ySw&?faoIfZU+DLklkgq-7}UzX9_=7J*C~YWHw2L4pQA1iQ+qwy|Fr>h&&8k4Ok=7TdorxLtN<$fR;l6mO(MkkN zBP6-(j;YdRD6az1NnAlEjmj^e1(an-RX{#u0ORArjy1o-R$Cf|A?KIf5V|vzOsV~V z=Yw8zM0$sA3Z{yk#n0+%MZ=y7aGA3R1{HNqK??X%z(w3HN?bG zLCV}|MFG-k-;n~Om0Mj+;=mHRv}f~zsa3%m28#b<7Ju>F2m7F^{9F>LptN@?3EDuu z$PdTn(mxwh5XbFLK>uC|X2LPJTgdf12MD_YZgkIX07FIlcVM)1++jexA=|&Z31I*K zAnD*=Lxq5ycHyM~1xO2lj&vazGD@xQSqp($p0MkiJQ+A{2y>SE*hbqE4OUas`F?Md zt1gTkd3L?;;SkC?EHQ;k|H_VW51{A{>Iu$y-p)`qhjZw@5%wi2~qR za--^hIuGHgM$*kGe#IG7T#lI)Cu2IlGK?J4#>!e0AvM(+WGcyJNc(Z`PENM+z3lZ3 zdtmuprmo1Did5@baA3XbGO*Uj$DQ2@n*R|c^RNR@7695}HFZC@fDnlOC+p5`!DQyU zX_`gEc*6o8kVFE`Z$mUfuYE1We4SPg>{&;F|_}~2xvaI{Pq=3eLqU0TkzaNheUWa=J zG5B`q)~GcU+4#w5cYw8!c1?gf_bpj2axL^+Sql-%#@IY~DLq$R-eV498}92nkna=> z88m17Hha`5uc4efRcbPKwEU}n1aK;EnZBej)z81?jhSr3Lz9RIEwlbaWMmlZ#G{wd z(H(p4M&bHJKt!b>nUG{dKJY}AlrHl*=`a2=Q@g+usIR65H%I;$HYc+*S6YnwK}P3$ zV8yvSPUj3i`dO|%8O-<;cTAOdMdrGsi81c?SR@C2o^ zc=l+wDiA!j*D(|c0zCf;D;#pI*7I-x9bNE?U^R?DN-YmXm$PHwkvEk=NNIcNzpAv? zSGPoc_`E*4Xy-ShdD}f8rLy z3Y%!gvURFi#f3p4a!G0&&Ul~*JjXOW`oSKhG;Oh;8AQluqh;pR_+N&OXr!XK81j?D zT8PLyEmQzk{-)MoXf9@@eE!0qb1BH4vuZ+S83*bAgOqI;khlHU#4Z%`sX?xiXBUX*zr9~xtc9i)-xeq(CJp1x!jIDXh`w^*79Dv(+UY3FoJED z@hj01V(TF7r?M}9`k9K3Gv(73Ge6a`4Q)N8+g?8Y>gxNFW}LLxPhIZ@pY8;DD3#MVCMnzyK( zq(&@h5hvfXGP$>fi5pRoMSdu5A%=^PYi%GPz|SA=Cs5VSVjcH#h zf>k-k{=hS7bI@9@+jgH@P7OHkN0lkS^x8N_dmH?5V58|QyelCicDAjg(ukLuOj;0XTjSaLVAB*~n593zoV zZdAGQIObn=1?Sp#`DRNH{OAS*QAT|ReoaNl`kKN6QfD=?M0)nK{H1&+j!9MPr@08m zx%a7kPJa-!UyVO$6FU)GYqj^mP-RmSCS^p4Z>`K8F#Im>E6u4E*EdoR@Nqa zzvR!XeDHzYFZZ`@K%gFPDafam*a?mDThOq|SkZ}?f;Bj%@*X`RPWXehEdY2Zbroy-!E~`jT#MZhSAUq!jnn>x5yu zpZeRP^|x60fA4a|PNfjO1L>UuYU-NZ993|21*sk+3!Dw;JHClIMXju>*&@qz0F(3vYRr~? zT&iFD{byr*=TIh;nnCXQYRE+eFv0*1YNp!4Z>97b%FC+uxE0Hib7~-8Uv9bR zHP&A))o+?YB=>?25f!|=c)Pzs0(Da;A2kfe9zB!`a!J^|-YKDJn%XfJD6*pPngKOn z2)5v$pLX5>b$un*gF;Z=WVFJ6DHC{vMHD|fW~AZJ=z;;684TX?_W-@~0+XtESz<_b zj$Zz-oi);kb>e6*++>7=fu2udbCK>ecdhC$-DwDDQUMz)11bWobz`L~gG7vPAdv#z zE4Q`}*8QWtFjNeDC-A#TLnaUT3Gjw7Km!mwIuk-9i(|dqRxJ7M9lz}ACeW&in49~* zb2ZrL_Zjx+e_22|I-!Z?_)tlfg)0QIx^m#NA&lD|DUbx=G3!R>6>o5MPg$6Op&`k8BY zY9VoMQ0u7#n^-c{t@T9#{(@)m`PL*28wI#cW+oU#f+fKH&UZO8_y0z2+B)mawN#b` zfH)@6twlt{dFEJwO2Ll95Q9y#^Ls3&IUewxBz?-*3axnfIV z-+3d?*(oBo>Q$f2^_%`Q?8)3fCG=w!81yl}xZt!dy|?vRX~TN<;HQJfT5}{TS>j0! z=_k&*PH1kS=ZS>#Jx`(VAvDrv$x{#{$R93p7L|VXeJ$Rx4{Ft*8LYs$F7vX!32U}1 z?fS7l#$4S%4B46rqY00%n< zsLmWGvfA9i!O&~2jDdz^55~z2vZ|LAy%LA%$MSE zboBrB0u+k{o6ZqjI8dsPKesyEKd;0v#+8fRm3S5Rs1+h&l-_oqV(XqLPPAu&O*a$P zB9m0Yd!f0*+Xz;&aZuc1+)$|7=*O}JslPD{FOgoC)^weSlP@3Li!KKB zNwsR;GB@cdB?gcP!r-Hz?$=ls+9l5bL;`Fos~U)m3vQf+IY0OxO<7lx&W`7xl7b_4JVaa4##0vn zZH&&!8{WXtAGyLi40Xrne=Qi1OHTz%TR~xj$$J^@MqnMFoHc&;wOpo0mWw?-bavMo zgPIy-9F*tUBZ_`q;$WxVOfOKnv@hZf7_)t6$v1Z^T&RbU0%IL-Z6X)_Iau*ENW+|mZp>6Y)_A)Ix+!4Y=p`31qiObqY31IxGJTQQ^0RcG>% z!+3`P$2et07o?epwD5BUT<_9!NA|%3XloTquGZ*Dm0$ovXbal+>H*Hs3lG1&-_=s? zDB>!_WjqpG6{xl|dKcjg;$`cFWGJ z$Gu0owua^(-HH(IHysW5-fi6F0r>(^gMJB6Qv9HZ8lIgax570#vA4A*bShqXK+hSiEpkl3wv<;5v;9gy?1Gmuf{b%fz&Kw#L zSJS~R5HBNX`3E3k42V+IgH{~w^W7$EQZvoU{|4-pJQsG-I21ySWAP22<8qs|ugiQV z(Y8gg#_0-eCSTxkd$OiYSuTqZj25zuMK&NgA~jqn6RF|15xQ7@H`~7q7N9LZG!GEm!$$8yjTSKSecbKZUTer@L;cb zatu?fBM;@cRhEAr>vGCnC7sXYGWrsgmB;4I-r!9(@`^=c-FZIEc!u+0gMUK4ZEClK z{x-yLv|{f?&)O#A*?^EW8bfGhGD~Abhn_t?JZI#%djGTzR5pTr ztNUd0@EnDUdd&FG5r*ni`djU(hX~-67l>8tEv|`jiPrihy*$S^T*FrCy1G^kZHKQL zxHtyNc9Lh0pSmEp=af!4WFJqM#!@*hm-}aoRy!x23iytVGqNwOt$R$QZcb#@6%20p z+Rr6nUkR^iNd*jsJ6Z`lr-T+gzKaZr>n{aQIHY(7K_8cHlPG@ri=m{88-Yf7PaoN9 zM;?Tb?>03TGyBra&&(={ihFhB`|!M`qK@U@U<|t`>q0$SF`Z>PR`;ff1IF(`MZab< z$MyJzQZK6J=N!|t_CZT+WVvyh4tQ^h!ux9v75I2ZqOr?Io8qytb1=mhLU81EuZpVJ zo*;31O)^$r<#y@)NO8D`2>Qqy|IywVgGiG2iFNE3vI2c$3BdA6iQPi82#ws?sXM%rGbZixO2u(TkYuUwKti91} zHt7W|e%=L_Tc=w35(iLS^-LE5XhifoPwTNYc{f8{!=A;4H~b1Y7xxQ0^^>M{?jh4)t_lcPj+L- z;p{nMIjRp9_HFyLYPQe)Ahu-fsS8KAY0VILPY6=haamQ^K7!_}r%9cH79cfGb$ z$xNDOhm)Sbyw+Hsl&`r}W2PDWPS#W6dz&*)JpQ&w)W}~S z!E7ulPd@(rp^AlJ+ZZ&>==PK@YD znx3Y@UH`T;zx39=BpY5jv~68BfufiS{3+&MITo#wu=#|v@R?i-){AK?DWWHp zv~t2C-CEElj*hk9z!=LvQziW$r^J}mk`LAVwTjh5RLJK zSZ2Jym+kw`*wV+wm*Ak=G3{LVA@_+G`R2_<8vCTjbqkjWy@cybp_+?^01=AyjPv71 z%{b=xBzwj`xvUm_fXvHyYmajlIDWlYE}<;>g&qZG1@jMaB&se5znm`_;@I#+&`Hmjytc4<5VCr~sA66FUAo#+UBB5`MM$4sXm zN$-M@N5H_j0xf<4j-R-zDV8YoSHnAKgZvZ=Iz^Ih0K+mp8pg}cwj4phFqN-BENFA% zWVfD9$QYER>nSpHU^nP?>vdNbw!TR=T7O8{f66zTm#_oX-EafAXo)tDmu2*LtCiLN z8QtVwb`yiI0yCLAT{K`kz04jl{nR&oPV~FuGuD($l8slNT{m6@L>Jut7J2RcmjB7} znv-GMR)w&INvdSTLyIy!Tfq-1j)@m*+B@p0$r-=iRR4+$KivSv%vg4%epD>U0#PSR zg7#3M3B348$)SnDRl!}i$*dmqC@aljebf6^Un6pJv9)8-aj{jBIh-D2dwZe&PBGX8 z-!(}42-?&9Bb9V0+=;467cUB)xxsEQI6^T}pbfS>&JAp@1m$Le*~ zvx+>?N1J?wB`0-N*fS2Dv_#TO;E_S1_5 zjv0V_lNZfnjRJAI`{M;IZ|(@_;|yLz#}e-B8P1uRW^B{a4) zkNoha_*}bvUylKkUPVdfB26gNk2r^9GG@+FH6|mhu#)sbNkF3r=3eAU6viMn;HNSM1QO2%g5o1~kTFLz(G@I~>fP?P3n>rMKFqAly;j!7MJ)p(dV zH@n=Fv2f75$2%ofl*4`9{+f)`0_^6g*NPy_j%WKyI+fvN-KtZSVman%!tN0*ulnua zv8>QBJ6R?TN#3`ym`>&4`n(isMob3jEDh8=gp5ll?@I1tT>^%BEr~Be7{{BzR)6!t zPfs$-oF#0^4{vbl`X;?{wa#ZHnZ=PY~ zP@+ow!|~Rq`(^#dF8IN_gU92kFxlmuA`+qw0_yaX?KscXz;5tfA-I)MAR~nN#aF59 z*Ey~j^B$u!v=xH(m#+%-vICQ6Fl<$GlpJ0F!V1j>tmZ#%v*k%Ee9%C}Z>K1#;_j%mwmIF8R zm=Yn^$$ff6G#r)5_+ClPk|g$!1KzJ600^Ae)ETlwvJG5V=pnX@_40OK1aKQps5hcV zWlW-a^ibMIKh_1t4y0Hael?7SyefE|-A>kK=jX%rI-8zfZfcQ#a!*g>1PxD`4lGLX zz#~ow1CskL^py-JAY%yN2M;bkoHQ!4Kq6NrpZf?oQ8od| zQT=QmjsmKmifWE^v%2ejfh#b?N-C03!^%w=}}p&*#jJ%Ht`7S}_>X zIE)gWK`uqR=l8{)4H$NI5+TE3M)vewIAcyk^8 z1-XAB*OXnRTp%OA;&*!bETTk>z^I5v)CVGOy?$VKPLSpJf)XV zQE4s`HXqkQD%xFDL?p{CQHCZkuQQxKDq~QnZU3pK!|WZHbzRB{d+@i}!O#QJI4PIi ze5%l+7GfZRQ9Nj-q#e!PB?3z7s10wcZxLDeBGr0kLe2Q?BwM|q`R@`#Qj~;O*A%b##BVGi7u{sG$ zv{17>$vpytka6|;?8rY83CZuDl77|Z+Wx=^RP)lCK(W(NHPmKNLi{%xDKXup--6?k zh~4C`ZHarBjN&(Ss!wl|1aQ;*j4(>I89t;Bs?xEq1P6S=h-v<|Ex4z6(C+w#DH(EJ zA4kFGlL-bQ*WQtxDr@N;{A`7g#2Q4O+RcX?8ktbxDbbS^J5C+Z5&pe*z8*FtvhWmd zl@;YQRqi5I2*Ya3*|44Snl7jkr8b+tM*ti1e=-| zs%NX5D8sdJpfvMPlmJM1LLgK8%BGr=F?p&dV9>>Q_bFqxCws_m8J#2hiu*VosKB0rZf%wN@h zdd9qAgvf4t=&f|INAWU(fw;V{2Q}8I=ol{ZiBv)L4QcYkUuGrbL6y4@<9T*3K#}hYXFNEZ2xH)DF?baso%fiyHlel6YMm zaZIliaXJX($pT{=jLX2V9ClLmm(IZ13UtsYHJVB~6iV%BEzz9(;m ztJd_J-7L0=>Do1(+95QMls}r2ya={v~;4{LQ5T9If!$- zJDz~4zRGSqH8OHlV)74{vwx=;Ax6AJOL;9s*eD-j-u|khWb%^{25bckGB$G6*@HT@ zyficFAUEk2oKzT{3(7i{`0kzjQ+hBz9x&`VCWAYAAVHq^-+*qKroL0R9PIXFo$&1F z*B4n2BeTGgKbx4nKPy;8KeLbXt6=(y=iQ|^#h@{GKVqg5{JKV${P_B18Jcm0(uGv& zB&8UG?l#m(yreFtCvNzbFT}o+gv; zoa1J;oaQrH_Idxw`Ouu>_qnN`18DfVff!>=0fE|Y-#sh6976dly=c;KpnGbL_y)-v zsw^UU+exNaZoMsxlA_I#c=gPgy9Hyl{8!}_$Mm~G*FsewC12sb zc14Z=D%RgXwZJ%TbH>U1=TS}v$($rDj{t1gK*e}-lu&;PkIaN$(i*a>n9_@WbO!sD zoFtG%o!+WKUFt~mMr&hcapM;N@i#yQi|_*p7GjFslzXepOu;rglV@|lQTy)z$WU~2KRVkhqWlxsBH5nHWR8Gn zxWZIZWl{dUkZZKor+RIOM)rorl&{BsnbW{C@&~bsMve3*~{)?YRvaavgi^6E;d@VbYT_M*` zo|+NU_ii>m}LtFL~e<8fx`x1$Y&#r z3lR3gv%tIXz^4QZ;P`(tlm>y@;@R|rz>CafEI&XFi31!f12FLT$kt8%H*YypA~h^p zR-cIae*kNd0T&WwH^NcdOAd60&v)DI9?jDDM9T7w0~2rN5rbJhE;z0Nfr#g5eA>53 zXkrq-dIEoahX*7IxJMec_`7T2-spFb?h|(q1iV6mQn8nXBpt*@5{v?*<|#%{yg*)P zaUqgh2!AExbD%;bdv}4XgWwDhK>sSwne^d$zg>c~-VK-?q*u)t(=xDS5%y=F=j2i`#23!ktS ziIq4vksRP#$yv><-5s%vay7WE!2_Y0vGY6Nb&$x1ph~PM#kG0QzHt!XoeFS@Ate-I z^2w;@#UE2o?mTt^yne+y5=~`;wnyZ{(dbc+k%OpF!Wc#XGolTA?!>m6v?F!{5Ly}p zAU+EkcPkR)XmDez1E3^W+pp-6PsM-;Vp*Np`-{OQAk>LJcpE49bfa~|+84$*DRG{- z5%i%V6{#gliIuEGcH_}~72L%8Nb>oifZ5(A43l8OD5-EL?xqvZU`mV_e1#kp^^9x# zj>-=rje2U7m}H(})gyuM!_U&-rX-Rbe$ZwEenJfBnG&(!@alyrBtrsx7!~w2@>xF`00MY)xWiRuEf^R7ZocneK1CW#hJvN# z#Wp195K^HqhBodb3e?!TkDQfmu}<#o2Y2*{fONzz0va(kg~;e2uNWwUhwlZ(-hBS= zcMenHN{RAC>+jK})a3R%LNkUN$;<p7b<_u0g&DveJ*qp>${)6wj5jOc{^O=td@&P9KT8VC3{`%zhmh%E>>tdSes_S zZoXP$-M{xa^ccKai1N9)b6U{;wUh_X6g;wIw#gQ1{W5>7q?zOD$J=yq)W}m`eirQ8 zn{V!sldmdYrmJoERtL`OMPKypUTldK5c<($GI(2Z;k$3m^tV7znw34*A=qyEUCU<6{CErc};Vf&R5>G`_kRJtLuCH z8AoN^$BYfTl0UoT4SHGI%Wjp2nVH*~r{1eWj6|^+BKpgkr=(R)J>*IayZPZ$TfQ@{ zA{mt|@??$I#d&8}`IFCXU3YG6Mtiqrcb05VR31JzU3-J|k4lCgMSoB-w=~@Ns=y6b zH>z_#wShI>N1*rpQk(_>>3OPLT|%Qk=yj@FOrto{QghK~i*L4cINoXrSD6bzMk_aZ z^6d@ERQZ2CnsTfbFE#$_N$I=Mqas>MPMMg%Jx8ljx!=omf-Rf><<_%+?jK*=^&D@Q zBh=FL(Nw~PaPT*qLFIND=LdopQts`SSc@!n^Mc2Amc0GOWh9P?D~62Py7F`4@-!JM zH)zD`a?H(74d9%zGi^m`bqF6>R((eW-4|Sk!sBImP-t+JZmt0TqA`CQ8(xL1WB)7S z`d1CXdN`{DWha78&5m%_jm$4T54@o zta`fmHz|+cp++)*^F5L({5UEPJ>sZc9lx=~T1geYkc_(sAa@M;HVoC}({>QzyTd<8 z1^Su0_ZcTU5S9;c{-$~#M;e=;Lh7a2! zpGCZLIh+G#3&DC$zv!N2e!uj(SFgk>Q-~KB3tf^qW_&sS0n@SU>2s|UPlDomtMg_e zUeh-E|Jw_|^e2wO(I{ifkajiU!mY-O`1r-tu9Q2GOqC>EGdvw5Mq;bXSHC0C>usb` zqwI(BHbZ6KXD*FhLPMADAMEAteUCnq-^4mR4uuAnzra7V_2~CiiGX|0tv#I#G?Ec= zlo3m4G9>jJN=2)EKIZG{GQqi-PpX7C%XrnLd_5RyD00Y)eQl3 zNmqSZfK_qZYY3-#A-ys#y{q0^omEAd?STsOq4MtHTB}5&y|f#GAPozR@$C(T8DE_$ zfU^}OVGQOZ^7TL7(gV%##7aWK@+OwFZrR#>YK(3gasZL|4f+p zo45X+PzoeqllJ$v5+@Hbin4uAq2Uw!HjT`re!TcNg$5#aZV0c9`>nJ&xD!4aE}EBc!7kjr0n{ zeBl}vb!`qT-)^tGmqv}$$v!s!!??uC#))zKmm)z(9UO1}yxLK7v*9wz7%5ML-lv$6 zsv&Q=e6@ZWnd3aaQexfE{C14}J9)W2FWeaSK}@%N+s3#LlaZ)*36Gm?c20Dv_41cY zBz}X?_wW71l4ez9Z&QLpRKj%`TcCe1E{`7PsE6+Td9z%5tJC_=@lCp8RHkD3%VOv| z%5$hh$O+{Ix$J0YrPGyMrma!ZiBXTQ$}=8^ggnVjdZ`~JkoFaTBJV2U*G;-kzKA;Gk2a=uzPHfnY6hVv?X=pSbi=NXhW~-xhqD(Y{MCB z!m{QbC*%*AKWS)AaZ`$f1PLTMG94%kpC1IHzWD*jC;vS}@OAdU!gXN8B*{`I9X}yg z$!MnMI@4z#q4N|=H^=w@sGfq~^^@T143^g=1eqentb|`#w79U=lt!g}7@Z%~UU=bN zC`)zwiuN|mhb$pp%iolmH=6a>7Q~Si1j3G9|4@{h8a%OF67e(U4MPy^25*PXZ=c=% z+Y;lrw|gX;67g)#uB440C2$^x>g)5}ADVk6(f*+|(Pig9my=$y^55t%y~V%YJvni_ znhzfOC{ozvoj9{sl;|t$%{&8Zzsd+$S5+3a;ZM>vw_~j{EmL%+68fSJUCZ6oqOO2W zH>_ox{_0DfK2g5bwT=Ix->m(G?Gce&>(`zP`5*1>5%1_c9X#Krq1*kGU3|o#Z)!Wg z>ogsx$Lx7nurlv_*vKv9Zq4b?jKO3omij!9ip9Bb<1O)K&e#FG%-YwM(UZJ{s95_j zWqYq^%b$y}a>?miQ&J;_W-sN4%g$}WQ(tx>SoaAlVv(W9D!Ze)vFY9HmKb~j3j5yB zSG3ktyQRrpZ&$@8hF4ihr>ywyK5 zkt6EK0?jDv-(xsFD%)dEJbX?|QgZ&n;qrz(VeN21%Dp0$-J*8Q#$%8#U2D-tx;`g* z@%a(uy!2Sxk-_cFUm(Y4l`!w^SUCVu?f>JVIHbNT8_zFsqIam-C zKO%34nJj0@d7uNK@kn4DQ&iuU1*fyKgX#h|tyR!^^Hmu7ncJHpmu_w9^!#@+M5en1 z&p3Na=0w!kn)f>2zc{>QqX>fqBkU*IF28%aQF*>&#Rz^SGwG&$+oz90^B8yw-ILTR zde5?2AA*S5!#{kLvtlJeMtU?EIqghdWYJ#o0bWATOce^Ql9VgxFQ~(|97FS9mg=o! zuJTN@{(9|;O}0w`-mfi!l^90{ja-LQ)rGP%V!yawvUhPmu}OXZe9-ZoO~lnqqVe?V zq)~J5`<>3GfGFQb2T4A#9LOxEe4!c{>%Og4I!QZ%JwHK=y6LhZ27gASr5<$eNZPN~ z@Ave)?#^F65*))nifujNWTsssOC7|vgG-Jod{g6Z z-_+of;Sua-g1a2WXt`&EI~cF{?#g)kuy}glGA?-vV0IArCS07C%hNP54_IA^!!gfq zfkpI)OV!%V)TR)uZl$Ycf5k&toBZ(H$qSkb2$GJ+-==`;-uWVkZ&T`^b8X`AwsFGW zfeYiP=5W?^v20JN?mXXt3ThUAQ@{E{En_WbHXu#OQ~y0ayvV6sBc-@djiC}m zw6>cj4?fUrNC1$?CQbgxt<>pO{_Scl+Riw4>kg^sZ#ND z=CG&Usju=1-JVG?Y_ z5)+BkY1e7>_8%Hf;wF-gIqsD1q`gR^UU$mdx%x(+To})M{dEB_Ny=bqQXQHU)L2-Noaw$WeDR%+xR*yn495qwLzMY=OR@K^SpItm20O^(HJkpPQCYH z*-qnHlYg1L;H_9+AQr zAn$PYW_FR+3!&+0gG>E$*uEaU7MtXRxyptoX-48Dp+GdqxvbQCPnmjPKX|F7PLDh} zf@Te#$VOW?htc`xd?JBcT zlm1RmA~a2j^;{JMFzkSqyNXQK70zU!}jgX_SrVI;FvOu4JNqkfi6X8%?lWGYHVN*6|1z zwV*#bc*m-#8S<*9;7J(~C#>jr^0ZLOfi?v%^Jxd)dxD1pW=q4_*a`>kC1zi3{HsrA zZPS3PzD+9v>QhNVU$o7ba?r1JZ5G>vO`5m)LbGwLGAJ+|w;>VZ3| z!w=jd6~R`%+Ec4XT;#=0vjab`-G>liDjbRZCh83Z1Z!MGMcdJ0 zQCIwK06j*+ne;myFKJHLG2Z2QKl2pjtaNAgvb}3dTL@A=W_N(Wp}X2@L7&O|AE`#9X|Yg45wi49(gV%D)yOT1a{z`P;jvVI!l z^ITl^LszEaJC9YR?jmXH5Kqa>jE0vAl^Wbh)-~o8h%H9jYhC$yOe+?VD(r)Hoa-MV z)%++9;vz*|Rgzic7Y3-!^WUugnlNvuEjJhc5Unmb-Xa{4^=Xu~h_*&>`Rng#Rq-P} zTiJhqcy%Ej^{OJY(_R?~2lFu7L8IzZL@?QND>g2usWj8v6UYZ`rvPheLSRu5_7 zwBzMFQByMJOhMD~nk?bp>DyOiWobR9wCjn#z2h6*_?~pxE=rv~Xs_h&j@+(HG_jS^ zsZSN_BYt9}*-IScmB<5KS>lB@+*~$pyS9fMtq}E(>SzBPE2Vlr*JF(VSKi$TkjwrT z>~p>Ir1l?_q|w1sRnCLPrSsJdAs&j#(vfFsFX^qysKc$uR*3tY+sc?^L zX4K%?d+GkI7z;UQe)~{`tZSp8NwhQB2}P&sbNSREw+1PSgKKBm=qoQ{X3x(8fi%KW z?!LIE1qr*t+yR3HP}*wiGV|Rtp<-NA9mIr{d(rekrEJ%1V`D?Z)l(I+pkFb^T+Re3 z+~r~+h#YJs;fT^ixiY?**0bXuxh2sU(}*7KSMtwl zyCXJbyWLoINyNdVLhC{D!EuW@=HL!9sMKuTZ15c9j1FRB4?ms$qn+!eR;}GkL)p8M zITuh>%yRxmRk^VF=*`%O4~}3G8#^2Qb$lap;fn@1C5&MOF(P2IrhLXkfiSJQsvbY6 z#O&Jn^u)0&Py0#o?yfCaQ5b!#4ik!sgyQFhv2sGy3u0NHkDf{ISGo|Lj&I@`Tx?b* zglU6Ldc^kP5lR%9^9*JVdk0q%*Tja}GPhgyzFi*Av<1vf#iD6Vxm$49*Mf9KuXX=V z07w(J?0apLC;t7J+~yd$*Y+o9H7;CX)E_|2U`-pX$kpqRRqn4V;d(?!Z;fB@PZ|J^vg z-la~vZY>@66M6#gEbimSxEjt}EDgM_l|8ZMdXfW%D2E2TQu>R+I`RHHg-$=Y&t=aO z^Ve;Cdy#Cq7rjc5zvlIyili+{m;I+3RHgL4n`0xl-Y}K=d+(`- zme1t3f={2(Dvt*n$1rk#pLOrqzEvyzvCjE(a>>=~dA(c5*F0tDUhDAs?Sa<}{W(N6 z*41z-<^5!&FRkon@w@0v0*qOkIsxodisOS}X=I1#<~E1PHlJjlkmmB#u~9#(3EnGw zH}_L5Wv?;+PMpUv&Si(>=T=+;4l$1ZZ=dqWzgNhu=ZbOI=8!CkontAMEJUHih$0Cv zC2i^iu+@7_bN&kqpOL*#{+c$8qr8*NHe(}_Ko9q z7do!TYw7sW1)CZwek|pCF~~A`gUOG>mJEoC+o}hkN8al%!j>_r3By zCs8oLP_zgBzj1usGSJ`Iv}?)Wb*_`VmX6y6Gt^?ql$QoJ8pZ_-fcV{Hdb zI2ITuBYVy9yQF`V=gshi@+edq#knr~to(=eEwx&<_b=I;bL?$$t?52wMgL02?b-wX z-?hCf5B&eR+=jm7(Edg<#HE9$x-@VjTfHA_HzokV8Rfl<<5+decd|4krlOVY-Ebp& z9d`8^7YTD(cPX3ODJwq2P|IGUhJMWTh}FLl&~dr`!urQ}Jg{`)PaH zPahs+i;<@mHqK?+?_J;hSVM3m`}q&@dUa^Ul1kH?$hDC@QRetG2S8eF>I5d_QTBqM z5f|B*w(dr=mVIzlu0_h?Nw-Q)n=l6>+q)#xO~GdkyPaPzoXqw1yOMJ9##?33y&sbD zn~P^CjO;|$rz#b;Sn^}f>#b`YUR$#H8pmye7}7ADTGJ_%EH#`lpa9ZoQztM|kFrm@ z{*?5Gr2oiX=--G!39xP{do$eiIQd=ny5+OdT)Wf>_PHt4{36fFMtKkSG;)7$CSqPbpLrcIuS1G0`K0>n9mn`SSAeZ{%(!JCSQ2jb_StlAUx4z%Z1`=i;FC%q5riQG4W3Z@gBiFgIp7 z_aZTJe_tkIUOu099Wk#%$}Rb%`YnvvT&uZ$Vzo<6UvFlQLVoXIsl1D|v314oJH`8+ zyeOZcI7Y*4HzkTC`#dP_XVN;pe!1nfZXI9i*mkOPe0_7|>j$-7EXjG!l0woKjeEr# zBm3q2nm7*t!*wV3cCt`DlkSCNv>NB?(^Kz4_QtF7%m?F^q-nGKs+vO+bQQ0Be#d`rGEY1mkzJl1P<9rux>hwpmNk{l;^tu)T1ftRvhszP@1GnN1bhRgQ?Yi#XXt{!Ah(7sRp zKPZozFT_)LY@5ps*HAUGh0V_aUo)42G{Whwqvr~D4SgoQD~O}$VIRhEyUUG#FCAa! zlu2e=$9*L4T##F_q>}A*F{T@dR`z`rlKvJe+W=$XbFs$7S%12MiLXW+w=pX`w#|8N zo1s|BUMsy1^m=8W*Fk<-+2b3kU{VHp9bjG2!#KF%^V|;6eU3VQ0!?;z-0%cx+3tB%DUlKLK8c!sfUw z6|P`X1b7V~lvB?qu1g5dcl_oxB2V9&;LsC+B0o!o86HVt4KcWWuTFgs zXB_uauKn5N{O7V?*Ny{)<90!$E|$z>=O-EZSnyV>p*H^$Lv4U5@Ohfd#aS95Zo)o@ zV%OOC{vPRB65dUK*PsXA__Yc<*9{O#U+s^PTM?o=@0E`Gb?I3$$a7`NV#!?6lZJiM z(1@Wnz*PA(`e&l+Zz@;vZ>#Ubjo6r!9^2A`G!7&G2Tw!3zQpn9?T0aO8RBgmwmFx* zj&W%x`(84*=y6}aNL4Jk(r{P2X=P{Qp2?1Z=RygXrdECz^JSPcaH3ZJ!#f{Pea)5sd?nHZizPR*bCe9Nak`T&^87Bl zstvtJ02q&L%Ro8cba(QfzvP{UKZF!k>9MT|lmmX%rcMBZ;nUNTrN1$BuEmQ|{T53Y zhI534q)$EX(?=`Yi=>d9u=Q)gTma<9cx=m!c3QRkyZPU0c!htwbtU)7K%YgiBqraR zSQ8=%0C3RfwLvSl>zTRi#Pz2*b;;m$u5EhKA(ed0Gwxg5jz>wl#rrz;+ZO0SwitMTm}TA;LIpQ#x$Z_YfQ@@wuRnVo4!e zC@Fi`mycFa_zCs+WdX*{-lCsxHt?MD7{ zP_Y`rFx4L0K8s>WY(CeHZKxzL2(C}@CFU$actwJJnx6LKbKYwmw;Sy+oJ#qwcw=Pq zE5wR60Q}s^ugF>l$^&kevIP?#7veY$O(E&pWBWUClNDR(v8@S|1M=rPoYjO#0$5Wx zZs+shW+}U*Z%lnJ8QgK5S1gEF#gbZfGS{36C9PJIwf-sF^_mrJ0EEzZY2ILR1d&nf1iC{ z-*{|WdhXj<$YRM%c7Bp7;A^_-RP?tdrS3oAsiq*S^>$%9tQ{r(~5 zApww1h>1cM0bT>{mhzvd^;{go99_xY82L^VH}qp$>g^5YrR+7_oznLnDCK|idasE- z{fyv7Z+|Zzw3`1fbGlc$;huMzWgT_>R}1MUB0zQvMC{jYel zSs-D#UjVtdlmD>4PqHVa)EA>ubu0fF<(cd?A2Zow`bGYQl6wvR=~}(xzrU01Jz$h( zcup;QJ?VRlYVS-St$LMgI+JbRTG<{vMQ<5dGuhvuZ=qxiJ;Z=*Or+Nhb?zJ7Dsn!> zl7;-o{T_<~34o!vl7A1kORb*Zp?^&FIu19ozoQQUUvJ1t9UiuDDO*@-Ws6Kj)Qnd1 zr-WD-;Hwx`5z1z-l1*o_6RUOwwn}je{4?3}VJlnM^Hm3U4Is1-g@gx%zei5BWbnE{ zJwTkvR{vij$9LHaob!I(761furEqOwtJSjSA@efU$fFLNi)4!(zMoIbC-lZ6 zFB35@pUVr_*eyMC>Ek=rHzT+A{vca8xl))5*11-NtWd{isr-6#84dIMHk14B z$H*SrP($;t6#n;Y0_7Hx(J;R&lHa-erT=t$;rdyWf%e~cgy17Bj zf$fXen7`%`qy6cMFYtG$SIIt?diyMHxYq8H<_Iy<;&hPnIOr)NhI&}iCT8*bi zsFDBm%es)mPahPfcUW&uDVB6A-h}Q3bGH^u&I({Gx~FR)FZeF>cBP1}YvhA|y&>-| zI_IJ|;-Z!GxBP|&oXcJa4t@AWU#=DQ0xyJT<-5f0De8c)b^aRN1+UL#*JFz%mBM}KORb6{Ebj|o z%(~$&u`U+7*Nyc=ed=!I_mow#PvaZ0LdQ^58ve~ysqwZEkD?eEl5cyLv%fX`37U~V zpV1egt`nBBZDWXQPZQuZLP%D0J!XQ}Tlp7C9%P?t%q9Jwr1zpw0$}`>vNtLWD;%Z} zO9@M1$NQo`|I;{buBy}tMDi%xzB0@$jL^MGa`IXE4EF$b3E7sJK(7<}95}cKNBfE; zGuau@UB=vZy+^9o*ZD)XqU*aHBLED|QnpY``!`It@-KE>YP>hBWA$0%C~_6bZ)j5p z6iUJyYp;@jMEi^W6sZ$*_x zQ`hw{8B@VzO1))5JZ-&I9%Gqt*qCmvma^AkWAa({I+a36SVrSIM@hCP`&fI+AWwzk zcA@W=L-YuFR9?eSixfNERxBxH3nhofT(z>}u)C$?y51xA!LkE@@#uP({F6EnPtUR! zphe<5`gAA%bK9Bd20jF1ySZA*7JmNJ@Na~lWrs#piSrmMBYTc|ui-!F{2_Z^(j?9U zI980|DZbY&CPWe&+6b>1)n>7z((V;+)`!*n;`t$4P-qh85sT64MtF$5!tP~;#f>xo00L@BL_t*ZAH&e7+%>Z8 z{NEbhc}lVmB<336+z1$joX+vSy-Q-u+0}Y%o8+@yFP1Fyb|TlVIMOYDxjwXJh$mVA z$im)acjZ$Uhp!2^9c_ zWGUO;{;vGy6nK`+=?_h}C&@N-fY)HM*L-}H{ryex=Bkms*84+w&M)_LdVQ;tJV|(pJ(-f>>%b4^;~F zp4<*aJ&-)tKWpD7B*tU^#&h5Mr1Wqgi_dNmt4tdaOId;ijgwAE3qRnM5P>;PR?Yd33uVL2yjMH`9(m#2= z&Ij2iK3w$sd)Df6e2_gx53=8JK3_LRZ!ebD+n=rta%qQ*R>#Ne`pX!M%_5s*&sW83 zl&}A-&~d%kf5`rBH-E$Yjxhu|%~#Sf4%_6mWN=dd4`D^$4_=`<#{d8T07*qoM6N<$ Eg3XGF=l}o! literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/chevron-left.png b/plugins/web_gui/static/img/chevron-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a1209d12544a447b78d90864be9f2f61b94924 GIT binary patch literal 1368 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?$=J}u$;8Rn(#aec>aNC)29{=)hHe(dmc~Y= zE*2Iry)OC5rManjB{01y2)!ma^@5T@ZUN9{m(-%nveXo}qWoM1u$Qeeal6G3r+HAl zDY)HYgj26R&@uX;h((HMm=G}afSB-P3*^8Perg^twHE=Cb=kgG>lqjr&v?2xhE&{o zGQ-#Fu!G3)&kMIsTN1hRBZpINHN)NpYxA}999{^rxPD;CV`=8dTXmNs@5o&7fY)9z zFIGuU|GS`tW9|P&ou(USs%LuYSbVsB#%FT;{n<139GT;{{FsgD=^2}+O`X8)cR;#= zLHdgPtW8svdSps&akRbmo%Nf~=M+cjE9pJ@P1D}g zac|;0!lCM_c5hnF?J!}bHHwPGtXV7{Pp?rvGSN~;towT;*TxjDrIY+m)v?Qp zS2}xHq_d9X_0rmNI}i2>c(ZLt*&!%obbZ0BsXXdVJ5K~CPnpdV`a(lrGVA9?&l$zb zoZGa%IL^4tFm+E0-vI}s*$J+%S)nQ^>O%7$fQ6ZB8mTU_+wojY0HPNHfB=ps?0F5mrxxZC*E%3Au3Y#+j zTgBxic>)_VW>50C`|PjQ+$sCG|Lpv`|Hq94m#>#CBSfb&Ecdv+aa!*B3)2ot{a~@p iWq-W?f73VJ0}Kb{-&m}6D&GMr>pWfkT-G@yGywnuqwe(p literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/chevron-right.png b/plugins/web_gui/static/img/chevron-right.png new file mode 100644 index 0000000000000000000000000000000000000000..61de8865bf010a083e22408c727adbd9626c1195 GIT binary patch literal 1442 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?$<@HZ+{n$?(#aec>aNC4rmn`WrcOqd&PHzL zMoy+My)OC5rManjB{01y2)!ma^@5T@ZUN9{m(-%nveXo}qWoM1u$Qeeal6G3r+HAl zDY)HYgj26R&@uX;h((HMm=G}afSB-P3*^8Perg^twHE=C_2X4f@);PI#5`RbLn>~) znQ_{SDNy3Ltf`bs!5)_i@63y<#5r!2-@VH165_^xVV&!Gfs&isIGxNJqXKr{Q(WYm zcdWOospH|=|DA>|&p-9fn;BE`;P{I4XCFRW-#=6HoMUg?c|+f`FK29W6OCfxf53dF zsd9A-%U;dkU(*iSPGH+*caTrx6`vkQP3x|^c`WVE6(u)Kx%~2pb?St>>_U^n6giC) z)?7Sq-!7miXi?(P#KW=rYq9vD{d<^o*K$a>c2x(N&-N|5!8ZLsuE8}Azs^M`!dG0( z_+sCu`t)PP53Z}PzaCs4{h&)@D|gEJ>!)qo*-kczWC#~&@haUZUJ<=;IkU9#GQ zH0PgJFBV=EwmK?S`oS!P&;(0W&q-%oR|Ktm5xbi&Z$(g}gTu4A&WCN9ln)ha9h?{Z zw8%1NYe4*~2^yt|;kI8`&T%|nJH=~hq;<=q2Q3A0h9X?Gk-A4xj1In#$7`fm?!ySuq&eBthPMJh%IrmP;H4;&jFPs&n)2KdmA&2aP2^+lICOH?Eoszib zJl8KhG}0~mE?fh}=O2-9li}do_0=g5JDyQy?KbBQhdgg#u3BO1K&%J}Q z4t9NGcd|8YN=Rxwxh+BLptSb(|0&kb>e+eUMmI1rB!9Ag94~OD0aR*wy85}Sb4q9e E05!%6pa1{> literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/devoops_getdata.gif b/plugins/web_gui/static/img/devoops_getdata.gif new file mode 100644 index 0000000000000000000000000000000000000000..891304ad26e0ec88696ef75a995abd2d9b6c582d GIT binary patch literal 2892 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 h(J5^}y^tW9gzF|Zu6%!1{fY5^_cK-kzHu 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 Sp#SgRYMN@gs#VIium20kP#JFk literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/logo-200.png b/plugins/web_gui/static/img/logo-200.png new file mode 100644 index 0000000000000000000000000000000000000000..551b91c8b7c5ed9ed44574a6a3c5f2e35aa69f9b GIT binary patch literal 2872 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 OH!?dht-iWF|L_m~ zH$YKTqByCQ$#{l*L-Bs{|GgtzB*R&pui_b0$4$eB)P#j<5ELC_4wj)|EiZnAV-yvm z?Mf9_^(omz4r4?ZCUiW)rl_&;&@;?=h(Qg`*{(wWeEW_Dwx!Us8J*KT6*lb26(7#5 zOjpd6c~i3J@ylQ=l!<@?u>nG7!42e4pl_ZE{uDwN*kqaV4qlT8SLX%7nj^KD*SvP2xi4=?t z4Ugp+E;>>NsO$fSI!+fI;4(bS_n*Q+W!Zyl83t&{H%a5_!%-+tR()t-OYsSZ~|=8^+l+~Hb>+-y&7WCh0~ku~Vsx1d$Fz) zGoD>P_H=7|JO1M3-6zM_p090g-+uU|Qu?vQ4SBKMYmc}KdqX!)iVxh8_|YS~?D_sX zR4woaKS1v575wdSZRE{+FE*MvUH_$8u~mM3QFwMDq4pgaq^{rpL@D1lxacw#^V8a^ I+|7G`0IGFBUjP6A literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/sort.png b/plugins/web_gui/static/img/sort.png new file mode 100644 index 0000000000000000000000000000000000000000..337ff81f9083e87e82f6d3f62fe64edacf629b96 GIT binary patch literal 1060 zcmaJ=TSyd97#;|_7>0=k_B4(tO6|;?y}2{EiM!)v%Q0COTzbiI=IBm3bHmf?0CW|&TCpKjuc0nT#|)(h#-XAO_P>C& z6t#!Z6G@zuTSOHZtm0zWjA0QrMb*}2EJf{wnC^l-x*29RmY*=Ru7#P7fXvHQ6sGj% zAse<2wI?d5@&%JToAhOvWoa2)RD`%hsfF=#<94jnXLtE6$=Cm#t!33Ss1=kVQw^gLGAgZfYp)RBz&CS&W$uR!kMfq%cDiSY6jd$rlI#zYrAs zyZ}IhFX9b_gs3;<^8r5qk@_rGLh674O`PRwyWE_ZPqJ zELekcFW;?1E`BsFADo}{fvz~a2>NIJmBUw0O^IbcZ{5Cm=h;S4!vq-PDnd^y2U@CD z&y~j3^M2&DM5d<~r^c+i3&|Dk-r1?sbC0XowMo9||k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpgi&u1T;Y}Gc(1?+1%35!qvdo(#aec>aNC4POh#NCKit7F2-&K zZm#Aqy)OC5rManjB{01y2)!ma^@5T@ZUN9{m(-%nveXo}qWoM1u$Qeeal6G3r+HAl zDY)HYgj26R&@uX;h((HMm=G}afSB-P3*^8Perg^twHE=Cb$nvVF9rrC4o?@ykcwMx zrf>8*>>zP`_O&1l#VKVg?lw(M5dUggVi*xq%j{b4ol$GYO8yIcLE`L=;q3Pn{4On& zk_qz8;a+O;wf-Sf<_XpE%n3@CKMHg8uK)S*?%nU8OuPB%VJlOOwXX#&40*A><=X+} z9ju{^_op9JtzbGHV|-#G|DkQU)0ICk+G*-9cqN&x*vx+3=8)v;N~A<#X9DcMN1B)+$o!Q{&{{&i`wLq#=F*b zh<^9}cw$1DC|B#*1&yZHc-EBnJ7+MLthmw<+_q)jhe^Echf7PoJ3Osm=)7XSyoZx7 zHL^}vXp>HNiK!H$=|U6d6sfL7FAfPx@vyx+zGR8a%%GJ^+V36_dG-DGz4fQPERCKP zMfT5KS<88vLF$E@>NWwmdNE^J#9~3;X@c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcW@2jT>SAncX>Mw6Xy|I}Xl`cgW@+kb=xAnU zW^CXF)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSs&<Gadh9E-^t^<0ENqH;M>Qr{tE!ekIgUx|glO^b)2Uk3kA-mpL z3AP6YERsG9tKyr?Wf?@jFt1FFF!6V}&eQKE6Bx#FBz=K}*mNtmno7nOvi1sJSy!aV h`oLWN<6$z**UXRGo_2AxP?SCrm+E?LY7c zR#B9P*3ucAk#-6S(gU)K2{^h**c4S&U$GUKpI zYaFm(>p*i_8R%A`DqT|zsvLm`=n%`m(R&PAaANeFu0ZDQHba9s2=0#2^GRi-77#}k z1d%|&rKZ0&9 z${O}UnMlDHM>ZKY5Oj}}14`2Wp}M|^ws8vn$@ibacDmn$ObXhl*HTF1I!fJ8rVzKF zjFFW_s3%v&mM(;m-GxjLZ{w{{8g>*1? zWI@ZH3!7JOfve`vh0DujNHUDu*uNT`+am69r;D~Fi$&u@gSg!ywjMrr`zyH;50heD z+IiXjV|KR2vvqLA@PnzTt4k(d4LX9?Uae52H;V^Hrak3*%f7AgzN6mUTm7*B+&VEi z?U^aBjo(hPVHq)$ literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/ui-left.png b/plugins/web_gui/static/img/ui-left.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7e49f84f09395118a1d96fd1197b90a03b128d GIT binary patch literal 1085 zcmaJ=U1-x#7)=?IIT&s*)QR9VMO3g!)3vb;jqBQUwrb|=3acn%X>zxQEx9qdwcVJa zPR9B$@Ig=%L}k7T6QA_K3H1+@DLzen7JO3JYh~VS>-51IlH4E8Ip24`@7&5j|M9lg zJ*^Z)wWU*1hK%j**RqZL_pPoeWaz@l93DiYxTM&S>eWylg0!KG!3842kc>aP0x+c;?A=xim30TlmQ#Kr& z>d&fE<7z~sdyau^=-x?E0Hc>YzZt|DwUX0 zH-qdkmWxCpu0|l>BM6@}X=0`9GaYYTL4uBI>lW6L30y@bkBV5NNv0b|FsvxQy~gbfvp>?}eP z^(qb&5JpY`Ss*dUgF{2QsiBf{cpWdxLfUk&VyZALi8N7QbX^l7JTJxL34i2hfakbm zcRZZr!$FP@^9imm%!le+38_T`nz+u@{&2a5T-OSQMIuYk)-OV>&qfAVKeC`V%q5;| zsJF@08s-x3Ysh6uGOXL!zZzZNBJOdgTec;OE#pIzxZNhUe)-D#lU#|#wA7m|f63R@ z)_R%_T&bjrE3xU8xtWg#c2}%kPy3tL%G!h3=xq8)`^WPw)laF~tyt||j=evA*;D-< zt2LkPV0LwSE_CkvaJsTxdKgl>mv+djC#UZ$cKvLgU-neLE-cJkibXpr%R8!{ujb}& zUVnPKGhrpYZ*Ocb%)Y1c#mrzn7!;S54i-+-ViUu;*6Od+Gy}d#XFRs2BiuPR)U+r* f+v|O_(gl{N^RLg{9cK5BxEDH|?3W(LN3Q(_SX^K- literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/img/ui-right.png b/plugins/web_gui/static/img/ui-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dba43d67926337a853f43b93e74864aba012daa8 GIT binary patch literal 1104 zcmaJ=TWHfz7>?FW-9@UP&I_1jh#T0XN!QGVb!*qOT4v_x3id(4G&x(tmYkTJ*=!&b zQQQWCh&MLyO?^?TZ&L?~^hHomlsPXCGJNty)E5P1p3HUnU=2ymh41_R|NQ@V#(R7A z*4J#UAqb*Axlc^t(d&L|s_}ov*9935TTncM`d~lG%N8J_D$D{hsmlW(1!Q&P=wr}M z5FScPXHZ7kFDOu_Wfwy`x{28Y(cbBpvN8w|nFRxy5vD%fe?XC%8m0~gCBJ0GKu+5? zYJtAdp0qMLsDxCivx97R1T3HfB$JLlWY~ferWSPtJa@Mlid=-C!7%kZsf^T1#-Ihr zARX{2ewHP9o@QHvJkRbXIX}xWe*E%2wp9r70@p?^Jrs^+sr^DqOf1F1t1y*A$P^eR zpU>0z01d4Hh7E;6t_H{XFv4e#7)W+}hTT+F5P_{&nu#=MkglSfg~KRJ;Y@!YK{uCW z4ST6fxL}MUn+!|)-6NHOlJtM5t}ml)lmdV9{im><9x(xv0yZ4B6x_J}CO4ER#4I2q zXr&<>Dp#>L2NAS$&?IAhJlT9uGgO$jTNd$>BqR+R$%X=wVwl1Tw5F+o$cMyeA{Yp@ zaXib$10j)(#e#`ww5`?Oy=yM=9i^xTyT_)3(LVl?f% z$^KYa==AI?tUXg)QF>c&1h2hbA(|#@XFYdzpFh5K%r1P})%6bLgT$KK zD_Lf8t}Rb!{;hb9gL8VV_D!^Nukc;sDOX((r9*ruzmw~!Bs)y2bw?&9-V_l_syJ>spdBPV_V DZ>4B< literal 0 HcmV?d00001 diff --git a/plugins/web_gui/static/index.html b/plugins/web_gui/static/index.html index e4edde8..d489530 100644 --- a/plugins/web_gui/static/index.html +++ b/plugins/web_gui/static/index.html @@ -1,197 +1,131 @@ - - - - - - - - - - - - - - - - -StarryPy WebGUI - - - + + + + + StarryPy WebGUI + + + + + + + + + + + + + + + + + + + + + - -