From bf00f463410b60b8d57519ce8a6ae58653b057f6 Mon Sep 17 00:00:00 2001 From: qt31415926 Date: Mon, 25 May 2015 00:27:11 -0400 Subject: [PATCH] using grunt, added reason tracker prototype --- .gitignore | 5 + Gruntfile.js | 54 ++++++++ background.js | 15 --- js/controllers/altController.js | 64 --------- manifest.json | 33 ----- package.json | 15 +++ background.html => src/background.html | 78 +++++++---- src/background.js | 41 ++++++ options.html => src/blocklist.html | 2 +- {css => src/css}/angular-csp.css | 0 {css => src/css}/bootstrap-theme.min.css | 0 {css => src/css}/bootstrap.min.css | 0 {css => src/css}/main.css | 14 ++ .../fonts}/glyphicons-halflings-regular.eot | Bin .../fonts}/glyphicons-halflings-regular.svg | 0 .../fonts}/glyphicons-halflings-regular.ttf | Bin .../fonts}/glyphicons-halflings-regular.woff | Bin .../fonts}/glyphicons-halflings-regular.woff2 | Bin src/img/128.png | Bin 0 -> 15531 bytes src/img/38.png | Bin 0 -> 2153 bytes src/img/38unhappy.png | Bin 0 -> 2109 bytes src/img/38unhappyorig.png | Bin 0 -> 2244 bytes {img => src/img}/add.png | Bin {img => src/img}/codeacad.jpg | Bin {img => src/img}/default/happy0.png | Bin {img => src/img}/default/happy1.png | Bin {img => src/img}/default/happy2.png | Bin {img => src/img}/default/happy3.png | Bin {img => src/img}/default/happy4.png | Bin {img => src/img}/default/happy5.png | Bin {img => src/img}/default/happygrey.png | Bin {img => src/img}/duolingo.jpg | Bin {img => src/img}/gkeep.jpg | Bin {img => src/img}/khanacad.jpg | Bin {js => src/js}/app.js | 0 {js => src/js}/checkerino.js | 10 +- src/js/controllers/altController.js | 124 ++++++++++++++++++ src/js/controllers/footerController.js | 22 ++++ .../js}/controllers/headerController.js | 40 ++++-- {js => src/js}/controllers/popupController.js | 0 src/js/directives/directives.js | 8 ++ {js => src/js}/fuzzyset.js | 0 {js => src/js}/popup.js | 0 .../js}/shared/angular-file-upload.min.js | 0 src/js/shared/angular-strap.min.js | 10 ++ src/js/shared/angular-strap.tpl.min.js | 8 ++ {js => src/js}/shared/angular.min.js | 0 {js => src/js}/shared/angular.min.js.map | 0 {js => src/js}/shared/bootstrap.min.js | 0 {js => src/js}/shared/jquery.min.js | 0 {js => src/js}/shared/ui-bootstrap.min.js | 0 {js => src/js}/verify.js | 55 ++++---- src/manifest.json | 37 ++++++ popup.html => src/popup.html | 13 +- src/reasons.html | 43 ++++++ 55 files changed, 510 insertions(+), 181 deletions(-) create mode 100644 Gruntfile.js delete mode 100644 background.js delete mode 100644 js/controllers/altController.js delete mode 100644 manifest.json create mode 100644 package.json rename background.html => src/background.html (59%) create mode 100644 src/background.js rename options.html => src/blocklist.html (98%) rename {css => src/css}/angular-csp.css (100%) rename {css => src/css}/bootstrap-theme.min.css (100%) rename {css => src/css}/bootstrap.min.css (100%) rename {css => src/css}/main.css (82%) rename {fonts => src/fonts}/glyphicons-halflings-regular.eot (100%) rename {fonts => src/fonts}/glyphicons-halflings-regular.svg (100%) rename {fonts => src/fonts}/glyphicons-halflings-regular.ttf (100%) rename {fonts => src/fonts}/glyphicons-halflings-regular.woff (100%) rename {fonts => src/fonts}/glyphicons-halflings-regular.woff2 (100%) create mode 100644 src/img/128.png create mode 100644 src/img/38.png create mode 100644 src/img/38unhappy.png create mode 100644 src/img/38unhappyorig.png rename {img => src/img}/add.png (100%) rename {img => src/img}/codeacad.jpg (100%) rename {img => src/img}/default/happy0.png (100%) rename {img => src/img}/default/happy1.png (100%) rename {img => src/img}/default/happy2.png (100%) rename {img => src/img}/default/happy3.png (100%) rename {img => src/img}/default/happy4.png (100%) rename {img => src/img}/default/happy5.png (100%) rename {img => src/img}/default/happygrey.png (100%) rename {img => src/img}/duolingo.jpg (100%) rename {img => src/img}/gkeep.jpg (100%) rename {img => src/img}/khanacad.jpg (100%) rename {js => src/js}/app.js (100%) rename {js => src/js}/checkerino.js (95%) create mode 100644 src/js/controllers/altController.js create mode 100644 src/js/controllers/footerController.js rename {js => src/js}/controllers/headerController.js (76%) rename {js => src/js}/controllers/popupController.js (100%) create mode 100644 src/js/directives/directives.js rename {js => src/js}/fuzzyset.js (100%) rename {js => src/js}/popup.js (100%) rename {js => src/js}/shared/angular-file-upload.min.js (100%) create mode 100644 src/js/shared/angular-strap.min.js create mode 100644 src/js/shared/angular-strap.tpl.min.js rename {js => src/js}/shared/angular.min.js (100%) rename {js => src/js}/shared/angular.min.js.map (100%) rename {js => src/js}/shared/bootstrap.min.js (100%) rename {js => src/js}/shared/jquery.min.js (100%) rename {js => src/js}/shared/ui-bootstrap.min.js (100%) rename {js => src/js}/verify.js (58%) create mode 100644 src/manifest.json rename popup.html => src/popup.html (66%) create mode 100644 src/reasons.html diff --git a/.gitignore b/.gitignore index 3819313..ecc56ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ *.swp *.swo +dist +node_modules +tmp +*.pem + diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..353492b --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,54 @@ +module.exports = function( grunt ) { + 'use strict'; + + grunt.loadNpmTasks('grunt-crx'); + grunt.loadNpmTasks('grunt-contrib-compress'); + + var config = { + app: 'src', + dist: 'dist', + package: grunt.file.readJSON('package.json') + }; + + grunt.initConfig({ + config: config, + crx: { + testPackage: { + "src": "<%= config.app %>", + "dest": "<%= config.dist %>/crx/", + "zipDest": "<%= config.dist %>/<%= config.package.name %>-<%= config.package.version %>.zip", + "privateKey": "<%= config.dist %>/mad.pem" + }, + }, + compress: { + dist:{ + options: { + archive: '<%= config.dist %>/<%= config.package.name %>-<%= config.package.version %>.zip' + }, + files: [{ + expand: true, + cwd: '<%= config.app %>/', + src: ['**'], + dest: '' + }] + } + } + }); + grunt.registerTask('updatejson', function (key, value) { + var projectFile = "src/manifest.json"; + + if (!grunt.file.exists(projectFile)) { + grunt.log.error("file " + projectFile + " not found"); + return true;//return false to abort the execution + } + var project = grunt.file.readJSON(projectFile);//get file as json object + + project['version']= config.package.version;//edit the value of json object, you can also use projec.key if you know what you are updating + + grunt.file.write(projectFile, JSON.stringify(project, null, 2));//serialize it back to file + + }); + grunt.registerTask('default', ['crx', 'compress', 'updatejson'] + ); + +}; diff --git a/background.js b/background.js deleted file mode 100644 index 3c17a88..0000000 --- a/background.js +++ /dev/null @@ -1,15 +0,0 @@ - -var currTabs = []; //TODO add additional information to these objects, e.g. time -var prevSite = ""; - -chrome.webRequest.onBeforeRequest.addListener( - function(details) { -// console.log("Is this evenf ucking working details.url: " + details.url); - prevSite = blockChecker.getUrl(); - return blockChecker.redirectOnMatch(details); - }, - { - urls: [""] - }, - ["blocking"] -); diff --git a/js/controllers/altController.js b/js/controllers/altController.js deleted file mode 100644 index ab12da4..0000000 --- a/js/controllers/altController.js +++ /dev/null @@ -1,64 +0,0 @@ - -app.controller('AltController', ['$scope', '$modal', - function($scope){ - $scope.bools = {}; - $scope.bools.addingItem = false; - - chrome.storage.sync.get('alternatives', function(items){ - if (items.alternatives == undefined ){ - $scope.alternatives = defaultAlternatives; - } else{ - $scope.alternatives = items.alternatives; - } - /*console.log(items); - console.log(items.length); - console.log($scope.alternatives);*/ - $scope.$apply(); - }); - - $scope.deleteAlt = function(index){ - if (confirm('Are you sure you want to delete?')== true){ - $scope.alternatives.splice(index,1); - chrome.storage.sync.set({'alternatives': $scope.alternatives}, function(){ - console.log('alternatives saved'); - }); - - } - }; - - $scope.switchAdd = function(){ - //console.log("tis workings? " + $scope.bools.addingItem); - $scope.bools.addingItem = !$scope.bools.addingItem; - }; - - function newAltObject(text, href, imgsrc) - { - this.text = text; - this.href = href; - this.imgsrc = imgsrc; - }; - - - $scope.submitNew = function(){ - /* console.log("does this function activate"); - console.log("new alt text: " + $scope.newAltText +" new altUrl: " + $scope.newAltUrl);*/ - randInt = Math.floor((Math.random()*5)); - $scope.newAltImgSrc = 'img/default/happy' + randInt + '.png'; - var altLink = { - text: $scope.newAltText, - href: $scope.newAltUrl, - imgsrc: $scope.newAltImgSrc - }; - $scope.alternatives.push(altLink); - $scope.newAltUrl= ""; - $scope.newAltText = ""; - $scope.switchAdd(); - chrome.storage.sync.set({'alternatives': $scope.alternatives}, function(){ - console.log('alternatives saved'); - }); - /*console.log('loggin in submit'); - console.log($scope.alternatives);*/ - }; - - -}]); diff --git a/manifest.json b/manifest.json deleted file mode 100644 index f85304f..0000000 --- a/manifest.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "manifest_version": 2, - "name": "MAD - Mindful Anti Distraction", - "short_name": "MAD BETA", - "description": "This extension will hopefully help you be less distracted", - "version": "0.2.1.1", - "background": { - "scripts": ["js/shared/jquery.min.js","js/checkerino.js","background.js"], - "pages": ["background.html"] - }, - - "browser_action": { - "default_icon": "img/128.png", - "default_title": "MAD", - "default_popup": "popup.html" - }, - - "web_accessible_resources":[ - "background.html", - "css/*", - "js/*" - ], - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", - - "permissions": [ - "activeTab", - "webRequest", - "webRequestBlocking", - "storage", - "", - "tabs" - ] -} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ab87e47 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "Mindful-Anti-Distraction", + "version": "0.3.0", + "description": "Chrome extension to help curtail poor internet habits", + "repository": { + "type": "git", + "url": "https://github.com/qt31415926/mad" + }, + "private": true, + "devDependencies": { + "grunt": "^0.4.5", + "grunt-contrib-compress": "^0.13.0", + "grunt-crx": "^0.3.4", + } +} diff --git a/background.html b/src/background.html similarity index 59% rename from background.html rename to src/background.html index 7fbc33e..1a428fe 100644 --- a/background.html +++ b/src/background.html @@ -23,12 +23,14 @@ + - +

MAD: Mindful Anti Distraction

- + +
@@ -36,16 +38,26 @@
- + +

{{ newAltText }}

PREVIEW

@@ -74,8 +86,10 @@
- - + +
+ +
@@ -100,30 +114,46 @@ --> -
-
-

Read and type the text below if you REALLY HAVE to go to your site:

-
-
-

-
-
+
+
+
+

Read and type the text below if you REALLY HAVE to go to your site:

+
+
+

+
-
+
+
-
+
- - + +
+ +
-
+
+ +
+ +
+
+
+ +
+
+
+

HELP IM DISTRACTED

+
diff --git a/src/background.js b/src/background.js new file mode 100644 index 0000000..5d59437 --- /dev/null +++ b/src/background.js @@ -0,0 +1,41 @@ + +var currTabs = []; //TODO add additional information to these objects, e.g. time +var updateInterval = 5; +var cumulativeTime = 0; +var totalTime = 0; + +function updateTimes(){ + chrome.idle.queryState(60, function (state){ + if (state === "active"){ + chrome.tabs.query({ + active: true, + currentWindow: true + }, function callback(tabs){ + var currentTab = tabs[0]; + var regexBlockCheck = (typeof currentTab == 'undefined') ? false : regexMatching(blockList, currentTab.url); + if (regexBlockCheck) { + totalTime +=5; + cumulativeTime +=5; + chrome.browserAction.setIcon({path: 'img/38unhappy.png'}); + } else { + chrome.browserAction.setIcon({path: 'img/38.png'}); + } + }); + } else{ + chrome.browserAction.setIcon({path: 'img/38.png'}); + } + }); +} + + +chrome.webRequest.onBeforeRequest.addListener( + function(details) { + return blockChecker.redirectOnMatch(details); + }, + { + urls: [""] + }, + ["blocking"] +); + +setInterval(updateTimes, updateInterval * 1000); diff --git a/options.html b/src/blocklist.html similarity index 98% rename from options.html rename to src/blocklist.html index dfbfba5..172cf96 100644 --- a/options.html +++ b/src/blocklist.html @@ -34,7 +34,7 @@

ASSIST FUTURE SELF

-

Simple Domain Block

+

Simple Block

diff --git a/css/angular-csp.css b/src/css/angular-csp.css similarity index 100% rename from css/angular-csp.css rename to src/css/angular-csp.css diff --git a/css/bootstrap-theme.min.css b/src/css/bootstrap-theme.min.css similarity index 100% rename from css/bootstrap-theme.min.css rename to src/css/bootstrap-theme.min.css diff --git a/css/bootstrap.min.css b/src/css/bootstrap.min.css similarity index 100% rename from css/bootstrap.min.css rename to src/css/bootstrap.min.css diff --git a/css/main.css b/src/css/main.css similarity index 82% rename from css/main.css rename to src/css/main.css index c1b8a87..a35c990 100644 --- a/css/main.css +++ b/src/css/main.css @@ -52,3 +52,17 @@ blockquote{ .modal-right-button{ padding-left: 0px; } + +.nice-form-control{ + margin-top: 20px; + margin-bottom: 10px; + font-size: 24px; + color: #337AB7; +} + +.restrict-img-circle{ + max-width: 150px; + max-height: 150px; +} + + diff --git a/fonts/glyphicons-halflings-regular.eot b/src/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from fonts/glyphicons-halflings-regular.eot rename to src/fonts/glyphicons-halflings-regular.eot diff --git a/fonts/glyphicons-halflings-regular.svg b/src/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from fonts/glyphicons-halflings-regular.svg rename to src/fonts/glyphicons-halflings-regular.svg diff --git a/fonts/glyphicons-halflings-regular.ttf b/src/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from fonts/glyphicons-halflings-regular.ttf rename to src/fonts/glyphicons-halflings-regular.ttf diff --git a/fonts/glyphicons-halflings-regular.woff b/src/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from fonts/glyphicons-halflings-regular.woff rename to src/fonts/glyphicons-halflings-regular.woff diff --git a/fonts/glyphicons-halflings-regular.woff2 b/src/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from fonts/glyphicons-halflings-regular.woff2 rename to src/fonts/glyphicons-halflings-regular.woff2 diff --git a/src/img/128.png b/src/img/128.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e22e9d46e2fa0454982c355b4cdfcc14b1eff9 GIT binary patch literal 15531 zcmaibRa6{Z6K&57?(Q-Kcemi~8X!0XLU1SW5o87pkPzGxAOs8U8enh_?lM4-;2s<< z|GJO&;Xd@KemY%yb=9ujRehp$wN-GjsIUM4z*SRK)PJ_{|6Lep&uh2zn_&Qu^iorl zGx%@uFbMNMgRRS8gYXfQgc6xFQ)gFa=kmOn4WoTiQaK|f6hZOfVKyF)*1J0x-f40tT{2em!}&->qy4pkRr?5F%Ipzmo<>zDZmK??@e+ zw0n0rznQ3i?`mN-H~arF9iK;Sd!@d$%fQ-|M2UvW&$&Omd}(^I=;ZF1HXQgVz*uC_ zc)64`I8Np&(|scA>b+<6xciFJ#6#3o5;^VMN}>H+F7of_aOYXxmGMNjub6=kw}Y=A9YYhR(VC|ijg~%zh!AJm+(g`ZFG5iZ})7;(5N;n(o&^$ z$++U&e8IctgV{r^2BD0D;n@% zsefUjA6S|di{~bi>QR3rH)(;w3-C4)nNO!y)7mw~Vx1`!{uFOgbGT?xkoc?0WCb(;C4+&c3wQ1cUKC!$q15xd4`7Dz*5<@@mL2*!O0&iEi=|pa$-9-GPZMqaK zvYJJ7_VG$>th699$dw9v9KH9nW_80cZXTAtpQ^T{va%HhvKgWVkQz{e5WQO4OtqvKyWJDbrlr# zU}hN+cg}c`wSq~|h!yG4IMq1e|CU&x%&)Qb!>fQJpLUC-dN-a~sYNSy(>xfQYjnlJ z_}eNX^{8%IURTuYYNCpLKx`d;7TT77fb!Ep-^Cg4^TpzLBC3Kn)naDi_$#RpMJ)k9A&mBrY#?g^PXEkURg~xs^)By;gzPbLpSY4|rKux3)V;46E~%=cAO3 zLOWtth}dp~FwhxNQz{q1P2kuX@#qB!p6y;>(~W ztEY`!RHOGMy&OV@&EK0B$;)>hCXDDI3a>amGvy)$h!lj9Kj!f{OKJCwD8r9SW9}G4 z*9%cnVo5lAnwL!5CxdDK8CeWH=uqQYs>s^e3x6UVBb2zaD7+~@f+?xrzepxOQW2bJ zsb+q~wmhGxfTd1^<^FR)HO5k514^=J(2k;IhpoEJu76AX@R0D9he`tm&Cn9Sj%5~9 zYiGy^>D$(ioNuuh^cM!bl3^-*vL&V4hdO% zV{iD!3F+-6F}&bgEr-6fbU968T=p($GRuGbzZ1!W59^8tamA%E%*e0mSURkOB(tmf zt+8c+1vXouEha9SJ*L4G`VRuQPz)TqPcPBs2d`M5*P?^3Q9^kqbonS_Z*qQ|jwlLk zX(@U?n%5Z~g{}umhQRZ;+4z-EeisB-kM->+e$K4|MQe>=@CdwjTw#*;^}M;1QcMB4 zdF7@nLmE56Vm89MayaFO+%*-wV=HZT<<}d!>^W^JRST4R0`_*W*hpj@I&;Bq+5vgn z-8k9`xvI{_G*Bms&^Nlc!ULW0uUEK>L-#1ed>F==!}xy`H#ODOj!A_vP%)&O)hzX} z)sLP&)raB!d#R-~w&zF{EOMTyaaF*CuW z60&H^Hhif7ALHzCkRm0R-~F7-9oT(|0|K``F{I_DdL#_XSzX~TyZXc)>^IME=uG&W zW_%-=*wNopCPOBdUH|v}7peX!9#w=yVp$;tJhZ)}UVql{ZTVRS2G;B02WBXfggHhy zvw(8C&d`%uOSpDATuzrw&LdSeUIjY9Oz<|Anc%bH`A__b%tnGpFD#1EypT*=2X2|r zbjY7-$4dy6$hhnJ4LV(%@TUv19;~M=y>^9<9anX8V_VZ-IRD#!y&5r)t26Q6WBLFx z*74K8VSbVUh@I@$ONxgJanW(=}>bOKEV zf_P4`B2QFtTTGNqyh#~l?>%$}@k{o_-_2dRlz0aHgw#w7g29*#0r!SRBn2n?3xpEni{tSeca$Q z?3Ga4Y9Ufx&TrBs+N#l91-#Mo(q>_&2;*I4g$|HFWyFSUGdBna#|f!hiYr_3jNK zz5N@Shb+)OH0a-a>H63h-`ijyk;S&E!I4SY9v!NfI?7U`MiNP4!rSrZ=NmL~PZwrw zKGe<_Y}wrWXc@MM@7SST>@VnaYeSV2NC~jts*|bGeuqOnp{7a7ogRyNAUQj(Y8B|0 z18N4A%*{HVFQqHAF#Q_H3aq#6Tf@-KKriiU{r1W!Mz(=V$GEd4s=Nqhfd|Xt!19?^ zN0Lg8Zz%^_8wwkocArQtVf4*o?@npAT1}zF6>koEp$>lN*uwRp;)fNoRk8_tSUkPp zWXk-&s8r(PAD7qAM11Q3b44iBPnS@Ozb9A`^)nf>TL$L0d29F6+zk=fx@MK{`nQ_w z%BMuGjtoZ_qf+P1LRL@sr@VXBvn#w%U*7V-D{T_ql;BmJA)`cBmKwtZQyEMwR2*8_ zad@sNYUiFWfe%Wgleh^rexRQknXYXJ3n8|yQM^2t#~GxK1y8{l%rAEjrO+NVO3#%f zy1aQ5`(-coHI?((DFOto+R*X43yLfQ=z|M3klre`Km4`f$~X$gMy0!VXZZlXc*kWSq07~iKii@*Q0nW z9`To8VI}i2PgHXeBNI5dE6))N+nfMfS2=!=iw}$YCq28HY!!k4jF7FPr3Dm*G{K#E zxm-l`MSkmRvyBoQA7^issPABp!(WY9>@hf zrF7^Uuk{Wg*+>eFPsn07)H>g{P8c6S&K&f{W`ty$}~ zfGBYqirt`&>42>Ba)869Aad7SB{ zvA-XihQ;q6g57glgwjLXeG+y=UyBW8h?ieh5~Z?Yz3gHQFgLyF+PiAtTpmZfs*__v zXD<|Ed*twfOXC|L#___X5(yi!_(G_Nn;i8ORbJAg*BJ=Nrj+Go)P!z(W$SP2pI*IS zba2QKPJRzsN9)UK0%hRx0Yq%vpY4GQ6|?CjK1JMc{<#!$Ig$`4nWr4FQthYWc+>rV z8UN^3r_FM6($9n8_rZie=0Co8oO1k~w-sZ5A;wE?z)=RfVJ<^j6uM>!)m3s>Reyl6 z&&*SVNA5kai8m7an*^(B{8QeG9u@o6OsZt>w;qUk?5zq?mJ0dKvql8fwGF*ItjI0z z%Rn?!75Iw`NYqp8MxV!%2%_)y??8Fqi>T|2$teuF2&Ii4EaN)VhTvr2nvzB0}yI{7Kxp>Wd|Df@C3^tR~6=F^zK$X8*??nwOJRtQ=y z{b26*Fn-s?|C*Xd`lG{Riz{COLJ@4xc$aZdsH*^%KGq~FypJc17rxV_6{L2H} z_xUFNiv-1SyC?+&4YzaNlisFxQiqU;kF<9IncIA^^l1gKha7q$9JFW<3kY2;nsI#B z1ouvlYheoFb|3~1gN#jli+$1#GxU5<=uFFu!$@buFk?lqY3Xm(+#U0@p%P*~GkW$G zqhNaIrY`^K3spzvzxVGRf(8CtTB*2?ECEnZ%evBD^{uzbK_YNyBnjw)FQlcZgueoO zs=q|7*JMA_ofC>wScTSf1+hTqSm+oJCqj0*q#vs2+FO9>f z91MR$kMqM8p8<-~JAU=?&2ApQYV;kJ7BlVE8&V*4?;h?*g8)?5#NZ%VPg$nsknSGv zx;rAhg@O$a!m$zW;h^4+lUF`tsb^^6pVUC?lFX`n^QhJkoDCV%Hu<3|Gxq0o^Nk_B$lcPUHKd zl!L+D>Ef=H_HpJUtUmD{=017ES6YF;=PDX2!96sdoy8OMiH3MRJ4t;A*ccVb7O`tX zA4HW&4g5K}m;+noA|WI;!0_#ZK!O992*zB?{GlNyUPz5%i4=a zID5D)32{^#9@lLkDz-xX+89>ti~5_Ko2fJhGhqLeLJpu2d&}0I{Ya?pRp_(<2ooFt za5n6mX|zy?1XvDD_IjTWtpkPT4vP(gMDERFv@mToyj(h>-~TEPxoQp=Uj_yA>InIs zT(~(tYUc$XRmYJ%eE2H*i6q8(pGM0{_u6Dm?rCP9ne?vVE?9V@l4m8XvLjm+B8@@J z5*#|N;FfHti?@;q*a~8c#;{;9WHXC@DZ6O9UjJB$ffB|Sx~y>K={`h~jvBgXk{e4= z*uG3o-L`E#aHqf*#RaRK(=;HjP%`5lldMRMV4yasHVCTWrafew*Q_d5TeTjZwdgJ?2&?ufVreUxN2rDF`8e3go>X)`I}}>rbRW@kNKm z?LMFwDY5?T5fUyO;LpYIl69-GN28ZD;VY9`DoiKpYCJV+AS(9SrON?p0}ZhnEYiz- z05%}Ao~xlY`RSH^fqE=RaK5c2FZYj1zdfsvrAprj%}y^Wy{z7gE~dsl5u1XY;?Dy< zQbmod8C=iB1ww?ZDFM2IpiaOP_=ROVjxD>%wq_21*7$}5f325Hql%Fca8=HMyNBgxRnkC&B z+SH9ZeJrOGBI@gACd;!X7>>gI-TNd_7{n@W)};T6DwSAqbMmvWclDq*n14#e!$blv zg3>A-SewFrCHEVp4p`GfkN}-Mz+DdNBzq(W9;v2>gBfhWuFQFI)!oBeD4=ZmY6}{1 z{+RpiI6*&g@RoS+)-Q@KAX}w_0&sflFm*gBZYKf$4X9h?=G8^&CSp)f{n+)}$iK`X zz*6Bv4kocPYlTA9;639$2CEMWNYZ|c)Oygz(Se~IE)x(DOL~w--&>bF%V&QNEZ|YPkd$RwP>t!gy1mFa60x(s)Co#fa+6P zH%E-94v1}nbADPjFUX@JLOB6Mqz14CKUs;4d zcNCc$J$^lYyA+2&@i72T#Je>I;HjJde38-P4YzCtag!JDi&?+Z7eLYD`}-scU3vxN z7C|3P9Gra@uR|b1_=Hm1YVlMckFE7%v8V#KL|064S49`#Jga@ zAHVej=$1^PvYpllWJql*2FiNz-~z)f`~1v@`8^x=;+dVmQ(m>FTegC4KUtmB{}b45 zYC1P+POxb~L0rj5VC%lSy1r(JA);nf`^g`=$om^StqD~#g?+8zg%$Ce)BIq>o@c#7 zZ}@~X0IKA`vft>An6TLdQ4yl#b)T&a$q0fd0X}S|N9bf{s&`1#{N49OLES#XIcf`F zPrKQXea!0au03))lL7=!b+V!gSF=ggycny8SZ5dFS#yJ`_VNU(CXq$ukb?w4m>hW@ zNNXa-PPCWvJ)j3sO^lJ@NulR0moa^VxBkRi24S0#EubmW#Bz;KlIO`38kd{mYf<#Y z$!dsl1jbEhp_l4=K&3eb9I+D;?-vci>sGCRvbwQ1gFtW*9p};vo04ng6^}hfXW`k{ zNuu`GGQw`sCi=es*;l(Z1us}A*37n!%+6Al^$U_iEAxr|au>n<(wjgjs9nq$c}y4^ z`89EB(P_uM9CuMoa;C5V=5Z@Q`Zd-aI*~yWIll#|Uq;%7!*}RHK_D#PZR@p?U}#z~ ziW7+7YPB~-77XA$DnNjDpdk!xcS0`R>~_7n$>9`r-{tg{j##RPeJQB}uGr-hy}-pd zG~o~?Bgd3?8o8kLNK90~TL>_I!Rh3i*$l8IWyr=-i*;xi9f0485OCc$ZD4&F_z$Yg zVaCZnc}%~1@^IOi`SZ=8IU-dXENdV8G$#_trT;SQn#}uBSsw(~-Uip$>ByS)o5NpH z&r6dNu!9H+LGY5m6jY)eaKWbOx$mFxhF}|Z8k-P<#uT!vm8QQrV8Zr6)iX z`&*i>Jch~bNZ*hbXw2C zcqFLjkDf~F9+B&LfUYC%)H^_MQ6ijrW)!lp|Hy_1C@NGL^G|R*)1#SVFjNEeBLZZ*x*Nz$-(GgO*~<~t@`X!4MK<# zJ&={$ril-)DVH98cfw;6^7{@%LO>I5A{PZlAtVpih$vOZPa^D~x^TP$X)blwmA`Sz zH1gzr;GJ7mEKvh3Ep-)I%E`bN$;HO=>DO>6=I&`TeL)DW*o*=%3_Xr`B2Lv6h}{UGWI|5BgLJ|~$w#-&9r?&7 za`mCcj#>~`6-ax`TW(Y5uWHMGjk9em+b{3m>CciSy5={1%X{nWu$B!6^gW=1azr+v zg#;8?Y_Hw0L=$vRGv-we0^se#+;1N@j5pE)4_<1Ei(f8BHJI`e;lIQuuQRG-G>J8G z!!E5+(%8aEWOn#ztUAXRSFwc-zUP`Cm^64vtHo^fJ-VW`*_tTxoHaLsBA3~o%QPBf zI;D~)e5p`J2%(4q;b4YYf2Ic*`2jXG*`6%fYiE)ZH8hM5r}6+zE`o3Pn=zCsVo;j| zU6N}9cuoBcovK^KBV2vTV%a12*Q$}$@2XQ zTo|vZwDDM(ubCw9Z4;UKRK%Wh-o7DWHDo(peJ{g$^ZBjhm%BJd%1_td7zu0bCk`uu>rASAOt`h>K5(l50$w7fPeMt@YjRogH;r zP6N^Sk8~LOF4=pUF62H>5l2~Ez3!=az_yvYr_{rP^{kV2bgysWGukY;6INd^&{$qT zZBn1mVgnv4KtRaGru;fuiGZl>SY&%%!2F7K*2n*BIBZd7b1`&O$Ef8 zMct_ba7btT;c-lTl;pt$rqj;J`--Q1k@J`SS#u9~TlNi|#%WQrUNX;pRo2BkY+~tf zTz2G}&2o?XeDvARQ_ejl3etzs^?#1zC-)O;J}lG9UthM29sPRenK@3aO$=jx%l*({ z^b2{KJ=L?CmWp}t5M6Sy7mr!8EZ4u`eZU@Wbsq5h!sO#JL(i^Y`Greb{U0A=@jVf) zqG}C`a}|m!nMzC)8I+;8ym~&02@w5oXgp8OYwk7>kL>XnNuBqDU@^};BbmArx9<;x zJr~u$l^xv&@?mr{gy&~Gv$VD_g;lFR-*aFR zKHv7q(+8>FbHl3;h`{POZd8`f<<9fvRff-LqPV4NRigIV zr|7KFcbF?K7bz7Dx9xMSpgL;a!VwZ5#Ie>_-bMUBH;Q#6V!7=0ID57I48M1j$|#&d z-se0~y=k>bNKJ{W8<`pykPa*RT00;fgjY01#t^sZB8T~#H066$6S%j)kd3=i&fkuk zqjX=-VkzoAR9~^51$tym^qVv_Zxo|0k>cdMA&GrgReKb%D;UAouUy1bap-W5$;4DJ zc_W(JP=T5vjO!!y-p8VzjiX!{WMLothVu7j8uUt&u*Q)~U^ifQ;YL+6sy}jpw=)u0 z6THN$JJ??W!4=#&Gk_2%ze{8d&9~T!3A>1`{W((LSKUidSPY5B6@gGP3MU}eYOEPJ zZU04Xe5n78R`7`HVh$nY=BMOoq5S-OC^t9m?(Xiu$cUn^uZWkIm&fge<5zKSw40k7 zHa0d{Jw3vhPoMORj3Up@yf(MC7+$`lQi-D@y%QD|{$5>8I66A&;OZLD>EWuYs;=G@ zP0ZROe$UlQ9lIfEYHHf^{?wm^i7D#5vZRD)PS@0wqawO8t}>}ItTGEG!O5xddGO~e zN3oRb2yP9u&M!7$DVx&NzRuuI1$WR*s}fB-kvO$mo~`lRwq4ON%mP%^`FMoRj;3l$ zPqHo(dbX~B0{`PMc&D~ZZk6_r-%$ADNg)W8dhDJaopiSILAZw5g>cg0smDF z1|0Qdy1E~=Ei>Zuho`z<8Ea1P< z4|tvv-`{}%{4#M6Vra*E11ZW1e4&+y?CI%o2Fseh~bpVLl zV=LJ}&G|7jSr?Zw3ggv}Deic{$xVJ?VJ0aMsHORIV0pbxMQjUEymh+VT zvY*3?BKw;K1Rt4KIx+Q+`-=-DyIy;#gSK*mag)u3CToBw_9Y+Bl+qaSpZi7w%E`FG z0z72B4;)ZTmg*t!a?8uoZ4`hr2mPBZjyDKi`EfVL_StE~&kGlnJCj!*KEw^6B+@>4 zFaTa{sDOYC83ANjiyyvqX%DaxLM}-75ri?IOfifyEm`MT7yd01KN~TTprA%DoZeDd z-kbyk-LeP4A7tM_~|zWNo_ z{D}fizbxx$EnpA&c!i^2>q!7wqu@uF^CKQDT=0zJzCvAR(@XV&{101=(i(ZPqk79oTQ{7jHRtQ_GLK8dt5?thpA zajhKssEFfBHC=K~lizZdzS-s?oce|veQb-|_^3oV|7Tx13Uf&T5PLrgtX&y)IB5gL zJ6(VvD{w7&V_M0LHqa-Bv@cl9(_CB!oL!VcaK>&E{)P4;C0cwfT{tVF{JJXtI(L zaJh6b)GUpNhmW-zVABp1{A1faD3+ebzJ9R^o=>_C9A2KpyH_af^fZqXiQ%aPe0MuPH%&i6&rN znZJ(|u7AsU7%g@s-k3zsAyMZ|f`&!eJe>7cqi6Vx6q6LAgio5*t4|QrT^~Kwysuh# zVPwFy)Rz)}>l;CDFnp}@E3oEF5c7)#U@Ndj_8v#GZyC}fBU$QM;YDFd!6YDStp?tE z(GDguq*rbIVkwUV?AtNg(V!n>uG~yLM191(E`>I-T7b+oIw#7vsN}?NO+b!UAcT83 z^2P2ozy8`!XEb1n<9{TP`zT!-^K2~t%z&R6nN|(6dS3OXpbnbr{Up|Cz@4uTid`8o z$Xcz0vw2m9Bd)x5W&xSL)L9-NrH-S^6eIV@IH6CYi9-NUSfr`zy;M0&2%hKP2`0qw z5BPusK5etDKo^V+S3GzSWyFRVK98t ztHIqh$WuNJR2C(qx!+~}Oo?z{w9l!fcyu{xhmsf|5+_*Rz9HE=zaj+kti=w)8`2vm zC@y*MB<|HvLibr#pN>RyzDQ(mDE3~tkZ4|hA1xDln z1-v1T00daxPJ3*=pZ?euy~d2s>9%%`PC)xBB{|1`23UKVIldLn$ z{bXFPQQ;#lH2J61^lunA;6F>Ba)rXrRyt3odV)gAQRSj!PBP3H5hX)^J~W2D-$s*k z^%?f}r{K}Z)~;d%`1BR5qv-Jout|=CLDWV6h|a;5f;mby%Wu|?E64yzRmtM}>}Tfc z=2&`MY20a!^n%6HcF|3WdT`NW+OJ!JCJu$vbUm)cpR7`oS(VwC7$usVp?Hq*x7B7f}j!-=o4~TYhttNX?AG(v)rvSss$dq+ zln>5Lo!v$|#X>vFi1(p^hf8zlk}PDrdCPS#?Xz+@zb;|_Ayl_`VcAcaW54#;tWR>5 zeTAl)b&TsK4qYRb~-s+TnP^=Dy#enov z6Br_*dS5U;$QaF`I4~E|ve#4Y_NT6xax zKhhr)w;lPSgszRACnRP0DFN0ULlm(%#ia++d>~{t z%MRgGYC1q`T4&%E|K3J(_bdTs$BgW>ffM(WY7@0>0La15p%=s+hJj^QcO_jOcMUsZ z_WOMM)!YE7fqjTHZvG-iX?UuV-kPL*&~({^VFmh{8;n@$^?0{((JHT)i3#^T9!+5q z85hE&Ga9uAygYFxAW!~is_FeQ&<9&&EC|*947(Bo*t3@`evS_MG}2cV7Oo=CYVP!= z)*KJ8KObY5cK^wCw>V*3b=i31z53*5=PKI{iCT7e-;fg+h$ADeX!YNeX~)OF$%3r% z_VAxW_J;~=8cVs7=&U*OP_McHM>BAC|E-$QM#Y=Z4Lnp21UN{fF52Tul@dD*WdI1HTvV z*%+xM8L)TvtRm^NdcOkJ1?M+4K4|c+t{0x)sNY?Z4*4;ONY-4>ZN7N=P7*}ao*)WW zj%JPW7gybHoG9RQn?2h$Y|px_QeDbcS$6T6SEZCQ-K06SR#X-wYJc_8EYwPV@SOM$!k?b``dKD5z5)mYNk~X+keR11@HU*0XNJ7u z>)oFeU?^V~Sdy(^EP&a{V;&ctYpJLQXL~QN-Jd;ZCH=trkZ;*Rx(U^4o~X-{ft$9> z{RIa0bAEo&hWztHf!l472X#y&q-lvY*t}pkRn;kg90AsBf9?c=fNLssb;9jdSuWta zZU?ivKWRMFe@f-nY2wU|3$F;_E+%oSy@zn!>D@BazZ|KbCSrb>g+ri<0*G-bOLiOWV^o{zgVq_wvV9xxx<;{ueiX+{W zp|;SZKW3V%43*Atb|)6{=NL7 zWciQ1COyU%D9(6Boq-LMK~v9n#7*EdhMJ4 z`gk9aHejubyKi3oB8~ksc577ZXHV2|J9{v*d#{Fh-2yecuvkNSzkpJGU)1OHrSivY zurbnDUXE`_EIzgag?4G_Ae?KwB!ukIS`Q-sxVTXbadIqyazmdroVCdMpP8AN3|t_P zYv#<^$*Fh$TGsx1pxtS)8A0ntBQ3U^cd1`U*O&U{CH6g-#pJFGbv5BE`dN(E4+;DjOc5V-Z$zF=SKXP!$g~DuLw)er~$mbg(S*<2Bww#CHub15pTkm1uY}CAd_A%5KVbiP~T}(l1W_q~tE#JlW9E2b4;hNISY29`07@9&fz+A=4EE_d<8ltXglC9?-;6dhgn%+rC%%T)(ALn?Z>Fm#}uc6w)n>g%ez(xI=c< zPPbluGs7Dg#HKIl>?%62qnwZ8w9_hThr7Ag8eQV57nl17=rRZ4 zuuj4+4NHLc-95Zp-lFO37q!O0$=|TPdjuYV$Hj06K?t0hA&^bDhP3^Rtn8+aJkPg6 z*3}}ZitFFp|JY1J>bbg)PcMgV+~Zu21YvT@v|C&URs^yv%H;W6du3exO&jtC4bpm< z`@A@yEczi8`f)A{L$7~-BM;haj?>(cVK49~d6Wr<2^_M6uKr~ z!)P^-PH|_n$}3n%$2Q&0atj~sJRtR#aRx(5Dvax``dt#@tI^-gzToko3YwxFwd|Bi z`ZU{Xbn!y`^eVZlEV-LD&E%&j#Uoq&8(0!~ZzI3Vn+}9P+A%YMH=1?_xy}%o&fw+& z6vnI6m&4g8Px}GWpAJUIJ*oMFM)4E~7`u`1N($A3wPTfYbMsNe&gF}}BO*hataouO z*K#Okmm8U--@R|C=ghJH7rMP#%5^s2efI`J8cE!F{AT^}%fW-H$xa+METh7|XYB}k z^ZKOiv2tK8Xlq{T4LB5i%h=hXt6cQcmU9YH#S*X@&|s<@!VX-$MIY8g1NEcaLz#j} z)Xn6oemzOaXUO5~@}gDQ9U}=_)<8{Pjv3I>kF)+{haP@HD!yChnNHp&#ICcf2ha2o zW%qYvmN&O!75MiP{t>1A{U;z=S-ZmF>^|~%+EVQBksM@M-4igPxOSjjfT66}UmI}O zW~E2=fn}@Gq{R8)N?Eia@aSY~FuQSU|Mh12Wr}8QOSncz?%kzPu;1>-56;O?@se`o zTctxVC5{~4cyf`z%Oc9u>ffB#AxTneTPK{=_dh)_3kWwv9IB!EBPh^oT&j^B-Cw(E z2U+j&zsejkpnXNpzWW>aPA04;cZN-jG-fgJfD;Y!N@h3($Zf8`A@x5Uh(<Oa!uJ>fldXMBUzY~oVC-#BK%lyw=p|4_%rXCoxfbk8Tv5xk?5P` zt#>t{@3djpH%%dCtFr5Z^@kAF$Lt!z?SU{W!VrVPsUKn|-ECdMCqs*Ye+FyhNEidX zsC{`ppz<&6Fmm>x_wK$a<{XYVC4#SQz4KpK_(U588lCYk9uW_%?Qdjc?xFn7^J87= zkKDw>(4W3@Pz zJ<%oQRtoOF{@IbEcuhcLx%4GqNg3zAJ71No<`w}woCV(7=6k~aDBL~mV z@!x92%1T7lvEydI18RZ>j8T2?fa*HwyZ$*TdqL|aWeXWYCV&+QH>@rH+C_5UM8ha>neMW$le@U@YoRI*bWok$ONDb zeWKyvy(OlDBcJ}wn$#BlP5hcxtMQkoCFWkVE$ZTL&Uhb}F5M5!RF5K@E3zIv9@?{) zpC4fg&0|&xNDpNwj^D)KaKX!RP0?O!&*g3*^*YmB2! z#EYsM-w22F1vk|^Vci5VTv*JVrfvowDTl6fga3<_$ToO)`a%Y*&66tX9?o8y?Nedr zXo-P*kp4AyuY7uia%6|xAG+=Eze8(TRnuol4CLsy&Zi+J1s*hklR#F`_gUPFmTWhK z&`t*pph=l42vjkDp1Z6{7s*E+X1N4UzV?hncw=O-$zEIqQ~G1h4k;2r3n~;pTstQBBot&D}^`ON*|mY<2iyzZPolS{`+ml{fOsoPt%IT(`RgREk&<8DZS^JPR#&1pVeItf@9l15zOz8MD?!}y9TelsM zUjvw-petKl{(X0P_;6*$mHy}-$3*VzCNzUBGqlhpa@C(eAws*OwBwl!4!1Ee+UB4h ztMEk14S7L>(LCOg^x_^zQHuR|66C8on8J7%JEm4bd1|SldVTO#U1^8iDEPOPo>-$( zb-lN=PK^Cra!wsqNV|K~O+ef~YS9bh$FQS&YTnhOskT;BnN5GPK~eo1t3l_lxz&$) zRQsa1;Q9-9Dimo4ecE4cDRQn<#daYdc{;(os!V>Vn8i?vQc&kxaa}>x_MkP;rvmTx zy#y^;z7NH?iAc5FB0`t z^|Q0zqyKY#WYvy*pzi(YRxCjbPxVH(&b?nkH2yqYL_Ji;?FeVP^j}Tum^1Pq(7FjJ z9$Mv~TcK+Ypb#m4C?7CT%xRCUc^Ok$|7EJ>Z0BydL5?G^;r^~%^2(8=4w->G*1X|O zXS33HC=`ZM3y9~xM@<8Vm=gaj{fSvD_Xeh=dmX~UDq4pmoKUJEOeP zxY5AfgZZ5Y@z7s}; z*Crwkc})0gjoM;jD57P%e)z(*jHX6?t21U6C5p7M%dt7a*f{!m(uzsJ53!$nb-(3e zOABkzTzCEqtq9Xr$$d>&q~)iYQm8|W>;v?!aifA zep+aRG}+R*yji5|MAyQS5gj?>O`%NJ#*z9DQ$&|D{53c{K|r0Z)Du5x6VOQrlQIEs zm8MxWtps)TrxJP>nr(A^E9Y&@u{Y^(3aN-ro@;sc^Y@x!M#Q;S@LK(s@MMjP(I<)W zacWG-NMQ}1@=~&0(}Nu|k@=CCxsj*Evt=LsYXt25()-uPX5@p&oV*t1pC^u)({7W@ zF_PW9Z%!+-Hg6YWa(21a+C&3%5C!vVo!WaSI$3;O!&J~;E71WI6`(LG&d+mzO-(fT z`do+oA@k;n)!qBxYVVL*hGyRNxQS2-PwTNq!0C))_^%@|SDepOmazfIHRden~*t-sA` zd3_@De2@a=@bh}@w=bo!w)Sv}Vo)z% z>=MOyP`?ANb6}p{^1QYzpAln@14-HBwJNa^zM!5jj5wn7qN3iXe3Jh7ZT6EiamkYs z$D>R^Y#}ZazGJ%FKFh6xK-7-b1{yb8otpwS9=EJPJkAun*B~-ufFL#$efUoX$1Qhk zjg|1}j_Lp1>s5i@?9t_?*Y{hKDk+qjD~k5;|I8s+Da@K7r!@v}cG=ZwK#9{mD{6Pg z-6^@$uxhp>rz5;3XPoU`k2pdmmwjW|M=Dsf25 sqd|+9qs5knigM@u|JNKAu0GNq_A%EkG>73lA3_Gyl(ZEqEHSqeZOvYFcWPmYPB<0bgh+G!RfgV06`e@3IefX71d_+L&GeZIL-FD&BN{Ca=te-xqz3F{vd8W1Jm3uv?muWb<}(p5xqh;c zlLGt0s#r@jUi@@p^G(h5jo*w%qCxO_QGOcy6iV43bU;UlGCZ$@{+>hb?p@ChCX*d2 zL)D)>y=)oY83R)a@#2#e57pHzxohtH+lvGGXDGKFgc|*UA`8j|<)C~Ur81DU(EKTg z;01Jc?6-FAT-%l!8M^Ye2h6V1277iTp}^FN4Hqx^`Qn{K9Fw%DIt@oL`PPVQ#k*5wGsNS^X+EuO9)s;cz zeuNM~gbe3Qgb*Tt5C#YhA@ZOC1PV|n;URnlb{~e_MP1X1Xm4-g#>I;U{`Tr?-oTdv zYn)oPYQf_BZ>p*)3o5q*A;Tae`Tlb-gnI!0! z5D0}*9^2k-XVaE$5^Wh~Ow$PleT3&BJP+J7dZveI4NK#ne6qFi<;~Vhe{u^WX$2y{E3YQ#?y*>YLoH2> zaen)BKb9*%N|Y2JBxKqt_6Ozk8JD-NeJs{I-un8uvhZlMb=K@<4Tfk(DGx+$LLnpq zjcJurxa!JF&;vzOR!-x#6#*PaA)*>}wPl>&5(kxLN?9@Cpo?ugL;~dJ$>&_}n_MvK z`z4*9Zhrz&i%-d8(NO5ewe`6pEJ%gX(cIZH(KHE4fl}1hRZ%e|4#0(TrXj@V$$n0K zh~gqSb{fwlY<)s`<(!sh9xjhh2)1%1GFnu#Fch%z!RrG)O8F?2lLe(*P&Ud>=fqXn zDCOp~3=fq5x#8z%@|!qDCjf>I&@gjhOz76PCOpa+@#uLoYZnHU{V}#_=5{X?Liz}q zMMwuBEf6UXIs$UXtt>2a5apRD-$eNtQ2BAzMA{b8vJsYruq<@jBJQ_SUUzjcqH9Zm zznm1zL(M3PR|l0d#7mE?r>MMYRHKBDD3#NyP%Mtrj8VY@MKHG%HL+YMtvj6=v_nRmY-V^|u*rH%)3h<0ag$wyLpm-xes=6_ zW6TP^?jP#wJK_kvoM1rUo&fh{kMhKp>i>wc(o#&v!t?z-6N26G6SKRsbH|_`sO9Xs zB6{|3IwMC}_)ccHgJ>X&QQks(=k5{P$^P+_l;5$E>yze)-+Xp8efwT15XO@Ooa*!L zy&E`pdH_{&9v^z1*W?&r4@4EA7-#j_%*cIW2SP zO%7#K>CQDmpiT+wuKQDcM|5&%A8dY*A~!+pyzlXT+xB#Fxcz}U zR$@*H><9M@j&${PeEW?ZPYqYjyOT>>qP+9_>#&o(Un<59Y+6aC?e8qP`a5(w(%HLr z!z(xcEd8g+UabWX*|g0~H8%|OC@p^72fBX(*_7E$tClDze1=BPQ&&|-e>qU0{`EK6(=OfIYJCo*b+{^yX zL-v-}pW1rwgG2X?jNlhkX#&U=!i^Wj1`sNQ1436U)aqBdotb0AQJuNPr@iuUfk_Ms2o zat?fu*!IK=ndiFtyumz#RRDBsZ02v3CoOnoAq)^K=z~CD;YC`_6$^r`HD?)Lk3~yL zL*deZZiHpV9B|X=0dsKJN$lKbZ`t^ov)i^uy4ijjxP*KueCCQq14jTQ^z!(~s*!ZZDSOcZFL7^kH2 fCj$7YovHR;z`=-8w*&X}00000NkvXXu0mjfZkQ#{ literal 0 HcmV?d00001 diff --git a/src/img/38unhappy.png b/src/img/38unhappy.png new file mode 100644 index 0000000000000000000000000000000000000000..49489da5d2a9264fdb745d6aa1b92413ad14a1a0 GIT binary patch literal 2109 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 Sh?@Zb0000=a?"top":null!==e&&a+e<=t.top?"middle":null!==y&&t.top+n+$>=o-y?"bottom":"middle"}function u(){return p[0]===t?t.pageYOffset:p[0].scrollTop}function c(){return p[0]===t?t.document.body.scrollHeight:p[0].scrollHeight}var d={},f=angular.extend({},e,s),p=f.target,g="affix affix-top affix-bottom",m=!1,$=0,h=0,v=0,y=0,w=null,b=null,D=o.parent();if(f.offsetParent)if(f.offsetParent.match(/^\d+$/))for(var k=0;k<1*f.offsetParent-1;k++)D=D.parent();else D=angular.element(f.offsetParent);return d.init=function(){this.$parseOffsets(),h=a.offset(o[0]).top+$,m=!o[0].style.width,p.on("scroll",this.checkPosition),p.on("click",this.checkPositionWithEventLoop),r.on("resize",this.$debouncedOnResize),this.checkPosition(),this.checkPositionWithEventLoop()},d.destroy=function(){p.off("scroll",this.checkPosition),p.off("click",this.checkPositionWithEventLoop),r.off("resize",this.$debouncedOnResize)},d.checkPositionWithEventLoop=function(){setTimeout(d.checkPosition,1)},d.checkPosition=function(){var e=u(),t=a.offset(o[0]),n=a.height(o[0]),r=l(b,t,n);w!==r&&(w=r,o.removeClass(g).addClass("affix"+("middle"!==r?"-"+r:"")),"top"===r?(b=null,m&&o.css("width",""),f.inlineStyles&&(o.css("position",f.offsetParent?"":"relative"),o.css("top",""))):"bottom"===r?(b=f.offsetUnpin?-(1*f.offsetUnpin):t.top-e,m&&o.css("width",""),f.inlineStyles&&(o.css("position",f.offsetParent?"":"relative"),o.css("top",f.offsetParent?"":i[0].offsetHeight-y-n-h+"px"))):(b=null,m&&o.css("width",o[0].offsetWidth+"px"),f.inlineStyles&&(o.css("position","fixed"),o.css("top",$+"px"))))},d.$onResize=function(){d.$parseOffsets(),d.checkPosition()},d.$debouncedOnResize=n(d.$onResize,50),d.$parseOffsets=function(){var e=o.css("position");f.inlineStyles&&o.css("position",f.offsetParent?"":"relative"),f.offsetTop&&("auto"===f.offsetTop&&(f.offsetTop="+0"),f.offsetTop.match(/^[-+]\d+$/)?($=1*-f.offsetTop,v=f.offsetParent?a.offset(D[0]).top+1*f.offsetTop:a.offset(o[0]).top-a.css(o[0],"marginTop",!0)+1*f.offsetTop):v=1*f.offsetTop),f.offsetBottom&&(y=f.offsetParent&&f.offsetBottom.match(/^[-+]\d+$/)?c()-(a.offset(D[0]).top+a.height(D[0]))+1*f.offsetBottom+1:1*f.offsetBottom),f.inlineStyles&&o.css("position",e)},d.init(),d}var i=angular.element(t.document.body),r=angular.element(t);return o}]}).directive("bsAffix",["$affix","$window",function(e,t){return{restrict:"EAC",require:"^?bsAffixTarget",link:function(n,a,o,i){var r={scope:n,target:i?i.$element:angular.element(t)};angular.forEach(["offsetTop","offsetBottom","offsetParent","offsetUnpin","inlineStyles"],function(e){if(angular.isDefined(o[e])){var t=o[e];/true/i.test(t)&&(t=!0),/false/i.test(t)&&(t=!1),r[e]=t}});var s=e(a,r);n.$on("$destroy",function(){s&&s.destroy(),r=null,s=null})}}}]).directive("bsAffixTarget",function(){return{controller:["$element",function(e){this.$element=e}]}}),angular.module("mgcrea.ngStrap.aside",["mgcrea.ngStrap.modal"]).provider("$aside",function(){var e=this.defaults={animation:"am-fade-and-slide-right",prefixClass:"aside",prefixEvent:"aside",placement:"right",template:"aside/aside.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$modal",function(t){function n(n){var a={},o=angular.extend({},e,n);return a=t(o)}return n}]}).directive("bsAside",["$window","$sce","$aside",function(e,t,n){e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,a,o){var i={scope:e,element:a,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),angular.forEach(["title","content"],function(n){o[n]&&o.$observe(n,function(a){e[n]=t.trustAsHtml(a)})}),o.bsAside&&e.$watch(o.bsAside,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var r=n(i);a.on(o.trigger||"click",r.toggle),e.$on("$destroy",function(){r&&r.destroy(),i=null,r=null})}}}]),angular.module("mgcrea.ngStrap.alert",["mgcrea.ngStrap.modal"]).provider("$alert",function(){var e=this.defaults={animation:"am-fade",prefixClass:"alert",prefixEvent:"alert",placement:null,template:"alert/alert.tpl.html",container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1,dismissable:!0};this.$get=["$modal","$timeout",function(t,n){function a(a){var o={},i=angular.extend({},e,a);o=t(i),o.$scope.dismissable=!!i.dismissable,i.type&&(o.$scope.type=i.type);var r=o.show;return i.duration&&(o.show=function(){r(),n(function(){o.hide()},1e3*i.duration)}),o}return a}]}).directive("bsAlert",["$window","$sce","$alert",function(e,t,n){e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,a,o){var i={scope:e,element:a,show:!1};angular.forEach(["template","placement","keyboard","html","container","animation","duration","dismissable"],function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),e.hasOwnProperty("title")||(e.title=""),angular.forEach(["title","content","type"],function(n){o[n]&&o.$observe(n,function(a){e[n]=t.trustAsHtml(a)})}),o.bsAlert&&e.$watch(o.bsAlert,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var r=n(i);a.on(o.trigger||"click",r.toggle),e.$on("$destroy",function(){r&&r.destroy(),i=null,r=null})}}}]),angular.module("mgcrea.ngStrap.button",[]).provider("$button",function(){var e=this.defaults={activeClass:"active",toggleEvent:"click"};this.$get=function(){return{defaults:e}}}).directive("bsCheckboxGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var n=e[0].querySelectorAll('input[type="checkbox"]');angular.forEach(n,function(e){var n=angular.element(e);n.attr("bs-checkbox",""),n.attr("ng-model",t.ngModel+"."+n.attr("value"))})}}}).directive("bsCheckbox",["$button","$$rAF",function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,o,i,r){var s=n,l="INPUT"===o[0].nodeName,u=l?o.parent():o,c=angular.isDefined(i.trueValue)?i.trueValue:!0;a.test(i.trueValue)&&(c=e.$eval(i.trueValue));var d=angular.isDefined(i.falseValue)?i.falseValue:!1;a.test(i.falseValue)&&(d=e.$eval(i.falseValue));var f="boolean"!=typeof c||"boolean"!=typeof d;f&&(r.$parsers.push(function(e){return e?c:d}),r.$formatters.push(function(e){return angular.equals(e,c)}),e.$watch(i.ngModel,function(){r.$render()})),r.$render=function(){var e=angular.equals(r.$modelValue,c);t(function(){l&&(o[0].checked=e),u.toggleClass(s.activeClass,e)})},o.bind(s.toggleEvent,function(){e.$apply(function(){l||r.$setViewValue(!u.hasClass("active")),f||r.$render()})})}}}]).directive("bsRadioGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var n=e[0].querySelectorAll('input[type="radio"]');angular.forEach(n,function(e){angular.element(e).attr("bs-radio",""),angular.element(e).attr("ng-model",t.ngModel)})}}}).directive("bsRadio",["$button","$$rAF",function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,o,i,r){var s,l=n,u="INPUT"===o[0].nodeName,c=u?o.parent():o;i.$observe("value",function(t){s=a.test(t)?e.$eval(t):t,r.$render()}),r.$render=function(){var e=angular.equals(r.$modelValue,s);t(function(){u&&(o[0].checked=e),c.toggleClass(l.activeClass,e)})},o.bind(l.toggleEvent,function(){e.$apply(function(){r.$setViewValue(s),r.$render()})})}}}]),angular.module("mgcrea.ngStrap.collapse",[]).provider("$collapse",function(){var e=this.defaults={animation:"am-collapse",disallowToggle:!1,activeClass:"in",startCollapsed:!1,allowMultiple:!1},t=this.controller=function(t,n,a){function o(e){for(var t=l.$targets.$active,n=0;nt;t++)angular.forEach(g.rows[t],u.$setDisabledEl)},u.select=function(e,t){angular.isDate(n.$dateValue)||(n.$dateValue=new Date(e)),!g.$mode||t?(n.$setViewValue(angular.copy(e)),n.$render(),p.autoclose&&!t&&l(function(){u.hide(!0)})):(angular.extend($,{year:e.getFullYear(),month:e.getMonth(),date:e.getDate()}),u.setMode(g.$mode-1),u.$build())},u.setMode=function(e){g.$mode=e,h=u.$views[g.$mode],u.$build()},u.$build=function(e){e===!0&&h.built||(e!==!1||h.built)&&h.build.call(h)},u.$updateSelected=function(){for(var e=0,t=g.rows.length;t>e;e++)angular.forEach(g.rows[e],o)},u.$isSelected=function(e){return h.isSelected(e)},u.$setDisabledEl=function(e){e.disabled=h.isDisabled(e.date)},u.$selectPane=function(e){var t=h.steps,n=new Date(Date.UTC($.year+(t.year||0)*e,$.month+(t.month||0)*e,1));angular.extend($,{year:n.getUTCFullYear(),month:n.getUTCMonth(),date:n.getUTCDate()}),u.$build()},u.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),d){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},u.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return g.$mode?g.$apply(function(){u.setMode(g.$mode-1)}):u.hide(!0);h.onKeyDown(e),f.$digest()}};var v=u.init;u.init=function(){return c&&p.useNative?(t.prop("type","date"),void t.css("-webkit-appearance","textfield")):(d&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",i)),void v())};var y=u.destroy;u.destroy=function(){c&&p.useNative&&t.off("click",i),y()};var w=u.show;u.show=function(){w(),l(function(){u.$isShown&&(u.$element.on(d?"touchstart":"mousedown",u.$onMouseDown),p.keyboard&&t.on("keydown",u.$onKeyDown))},0,!1)};var b=u.hide;return u.hide=function(e){u.$isShown&&(u.$element.off(d?"touchstart":"mousedown",u.$onMouseDown),p.keyboard&&t.off("keydown",u.$onKeyDown),b(e))},u}var c=(angular.element(t.document.body),/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)),d="createTouch"in t.document&&c;return e.lang||(e.lang=i.getDefaultLocale()),u.defaults=e,u}]}).directive("bsDatepicker",["$window","$parse","$q","$dateFormatter","$dateParser","$datepicker",function(e,t,n,a,o,i){var r=(i.defaults,/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent));return{restrict:"EAC",require:"ngModel",link:function(e,t,n,s){function l(e){return e&&e.length?e:null}function u(e){if(angular.isDate(e)){var t=isNaN(f.$options.minDate)||e.getTime()>=f.$options.minDate,n=isNaN(f.$options.maxDate)||e.getTime()<=f.$options.maxDate,a=t&&n;s.$setValidity("date",a),s.$setValidity("min",t),s.$setValidity("max",n),a&&(s.$dateValue=e)}}function c(){return!s.$dateValue||isNaN(s.$dateValue.getTime())?"":g(s.$dateValue,d.dateFormat)}var d={scope:e,controller:s};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","dateType","dateFormat","timezone","modelDateFormat","dayFormat","strictFormat","startWeek","startDate","useNative","lang","startView","minView","iconLeft","iconRight","daysOfWeekDisabled","id"],function(e){angular.isDefined(n[e])&&(d[e]=n[e])}),n.bsShow&&e.$watch(n.bsShow,function(e){f&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(datepicker),?/i)),e===!0?f.show():f.hide())});var f=i(t,s,d);d=f.$options,r&&d.useNative&&(d.dateFormat="yyyy-MM-dd");var p=d.lang,g=function(e,t){return a.formatDate(e,t,p)},m=o({format:d.dateFormat,lang:p,strict:d.strictFormat});angular.forEach(["minDate","maxDate"],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){f.$options[e]=m.getDateForAttribute(e,t),!isNaN(f.$options[e])&&f.$build(!1),u(s.$dateValue)})}),e.$watch(n.ngModel,function(){f.update(s.$dateValue)},!0),angular.isDefined(n.disabledDates)&&e.$watch(n.disabledDates,function(e,t){e=l(e),t=l(t),e&&f.updateDisabledDates(e)}),s.$parsers.unshift(function(e){var t;if(!e)return s.$setValidity("date",!0),null;var n=m.parse(e,s.$dateValue);return!n||isNaN(n.getTime())?void s.$setValidity("date",!1):(u(n),"string"===d.dateType?(t=m.timezoneOffsetAdjust(n,d.timezone,!0),g(t,d.modelDateFormat||d.dateFormat)):(t=m.timezoneOffsetAdjust(s.$dateValue,d.timezone,!0),"number"===d.dateType?t.getTime():"unix"===d.dateType?t.getTime()/1e3:"iso"===d.dateType?t.toISOString():new Date(t)))}),s.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===d.dateType?m.parse(e,null,d.modelDateFormat):new Date("unix"===d.dateType?1e3*e:e),s.$dateValue=m.timezoneOffsetAdjust(t,d.timezone),c()}),s.$render=function(){t.val(c())},e.$on("$destroy",function(){f&&f.destroy(),d=null,f=null})}}}]).provider("datepickerViews",function(){function e(e,t){for(var n=[];e.length>0;)n.push(e.splice(0,t));return n}function t(e,t){return(e%t+t)%t}this.defaults={dayFormat:"dd",daySplit:7};this.$get=["$dateFormatter","$dateParser","$sce",function(n,a,o){return function(i){var r=i.$scope,s=i.$options,l=s.lang,u=function(e,t){return n.formatDate(e,t,l)},c=a({format:s.dateFormat,lang:l,strict:s.strictFormat}),d=n.weekdaysShort(l),f=d.slice(s.startWeek).concat(d.slice(0,s.startWeek)),p=o.trustAsHtml(''+f.join('')+""),g=i.$date||(s.startDate?c.getDateForAttribute("startDate",s.startDate):new Date),m={year:g.getFullYear(),month:g.getMonth(),date:g.getDate()},$=[{format:s.dayFormat,split:7,steps:{month:1},update:function(e,t){!this.built||t||e.getFullYear()!==m.year||e.getMonth()!==m.month?(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getDate()!==m.date&&(m.date=i.$date.getDate(),i.$updateSelected())},build:function(){var n=new Date(m.year,m.month,1),a=n.getTimezoneOffset(),o=new Date(+n-864e5*t(n.getDay()-s.startWeek,7)),l=o.getTimezoneOffset(),d=c.timezoneOffsetAdjust(new Date,s.timezone).toDateString();l!==a&&(o=new Date(+o+6e4*(l-a)));for(var f,g=[],$=0;42>$;$++)f=c.daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth(),o.getDate()+$)),g.push({date:f,isToday:f.toDateString()===d,label:u(f,this.format),selected:i.$date&&this.isSelected(f),muted:f.getMonth()!==m.month,disabled:this.isDisabled(f)});r.title=u(n,s.monthTitleFormat),r.showLabels=!0,r.labels=p,r.rows=e(g,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()&&e.getDate()===i.$date.getDate()},isDisabled:function(e){var t=e.getTime();if(ts.maxDate)return!0;if(-1!==s.daysOfWeekDisabled.indexOf(e.getDay()))return!0;if(s.disabledDateRanges)for(var n=0;n=s.disabledDateRanges[n].start&&t<=s.disabledDateRanges[n].end)return!0;return!1},onKeyDown:function(e){if(i.$date){var t,n=i.$date.getTime();37===e.keyCode?t=new Date(n-864e5):38===e.keyCode?t=new Date(n-6048e5):39===e.keyCode?t=new Date(n+864e5):40===e.keyCode&&(t=new Date(n+6048e5)),this.isDisabled(t)||i.select(t,!0)}}},{name:"month",format:s.monthFormat,split:4,steps:{year:1},update:function(e){this.built&&e.getFullYear()===m.year?e.getMonth()!==m.month&&(angular.extend(m,{month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected()):(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build())},build:function(){for(var t,n=(new Date(m.year,0,1),[]),a=0;12>a;a++)t=new Date(m.year,a,1),n.push({date:t,label:u(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=u(t,s.yearTitleFormat),r.showLabels=!1,r.rows=e(n,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()},isDisabled:function(e){var t=+new Date(e.getFullYear(),e.getMonth()+1,0);return ts.maxDate},onKeyDown:function(e){if(i.$date){var t=i.$date.getMonth(),n=new Date(i.$date);37===e.keyCode?n.setMonth(t-1):38===e.keyCode?n.setMonth(t-4):39===e.keyCode?n.setMonth(t+1):40===e.keyCode&&n.setMonth(t+4),this.isDisabled(n)||i.select(n,!0)}}},{name:"year",format:s.yearFormat,split:4,steps:{year:12},update:function(e,t){!this.built||t||parseInt(e.getFullYear()/20,10)!==parseInt(m.year/20,10)?(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getFullYear()!==m.year&&(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected())},build:function(){for(var t,n=m.year-m.year%(3*this.split),a=[],o=0;12>o;o++)t=new Date(n+o,0,1),a.push({date:t,label:u(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=a[0].label+"-"+a[a.length-1].label,r.showLabels=!1,r.rows=e(a,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()},isDisabled:function(e){var t=+new Date(e.getFullYear()+1,0,0);return ts.maxDate},onKeyDown:function(e){if(i.$date){var t=i.$date.getFullYear(),n=new Date(i.$date);37===e.keyCode?n.setYear(t-1):38===e.keyCode?n.setYear(t-4):39===e.keyCode?n.setYear(t+1):40===e.keyCode&&n.setYear(t+4),this.isDisabled(n)||i.select(n,!0)}}}];return{views:s.minView?Array.prototype.slice.call($,s.minView):$,viewDate:m}}}]}),angular.module("mgcrea.ngStrap.dropdown",["mgcrea.ngStrap.tooltip"]).provider("$dropdown",function(){var e=this.defaults={animation:"am-fade",prefixClass:"dropdown",prefixEvent:"dropdown",placement:"bottom-left",template:"dropdown/dropdown.tpl.html",trigger:"click",container:!1,keyboard:!0,html:!1,delay:0};this.$get=["$window","$rootScope","$tooltip","$timeout",function(t,n,a,o){function i(t,i){function l(e){return e.target!==t[0]?e.target!==t[0]&&u.hide():void 0}{var u={},c=angular.extend({},e,i);u.$scope=c.scope&&c.scope.$new()||n.$new()}u=a(t,c);var d=t.parent();u.$onKeyDown=function(e){if(/(38|40)/.test(e.keyCode)){e.preventDefault(),e.stopPropagation();var t=angular.element(u.$element[0].querySelectorAll("li:not(.divider) a"));if(t.length){var n;angular.forEach(t,function(e,t){s&&s.call(e,":focus")&&(n=t)}),38===e.keyCode&&n>0?n--:40===e.keyCode&&no;o++)if(e[o].toLowerCase()===a)return o;return-1}e.prototype.setMilliseconds=function(e){this.milliseconds=e},e.prototype.setSeconds=function(e){this.seconds=e},e.prototype.setMinutes=function(e){this.minutes=e},e.prototype.setHours=function(e){this.hours=e},e.prototype.getHours=function(){return this.hours},e.prototype.setDate=function(e){this.day=e},e.prototype.setMonth=function(e){this.month=e},e.prototype.setFullYear=function(e){this.year=e},e.prototype.fromDate=function(e){return this.year=e.getFullYear(),this.month=e.getMonth(),this.day=e.getDate(),this.hours=e.getHours(),this.minutes=e.getMinutes(),this.seconds=e.getSeconds(),this.milliseconds=e.getMilliseconds(),this},e.prototype.toDate=function(){return new Date(this.year,this.month,this.day,this.hours,this.minutes,this.seconds,this.milliseconds)};var o=e.prototype,i=this.defaults={format:"shortDate",strict:!1};this.$get=["$locale","dateFilter",function(r,s){var l=function(l){function u(e){var t,n=Object.keys(h),a=[],o=[],i=e;for(t=0;t1){var r=i.search(n[t]);e=e.split(n[t]).join(""),h[n[t]]&&(a[r]=h[n[t]])}return angular.forEach(a,function(e){e&&o.push(e)}),o}function c(e){return e.replace(/\//g,"[\\/]").replace("/-/g","[-]").replace(/\./g,"[.]").replace(/\\s/g,"[\\s]")}function d(e){var t,n=Object.keys($),a=e;for(t=0;t12?e.getHours()+2:0),e):null},m.timezoneOffsetAdjust=function(e,t,n){return e?(t&&"UTC"===t&&(e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+(n?-1:1)*e.getTimezoneOffset())),e):null},m.init(),m};return l}]}]),angular.module("mgcrea.ngStrap.helpers.debounce",[]).factory("debounce",["$timeout",function(e){return function(t,n,a){var o=null;return function(){var i=this,r=arguments,s=a&&!o;return o&&e.cancel(o),o=e(function(){o=null,a||t.apply(i,r)},n,!1),s&&t.apply(i,r),o}}}]).factory("throttle",["$timeout",function(e){return function(t,n,a){var o=null;return a||(a={}),function(){var i=this,r=arguments;o||(a.leading!==!1&&t.apply(i,r),o=e(function(){o=null,a.trailing!==!1&&t.apply(i,r)},n,!1))}}}]),angular.module("mgcrea.ngStrap.helpers.dimensions",[]).factory("dimensions",["$document","$window",function(){var t=(angular.element,{}),n=t.nodeName=function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()};t.css=function(t,n,a){var o;return o=t.currentStyle?t.currentStyle[n]:e.getComputedStyle?e.getComputedStyle(t)[n]:t.style[n],a===!0?parseFloat(o)||0:o},t.offset=function(t){var n=t.getBoundingClientRect(),a=t.ownerDocument;return{width:n.width||t.offsetWidth,height:n.height||t.offsetHeight,top:n.top+(e.pageYOffset||a.documentElement.scrollTop)-(a.documentElement.clientTop||0),left:n.left+(e.pageXOffset||a.documentElement.scrollLeft)-(a.documentElement.clientLeft||0)}},t.setOffset=function(e,n,a){var o,i,r,s,l,u,c,d=t.css(e,"position"),f=angular.element(e),p={};"static"===d&&(e.style.position="relative"),l=t.offset(e),r=t.css(e,"top"),u=t.css(e,"left"),c=("absolute"===d||"fixed"===d)&&(r+u).indexOf("auto")>-1,c?(o=t.position(e),s=o.top,i=o.left):(s=parseFloat(r)||0,i=parseFloat(u)||0),angular.isFunction(n)&&(n=n.call(e,a,l)),null!==n.top&&(p.top=n.top-l.top+s),null!==n.left&&(p.left=n.left-l.left+i),"using"in n?n.using.call(f,p):f.css({top:p.top+"px",left:p.left+"px"})},t.position=function(e){var o,i,r={top:0,left:0};return"fixed"===t.css(e,"position")?i=e.getBoundingClientRect():(o=a(e),i=t.offset(e),n(o,"html")||(r=t.offset(o)),r.top+=t.css(o,"borderTopWidth",!0),r.left+=t.css(o,"borderLeftWidth",!0)),{width:e.offsetWidth,height:e.offsetHeight,top:i.top-r.top-t.css(e,"marginTop",!0),left:i.left-r.left-t.css(e,"marginLeft",!0)}};var a=function(e){var a=e.ownerDocument,o=e.offsetParent||a;if(n(o,"#document"))return a.documentElement;for(;o&&!n(o,"html")&&"static"===t.css(o,"position");)o=o.offsetParent;return o||a.documentElement};return t.height=function(e,n){var a=e.offsetHeight;return n?a+=t.css(e,"marginTop",!0)+t.css(e,"marginBottom",!0):a-=t.css(e,"paddingTop",!0)+t.css(e,"paddingBottom",!0)+t.css(e,"borderTopWidth",!0)+t.css(e,"borderBottomWidth",!0),a +},t.width=function(e,n){var a=e.offsetWidth;return n?a+=t.css(e,"marginLeft",!0)+t.css(e,"marginRight",!0):a-=t.css(e,"paddingLeft",!0)+t.css(e,"paddingRight",!0)+t.css(e,"borderLeftWidth",!0)+t.css(e,"borderRightWidth",!0),a},t}]),angular.module("mgcrea.ngStrap.helpers.parseOptions",[]).provider("$parseOptions",function(){var e=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=["$parse","$q",function(t,n){function a(a,o){function i(e,t){return e.map(function(e,n){var a,o,i={};return i[c]=e,a=u(t,i),o=p(t,i),{label:a,value:o,index:n}})}var r={},s=angular.extend({},e,o);r.$values=[];var l,u,c,d,f,p,g;return r.init=function(){r.$match=l=a.match(s.regexp),u=t(l[2]||l[1]),c=l[4]||l[6],d=l[5],f=t(l[3]||""),p=t(l[2]?l[1]:c),g=t(l[7])},r.valuesFn=function(e,t){return n.when(g(e,t)).then(function(t){return r.$values=t?i(t,e):{},r.$values})},r.displayValue=function(e){var t={};return t[c]=e,u(t)},r.init(),r}return a}]}),angular.version.minor<3&&angular.version.dot<14&&angular.module("ng").factory("$$rAF",["$window","$timeout",function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame,a=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.mozCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,o=!!n,i=o?function(e){var t=n(e);return function(){a(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return i.supported=o,i}]),angular.module("mgcrea.ngStrap.modal",["mgcrea.ngStrap.helpers.dimensions"]).provider("$modal",function(){var e=this.defaults={animation:"am-fade",backdropAnimation:"am-fade",prefixClass:"modal",prefixEvent:"modal",placement:"top",template:"modal/modal.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","$sce","dimensions",function(n,a,o,i,r,s,l,u,c){function d(t){function n(){w.$emit(d.prefixEvent+".show",u)}function i(){w.$emit(d.prefixEvent+".hide",u),v.removeClass(d.prefixClass+"-open"),d.animation&&v.removeClass(d.prefixClass+"-with-"+d.animation)}function r(e){e.target===e.currentTarget&&("static"===d.backdrop?u.focus():u.hide())}function s(e){e.preventDefault()}var u={},d=u.$options=angular.extend({},e,t);u.$promise=g(d.template);var w=u.$scope=d.scope&&d.scope.$new()||a.$new();d.element||d.container||(d.container="body"),u.$id=d.id||d.element&&d.element.attr("id")||"",m(["title","content"],function(e){d[e]&&(w[e]=c.trustAsHtml(d[e]))}),w.$hide=function(){w.$$postDigest(function(){u.hide()})},w.$show=function(){w.$$postDigest(function(){u.show()})},w.$toggle=function(){w.$$postDigest(function(){u.toggle()})},u.$isShown=w.$isShown=!1,d.contentTemplate&&(u.$promise=u.$promise.then(function(e){var n=angular.element(e);return g(d.contentTemplate).then(function(e){var a=p('[ng-bind="content"]',n[0]).removeAttr("ng-bind").html(e);return t.template||a.next().remove(),n[0].outerHTML})}));var b,D,k=angular.element('
');return k.css({position:"fixed",top:"0px",left:"0px",bottom:"0px",right:"0px","z-index":1038}),u.$promise.then(function(e){angular.isObject(e)&&(e=e.data),d.html&&(e=e.replace(y,'ng-bind-html="')),e=$.apply(e),b=o(e),u.init()}),u.init=function(){d.show&&w.$$postDigest(function(){u.show()})},u.destroy=function(){D&&(D.remove(),D=null),k&&(k.remove(),k=null),w.$destroy()},u.show=function(){if(!u.$isShown){var e,t;if(angular.isElement(d.container)?(e=d.container,t=d.container[0].lastChild?angular.element(d.container[0].lastChild):null):d.container?(e=p(d.container),t=e[0].lastChild?angular.element(e[0].lastChild):null):(e=null,t=d.element),D=u.$element=b(w,function(){}),!w.$emit(d.prefixEvent+".show.before",u).defaultPrevented){D.css({display:"block"}).addClass(d.placement),d.animation&&(d.backdrop&&k.addClass(d.backdropAnimation),D.addClass(d.animation)),d.backdrop&&l.enter(k,v,null);var a=l.enter(D,e,t,n);a&&a.then&&a.then(n),u.$isShown=w.$isShown=!0,f(w);var o=D[0];h(function(){o.focus()}),v.addClass(d.prefixClass+"-open"),d.animation&&v.addClass(d.prefixClass+"-with-"+d.animation),d.backdrop&&(D.on("click",r),k.on("click",r),k.on("wheel",s)),d.keyboard&&D.on("keyup",u.$onKeyUp)}}},u.hide=function(){if(u.$isShown&&!w.$emit(d.prefixEvent+".hide.before",u).defaultPrevented){var e=l.leave(D,i);e&&e.then&&e.then(i),d.backdrop&&l.leave(k),u.$isShown=w.$isShown=!1,f(w),d.backdrop&&(D.off("click",r),k.off("click",r),k.off("wheel",s)),d.keyboard&&D.off("keyup",u.$onKeyUp)}},u.toggle=function(){u.$isShown?u.hide():u.show()},u.focus=function(){D[0].focus()},u.$onKeyUp=function(e){27===e.which&&u.$isShown&&(u.hide(),e.stopPropagation())},u}function f(e){e.$$phase||e.$root&&e.$root.$$phase||e.$digest()}function p(e,n){return angular.element((n||t).querySelectorAll(e))}function g(e){return w[e]?w[e]:w[e]=s.get(e,{cache:r}).then(function(e){return e.data})}var m=angular.forEach,$=String.prototype.trim,h=n.requestAnimationFrame||n.setTimeout,v=angular.element(n.document.body),y=/ng-bind="/gi,w={};return d}]}).directive("bsModal",["$window","$sce","$modal",function(e,t,n){return{restrict:"EAC",scope:!0,link:function(e,a,o){var i={scope:e,element:a,show:!1};angular.forEach(["template","contentTemplate","placement","container","animation","id"],function(e){angular.isDefined(o[e])&&(i[e]=o[e])});var r=/^(false|0|)$/;angular.forEach(["keyboard","html"],function(e){angular.isDefined(o[e])&&(i[e]=!r.test(o[e]))}),angular.isDefined(o.backdrop)&&(i.backdrop=r.test(o.backdrop)?!1:o.backdrop),angular.forEach(["title","content"],function(n){o[n]&&o.$observe(n,function(a){e[n]=t.trustAsHtml(a)})}),o.bsModal&&e.$watch(o.bsModal,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var s=n(i);a.on(o.trigger||"click",s.toggle),e.$on("$destroy",function(){s&&s.destroy(),i=null,s=null})}}}]),angular.module("mgcrea.ngStrap.navbar",[]).provider("$navbar",function(){var e=this.defaults={activeClass:"active",routeAttr:"data-match-route",strict:!1};this.$get=function(){return{defaults:e}}}).directive("bsNavbar",["$window","$location","$navbar",function(e,t,n){var a=n.defaults;return{restrict:"A",link:function(e,n,o){var i=angular.copy(a);angular.forEach(Object.keys(a),function(e){angular.isDefined(o[e])&&(i[e]=o[e])}),e.$watch(function(){return t.path()},function(e){var t=n[0].querySelectorAll("li["+i.routeAttr+"]");angular.forEach(t,function(t){var n=angular.element(t),a=n.attr(i.routeAttr).replace("/","\\/");i.strict&&(a="^"+a+"$");var o=new RegExp(a,"i");o.test(e)?n.addClass(i.activeClass):n.removeClass(i.activeClass)})})}}}]),angular.module("mgcrea.ngStrap.popover",["mgcrea.ngStrap.tooltip"]).provider("$popover",function(){var e=this.defaults={animation:"am-fade",customClass:"",container:!1,target:!1,placement:"right",template:"popover/popover.tpl.html",contentTemplate:!1,trigger:"click",keyboard:!0,html:!1,title:"",content:"",delay:0,autoClose:!1};this.$get=["$tooltip",function(t){function n(n,a){var o=angular.extend({},e,a),i=t(n,o);return o.content&&(i.$scope.content=o.content),i}return n}]}).directive("bsPopover",["$window","$sce","$popover",function(e,t,n){var a=e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,o,i){var r={scope:e};angular.forEach(["template","contentTemplate","placement","container","target","delay","trigger","keyboard","html","animation","customClass","autoClose","id"],function(e){angular.isDefined(i[e])&&(r[e]=i[e])}),angular.forEach(["title","content"],function(n){i[n]&&i.$observe(n,function(o,i){e[n]=t.trustAsHtml(o),angular.isDefined(i)&&a(function(){s&&s.$applyPlacement()})})}),i.bsPopover&&e.$watch(i.bsPopover,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t,angular.isDefined(n)&&a(function(){s&&s.$applyPlacement()})},!0),i.bsShow&&e.$watch(i.bsShow,function(e){s&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(popover),?/i)),e===!0?s.show():s.hide())}),i.viewport&&e.$watch(i.viewport,function(e){s&&angular.isDefined(e)&&s.setViewport(e)});var s=n(o,r);e.$on("$destroy",function(){s&&s.destroy(),r=null,s=null})}}}]),angular.module("mgcrea.ngStrap.scrollspy",["mgcrea.ngStrap.helpers.debounce","mgcrea.ngStrap.helpers.dimensions"]).provider("$scrollspy",function(){var e=this.$$spies={},n=this.defaults={debounce:150,throttle:100,offset:100};this.$get=["$window","$document","$rootScope","dimensions","debounce","throttle",function(a,o,i,r,s,l){function u(e,t){return e[0].nodeName&&e[0].nodeName.toLowerCase()===t.toLowerCase()}function c(o){var c=angular.extend({},n,o);c.element||(c.element=p);var g=u(c.element,"body"),m=g?d:c.element,$=g?"window":c.id;if(e[$])return e[$].$$count++,e[$];var h,v,y,w,b,D,k,S,x={},T=x.$trackedElements=[],C=[];return x.init=function(){this.$$count=1,w=s(this.checkPosition,c.debounce),b=l(this.checkPosition,c.throttle),m.on("click",this.checkPositionWithEventLoop),d.on("resize",w),m.on("scroll",b),D=s(this.checkOffsets,c.debounce),h=i.$on("$viewContentLoaded",D),v=i.$on("$includeContentLoaded",D),D(),$&&(e[$]=x)},x.destroy=function(){this.$$count--,this.$$count>0||(m.off("click",this.checkPositionWithEventLoop),d.off("resize",w),m.off("scroll",b),h(),v(),$&&delete e[$])},x.checkPosition=function(){if(C.length){if(S=(g?a.pageYOffset:m.prop("scrollTop"))||0,k=Math.max(a.innerHeight,f.prop("clientHeight")),SC[e+1].offsetTop))return x.$activateElement(C[e])}},x.checkPositionWithEventLoop=function(){setTimeout(x.checkPosition,1)},x.$activateElement=function(e){if(y){var t=x.$getTrackedElement(y);t&&(t.source.removeClass("active"),u(t.source,"li")&&u(t.source.parent().parent(),"li")&&t.source.parent().parent().removeClass("active"))}y=e.target,e.source.addClass("active"),u(e.source,"li")&&u(e.source.parent().parent(),"li")&&e.source.parent().parent().addClass("active")},x.$getTrackedElement=function(e){return T.filter(function(t){return t.target===e})[0]},x.checkOffsets=function(){angular.forEach(T,function(e){var n=t.querySelector(e.target);e.offsetTop=n?r.offset(n).top:null,c.offset&&null!==e.offsetTop&&(e.offsetTop-=1*c.offset)}),C=T.filter(function(e){return null!==e.offsetTop}).sort(function(e,t){return e.offsetTop-t.offsetTop}),w()},x.trackElement=function(e,t){T.push({target:e,source:t})},x.untrackElement=function(e,t){for(var n,a=T.length;a--;)if(T[a].target===e&&T[a].source===t){n=a;break}T=T.splice(n,1)},x.activate=function(e){T[e].addClass("active")},x.init(),x}var d=angular.element(a),f=angular.element(o.prop("documentElement")),p=angular.element(a.document.body);return c}]}).directive("bsScrollspy",["$rootScope","debounce","dimensions","$scrollspy",function(e,t,n,a){return{restrict:"EAC",link:function(e,t,n){var o={scope:e};angular.forEach(["offset","target"],function(e){angular.isDefined(n[e])&&(o[e]=n[e])});var i=a(o);i.trackElement(o.target,t),e.$on("$destroy",function(){i&&(i.untrackElement(o.target,t),i.destroy()),o=null,i=null})}}}]).directive("bsScrollspyList",["$rootScope","debounce","dimensions","$scrollspy",function(){return{restrict:"A",compile:function(e){var t=e[0].querySelectorAll("li > a[href]");angular.forEach(t,function(e){var t=angular.element(e);t.parent().attr("bs-scrollspy","").attr("data-target",t.attr("href"))})}}}]),angular.module("mgcrea.ngStrap.select",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$select",function(){var e=this.defaults={animation:"am-fade",prefixClass:"select",prefixEvent:"$select",placement:"bottom-left",template:"select/select.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,allNoneButtons:!1,sort:!0,caretHtml:' ',placeholder:"Choose among the following...",allText:"All",noneText:"None",maxLength:3,maxLengthHtml:"selected",iconCheckmark:"glyphicon glyphicon-ok"};this.$get=["$window","$document","$rootScope","$tooltip","$timeout",function(t,n,a,o,i){function r(t,n,a){var r={},s=angular.extend({},e,a);s.sort=s.sort.toString().match(/true|1/i),r=o(t,s);var u=r.$scope;u.$matches=[],u.$activeIndex=-1,u.$isMultiple=s.multiple,u.$showAllNoneButtons=s.allNoneButtons&&s.multiple,u.$iconCheckmark=s.iconCheckmark,u.$allText=s.allText,u.$noneText=s.noneText,u.$activate=function(e){u.$$postDigest(function(){r.activate(e)})},u.$select=function(e){u.$$postDigest(function(){r.select(e)})},u.$isVisible=function(){return r.$isVisible()},u.$isActive=function(e){return r.$isActive(e)},u.$selectAll=function(){for(var e=0;e=u.$matches.length&&(u.$activeIndex=s.multiple?[]:0)},r.$isVisible=function(){return s.minLength&&n?u.$matches.length&&n.$viewValue.length>=s.minLength:u.$matches.length},r.$isActive=function(e){return s.multiple?-1!==u.$activeIndex.indexOf(e):u.$activeIndex===e},r.$getIndex=function(e){var t=u.$matches.length,n=t;if(t){for(n=t;n--&&u.$matches[n].value!==e;);if(!(0>n))return n}},r.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),l){var t=angular.element(e.target);t.triggerHandler("click")}},r.$onKeyDown=function(e){return/(9|13|38|40)/.test(e.keyCode)?(e.preventDefault(),e.stopPropagation(),s.multiple&&9===e.keyCode?r.hide():s.multiple||13!==e.keyCode&&9!==e.keyCode?void(s.multiple||(38===e.keyCode&&u.$activeIndex>0?u.$activeIndex--:38===e.keyCode&&u.$activeIndex<0?u.$activeIndex=u.$matches.length-1:40===e.keyCode&&u.$activeIndex'),l.after(t)}var u=o(n.bsOptions),c=a(t,r,s),d=u.$match[7].replace(/\|.+/,"").trim();e.$watch(d,function(){u.valuesFn(e,r).then(function(e){c.update(e),r.$render()})},!0),e.$watch(n.ngModel,function(){c.$updateActiveIndex(),r.$render()},!0),r.$render=function(){var e,n;s.multiple&&angular.isArray(r.$modelValue)?(e=r.$modelValue.map(function(e){return n=c.$getIndex(e),angular.isDefined(n)?c.$scope.$matches[n].label:!1}).filter(angular.isDefined),e=e.length>(s.maxLength||i.maxLength)?e.length+" "+(s.maxLengthHtml||i.maxLengthHtml):e.join(", ")):(n=c.$getIndex(r.$modelValue),e=angular.isDefined(n)?c.$scope.$matches[n].label:!1),t.html((e?e:s.placeholder)+(s.caretHtml?s.caretHtml:i.caretHtml))},s.multiple&&(r.$isEmpty=function(e){return!e||0===e.length}),e.$on("$destroy",function(){c&&c.destroy(),s=null,c=null})}}}]),angular.module("mgcrea.ngStrap.tab",[]).provider("$tab",function(){var e=this.defaults={animation:"am-fade",template:"tab/tab.tpl.html",navClass:"nav-tabs",activeClass:"active"},t=this.controller=function(t,n,a){var o=this;o.$options=angular.copy(e),angular.forEach(["animation","navClass","activeClass"],function(e){angular.isDefined(a[e])&&(o.$options[e]=a[e])}),t.$navClass=o.$options.navClass,t.$activeClass=o.$options.activeClass,o.$panes=t.$panes=[],o.$activePaneChangeListeners=o.$viewChangeListeners=[],o.$push=function(e){o.$panes.push(e)},o.$remove=function(e){var t=o.$panes.indexOf(e),n=o.$panes.$active;o.$panes.splice(t,1),n>t?n--:t===n&&n===o.$panes.length&&n--,o.$setActive(n)},o.$panes.$active=0,o.$setActive=t.$setActive=function(e){o.$panes.$active=e,o.$activePaneChangeListeners.forEach(function(e){e()})}};this.$get=function(){var n={};return n.defaults=e,n.controller=t,n}}).directive("bsTabs",["$window","$animate","$tab","$parse",function(e,t,n,a){var o=n.defaults;return{require:["?ngModel","bsTabs"],transclude:!0,scope:!0,controller:["$scope","$element","$attrs",n.controller],templateUrl:function(e,t){return t.template||o.template},link:function(e,t,n,o){var i=o[0],r=o[1];if(i&&(console.warn("Usage of ngModel is deprecated, please use bsActivePane instead!"),r.$activePaneChangeListeners.push(function(){i.$setViewValue(r.$panes.$active)}),i.$formatters.push(function(e){return r.$setActive(1*e),e})),n.bsActivePane){var s=a(n.bsActivePane);r.$activePaneChangeListeners.push(function(){s.assign(e,r.$panes.$active)}),e.$watch(n.bsActivePane,function(e){r.$setActive(1*e)},!0)}}}}]).directive("bsPane",["$window","$animate","$sce",function(e,t,n){return{require:["^?ngModel","^bsTabs"],scope:!0,link:function(e,a,o,i){function r(){var n=s.$panes.indexOf(e),o=s.$panes.$active;t[n===o?"addClass":"removeClass"](a,s.$options.activeClass)}var s=(i[0],i[1]);a.addClass("tab-pane"),o.$observe("title",function(t){e.title=n.trustAsHtml(t)}),s.$options.animation&&a.addClass(s.$options.animation),o.$observe("disabled",function(t){e.disabled=e.$eval(t)}),s.$push(e),e.$on("$destroy",function(){s.$remove(e)}),s.$activePaneChangeListeners.push(function(){r()}),r()}}}]),angular.module("mgcrea.ngStrap.timepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.helpers.dateFormatter","mgcrea.ngStrap.tooltip"]).provider("$timepicker",function(){var e=this.defaults={animation:"am-fade",prefixClass:"timepicker",placement:"bottom-left",template:"timepicker/timepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:"date",timeFormat:"shortTime",timezone:null,modelTimeFormat:null,autoclose:!1,minTime:-1/0,maxTime:+1/0,length:5,hourStep:1,minuteStep:5,roundDisplay:!1,iconUp:"glyphicon glyphicon-chevron-up",iconDown:"glyphicon glyphicon-chevron-down",arrowBehavior:"pager"};this.$get=["$window","$document","$rootScope","$sce","$dateFormatter","$tooltip","$timeout",function(t,n,a,o,i,r,s){function l(t,n,a){function o(e){var t=6e4*g.minuteStep;return new Date(Math.floor(e.getTime()/t)*t)}function l(e,n){if(t[0].createTextRange){var a=t[0].createTextRange();a.collapse(!0),a.moveStart("character",e),a.moveEnd("character",n),a.select()}else t[0].setSelectionRange?t[0].setSelectionRange(e,n):angular.isUndefined(t[0].selectionStart)&&(t[0].selectionStart=e,t[0].selectionEnd=n)}function d(){t[0].focus()}var f=r(t,angular.extend({},e,a)),p=a.scope,g=f.$options,m=f.$scope,$=g.lang,h=function(e,t,n){return i.formatDate(e,t,$,n)},v=0,y=g.roundDisplay?o(new Date):new Date,w=n.$dateValue||y,b={hour:w.getHours(),meridian:w.getHours()<12,minute:w.getMinutes(),second:w.getSeconds(),millisecond:w.getMilliseconds()},D=i.getDatetimeFormat(g.timeFormat,$),k=i.hoursFormat(D),S=i.timeSeparator(D),x=i.minutesFormat(D),T=i.showAM(D);m.$iconUp=g.iconUp,m.$iconDown=g.iconDown,m.$select=function(e,t){f.select(e,t)},m.$moveIndex=function(e,t){f.$moveIndex(e,t)},m.$switchMeridian=function(e){f.switchMeridian(e)},f.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())?(f.$date=e,angular.extend(b,{hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()}),f.$build()):f.$isBuilt||f.$build()},f.select=function(e,t,a){(!n.$dateValue||isNaN(n.$dateValue.getTime()))&&(n.$dateValue=new Date(1970,0,1)),angular.isDate(e)||(e=new Date(e)),0===t?n.$dateValue.setHours(e.getHours()):1===t&&n.$dateValue.setMinutes(e.getMinutes()),n.$setViewValue(angular.copy(n.$dateValue)),n.$render(),g.autoclose&&!a&&s(function(){f.hide(!0)})},f.switchMeridian=function(e){if(n.$dateValue&&!isNaN(n.$dateValue.getTime())){var t=(e||n.$dateValue).getHours();n.$dateValue.setHours(12>t?t+12:t-12),n.$setViewValue(angular.copy(n.$dateValue)),n.$render()}},f.$build=function(){var e,t,n=m.midIndex=parseInt(g.length/2,10),a=[];for(e=0;e1*g.maxTime},m.$arrowAction=function(e,t){"picker"===g.arrowBehavior?f.$setTimeByStep(e,t):f.$moveIndex(e,t)},f.$setTimeByStep=function(e,t){{var n=new Date(f.$date),a=n.getHours(),o=(h(n,k).length,n.getMinutes());h(n,x).length}0===t?n.setHours(a-parseInt(g.hourStep,10)*e):n.setMinutes(o-parseInt(g.minuteStep,10)*e),f.select(n,t,!0)},f.$moveIndex=function(e,t){var n;0===t?(n=new Date(1970,0,1,b.hour+e*g.length,b.minute),angular.extend(b,{hour:n.getHours()})):1===t&&(n=new Date(1970,0,1,b.hour,b.minute+e*g.length*g.minuteStep),angular.extend(b,{minute:n.getMinutes()})),f.$build()},f.$onMouseDown=function(e){if("input"!==e.target.nodeName.toLowerCase()&&e.preventDefault(),e.stopPropagation(),c){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},f.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return f.hide(!0);var t=new Date(f.$date),n=t.getHours(),a=h(t,k).length,o=t.getMinutes(),i=h(t,x).length,r=/(37|39)/.test(e.keyCode),s=2+1*T;r&&(37===e.keyCode?v=1>v?s-1:v-1:39===e.keyCode&&(v=s-1>v?v+1:0));var u=[0,a];0===v?(38===e.keyCode?t.setHours(n-parseInt(g.hourStep,10)):40===e.keyCode&&t.setHours(n+parseInt(g.hourStep,10)),a=h(t,k).length,u=[0,a]):1===v?(38===e.keyCode?t.setMinutes(o-parseInt(g.minuteStep,10)):40===e.keyCode&&t.setMinutes(o+parseInt(g.minuteStep,10)),i=h(t,x).length,u=[a+1,a+1+i]):2===v&&(r||f.switchMeridian(),u=[a+1+i+1,a+1+i+3]),f.select(t,v,!0),l(u[0],u[1]),p.$digest()}};var C=f.init;f.init=function(){return u&&g.useNative?(t.prop("type","time"),void t.css("-webkit-appearance","textfield")):(c&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",d)),void C())};var M=f.destroy;f.destroy=function(){u&&g.useNative&&t.off("click",d),M()};var E=f.show;f.show=function(){E(),s(function(){f.$element.on(c?"touchstart":"mousedown",f.$onMouseDown),g.keyboard&&t.on("keydown",f.$onKeyDown)},0,!1)};var A=f.hide;return f.hide=function(e){f.$isShown&&(f.$element.off(c?"touchstart":"mousedown",f.$onMouseDown),g.keyboard&&t.off("keydown",f.$onKeyDown),A(e))},f}var u=(angular.element(t.document.body),/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)),c="createTouch"in t.document&&u;return e.lang||(e.lang=i.getDefaultLocale()),l.defaults=e,l}]}).directive("bsTimepicker",["$window","$parse","$q","$dateFormatter","$dateParser","$timepicker",function(e,t,n,a,o,i){{var r=i.defaults,s=/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent);e.requestAnimationFrame||e.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(e,t,n,l){function u(e){if(angular.isDate(e)){var t=isNaN(d.minTime)||new Date(e.getTime()).setFullYear(1970,0,1)>=d.minTime,n=isNaN(d.maxTime)||new Date(e.getTime()).setFullYear(1970,0,1)<=d.maxTime,a=t&&n;l.$setValidity("date",a),l.$setValidity("min",t),l.$setValidity("max",n),a&&(l.$dateValue=e)}}function c(){return!l.$dateValue||isNaN(l.$dateValue.getTime())?"":m(l.$dateValue,d.timeFormat)}var d={scope:e,controller:l};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","timeType","timeFormat","timezone","modelTimeFormat","useNative","hourStep","minuteStep","length","arrowBehavior","iconUp","iconDown","id"],function(e){angular.isDefined(n[e])&&(d[e]=n[e])});var f=/^(false|0|)$/;angular.forEach(["roundDisplay"],function(e){angular.isDefined(n[e])&&(d[e]=!f.test(n[e]))}),n.bsShow&&e.$watch(n.bsShow,function(e){p&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(timepicker),?/i)),e===!0?p.show():p.hide())}),s&&(d.useNative||r.useNative)&&(d.timeFormat="HH:mm");var p=i(t,l,d);d=p.$options;var g=d.lang,m=function(e,t,n){return a.formatDate(e,t,g,n)},$=o({format:d.timeFormat,lang:g});angular.forEach(["minTime","maxTime"],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){p.$options[e]=$.getTimeForAttribute(e,t),!isNaN(p.$options[e])&&p.$build(),u(l.$dateValue)})}),e.$watch(n.ngModel,function(){p.update(l.$dateValue)},!0),l.$parsers.unshift(function(e){var t;if(!e)return l.$setValidity("date",!0),null;var n=angular.isDate(e)?e:$.parse(e,l.$dateValue);return!n||isNaN(n.getTime())?void l.$setValidity("date",!1):(u(n),"string"===d.timeType?(t=$.timezoneOffsetAdjust(n,d.timezone,!0),m(t,d.modelTimeFormat||d.timeFormat)):(t=$.timezoneOffsetAdjust(l.$dateValue,d.timezone,!0),"number"===d.timeType?t.getTime():"unix"===d.timeType?t.getTime()/1e3:"iso"===d.timeType?t.toISOString():new Date(t)))}),l.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===d.timeType?$.parse(e,null,d.modelTimeFormat):new Date("unix"===d.timeType?1e3*e:e),l.$dateValue=$.timezoneOffsetAdjust(t,d.timezone),c()}),l.$render=function(){t.val(c())},e.$on("$destroy",function(){p&&p.destroy(),d=null,p=null})}}}]),angular.module("mgcrea.ngStrap.typeahead",["mgcrea.ngStrap.tooltip","mgcrea.ngStrap.helpers.parseOptions"]).provider("$typeahead",function(){var e=this.defaults={animation:"am-fade",prefixClass:"typeahead",prefixEvent:"$typeahead",placement:"bottom-left",template:"typeahead/typeahead.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,minLength:1,filter:"filter",limit:6,autoSelect:!1,comparator:""};this.$get=["$window","$rootScope","$tooltip","$timeout",function(t,n,a,o){function i(t,n,i){var r={},s=angular.extend({},e,i);r=a(t,s);var l=i.scope,u=r.$scope;u.$resetMatches=function(){u.$matches=[],u.$activeIndex=s.autoSelect?0:-1},u.$resetMatches(),u.$activate=function(e){u.$$postDigest(function(){r.activate(e)})},u.$select=function(e){u.$$postDigest(function(){r.select(e)})},u.$isVisible=function(){return r.$isVisible()},r.update=function(e){u.$matches=e,u.$activeIndex>=e.length&&(u.$activeIndex=s.autoSelect?0:-1),/^(bottom|bottom-left|bottom-right)$/.test(s.placement)||o(r.$applyPlacement)},r.activate=function(e){u.$activeIndex=e},r.select=function(e){var t=u.$matches[e].value;n.$setViewValue(t),n.$render(),u.$resetMatches(),l&&l.$digest(),u.$emit(s.prefixEvent+".select",t,e,r)},r.$isVisible=function(){return s.minLength&&n?u.$matches.length&&angular.isString(n.$viewValue)&&n.$viewValue.length>=s.minLength:!!u.$matches.length},r.$getIndex=function(e){var t=u.$matches.length,n=t;if(t){for(n=t;n--&&u.$matches[n].value!==e;);if(!(0>n))return n}},r.$onMouseDown=function(e){e.preventDefault(),e.stopPropagation()},r.$onKeyDown=function(e){/(38|40|13)/.test(e.keyCode)&&(r.$isVisible()&&(e.preventDefault(),e.stopPropagation()),13===e.keyCode&&u.$matches.length?r.select(u.$activeIndex):38===e.keyCode&&u.$activeIndex>0?u.$activeIndex--:40===e.keyCode&&u.$activeIndex0)return void s.$setViewValue(s.$viewValue.substring(0,s.$viewValue.length-1));e.length>c&&(e=e.slice(0,c));var n=g.$isVisible();n&&g.update(e),(1!==e.length||e[0].value!==t)&&(!n&&g.update(e),s.$render())})}),s.$formatters.push(function(e){var t=p.displayValue(e);return t===n?"":t}),s.$render=function(){if(s.$isEmpty(s.$viewValue))return t.val("");var e=g.$getIndex(s.$modelValue),n=angular.isDefined(e)?g.$scope.$matches[e].label:s.$viewValue;n=angular.isObject(n)?p.displayValue(n):n,t.val(n?n.toString().replace(/<(?:.|\n)*?>/gm,"").trim():"")},e.$on("$destroy",function(){g&&g.destroy(),l=null,g=null})}}}]),angular.module("mgcrea.ngStrap.tooltip",["mgcrea.ngStrap.helpers.dimensions"]).provider("$tooltip",function(){var e=this.defaults={animation:"am-fade",customClass:"",prefixClass:"tooltip",prefixEvent:"tooltip",container:!1,target:!1,placement:"top",template:"tooltip/tooltip.tpl.html",contentTemplate:!1,trigger:"hover focus",keyboard:!1,html:!1,show:!1,title:"",type:"",delay:0,autoClose:!1,bsEnabled:!0,viewport:{selector:"body",padding:0}};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$sce","dimensions","$$rAF","$timeout",function(n,a,o,i,r,s,l,u,c,d,f){function p(i,r){function s(){N.$emit(H.prefixEvent+".show",P)}function p(){if(N.$emit(H.prefixEvent+".hide",P),z===B){if(W&&"focus"===H.trigger)return i[0].blur();O()}}function b(){var e=H.trigger.split(" ");angular.forEach(e,function(e){"click"===e?i.on("click",P.toggle):"manual"!==e&&(i.on("hover"===e?"mouseenter":"focus",P.enter),i.on("hover"===e?"mouseleave":"blur",P.leave),"button"===I&&"hover"!==e&&i.on(v?"touchstart":"mousedown",P.$onFocusElementMouseDown)) +})}function D(){for(var e=H.trigger.split(" "),t=e.length;t--;){var n=e[t];"click"===n?i.off("click",P.toggle):"manual"!==n&&(i.off("hover"===n?"mouseenter":"focus",P.enter),i.off("hover"===n?"mouseleave":"blur",P.leave),"button"===I&&"hover"!==n&&i.off(v?"touchstart":"mousedown",P.$onFocusElementMouseDown))}}function k(){"focus"!==H.trigger?z.on("keyup",P.$onKeyUp):i.on("keyup",P.$onFocusKeyUp)}function S(){"focus"!==H.trigger?z.off("keyup",P.$onKeyUp):i.off("keyup",P.$onFocusKeyUp)}function x(){f(function(){z.on("click",C),w.on("click",P.hide),_=!0},0,!1)}function T(){_&&(z.off("click",C),w.off("click",P.hide),_=!1)}function C(e){e.stopPropagation()}function M(e){e=e||H.target||i;var a=e[0],o="BODY"===a.tagName,r=a.getBoundingClientRect(),s={};for(var l in r)s[l]=r[l];null===s.width&&(s=angular.extend({},s,{width:r.right-r.left,height:r.bottom-r.top}));var u=o?{top:0,left:0}:c.offset(a),d={scroll:o?t.documentElement.scrollTop||t.body.scrollTop:e.prop("scrollTop")||0},f=o?{width:t.documentElement.clientWidth,height:n.innerHeight}:null;return angular.extend({},s,d,f,u)}function E(e,t,n,a){var o,i=e.split("-");switch(i[0]){case"right":o={top:t.top+t.height/2-a/2,left:t.left+t.width};break;case"bottom":o={top:t.top+t.height,left:t.left+t.width/2-n/2};break;case"left":o={top:t.top+t.height/2-a/2,left:t.left-n};break;default:o={top:t.top-a,left:t.left+t.width/2-n/2}}if(!i[1])return o;if("top"===i[0]||"bottom"===i[0])switch(i[1]){case"left":o.left=t.left;break;case"right":o.left=t.left+t.width-n}else if("left"===i[0]||"right"===i[0])switch(i[1]){case"top":o.top=t.top-a;break;case"bottom":o.top=t.top+t.height}return o}function A(e,t){var n=z[0],a=n.offsetWidth,o=n.offsetHeight,i=parseInt(c.css(n,"margin-top"),10),r=parseInt(c.css(n,"margin-left"),10);isNaN(i)&&(i=0),isNaN(r)&&(r=0),e.top=e.top+i,e.left=e.left+r,c.setOffset(n,angular.extend({using:function(e){z.css({top:Math.round(e.top)+"px",left:Math.round(e.left)+"px"})}},e),0);var s=n.offsetWidth,l=n.offsetHeight;if("top"===t&&l!==o&&(e.top=e.top+o-l),!/top-left|top-right|bottom-left|bottom-right/.test(t)){var u=F(t,e,s,l);if(u.left?e.left+=u.left:e.top+=u.top,c.setOffset(n,e),/top|right|bottom|left/.test(t)){var d=/top|bottom/.test(t),f=d?2*u.left-a+s:2*u.top-o+l,p=d?"offsetWidth":"offsetHeight";V(f,n[p],d)}}}function F(e,t,n,a){var o={top:0,left:0},i=H.viewport&&m(H.viewport.selector||H.viewport);if(!i)return o;var r=H.viewport&&H.viewport.padding||0,s=M(i);if(/right|left/.test(e)){var l=t.top-r-s.scroll,u=t.top+r-s.scroll+a;ls.top+s.height&&(o.top=s.top+s.height-u)}else{var c=t.left-r,d=t.left+r+n;cs.width&&(o.left=s.left+s.width-d)}return o}function V(e,t,n){var a=m(".tooltip-arrow, .arrow",z[0]);a.css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")}function O(){clearTimeout(R),P.$isShown&&null!==z&&(H.autoClose&&T(),H.keyboard&&S()),j&&(j.$destroy(),j=null),z&&(z.remove(),z=P.$element=null)}var P={},I=i[0].nodeName.toLowerCase(),H=P.$options=angular.extend({},e,r);P.$promise=$(H.template);var N=P.$scope=H.scope&&H.scope.$new()||a.$new();if(H.delay&&angular.isString(H.delay)){var L=H.delay.split(",").map(parseFloat);H.delay=L.length>1?{show:L[0],hide:L[1]}:L[0]}P.$id=H.id||i.attr("id")||"",H.title&&(N.title=u.trustAsHtml(H.title)),N.$setEnabled=function(e){N.$$postDigest(function(){P.setEnabled(e)})},N.$hide=function(){N.$$postDigest(function(){P.hide()})},N.$show=function(){N.$$postDigest(function(){P.show()})},N.$toggle=function(){N.$$postDigest(function(){P.toggle()})},P.$isShown=N.$isShown=!1;var R,Y;H.contentTemplate&&(P.$promise=P.$promise.then(function(e){var t=angular.element(e);return $(H.contentTemplate).then(function(e){var n=m('[ng-bind="content"]',t[0]);return n.length||(n=m('[ng-bind="title"]',t[0])),n.removeAttr("ng-bind").html(e),t[0].outerHTML})}));var q,z,K,U,j;P.$promise.then(function(e){angular.isObject(e)&&(e=e.data),H.html&&(e=e.replace(y,'ng-bind-html="')),e=h.apply(e),K=e,q=o(e),P.init()}),P.init=function(){H.delay&&angular.isNumber(H.delay)&&(H.delay={show:H.delay,hide:H.delay}),"self"===H.container?U=i:angular.isElement(H.container)?U=H.container:H.container&&(U=m(H.container)),b(),H.target&&(H.target=angular.isElement(H.target)?H.target:m(H.target)),H.show&&N.$$postDigest(function(){"focus"===H.trigger?i[0].focus():P.show()})},P.destroy=function(){D(),O(),N.$destroy()},P.enter=function(){return clearTimeout(R),Y="in",H.delay&&H.delay.show?void(R=setTimeout(function(){"in"===Y&&P.show()},H.delay.show)):P.show()},P.show=function(){if(H.bsEnabled&&!P.$isShown){N.$emit(H.prefixEvent+".show.before",P);var e,t;H.container?(e=U,t=U[0].lastChild?angular.element(U[0].lastChild):null):(e=null,t=i),z&&O(),j=P.$scope.$new(),z=P.$element=q(j,function(){}),z.css({top:"-9999px",left:"-9999px",display:"block",visibility:"hidden"}),H.animation&&z.addClass(H.animation),H.type&&z.addClass(H.prefixClass+"-"+H.type),H.customClass&&z.addClass(H.customClass),t?t.after(z):e.prepend(z),P.$isShown=N.$isShown=!0,g(N),P.$applyPlacement();var n=l.enter(z,e,t,s);n&&n.then&&n.then(s),g(N),d(function(){z&&z.css({visibility:"visible"})}),H.keyboard&&("focus"!==H.trigger&&P.focus(),k()),H.autoClose&&x()}},P.leave=function(){return clearTimeout(R),Y="out",H.delay&&H.delay.hide?void(R=setTimeout(function(){"out"===Y&&P.hide()},H.delay.hide)):P.hide()};var W,B;P.hide=function(e){if(P.$isShown){N.$emit(H.prefixEvent+".hide.before",P),W=e,B=z;var t=l.leave(z,p);t&&t.then&&t.then(p),P.$isShown=N.$isShown=!1,g(N),H.keyboard&&null!==z&&S(),H.autoClose&&null!==z&&T()}},P.toggle=function(){P.$isShown?P.leave():P.enter()},P.focus=function(){z[0].focus()},P.setEnabled=function(e){H.bsEnabled=e},P.setViewport=function(e){H.viewport=e},P.$applyPlacement=function(){if(z){var t=H.placement,n=/\s?auto?\s?/i,a=n.test(t);a&&(t=t.replace(n,"")||e.placement),z.addClass(H.placement);var o=M(),r=z.prop("offsetWidth"),s=z.prop("offsetHeight");if(a){var l=t,u=H.container?m(H.container):i.parent(),c=M(u);l.indexOf("bottom")>=0&&o.bottom+s>c.bottom?t=l.replace("bottom","top"):l.indexOf("top")>=0&&o.top-sc.width?t="right"===l?"left":t.replace("left","right"):("left"===l||"bottom-right"===l||"top-right"===l)&&o.left-r

')}]),angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(t){t.put("alert/alert.tpl.html",'
 
')}]),angular.module("mgcrea.ngStrap.datepicker").run(["$templateCache",function(t){t.put("datepicker/datepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.dropdown").run(["$templateCache",function(t){t.put("dropdown/dropdown.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.modal").run(["$templateCache",function(t){t.put("modal/modal.tpl.html",'')}]),angular.module("mgcrea.ngStrap.popover").run(["$templateCache",function(t){t.put("popover/popover.tpl.html",'

')}]),angular.module("mgcrea.ngStrap.select").run(["$templateCache",function(t){t.put("select/select.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tab").run(["$templateCache",function(t){t.put("tab/tab.tpl.html",'
')}]),angular.module("mgcrea.ngStrap.timepicker").run(["$templateCache",function(t){t.put("timepicker/timepicker.tpl.html",'')}]),angular.module("mgcrea.ngStrap.typeahead").run(["$templateCache",function(t){t.put("typeahead/typeahead.tpl.html",'')}]),angular.module("mgcrea.ngStrap.tooltip").run(["$templateCache",function(t){t.put("tooltip/tooltip.tpl.html",'
')}])}(window,document); \ No newline at end of file diff --git a/js/shared/angular.min.js b/src/js/shared/angular.min.js similarity index 100% rename from js/shared/angular.min.js rename to src/js/shared/angular.min.js diff --git a/js/shared/angular.min.js.map b/src/js/shared/angular.min.js.map similarity index 100% rename from js/shared/angular.min.js.map rename to src/js/shared/angular.min.js.map diff --git a/js/shared/bootstrap.min.js b/src/js/shared/bootstrap.min.js similarity index 100% rename from js/shared/bootstrap.min.js rename to src/js/shared/bootstrap.min.js diff --git a/js/shared/jquery.min.js b/src/js/shared/jquery.min.js similarity index 100% rename from js/shared/jquery.min.js rename to src/js/shared/jquery.min.js diff --git a/js/shared/ui-bootstrap.min.js b/src/js/shared/ui-bootstrap.min.js similarity index 100% rename from js/shared/ui-bootstrap.min.js rename to src/js/shared/ui-bootstrap.min.js diff --git a/js/verify.js b/src/js/verify.js similarity index 58% rename from js/verify.js rename to src/js/verify.js index de8ff96..9729681 100644 --- a/js/verify.js +++ b/src/js/verify.js @@ -1,16 +1,21 @@ function set(el,text){ - while(el.firstChild)el.removeChild(el.firstChild); + while (el.firstChild) { + el.removeChild(el.firstChild); + } el.appendChild(document.createTextNode(text)) } var defSayings = [ "I am in control over my actions", - "I have done my main goals for the day and need to use this website", - "Sites are simply tools. They don't control me", + "I am aware of my main goals for the day", + "Sites are only tools. They don't control me", "Resisting this site is easy", - "I ain't gonna get tricky tricked by my mindless monotony", - "I am going here not out of habit, but for a solid purpose", - "Taking a second and thinkin a linkin" + "Not all those who wander are lost", + "I will fight my automatic actions", + "Conserve willpower through smart choices", + "Mindless rote behaviour is changeable", + "Refocus on what needs to be done", + "What was the cue that led me here?" ] /* setupUpdater will be called once, on page load. */ @@ -28,7 +33,6 @@ window.onload = function setupUpdater(){ function handleChange(){ var newText=input.value; var score = a.get(newText)[0][0]; - // console.log("handling change: score: " + score); if (score>0.88) { passed = true; return; @@ -37,58 +41,59 @@ window.onload = function setupUpdater(){ } function eventHandler(){ - if(timeout) clearTimeout(timeout); - timeout=setTimeout(handleChange, 50); + if (timeout) { + clearTimeout(timeout); + } + timeout=setTimeout(handleChange, 30); } input.onkeydown=input.onkeyup=onClick=eventHandler; }; var activate = function(){ -// console.log("does activate function trigger"); var currTabs = chrome.extension.getBackgroundPage().currTabs; chrome.tabs.query({ active: true, windowId: chrome.windows.WINDOW_ID_CURRENT }, function (tabs){ result = $.grep(currTabs, function(e){ - console.log(currTabs); e.currStatus = false; return e.tabId == tabs[0].id; }); - console.log(result[0]); if (result.length==0){ - return ""; + return false; } else{ - $("#message").text("You've Unlocked The Button...\nI hope you don't regret this"); + $("#message").text("Button Unlocked"); console.log(result[0]); $(".btn-success").removeAttr("disabled"); $(".btn-success").attr("href", result[0].origUrl); + return true; } }); - return 'poop'; + return false; } -//Button Listener function yeah yeah its jquery and the rest of this wasnt, I am learning! +//jquery (old code) +//click listener $(function(){ $(".btn-primary").click(function(){ - if (passed){ + if (passed) { activate(); - } - else - $("#message").text("You failed! (some typos are allowed)"); + } else { + $("#message").text("Some typos are allowed, but not that many!"); + } }); }); //enter listener $(function(){ - $('#input-a').keydown(function(e) { + $('#input-a, #input-b').keydown(function(e) { if (e.keyCode == 13){ - if (passed){ + if (passed) { activate(); - } - else - $("#message").text("You failed! (some typos are allowed)"); + } else { + $("#message").text("Some typos are allowed, but not that many!"); + } } }); }); diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..c8f9704 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,37 @@ +{ + "manifest_version": 2, + "name": "MAD - Mindful Anti Distraction", + "short_name": "MAD BETA", + "description": "This extension will hopefully help you be less distracted", + "version": "0.3.0", + "background": { + "scripts": [ + "js/shared/jquery.min.js", + "js/checkerino.js", + "background.js" + ], + "pages": [ + "background.html" + ] + }, + "browser_action": { + "default_icon": "img/128.png", + "default_title": "MAD", + "default_popup": "popup.html" + }, + "web_accessible_resources": [ + "background.html", + "css/*", + "js/*" + ], + "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", + "permissions": [ + "activeTab", + "webRequest", + "webRequestBlocking", + "storage", + "idle", + "", + "tabs" + ] +} diff --git a/popup.html b/src/popup.html similarity index 66% rename from popup.html rename to src/popup.html index 7a8fa14..e41d1f5 100644 --- a/popup.html +++ b/src/popup.html @@ -5,6 +5,7 @@ + @@ -16,11 +17,13 @@ - -
-
- + + diff --git a/src/reasons.html b/src/reasons.html new file mode 100644 index 0000000..c5f1fc3 --- /dev/null +++ b/src/reasons.html @@ -0,0 +1,43 @@ + + + + + MAD Reasons + + + + + + + + + + + +
+

Good Reasons

+
+
+

Unsorted Reasons

+
+

{{ reason }}

+
+
+
+

Poor Reasons

+
+ + + + + + +