فهرست منبع

Initial commit (2)

boutils 10 سال پیش
والد
کامیت
a4b2552b37
100فایلهای تغییر یافته به همراه34334 افزوده شده و 0 حذف شده
  1. 50 0
      ajax/datastores.php
  2. 88 0
      ajax/oracle.php
  3. 1 0
      ajax/postForm.php
  4. 7741 0
      css/angular-material.css
  5. 17 0
      css/angular.typeahead.css
  6. 3 0
      css/font-awesome.min.css
  7. 476 0
      css/main.css
  8. 4 0
      css/material-design-iconic-font.min.css
  9. 163 0
      css/theme.css
  10. 2 0
      data/Contour_Manche.json
  11. 2 0
      data/Couverture_MIMO_deploiement_5zones.json
  12. 2 0
      data/Couverture_mimo.json
  13. 2 0
      data/FFTH_zapm_partielle.json
  14. 3 0
      data/TEL_FT_ADSL.json
  15. 23 0
      data/dictionary.json
  16. 50 0
      datastores.php
  17. BIN
      fonts/FontAwesome.otf
  18. BIN
      fonts/Material-Design-Iconic-Font.eot
  19. 28 0
      fonts/Material-Design-Iconic-Font.svg
  20. BIN
      fonts/Material-Design-Iconic-Font.ttf
  21. BIN
      fonts/Material-Design-Iconic-Font.woff
  22. BIN
      fonts/fontawesome-webfont.eot
  23. 196 0
      fonts/fontawesome-webfont.svg
  24. BIN
      fonts/fontawesome-webfont.ttf
  25. BIN
      fonts/fontawesome-webfont.woff
  26. 125 0
      html/form.html
  27. BIN
      img/adsl.png
  28. BIN
      img/background.png
  29. BIN
      img/favicon.ico
  30. BIN
      img/fibre.png
  31. BIN
      img/filter.png
  32. BIN
      img/logo.png
  33. BIN
      img/mimo.png
  34. 638 0
      index.html
  35. 139 0
      js/angular-adaptive-detection.js
  36. 21316 0
      js/angular-material.js
  37. 1214 0
      js/app.js
  38. 9 0
      js/bootstrap-typeahead.min.js
  39. 7 0
      js/proj4js/.gitignore
  40. 11 0
      js/proj4js/.jshintrc
  41. 4 0
      js/proj4js/.npmignore
  42. 4 0
      js/proj4js/.travis.yml
  43. 25 0
      js/proj4js/AUTHORS
  44. 110 0
      js/proj4js/Gruntfile.js
  45. 29 0
      js/proj4js/LICENSE.md
  46. 17 0
      js/proj4js/PUBLISHING.md
  47. 153 0
      js/proj4js/README.md
  48. 29 0
      js/proj4js/REFERENCES.md
  49. 24 0
      js/proj4js/bower.json
  50. 21 0
      js/proj4js/changelog.md
  51. 17 0
      js/proj4js/component.json
  52. 35 0
      js/proj4js/lib/Point.js
  53. 33 0
      js/proj4js/lib/Proj.js
  54. 51 0
      js/proj4js/lib/adjust_axis.js
  55. 3 0
      js/proj4js/lib/common/acosh.js
  56. 6 0
      js/proj4js/lib/common/adjust_lat.js
  57. 11 0
      js/proj4js/lib/common/adjust_lon.js
  58. 4 0
      js/proj4js/lib/common/asinh.js
  59. 6 0
      js/proj4js/lib/common/asinz.js
  60. 3 0
      js/proj4js/lib/common/atanh.js
  61. 5 0
      js/proj4js/lib/common/cosh.js
  62. 3 0
      js/proj4js/lib/common/e0fn.js
  63. 3 0
      js/proj4js/lib/common/e1fn.js
  64. 3 0
      js/proj4js/lib/common/e2fn.js
  65. 3 0
      js/proj4js/lib/common/e3fn.js
  66. 5 0
      js/proj4js/lib/common/fL.js
  67. 4 0
      js/proj4js/lib/common/gN.js
  68. 16 0
      js/proj4js/lib/common/imlfn.js
  69. 30 0
      js/proj4js/lib/common/inverseNadCvt.js
  70. 13 0
      js/proj4js/lib/common/invlatiso.js
  71. 32 0
      js/proj4js/lib/common/iqsfnz.js
  72. 16 0
      js/proj4js/lib/common/latiso.js
  73. 3 0
      js/proj4js/lib/common/mlfn.js
  74. 4 0
      js/proj4js/lib/common/msfnz.js
  75. 26 0
      js/proj4js/lib/common/nadInterBreakout.js
  76. 31 0
      js/proj4js/lib/common/nad_cvt.js
  77. 67 0
      js/proj4js/lib/common/nad_intr.js
  78. 16 0
      js/proj4js/lib/common/phi2z.js
  79. 24 0
      js/proj4js/lib/common/pj_enfn.js
  80. 20 0
      js/proj4js/lib/common/pj_inv_mlfn.js
  81. 5 0
      js/proj4js/lib/common/pj_mlfn.js
  82. 10 0
      js/proj4js/lib/common/qsfnz.js
  83. 3 0
      js/proj4js/lib/common/sign.js
  84. 5 0
      js/proj4js/lib/common/sinh.js
  85. 3 0
      js/proj4js/lib/common/srat.js
  86. 5 0
      js/proj4js/lib/common/tanh.js
  87. 13 0
      js/proj4js/lib/common/toPoint.js
  88. 8 0
      js/proj4js/lib/common/tsfnz.js
  89. 80 0
      js/proj4js/lib/constants/Datum.js
  90. 215 0
      js/proj4js/lib/constants/Ellipsoid.js
  91. 13 0
      js/proj4js/lib/constants/PrimeMeridian.js
  92. 23 0
      js/proj4js/lib/constants/grids.js
  93. 64 0
      js/proj4js/lib/core.js
  94. 404 0
      js/proj4js/lib/datum.js
  95. 99 0
      js/proj4js/lib/datum_transform.js
  96. 55 0
      js/proj4js/lib/defs.js
  97. 56 0
      js/proj4js/lib/deriveConstants.js
  98. 14 0
      js/proj4js/lib/extend.js
  99. 11 0
      js/proj4js/lib/global.js
  100. 29 0
      js/proj4js/lib/includedProjections.js

+ 50 - 0
ajax/datastores.php

@@ -0,0 +1,50 @@
+<?php
+function connect(){
+
+  $link = mysql_connect('127.0.0.1','eligibilite','B3Kg7z6d') or die(mysql_error());
+  mysql_select_db('eligibilite', $link) or die(mysql_error());
+}
+
+
+function executeQuery($requete) {
+  $resultat = mysql_query($requete) or die(mysql_error());
+
+  if(substr($requete, 0, 6) === 'SELECT'){
+    while($donnees=mysql_fetch_array($resultat)){
+      $resultats[]=$donnees;
+    }
+    if (!isset($resultats)) {
+      return null;
+    }
+  }
+  else if(substr($requete, 0, 6) === 'INSERT'){
+    $resultats = mysql_insert_id();
+  }
+  else {
+    $resultats = 'ok';
+  }
+
+  return $resultats;
+}
+
+connect();
+
+if($_POST['query']) {
+  $resultat = executeQuery($_POST['query']);
+}
+
+if($_POST['mail']) {
+    // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
+     $headers  = 'MIME-Version: 1.0' . "\r\n";
+     $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
+
+     // En-têtes additionnels
+     $headers .= 'From: Manche Numérique <ffth@manchenumerique.fr>' . "\r\n";
+
+     // Envoi
+     $to=$_POST['mail']['to'];
+     mail($to, $_POST['mail']['sujet'], $_POST['mail']['message'], $headers);
+}
+
+echo json_encode($resultat);
+?>

+ 88 - 0
ajax/oracle.php

@@ -0,0 +1,88 @@
+<?php
+error_reporting(E_ALL);
+
+echo phpinfo();
+/*
+Bonsoir à tous,
+Voici les informations de connexion transmis par le MePI pour l’appli d’éligibilité. Pour les tables Oracle en lecture, Stéphane ou Christophe pourront en détailler le contenu.
+Si souci technique sur ces accès, joindre Timothy THIEBOT par mail : timothy.thiebot@manche.fr
+
+Les informations de connexion pour le serveur p-web-56 :
+
+@IP : 10.0.45.67
+CentOs 7.0
+User : root
+Pwd : Php$1G
+
+Users mysql : root
+Pwd : zkrInpR3Yf
+
+User ftp "ELIGIBILITE" le mot de passe est dans /etc/vsftpd/login.txt
+Chemin du ftp /var/www/html
+
+compte pour l’accès en lecture seule sur la base SIGCG50 de P-BDD-16 :
+User oracle : ELIGIBILITE_R
+Pwd : H6nmb0KCwR
+
+Accès en lecture seule pour le compte ELIGIBILITE_R sur :
+Schéma SIG_ANT :
+-          MIMO_ANTC_COUVERTURE_SSS OK
+
+-          FTTH_MN_ZAPM_PARTIELLE OK
+
+-          FTTH_MN_PRISE_LOT   OK
+
+
+
+Schéma SIG_REFERENTIEL :
+-          TEL_FT_ADSL OK
+*/
+
+// MYDB =
+//      (DESCRIPTION =
+//        (ADDRESS = (PROTOCOL = TCP)(PORT = 1521))
+//        (CONNECT_DATA =
+//          (SERVER = P-BDD-16)
+//          (SERVICE_NAME = SIGCG50)
+//        )
+//      );
+
+//$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA=(SERVER = P-BDD-16)(SERVICE_NAME = SIGCG50)))";
+$db = "(DESCRIPTION =
+          (ADDRESS_LIST =
+            (ADDRESS = (PROTOCOL = TCP)(HOST = P-BDD-16)(PORT = 1521))
+          )
+          (CONNECT_DATA =
+            (SERVICE_NAME = SIGCG50)
+          )
+        )";
+
+echo 'Init connection ';
+
+// Connexion au service XE (i.e. la base de données) sur la machine "localhost"
+//$conn = oci_connect('ELIGIBILITE_R', 'H6nmb0KCwR', ' P-BDD-16/SIGCG50');
+$conn = oci_connect('ELIGIBILITE_R', 'H6nmb0KCwR', $db);
+
+echo '$conn'.$conn;
+if (!$conn) {
+    $e = oci_error();
+    echo 'Not connected';
+    echo trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
+}
+
+echo 'Connected';
+
+$stid = oci_parse($conn, 'SELECT * FROM Ftth_Mn_Zapm_Partielle');
+oci_execute($stid);
+
+echo "<table border='1'>\n";
+while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
+    echo "<tr>\n";
+    foreach ($row as $item) {
+        echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n";
+    }
+    echo "</tr>\n";
+}
+echo "</table>\n";
+
+?>

+ 1 - 0
ajax/postForm.php

@@ -0,0 +1 @@
+postForm.php

+ 7741 - 0
css/angular-material.css

@@ -0,0 +1,7741 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v0.10.1-master-8157dec
+ */
+html, body {
+  height: 100%;
+  color: rgba(0, 0, 0, 0.87);
+  background: white;
+  position: relative; }
+
+body {
+  margin: 0;
+  padding: 0; }
+
+[tabindex='-1']:focus {
+  outline: none; }
+
+.inset {
+  padding: 10px; }
+
+button.md-no-style {
+  font-weight: normal;
+  background-color: inherit;
+  text-align: left;
+  border: none;
+  padding: 0;
+  margin: 0; }
+
+select, button, textarea, input {
+  vertical-align: baseline; }
+
+input[type="reset"], input[type="submit"], html input[type="button"], button {
+  cursor: pointer;
+  -webkit-appearance: button; }
+  input[type="reset"][disabled], input[type="submit"][disabled], html input[type="button"][disabled], button[disabled] {
+    cursor: default; }
+
+textarea {
+  vertical-align: top;
+  overflow: auto; }
+
+input[type="search"] {
+  -webkit-appearance: textfield;
+  box-sizing: content-box;
+  -webkit-box-sizing: content-box; }
+  input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
+    -webkit-appearance: none; }
+
+.md-visually-hidden {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  text-transform: none;
+  width: 1px; }
+
+.md-shadow {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  border-radius: inherit;
+  pointer-events: none; }
+
+.md-shadow-bottom-z-1 {
+  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); }
+
+.md-shadow-bottom-z-2 {
+  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); }
+
+.md-shadow-animated.md-shadow {
+  transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); }
+
+/*
+ * A container inside of a rippling element (eg a button),
+ * which contains all of the individual ripples
+ */
+.md-ripple-container {
+  pointer-events: none;
+  position: absolute;
+  overflow: hidden;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  transition: all 0.55s cubic-bezier(0.25, 0.8, 0.25, 1); }
+
+.md-ripple {
+  position: absolute;
+  -webkit-transform: translate(-50%, -50%) scale(0);
+          transform: translate(-50%, -50%) scale(0);
+  -webkit-transform-origin: 50% 50%;
+          transform-origin: 50% 50%;
+  opacity: 0;
+  border-radius: 50%; }
+  .md-ripple.md-ripple-placed {
+    transition: margin 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), border 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), width 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), opacity 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), -webkit-transform 0.9s cubic-bezier(0.25, 0.8, 0.25, 1);
+    transition: margin 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), border 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), width 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), opacity 0.9s cubic-bezier(0.25, 0.8, 0.25, 1), transform 0.9s cubic-bezier(0.25, 0.8, 0.25, 1); }
+  .md-ripple.md-ripple-scaled {
+    -webkit-transform: translate(-50%, -50%) scale(1);
+            transform: translate(-50%, -50%) scale(1); }
+  .md-ripple.md-ripple-active, .md-ripple.md-ripple-full, .md-ripple.md-ripple-visible {
+    opacity: 0.20; }
+
+.md-padding {
+  padding: 8px; }
+
+.md-margin {
+  margin: 8px; }
+
+.md-scroll-mask {
+  position: absolute;
+  background-color: transparent;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0; }
+  .md-scroll-mask > .md-scroll-mask-bar {
+    display: block;
+    position: absolute;
+    background-color: #fafafa;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    z-index: 65;
+    box-shadow: inset 0px 0px 1px rgba(0, 0, 0, 0.3); }
+
+@media (min-width: 600px) {
+  .md-padding {
+    padding: 16px; } }
+
+html, body {
+  -webkit-tap-highlight-color: transparent;
+  -webkit-touch-callout: none;
+  min-height: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale; }
+
+/************
+ * Headings
+ ************/
+.md-display-4 {
+  font-size: 112px;
+  font-weight: 300;
+  letter-spacing: -0.01em;
+  line-height: 112px; }
+
+.md-display-3 {
+  font-size: 56px;
+  font-weight: 400;
+  letter-spacing: -0.005em;
+  line-height: 56px; }
+
+.md-display-2 {
+  font-size: 45px;
+  font-weight: 400;
+  line-height: 64px; }
+
+.md-display-1 {
+  font-size: 34px;
+  font-weight: 400;
+  line-height: 40px; }
+
+.md-headline {
+  font-size: 24px;
+  font-weight: 400;
+  line-height: 32px; }
+
+.md-title {
+  font-size: 20px;
+  font-weight: 500;
+  letter-spacing: 0.005em; }
+
+.md-subhead {
+  font-size: 16px;
+  font-weight: 400;
+  letter-spacing: 0.01em;
+  line-height: 24px; }
+
+/************
+ * Body Copy
+ ************/
+.md-body-1 {
+  font-size: 14px;
+  font-weight: 400;
+  letter-spacing: 0.01em;
+  line-height: 20px; }
+
+.md-body-2 {
+  font-size: 14px;
+  font-weight: 500;
+  letter-spacing: 0.01em;
+  line-height: 24px; }
+
+.md-caption {
+  font-size: 12px;
+  letter-spacing: 0.02em; }
+
+.md-button {
+  letter-spacing: 0.01em; }
+
+/************
+ * Defaults
+ ************/
+button, select, html, textarea, input {
+  font-family: Roboto, 'Helvetica Neue', sans-serif; }
+
+select, button, textarea, input {
+  font-size: 100%; }
+
+/* Sizes:
+  0    <= size < 600  Phone
+  600  <= size < 960  Tablet
+  960  <= size < 1200 Tablet-Landscape
+  1200 <= size         PC
+*/
+.layout {
+  box-sizing: border-box;
+  display: -webkit-flex;
+  display: -moz-flex;
+  display: -ms-flexbox;
+  display: flex; }
+
+.layout-column {
+  -ms-flex-direction: column;
+      flex-direction: column;
+  -webkit-flex-direction: column; }
+
+.layout-row {
+  -ms-flex-direction: row;
+      flex-direction: row;
+  -webkit-flex-direction: row; }
+
+.layout-padding > .flex-sm, .layout-padding > .flex-lt-md {
+  padding: 4px; }
+
+.layout-padding, .layout-padding > .flex, .layout-padding > .flex-gt-sm, .layout-padding > .flex-md, .layout-padding > .flex-lt-lg {
+  padding: 8px; }
+
+.layout-padding > .flex-gt-md, .layout-padding > .flex-lg {
+  padding: 16px; }
+
+.layout-margin > .flex-sm, .layout-margin > .flex-lt-md {
+  margin: 4px; }
+
+.layout-margin, .layout-margin > .flex, .layout-margin > .flex-gt-sm, .layout-margin > .flex-md, .layout-margin > .flex-lt-lg {
+  margin: 8px; }
+
+.layout-margin > .flex-gt-md, .layout-margin > .flex-lg {
+  margin: 16px; }
+
+.layout-wrap {
+  -webkit-flex-wrap: wrap;
+      -ms-flex-wrap: wrap;
+          flex-wrap: wrap; }
+
+.layout-fill {
+  margin: 0;
+  min-height: 100%;
+  width: 100%; }
+
+@-moz-document url-prefix() {
+  .layout-fill {
+    margin: 0;
+    width: 100%;
+    min-height: auto;
+    height: inherit; } }
+
+.flex {
+  box-sizing: border-box;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1; }
+
+.flex-0 {
+  -webkit-flex: 0 0 0%;
+      -ms-flex: 0 0 0%;
+          flex: 0 0 0%; }
+
+.layout-row > .flex-0 {
+  max-width: 0%; }
+
+.layout-column > .flex-0 {
+  max-height: 0%; }
+
+.flex-5 {
+  -webkit-flex: 0 0 5%;
+      -ms-flex: 0 0 5%;
+          flex: 0 0 5%; }
+
+.layout-row > .flex-5 {
+  max-width: 5%; }
+
+.layout-column > .flex-5 {
+  max-height: 5%; }
+
+.flex-10 {
+  -webkit-flex: 0 0 10%;
+      -ms-flex: 0 0 10%;
+          flex: 0 0 10%; }
+
+.layout-row > .flex-10 {
+  max-width: 10%; }
+
+.layout-column > .flex-10 {
+  max-height: 10%; }
+
+.flex-15 {
+  -webkit-flex: 0 0 15%;
+      -ms-flex: 0 0 15%;
+          flex: 0 0 15%; }
+
+.layout-row > .flex-15 {
+  max-width: 15%; }
+
+.layout-column > .flex-15 {
+  max-height: 15%; }
+
+.flex-20 {
+  -webkit-flex: 0 0 20%;
+      -ms-flex: 0 0 20%;
+          flex: 0 0 20%; }
+
+.layout-row > .flex-20 {
+  max-width: 20%; }
+
+.layout-column > .flex-20 {
+  max-height: 20%; }
+
+.flex-25 {
+  -webkit-flex: 0 0 25%;
+      -ms-flex: 0 0 25%;
+          flex: 0 0 25%; }
+
+.layout-row > .flex-25 {
+  max-width: 25%; }
+
+.layout-column > .flex-25 {
+  max-height: 25%; }
+
+.flex-30 {
+  -webkit-flex: 0 0 30%;
+      -ms-flex: 0 0 30%;
+          flex: 0 0 30%; }
+
+.layout-row > .flex-30 {
+  max-width: 30%; }
+
+.layout-column > .flex-30 {
+  max-height: 30%; }
+
+.flex-35 {
+  -webkit-flex: 0 0 35%;
+      -ms-flex: 0 0 35%;
+          flex: 0 0 35%; }
+
+.layout-row > .flex-35 {
+  max-width: 35%; }
+
+.layout-column > .flex-35 {
+  max-height: 35%; }
+
+.flex-40 {
+  -webkit-flex: 0 0 40%;
+      -ms-flex: 0 0 40%;
+          flex: 0 0 40%; }
+
+.layout-row > .flex-40 {
+  max-width: 40%; }
+
+.layout-column > .flex-40 {
+  max-height: 40%; }
+
+.flex-45 {
+  -webkit-flex: 0 0 45%;
+      -ms-flex: 0 0 45%;
+          flex: 0 0 45%; }
+
+.layout-row > .flex-45 {
+  max-width: 45%; }
+
+.layout-column > .flex-45 {
+  max-height: 45%; }
+
+.flex-50 {
+  -webkit-flex: 0 0 50%;
+      -ms-flex: 0 0 50%;
+          flex: 0 0 50%; }
+
+.layout-row > .flex-50 {
+  max-width: 50%; }
+
+.layout-column > .flex-50 {
+  max-height: 50%; }
+
+.flex-55 {
+  -webkit-flex: 0 0 55%;
+      -ms-flex: 0 0 55%;
+          flex: 0 0 55%; }
+
+.layout-row > .flex-55 {
+  max-width: 55%; }
+
+.layout-column > .flex-55 {
+  max-height: 55%; }
+
+.flex-60 {
+  -webkit-flex: 0 0 60%;
+      -ms-flex: 0 0 60%;
+          flex: 0 0 60%; }
+
+.layout-row > .flex-60 {
+  max-width: 60%; }
+
+.layout-column > .flex-60 {
+  max-height: 60%; }
+
+.flex-65 {
+  -webkit-flex: 0 0 65%;
+      -ms-flex: 0 0 65%;
+          flex: 0 0 65%; }
+
+.layout-row > .flex-65 {
+  max-width: 65%; }
+
+.layout-column > .flex-65 {
+  max-height: 65%; }
+
+.flex-70 {
+  -webkit-flex: 0 0 70%;
+      -ms-flex: 0 0 70%;
+          flex: 0 0 70%; }
+
+.layout-row > .flex-70 {
+  max-width: 70%; }
+
+.layout-column > .flex-70 {
+  max-height: 70%; }
+
+.flex-75 {
+  -webkit-flex: 0 0 75%;
+      -ms-flex: 0 0 75%;
+          flex: 0 0 75%; }
+
+.layout-row > .flex-75 {
+  max-width: 75%; }
+
+.layout-column > .flex-75 {
+  max-height: 75%; }
+
+.flex-80 {
+  -webkit-flex: 0 0 80%;
+      -ms-flex: 0 0 80%;
+          flex: 0 0 80%; }
+
+.layout-row > .flex-80 {
+  max-width: 80%; }
+
+.layout-column > .flex-80 {
+  max-height: 80%; }
+
+.flex-85 {
+  -webkit-flex: 0 0 85%;
+      -ms-flex: 0 0 85%;
+          flex: 0 0 85%; }
+
+.layout-row > .flex-85 {
+  max-width: 85%; }
+
+.layout-column > .flex-85 {
+  max-height: 85%; }
+
+.flex-90 {
+  -webkit-flex: 0 0 90%;
+      -ms-flex: 0 0 90%;
+          flex: 0 0 90%; }
+
+.layout-row > .flex-90 {
+  max-width: 90%; }
+
+.layout-column > .flex-90 {
+  max-height: 90%; }
+
+.flex-95 {
+  -webkit-flex: 0 0 95%;
+      -ms-flex: 0 0 95%;
+          flex: 0 0 95%; }
+
+.layout-row > .flex-95 {
+  max-width: 95%; }
+
+.layout-column > .flex-95 {
+  max-height: 95%; }
+
+.flex-100 {
+  -webkit-flex: 0 0 100%;
+      -ms-flex: 0 0 100%;
+          flex: 0 0 100%; }
+
+.layout-row > .flex-100 {
+  max-width: 100%; }
+
+.layout-column > .flex-100 {
+  max-height: 100%; }
+
+.flex-33, .flex-34 {
+  -webkit-flex: 0 0 33.33%;
+      -ms-flex: 0 0 33.33%;
+          flex: 0 0 33.33%; }
+
+.flex-66, .flex-67 {
+  -webkit-flex: 0 0 66.66%;
+      -ms-flex: 0 0 66.66%;
+          flex: 0 0 66.66%; }
+
+.layout-row > .flex-33, .layout-row > .flex-34 {
+  max-width: 33.33%; }
+.layout-row > .flex-66, .layout-row > .flex-67 {
+  max-width: 66.66%; }
+
+.layout-column > .flex-33, .layout-column > .flex-34 {
+  max-height: 33.33%; }
+.layout-column > .flex-66, .layout-column > .flex-67 {
+  max-height: 66.66%; }
+
+.layout-align-center, .layout-align-center-center, .layout-align-center-start, .layout-align-center-end {
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center; }
+
+.layout-align-end, .layout-align-end-center, .layout-align-end-start, .layout-align-end-end {
+  -webkit-justify-content: flex-end;
+      -ms-flex-pack: end;
+          justify-content: flex-end; }
+
+.layout-align-space-around, .layout-align-space-around-center, .layout-align-space-around-start, .layout-align-space-around-end {
+  -webkit-justify-content: space-around;
+      -ms-flex-pack: distribute;
+          justify-content: space-around; }
+
+.layout-align-space-between, .layout-align-space-between-center, .layout-align-space-between-start, .layout-align-space-between-end {
+  -webkit-justify-content: space-between;
+      -ms-flex-pack: justify;
+          justify-content: space-between; }
+
+.layout-align-center-center, .layout-align-start-center, .layout-align-end-center, .layout-align-space-between-center, .layout-align-space-around-center {
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center; }
+
+.layout-align-center-start, .layout-align-start-start, .layout-align-end-start, .layout-align-space-between-start, .layout-align-space-around-start {
+  -webkit-align-items: flex-start;
+      -ms-flex-align: start;
+          align-items: flex-start; }
+
+.layout-align-center-end, .layout-align-start-end, .layout-align-end-end, .layout-align-space-between-end, .layout-align-space-around-end {
+  -webkit-align-items: flex-end;
+      -ms-flex-align: end;
+          align-items: flex-end; }
+
+.flex-order-0 {
+  -webkit-order: 0;
+      -ms-flex-order: 0;
+          order: 0; }
+
+.flex-order-1 {
+  -webkit-order: 1;
+      -ms-flex-order: 1;
+          order: 1; }
+
+.flex-order-2 {
+  -webkit-order: 2;
+      -ms-flex-order: 2;
+          order: 2; }
+
+.flex-order-3 {
+  -webkit-order: 3;
+      -ms-flex-order: 3;
+          order: 3; }
+
+.flex-order-4 {
+  -webkit-order: 4;
+      -ms-flex-order: 4;
+          order: 4; }
+
+.flex-order-5 {
+  -webkit-order: 5;
+      -ms-flex-order: 5;
+          order: 5; }
+
+.flex-order-6 {
+  -webkit-order: 6;
+      -ms-flex-order: 6;
+          order: 6; }
+
+.flex-order-7 {
+  -webkit-order: 7;
+      -ms-flex-order: 7;
+          order: 7; }
+
+.flex-order-8 {
+  -webkit-order: 8;
+      -ms-flex-order: 8;
+          order: 8; }
+
+.flex-order-9 {
+  -webkit-order: 9;
+      -ms-flex-order: 9;
+          order: 9; }
+
+.offset-5 {
+  margin-left: 5%; }
+
+.offset-10 {
+  margin-left: 10%; }
+
+.offset-15 {
+  margin-left: 15%; }
+
+.offset-20 {
+  margin-left: 20%; }
+
+.offset-25 {
+  margin-left: 25%; }
+
+.offset-30 {
+  margin-left: 30%; }
+
+.offset-35 {
+  margin-left: 35%; }
+
+.offset-40 {
+  margin-left: 40%; }
+
+.offset-45 {
+  margin-left: 45%; }
+
+.offset-50 {
+  margin-left: 50%; }
+
+.offset-55 {
+  margin-left: 55%; }
+
+.offset-60 {
+  margin-left: 60%; }
+
+.offset-65 {
+  margin-left: 65%; }
+
+.offset-70 {
+  margin-left: 70%; }
+
+.offset-75 {
+  margin-left: 75%; }
+
+.offset-80 {
+  margin-left: 80%; }
+
+.offset-85 {
+  margin-left: 85%; }
+
+.offset-90 {
+  margin-left: 90%; }
+
+.offset-95 {
+  margin-left: 95%; }
+
+.offset-33, .offset-34 {
+  margin-left: 33.33%; }
+
+.offset-66, .offset-67 {
+  margin-left: 66.66%; }
+
+/**
+ * `hide-gt-sm show-gt-lg` should hide from 600px to 1200px
+ * `show-md hide-gt-sm` should show from 0px to 960px and hide at >960px
+ * `hide-gt-md show-gt-sm` should show everywhere (show overrides hide)`
+ */
+@media (max-width: 599px) {
+  .hide-sm:not(.show-sm):not(.show), .hide:not(.show-sm):not(.show) {
+    display: none; }
+  .flex-order-sm-0 {
+    -webkit-order: 0;
+        -ms-flex-order: 0;
+            order: 0; }
+  .flex-order-sm-1 {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1; }
+  .flex-order-sm-2 {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2; }
+  .flex-order-sm-3 {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3; }
+  .flex-order-sm-4 {
+    -webkit-order: 4;
+        -ms-flex-order: 4;
+            order: 4; }
+  .flex-order-sm-5 {
+    -webkit-order: 5;
+        -ms-flex-order: 5;
+            order: 5; }
+  .flex-order-sm-6 {
+    -webkit-order: 6;
+        -ms-flex-order: 6;
+            order: 6; }
+  .flex-order-sm-7 {
+    -webkit-order: 7;
+        -ms-flex-order: 7;
+            order: 7; }
+  .flex-order-sm-8 {
+    -webkit-order: 8;
+        -ms-flex-order: 8;
+            order: 8; }
+  .flex-order-sm-9 {
+    -webkit-order: 9;
+        -ms-flex-order: 9;
+            order: 9; }
+  .layout-align-sm-center, .layout-align-sm-center-center, .layout-align-sm-center-start, .layout-align-sm-center-end {
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center; }
+  .layout-align-sm-end, .layout-align-sm-end-center, .layout-align-sm-end-start, .layout-align-sm-end-end {
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end; }
+  .layout-align-sm-space-around, .layout-align-sm-space-around-center, .layout-align-sm-space-around-start, .layout-align-sm-space-around-end {
+    -webkit-justify-content: space-around;
+        -ms-flex-pack: distribute;
+            justify-content: space-around; }
+  .layout-align-sm-space-between, .layout-align-sm-space-between-center, .layout-align-sm-space-between-start, .layout-align-sm-space-between-end {
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between; }
+  .layout-align-sm-center-center, .layout-align-sm-start-center, .layout-align-sm-end-center, .layout-align-sm-space-between-center, .layout-align-sm-space-around-center {
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .layout-align-sm-center-start, .layout-align-sm-start-start, .layout-align-sm-end-start, .layout-align-sm-space-between-start, .layout-align-sm-space-around-start {
+    -webkit-align-items: flex-start;
+        -ms-flex-align: start;
+            align-items: flex-start; }
+  .layout-align-sm-center-end, .layout-align-sm-start-end, .layout-align-sm-end-end, .layout-align-sm-space-between-end, .layout-align-sm-space-around-end {
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end; }
+  .layout-sm {
+    box-sizing: border-box;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flexbox;
+    display: flex; }
+  .layout-sm-column {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+  .layout-sm-row {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  .offset-sm-5 {
+    margin-left: 5%; }
+  .offset-sm-10 {
+    margin-left: 10%; }
+  .offset-sm-15 {
+    margin-left: 15%; }
+  .offset-sm-20 {
+    margin-left: 20%; }
+  .offset-sm-25 {
+    margin-left: 25%; }
+  .offset-sm-30 {
+    margin-left: 30%; }
+  .offset-sm-35 {
+    margin-left: 35%; }
+  .offset-sm-40 {
+    margin-left: 40%; }
+  .offset-sm-45 {
+    margin-left: 45%; }
+  .offset-sm-50 {
+    margin-left: 50%; }
+  .offset-sm-55 {
+    margin-left: 55%; }
+  .offset-sm-60 {
+    margin-left: 60%; }
+  .offset-sm-65 {
+    margin-left: 65%; }
+  .offset-sm-70 {
+    margin-left: 70%; }
+  .offset-sm-75 {
+    margin-left: 75%; }
+  .offset-sm-80 {
+    margin-left: 80%; }
+  .offset-sm-85 {
+    margin-left: 85%; }
+  .offset-sm-90 {
+    margin-left: 90%; }
+  .offset-sm-95 {
+    margin-left: 95%; }
+  .offset-sm-33, .offset-sm-34 {
+    margin-left: 33.33%; }
+  .offset-sm-66, .offset-sm-67 {
+    margin-left: 66.66%; }
+  .flex-sm {
+    box-sizing: border-box;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1; }
+  .flex-sm-0 {
+    -webkit-flex: 0 0 0%;
+        -ms-flex: 0 0 0%;
+            flex: 0 0 0%; }
+  .layout-row > .flex-sm-0 {
+    max-width: 0%; }
+  .layout-column > .flex-sm-0 {
+    max-height: 0%; }
+  .flex-sm-5 {
+    -webkit-flex: 0 0 5%;
+        -ms-flex: 0 0 5%;
+            flex: 0 0 5%; }
+  .layout-row > .flex-sm-5 {
+    max-width: 5%; }
+  .layout-column > .flex-sm-5 {
+    max-height: 5%; }
+  .flex-sm-10 {
+    -webkit-flex: 0 0 10%;
+        -ms-flex: 0 0 10%;
+            flex: 0 0 10%; }
+  .layout-row > .flex-sm-10 {
+    max-width: 10%; }
+  .layout-column > .flex-sm-10 {
+    max-height: 10%; }
+  .flex-sm-15 {
+    -webkit-flex: 0 0 15%;
+        -ms-flex: 0 0 15%;
+            flex: 0 0 15%; }
+  .layout-row > .flex-sm-15 {
+    max-width: 15%; }
+  .layout-column > .flex-sm-15 {
+    max-height: 15%; }
+  .flex-sm-20 {
+    -webkit-flex: 0 0 20%;
+        -ms-flex: 0 0 20%;
+            flex: 0 0 20%; }
+  .layout-row > .flex-sm-20 {
+    max-width: 20%; }
+  .layout-column > .flex-sm-20 {
+    max-height: 20%; }
+  .flex-sm-25 {
+    -webkit-flex: 0 0 25%;
+        -ms-flex: 0 0 25%;
+            flex: 0 0 25%; }
+  .layout-row > .flex-sm-25 {
+    max-width: 25%; }
+  .layout-column > .flex-sm-25 {
+    max-height: 25%; }
+  .flex-sm-30 {
+    -webkit-flex: 0 0 30%;
+        -ms-flex: 0 0 30%;
+            flex: 0 0 30%; }
+  .layout-row > .flex-sm-30 {
+    max-width: 30%; }
+  .layout-column > .flex-sm-30 {
+    max-height: 30%; }
+  .flex-sm-35 {
+    -webkit-flex: 0 0 35%;
+        -ms-flex: 0 0 35%;
+            flex: 0 0 35%; }
+  .layout-row > .flex-sm-35 {
+    max-width: 35%; }
+  .layout-column > .flex-sm-35 {
+    max-height: 35%; }
+  .flex-sm-40 {
+    -webkit-flex: 0 0 40%;
+        -ms-flex: 0 0 40%;
+            flex: 0 0 40%; }
+  .layout-row > .flex-sm-40 {
+    max-width: 40%; }
+  .layout-column > .flex-sm-40 {
+    max-height: 40%; }
+  .flex-sm-45 {
+    -webkit-flex: 0 0 45%;
+        -ms-flex: 0 0 45%;
+            flex: 0 0 45%; }
+  .layout-row > .flex-sm-45 {
+    max-width: 45%; }
+  .layout-column > .flex-sm-45 {
+    max-height: 45%; }
+  .flex-sm-50 {
+    -webkit-flex: 0 0 50%;
+        -ms-flex: 0 0 50%;
+            flex: 0 0 50%; }
+  .layout-row > .flex-sm-50 {
+    max-width: 50%; }
+  .layout-column > .flex-sm-50 {
+    max-height: 50%; }
+  .flex-sm-55 {
+    -webkit-flex: 0 0 55%;
+        -ms-flex: 0 0 55%;
+            flex: 0 0 55%; }
+  .layout-row > .flex-sm-55 {
+    max-width: 55%; }
+  .layout-column > .flex-sm-55 {
+    max-height: 55%; }
+  .flex-sm-60 {
+    -webkit-flex: 0 0 60%;
+        -ms-flex: 0 0 60%;
+            flex: 0 0 60%; }
+  .layout-row > .flex-sm-60 {
+    max-width: 60%; }
+  .layout-column > .flex-sm-60 {
+    max-height: 60%; }
+  .flex-sm-65 {
+    -webkit-flex: 0 0 65%;
+        -ms-flex: 0 0 65%;
+            flex: 0 0 65%; }
+  .layout-row > .flex-sm-65 {
+    max-width: 65%; }
+  .layout-column > .flex-sm-65 {
+    max-height: 65%; }
+  .flex-sm-70 {
+    -webkit-flex: 0 0 70%;
+        -ms-flex: 0 0 70%;
+            flex: 0 0 70%; }
+  .layout-row > .flex-sm-70 {
+    max-width: 70%; }
+  .layout-column > .flex-sm-70 {
+    max-height: 70%; }
+  .flex-sm-75 {
+    -webkit-flex: 0 0 75%;
+        -ms-flex: 0 0 75%;
+            flex: 0 0 75%; }
+  .layout-row > .flex-sm-75 {
+    max-width: 75%; }
+  .layout-column > .flex-sm-75 {
+    max-height: 75%; }
+  .flex-sm-80 {
+    -webkit-flex: 0 0 80%;
+        -ms-flex: 0 0 80%;
+            flex: 0 0 80%; }
+  .layout-row > .flex-sm-80 {
+    max-width: 80%; }
+  .layout-column > .flex-sm-80 {
+    max-height: 80%; }
+  .flex-sm-85 {
+    -webkit-flex: 0 0 85%;
+        -ms-flex: 0 0 85%;
+            flex: 0 0 85%; }
+  .layout-row > .flex-sm-85 {
+    max-width: 85%; }
+  .layout-column > .flex-sm-85 {
+    max-height: 85%; }
+  .flex-sm-90 {
+    -webkit-flex: 0 0 90%;
+        -ms-flex: 0 0 90%;
+            flex: 0 0 90%; }
+  .layout-row > .flex-sm-90 {
+    max-width: 90%; }
+  .layout-column > .flex-sm-90 {
+    max-height: 90%; }
+  .flex-sm-95 {
+    -webkit-flex: 0 0 95%;
+        -ms-flex: 0 0 95%;
+            flex: 0 0 95%; }
+  .layout-row > .flex-sm-95 {
+    max-width: 95%; }
+  .layout-column > .flex-sm-95 {
+    max-height: 95%; }
+  .flex-sm-100 {
+    -webkit-flex: 0 0 100%;
+        -ms-flex: 0 0 100%;
+            flex: 0 0 100%; }
+  .layout-row > .flex-sm-100 {
+    max-width: 100%; }
+  .layout-column > .flex-sm-100 {
+    max-height: 100%; }
+  .flex-sm-33, .flex-sm-34 {
+    -webkit-flex: 0 0 33.33%;
+        -ms-flex: 0 0 33.33%;
+            flex: 0 0 33.33%; }
+  .flex-sm-66, .flex-sm-67 {
+    -webkit-flex: 0 0 66.66%;
+        -ms-flex: 0 0 66.66%;
+            flex: 0 0 66.66%; }
+  .layout-row > .flex-sm-33, .layout-row > .flex-sm-34 {
+    max-width: 33.33%; }
+  .layout-row > .flex-sm-66, .layout-row > .flex-sm-67 {
+    max-width: 66.66%; }
+  .layout-column > .flex-sm-33, .layout-column > .flex-sm-34 {
+    max-height: 33.33%; }
+  .layout-column > .flex-sm-66, .layout-column > .flex-sm-67 {
+    max-height: 66.66%; } }
+
+@media (min-width: 600px) {
+  .flex-order-gt-sm-0 {
+    -webkit-order: 0;
+        -ms-flex-order: 0;
+            order: 0; }
+  .flex-order-gt-sm-1 {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1; }
+  .flex-order-gt-sm-2 {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2; }
+  .flex-order-gt-sm-3 {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3; }
+  .flex-order-gt-sm-4 {
+    -webkit-order: 4;
+        -ms-flex-order: 4;
+            order: 4; }
+  .flex-order-gt-sm-5 {
+    -webkit-order: 5;
+        -ms-flex-order: 5;
+            order: 5; }
+  .flex-order-gt-sm-6 {
+    -webkit-order: 6;
+        -ms-flex-order: 6;
+            order: 6; }
+  .flex-order-gt-sm-7 {
+    -webkit-order: 7;
+        -ms-flex-order: 7;
+            order: 7; }
+  .flex-order-gt-sm-8 {
+    -webkit-order: 8;
+        -ms-flex-order: 8;
+            order: 8; }
+  .flex-order-gt-sm-9 {
+    -webkit-order: 9;
+        -ms-flex-order: 9;
+            order: 9; }
+  .layout-align-gt-sm-center, .layout-align-gt-sm-center-center, .layout-align-gt-sm-center-start, .layout-align-gt-sm-center-end {
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center; }
+  .layout-align-gt-sm-end, .layout-align-gt-sm-end-center, .layout-align-gt-sm-end-start, .layout-align-gt-sm-end-end {
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end; }
+  .layout-align-gt-sm-space-around, .layout-align-gt-sm-space-around-center, .layout-align-gt-sm-space-around-start, .layout-align-gt-sm-space-around-end {
+    -webkit-justify-content: space-around;
+        -ms-flex-pack: distribute;
+            justify-content: space-around; }
+  .layout-align-gt-sm-space-between, .layout-align-gt-sm-space-between-center, .layout-align-gt-sm-space-between-start, .layout-align-gt-sm-space-between-end {
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between; }
+  .layout-align-gt-sm-center-center, .layout-align-gt-sm-start-center, .layout-align-gt-sm-end-center, .layout-align-gt-sm-space-between-center, .layout-align-gt-sm-space-around-center {
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .layout-align-gt-sm-center-start, .layout-align-gt-sm-start-start, .layout-align-gt-sm-end-start, .layout-align-gt-sm-space-between-start, .layout-align-gt-sm-space-around-start {
+    -webkit-align-items: flex-start;
+        -ms-flex-align: start;
+            align-items: flex-start; }
+  .layout-align-gt-sm-center-end, .layout-align-gt-sm-start-end, .layout-align-gt-sm-end-end, .layout-align-gt-sm-space-between-end, .layout-align-gt-sm-space-around-end {
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end; }
+  .layout-gt-sm {
+    box-sizing: border-box;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flexbox;
+    display: flex; }
+  .layout-gt-sm-column {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+  .layout-gt-sm-row {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  .offset-gt-sm-5 {
+    margin-left: 5%; }
+  .offset-gt-sm-10 {
+    margin-left: 10%; }
+  .offset-gt-sm-15 {
+    margin-left: 15%; }
+  .offset-gt-sm-20 {
+    margin-left: 20%; }
+  .offset-gt-sm-25 {
+    margin-left: 25%; }
+  .offset-gt-sm-30 {
+    margin-left: 30%; }
+  .offset-gt-sm-35 {
+    margin-left: 35%; }
+  .offset-gt-sm-40 {
+    margin-left: 40%; }
+  .offset-gt-sm-45 {
+    margin-left: 45%; }
+  .offset-gt-sm-50 {
+    margin-left: 50%; }
+  .offset-gt-sm-55 {
+    margin-left: 55%; }
+  .offset-gt-sm-60 {
+    margin-left: 60%; }
+  .offset-gt-sm-65 {
+    margin-left: 65%; }
+  .offset-gt-sm-70 {
+    margin-left: 70%; }
+  .offset-gt-sm-75 {
+    margin-left: 75%; }
+  .offset-gt-sm-80 {
+    margin-left: 80%; }
+  .offset-gt-sm-85 {
+    margin-left: 85%; }
+  .offset-gt-sm-90 {
+    margin-left: 90%; }
+  .offset-gt-sm-95 {
+    margin-left: 95%; }
+  .offset-gt-sm-33, .offset-gt-sm-34 {
+    margin-left: 33.33%; }
+  .offset-gt-sm-66, .offset-gt-sm-67 {
+    margin-left: 66.66%; }
+  .flex-gt-sm {
+    box-sizing: border-box;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1; }
+  .flex-gt-sm-0 {
+    -webkit-flex: 0 0 0%;
+        -ms-flex: 0 0 0%;
+            flex: 0 0 0%; }
+  .layout-row > .flex-gt-sm-0 {
+    max-width: 0%; }
+  .layout-column > .flex-gt-sm-0 {
+    max-height: 0%; }
+  .flex-gt-sm-5 {
+    -webkit-flex: 0 0 5%;
+        -ms-flex: 0 0 5%;
+            flex: 0 0 5%; }
+  .layout-row > .flex-gt-sm-5 {
+    max-width: 5%; }
+  .layout-column > .flex-gt-sm-5 {
+    max-height: 5%; }
+  .flex-gt-sm-10 {
+    -webkit-flex: 0 0 10%;
+        -ms-flex: 0 0 10%;
+            flex: 0 0 10%; }
+  .layout-row > .flex-gt-sm-10 {
+    max-width: 10%; }
+  .layout-column > .flex-gt-sm-10 {
+    max-height: 10%; }
+  .flex-gt-sm-15 {
+    -webkit-flex: 0 0 15%;
+        -ms-flex: 0 0 15%;
+            flex: 0 0 15%; }
+  .layout-row > .flex-gt-sm-15 {
+    max-width: 15%; }
+  .layout-column > .flex-gt-sm-15 {
+    max-height: 15%; }
+  .flex-gt-sm-20 {
+    -webkit-flex: 0 0 20%;
+        -ms-flex: 0 0 20%;
+            flex: 0 0 20%; }
+  .layout-row > .flex-gt-sm-20 {
+    max-width: 20%; }
+  .layout-column > .flex-gt-sm-20 {
+    max-height: 20%; }
+  .flex-gt-sm-25 {
+    -webkit-flex: 0 0 25%;
+        -ms-flex: 0 0 25%;
+            flex: 0 0 25%; }
+  .layout-row > .flex-gt-sm-25 {
+    max-width: 25%; }
+  .layout-column > .flex-gt-sm-25 {
+    max-height: 25%; }
+  .flex-gt-sm-30 {
+    -webkit-flex: 0 0 30%;
+        -ms-flex: 0 0 30%;
+            flex: 0 0 30%; }
+  .layout-row > .flex-gt-sm-30 {
+    max-width: 30%; }
+  .layout-column > .flex-gt-sm-30 {
+    max-height: 30%; }
+  .flex-gt-sm-35 {
+    -webkit-flex: 0 0 35%;
+        -ms-flex: 0 0 35%;
+            flex: 0 0 35%; }
+  .layout-row > .flex-gt-sm-35 {
+    max-width: 35%; }
+  .layout-column > .flex-gt-sm-35 {
+    max-height: 35%; }
+  .flex-gt-sm-40 {
+    -webkit-flex: 0 0 40%;
+        -ms-flex: 0 0 40%;
+            flex: 0 0 40%; }
+  .layout-row > .flex-gt-sm-40 {
+    max-width: 40%; }
+  .layout-column > .flex-gt-sm-40 {
+    max-height: 40%; }
+  .flex-gt-sm-45 {
+    -webkit-flex: 0 0 45%;
+        -ms-flex: 0 0 45%;
+            flex: 0 0 45%; }
+  .layout-row > .flex-gt-sm-45 {
+    max-width: 45%; }
+  .layout-column > .flex-gt-sm-45 {
+    max-height: 45%; }
+  .flex-gt-sm-50 {
+    -webkit-flex: 0 0 50%;
+        -ms-flex: 0 0 50%;
+            flex: 0 0 50%; }
+  .layout-row > .flex-gt-sm-50 {
+    max-width: 50%; }
+  .layout-column > .flex-gt-sm-50 {
+    max-height: 50%; }
+  .flex-gt-sm-55 {
+    -webkit-flex: 0 0 55%;
+        -ms-flex: 0 0 55%;
+            flex: 0 0 55%; }
+  .layout-row > .flex-gt-sm-55 {
+    max-width: 55%; }
+  .layout-column > .flex-gt-sm-55 {
+    max-height: 55%; }
+  .flex-gt-sm-60 {
+    -webkit-flex: 0 0 60%;
+        -ms-flex: 0 0 60%;
+            flex: 0 0 60%; }
+  .layout-row > .flex-gt-sm-60 {
+    max-width: 60%; }
+  .layout-column > .flex-gt-sm-60 {
+    max-height: 60%; }
+  .flex-gt-sm-65 {
+    -webkit-flex: 0 0 65%;
+        -ms-flex: 0 0 65%;
+            flex: 0 0 65%; }
+  .layout-row > .flex-gt-sm-65 {
+    max-width: 65%; }
+  .layout-column > .flex-gt-sm-65 {
+    max-height: 65%; }
+  .flex-gt-sm-70 {
+    -webkit-flex: 0 0 70%;
+        -ms-flex: 0 0 70%;
+            flex: 0 0 70%; }
+  .layout-row > .flex-gt-sm-70 {
+    max-width: 70%; }
+  .layout-column > .flex-gt-sm-70 {
+    max-height: 70%; }
+  .flex-gt-sm-75 {
+    -webkit-flex: 0 0 75%;
+        -ms-flex: 0 0 75%;
+            flex: 0 0 75%; }
+  .layout-row > .flex-gt-sm-75 {
+    max-width: 75%; }
+  .layout-column > .flex-gt-sm-75 {
+    max-height: 75%; }
+  .flex-gt-sm-80 {
+    -webkit-flex: 0 0 80%;
+        -ms-flex: 0 0 80%;
+            flex: 0 0 80%; }
+  .layout-row > .flex-gt-sm-80 {
+    max-width: 80%; }
+  .layout-column > .flex-gt-sm-80 {
+    max-height: 80%; }
+  .flex-gt-sm-85 {
+    -webkit-flex: 0 0 85%;
+        -ms-flex: 0 0 85%;
+            flex: 0 0 85%; }
+  .layout-row > .flex-gt-sm-85 {
+    max-width: 85%; }
+  .layout-column > .flex-gt-sm-85 {
+    max-height: 85%; }
+  .flex-gt-sm-90 {
+    -webkit-flex: 0 0 90%;
+        -ms-flex: 0 0 90%;
+            flex: 0 0 90%; }
+  .layout-row > .flex-gt-sm-90 {
+    max-width: 90%; }
+  .layout-column > .flex-gt-sm-90 {
+    max-height: 90%; }
+  .flex-gt-sm-95 {
+    -webkit-flex: 0 0 95%;
+        -ms-flex: 0 0 95%;
+            flex: 0 0 95%; }
+  .layout-row > .flex-gt-sm-95 {
+    max-width: 95%; }
+  .layout-column > .flex-gt-sm-95 {
+    max-height: 95%; }
+  .flex-gt-sm-100 {
+    -webkit-flex: 0 0 100%;
+        -ms-flex: 0 0 100%;
+            flex: 0 0 100%; }
+  .layout-row > .flex-gt-sm-100 {
+    max-width: 100%; }
+  .layout-column > .flex-gt-sm-100 {
+    max-height: 100%; }
+  .flex-gt-sm-33, .flex-gt-sm-34 {
+    -webkit-flex: 0 0 33.33%;
+        -ms-flex: 0 0 33.33%;
+            flex: 0 0 33.33%; }
+  .flex-gt-sm-66, .flex-gt-sm-67 {
+    -webkit-flex: 0 0 66.66%;
+        -ms-flex: 0 0 66.66%;
+            flex: 0 0 66.66%; }
+  .layout-row > .flex-gt-sm-33, .layout-row > .flex-gt-sm-34 {
+    max-width: 33.33%; }
+  .layout-row > .flex-gt-sm-66, .layout-row > .flex-gt-sm-67 {
+    max-width: 66.66%; }
+  .layout-column > .flex-gt-sm-33, .layout-column > .flex-gt-sm-34 {
+    max-height: 33.33%; }
+  .layout-column > .flex-gt-sm-66, .layout-column > .flex-gt-sm-67 {
+    max-height: 66.66%; } }
+
+@media (min-width: 600px) and (max-width: 959px) {
+  .hide:not(.show-gt-sm):not(.show-md):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-md):not(.show) {
+    display: none; }
+  .hide-md:not(.show-md):not(.show) {
+    display: none; }
+  .flex-order-md-0 {
+    -webkit-order: 0;
+        -ms-flex-order: 0;
+            order: 0; }
+  .flex-order-md-1 {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1; }
+  .flex-order-md-2 {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2; }
+  .flex-order-md-3 {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3; }
+  .flex-order-md-4 {
+    -webkit-order: 4;
+        -ms-flex-order: 4;
+            order: 4; }
+  .flex-order-md-5 {
+    -webkit-order: 5;
+        -ms-flex-order: 5;
+            order: 5; }
+  .flex-order-md-6 {
+    -webkit-order: 6;
+        -ms-flex-order: 6;
+            order: 6; }
+  .flex-order-md-7 {
+    -webkit-order: 7;
+        -ms-flex-order: 7;
+            order: 7; }
+  .flex-order-md-8 {
+    -webkit-order: 8;
+        -ms-flex-order: 8;
+            order: 8; }
+  .flex-order-md-9 {
+    -webkit-order: 9;
+        -ms-flex-order: 9;
+            order: 9; }
+  .layout-align-md-center, .layout-align-md-center-center, .layout-align-md-center-start, .layout-align-md-center-end {
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center; }
+  .layout-align-md-end, .layout-align-md-end-center, .layout-align-md-end-start, .layout-align-md-end-end {
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end; }
+  .layout-align-md-space-around, .layout-align-md-space-around-center, .layout-align-md-space-around-start, .layout-align-md-space-around-end {
+    -webkit-justify-content: space-around;
+        -ms-flex-pack: distribute;
+            justify-content: space-around; }
+  .layout-align-md-space-between, .layout-align-md-space-between-center, .layout-align-md-space-between-start, .layout-align-md-space-between-end {
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between; }
+  .layout-align-md-center-center, .layout-align-md-start-center, .layout-align-md-end-center, .layout-align-md-space-between-center, .layout-align-md-space-around-center {
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .layout-align-md-center-start, .layout-align-md-start-start, .layout-align-md-end-start, .layout-align-md-space-between-start, .layout-align-md-space-around-start {
+    -webkit-align-items: flex-start;
+        -ms-flex-align: start;
+            align-items: flex-start; }
+  .layout-align-md-center-end, .layout-align-md-start-end, .layout-align-md-end-end, .layout-align-md-space-between-end, .layout-align-md-space-around-end {
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end; }
+  .layout-md {
+    box-sizing: border-box;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flexbox;
+    display: flex; }
+  .layout-md-column {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+  .layout-md-row {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  .offset-md-5 {
+    margin-left: 5%; }
+  .offset-md-10 {
+    margin-left: 10%; }
+  .offset-md-15 {
+    margin-left: 15%; }
+  .offset-md-20 {
+    margin-left: 20%; }
+  .offset-md-25 {
+    margin-left: 25%; }
+  .offset-md-30 {
+    margin-left: 30%; }
+  .offset-md-35 {
+    margin-left: 35%; }
+  .offset-md-40 {
+    margin-left: 40%; }
+  .offset-md-45 {
+    margin-left: 45%; }
+  .offset-md-50 {
+    margin-left: 50%; }
+  .offset-md-55 {
+    margin-left: 55%; }
+  .offset-md-60 {
+    margin-left: 60%; }
+  .offset-md-65 {
+    margin-left: 65%; }
+  .offset-md-70 {
+    margin-left: 70%; }
+  .offset-md-75 {
+    margin-left: 75%; }
+  .offset-md-80 {
+    margin-left: 80%; }
+  .offset-md-85 {
+    margin-left: 85%; }
+  .offset-md-90 {
+    margin-left: 90%; }
+  .offset-md-95 {
+    margin-left: 95%; }
+  .offset-md-33, .offset-md-34 {
+    margin-left: 33.33%; }
+  .offset-md-66, .offset-md-67 {
+    margin-left: 66.66%; }
+  .flex-md {
+    box-sizing: border-box;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1; }
+  .flex-md-0 {
+    -webkit-flex: 0 0 0%;
+        -ms-flex: 0 0 0%;
+            flex: 0 0 0%; }
+  .layout-row > .flex-md-0 {
+    max-width: 0%; }
+  .layout-column > .flex-md-0 {
+    max-height: 0%; }
+  .flex-md-5 {
+    -webkit-flex: 0 0 5%;
+        -ms-flex: 0 0 5%;
+            flex: 0 0 5%; }
+  .layout-row > .flex-md-5 {
+    max-width: 5%; }
+  .layout-column > .flex-md-5 {
+    max-height: 5%; }
+  .flex-md-10 {
+    -webkit-flex: 0 0 10%;
+        -ms-flex: 0 0 10%;
+            flex: 0 0 10%; }
+  .layout-row > .flex-md-10 {
+    max-width: 10%; }
+  .layout-column > .flex-md-10 {
+    max-height: 10%; }
+  .flex-md-15 {
+    -webkit-flex: 0 0 15%;
+        -ms-flex: 0 0 15%;
+            flex: 0 0 15%; }
+  .layout-row > .flex-md-15 {
+    max-width: 15%; }
+  .layout-column > .flex-md-15 {
+    max-height: 15%; }
+  .flex-md-20 {
+    -webkit-flex: 0 0 20%;
+        -ms-flex: 0 0 20%;
+            flex: 0 0 20%; }
+  .layout-row > .flex-md-20 {
+    max-width: 20%; }
+  .layout-column > .flex-md-20 {
+    max-height: 20%; }
+  .flex-md-25 {
+    -webkit-flex: 0 0 25%;
+        -ms-flex: 0 0 25%;
+            flex: 0 0 25%; }
+  .layout-row > .flex-md-25 {
+    max-width: 25%; }
+  .layout-column > .flex-md-25 {
+    max-height: 25%; }
+  .flex-md-30 {
+    -webkit-flex: 0 0 30%;
+        -ms-flex: 0 0 30%;
+            flex: 0 0 30%; }
+  .layout-row > .flex-md-30 {
+    max-width: 30%; }
+  .layout-column > .flex-md-30 {
+    max-height: 30%; }
+  .flex-md-35 {
+    -webkit-flex: 0 0 35%;
+        -ms-flex: 0 0 35%;
+            flex: 0 0 35%; }
+  .layout-row > .flex-md-35 {
+    max-width: 35%; }
+  .layout-column > .flex-md-35 {
+    max-height: 35%; }
+  .flex-md-40 {
+    -webkit-flex: 0 0 40%;
+        -ms-flex: 0 0 40%;
+            flex: 0 0 40%; }
+  .layout-row > .flex-md-40 {
+    max-width: 40%; }
+  .layout-column > .flex-md-40 {
+    max-height: 40%; }
+  .flex-md-45 {
+    -webkit-flex: 0 0 45%;
+        -ms-flex: 0 0 45%;
+            flex: 0 0 45%; }
+  .layout-row > .flex-md-45 {
+    max-width: 45%; }
+  .layout-column > .flex-md-45 {
+    max-height: 45%; }
+  .flex-md-50 {
+    -webkit-flex: 0 0 50%;
+        -ms-flex: 0 0 50%;
+            flex: 0 0 50%; }
+  .layout-row > .flex-md-50 {
+    max-width: 50%; }
+  .layout-column > .flex-md-50 {
+    max-height: 50%; }
+  .flex-md-55 {
+    -webkit-flex: 0 0 55%;
+        -ms-flex: 0 0 55%;
+            flex: 0 0 55%; }
+  .layout-row > .flex-md-55 {
+    max-width: 55%; }
+  .layout-column > .flex-md-55 {
+    max-height: 55%; }
+  .flex-md-60 {
+    -webkit-flex: 0 0 60%;
+        -ms-flex: 0 0 60%;
+            flex: 0 0 60%; }
+  .layout-row > .flex-md-60 {
+    max-width: 60%; }
+  .layout-column > .flex-md-60 {
+    max-height: 60%; }
+  .flex-md-65 {
+    -webkit-flex: 0 0 65%;
+        -ms-flex: 0 0 65%;
+            flex: 0 0 65%; }
+  .layout-row > .flex-md-65 {
+    max-width: 65%; }
+  .layout-column > .flex-md-65 {
+    max-height: 65%; }
+  .flex-md-70 {
+    -webkit-flex: 0 0 70%;
+        -ms-flex: 0 0 70%;
+            flex: 0 0 70%; }
+  .layout-row > .flex-md-70 {
+    max-width: 70%; }
+  .layout-column > .flex-md-70 {
+    max-height: 70%; }
+  .flex-md-75 {
+    -webkit-flex: 0 0 75%;
+        -ms-flex: 0 0 75%;
+            flex: 0 0 75%; }
+  .layout-row > .flex-md-75 {
+    max-width: 75%; }
+  .layout-column > .flex-md-75 {
+    max-height: 75%; }
+  .flex-md-80 {
+    -webkit-flex: 0 0 80%;
+        -ms-flex: 0 0 80%;
+            flex: 0 0 80%; }
+  .layout-row > .flex-md-80 {
+    max-width: 80%; }
+  .layout-column > .flex-md-80 {
+    max-height: 80%; }
+  .flex-md-85 {
+    -webkit-flex: 0 0 85%;
+        -ms-flex: 0 0 85%;
+            flex: 0 0 85%; }
+  .layout-row > .flex-md-85 {
+    max-width: 85%; }
+  .layout-column > .flex-md-85 {
+    max-height: 85%; }
+  .flex-md-90 {
+    -webkit-flex: 0 0 90%;
+        -ms-flex: 0 0 90%;
+            flex: 0 0 90%; }
+  .layout-row > .flex-md-90 {
+    max-width: 90%; }
+  .layout-column > .flex-md-90 {
+    max-height: 90%; }
+  .flex-md-95 {
+    -webkit-flex: 0 0 95%;
+        -ms-flex: 0 0 95%;
+            flex: 0 0 95%; }
+  .layout-row > .flex-md-95 {
+    max-width: 95%; }
+  .layout-column > .flex-md-95 {
+    max-height: 95%; }
+  .flex-md-100 {
+    -webkit-flex: 0 0 100%;
+        -ms-flex: 0 0 100%;
+            flex: 0 0 100%; }
+  .layout-row > .flex-md-100 {
+    max-width: 100%; }
+  .layout-column > .flex-md-100 {
+    max-height: 100%; }
+  .flex-md-33, .flex-md-34 {
+    -webkit-flex: 0 0 33.33%;
+        -ms-flex: 0 0 33.33%;
+            flex: 0 0 33.33%; }
+  .flex-md-66, .flex-md-67 {
+    -webkit-flex: 0 0 66.66%;
+        -ms-flex: 0 0 66.66%;
+            flex: 0 0 66.66%; }
+  .layout-row > .flex-md-33, .layout-row > .flex-md-34 {
+    max-width: 33.33%; }
+  .layout-row > .flex-md-66, .layout-row > .flex-md-67 {
+    max-width: 66.66%; }
+  .layout-column > .flex-md-33, .layout-column > .flex-md-34 {
+    max-height: 33.33%; }
+  .layout-column > .flex-md-66, .layout-column > .flex-md-67 {
+    max-height: 66.66%; } }
+
+@media (min-width: 960px) {
+  .flex-order-gt-md-0 {
+    -webkit-order: 0;
+        -ms-flex-order: 0;
+            order: 0; }
+  .flex-order-gt-md-1 {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1; }
+  .flex-order-gt-md-2 {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2; }
+  .flex-order-gt-md-3 {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3; }
+  .flex-order-gt-md-4 {
+    -webkit-order: 4;
+        -ms-flex-order: 4;
+            order: 4; }
+  .flex-order-gt-md-5 {
+    -webkit-order: 5;
+        -ms-flex-order: 5;
+            order: 5; }
+  .flex-order-gt-md-6 {
+    -webkit-order: 6;
+        -ms-flex-order: 6;
+            order: 6; }
+  .flex-order-gt-md-7 {
+    -webkit-order: 7;
+        -ms-flex-order: 7;
+            order: 7; }
+  .flex-order-gt-md-8 {
+    -webkit-order: 8;
+        -ms-flex-order: 8;
+            order: 8; }
+  .flex-order-gt-md-9 {
+    -webkit-order: 9;
+        -ms-flex-order: 9;
+            order: 9; }
+  .layout-align-gt-md-center, .layout-align-gt-md-center-center, .layout-align-gt-md-center-start, .layout-align-gt-md-center-end {
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center; }
+  .layout-align-gt-md-end, .layout-align-gt-md-end-center, .layout-align-gt-md-end-start, .layout-align-gt-md-end-end {
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end; }
+  .layout-align-gt-md-space-around, .layout-align-gt-md-space-around-center, .layout-align-gt-md-space-around-start, .layout-align-gt-md-space-around-end {
+    -webkit-justify-content: space-around;
+        -ms-flex-pack: distribute;
+            justify-content: space-around; }
+  .layout-align-gt-md-space-between, .layout-align-gt-md-space-between-center, .layout-align-gt-md-space-between-start, .layout-align-gt-md-space-between-end {
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between; }
+  .layout-align-gt-md-center-center, .layout-align-gt-md-start-center, .layout-align-gt-md-end-center, .layout-align-gt-md-space-between-center, .layout-align-gt-md-space-around-center {
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .layout-align-gt-md-center-start, .layout-align-gt-md-start-start, .layout-align-gt-md-end-start, .layout-align-gt-md-space-between-start, .layout-align-gt-md-space-around-start {
+    -webkit-align-items: flex-start;
+        -ms-flex-align: start;
+            align-items: flex-start; }
+  .layout-align-gt-md-center-end, .layout-align-gt-md-start-end, .layout-align-gt-md-end-end, .layout-align-gt-md-space-between-end, .layout-align-gt-md-space-around-end {
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end; }
+  .layout-gt-md {
+    box-sizing: border-box;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flexbox;
+    display: flex; }
+  .layout-gt-md-column {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+  .layout-gt-md-row {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  .offset-gt-md-5 {
+    margin-left: 5%; }
+  .offset-gt-md-10 {
+    margin-left: 10%; }
+  .offset-gt-md-15 {
+    margin-left: 15%; }
+  .offset-gt-md-20 {
+    margin-left: 20%; }
+  .offset-gt-md-25 {
+    margin-left: 25%; }
+  .offset-gt-md-30 {
+    margin-left: 30%; }
+  .offset-gt-md-35 {
+    margin-left: 35%; }
+  .offset-gt-md-40 {
+    margin-left: 40%; }
+  .offset-gt-md-45 {
+    margin-left: 45%; }
+  .offset-gt-md-50 {
+    margin-left: 50%; }
+  .offset-gt-md-55 {
+    margin-left: 55%; }
+  .offset-gt-md-60 {
+    margin-left: 60%; }
+  .offset-gt-md-65 {
+    margin-left: 65%; }
+  .offset-gt-md-70 {
+    margin-left: 70%; }
+  .offset-gt-md-75 {
+    margin-left: 75%; }
+  .offset-gt-md-80 {
+    margin-left: 80%; }
+  .offset-gt-md-85 {
+    margin-left: 85%; }
+  .offset-gt-md-90 {
+    margin-left: 90%; }
+  .offset-gt-md-95 {
+    margin-left: 95%; }
+  .offset-gt-md-33, .offset-gt-md-34 {
+    margin-left: 33.33%; }
+  .offset-gt-md-66, .offset-gt-md-67 {
+    margin-left: 66.66%; }
+  .flex-gt-md {
+    box-sizing: border-box;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1; }
+  .flex-gt-md-0 {
+    -webkit-flex: 0 0 0%;
+        -ms-flex: 0 0 0%;
+            flex: 0 0 0%; }
+  .layout-row > .flex-gt-md-0 {
+    max-width: 0%; }
+  .layout-column > .flex-gt-md-0 {
+    max-height: 0%; }
+  .flex-gt-md-5 {
+    -webkit-flex: 0 0 5%;
+        -ms-flex: 0 0 5%;
+            flex: 0 0 5%; }
+  .layout-row > .flex-gt-md-5 {
+    max-width: 5%; }
+  .layout-column > .flex-gt-md-5 {
+    max-height: 5%; }
+  .flex-gt-md-10 {
+    -webkit-flex: 0 0 10%;
+        -ms-flex: 0 0 10%;
+            flex: 0 0 10%; }
+  .layout-row > .flex-gt-md-10 {
+    max-width: 10%; }
+  .layout-column > .flex-gt-md-10 {
+    max-height: 10%; }
+  .flex-gt-md-15 {
+    -webkit-flex: 0 0 15%;
+        -ms-flex: 0 0 15%;
+            flex: 0 0 15%; }
+  .layout-row > .flex-gt-md-15 {
+    max-width: 15%; }
+  .layout-column > .flex-gt-md-15 {
+    max-height: 15%; }
+  .flex-gt-md-20 {
+    -webkit-flex: 0 0 20%;
+        -ms-flex: 0 0 20%;
+            flex: 0 0 20%; }
+  .layout-row > .flex-gt-md-20 {
+    max-width: 20%; }
+  .layout-column > .flex-gt-md-20 {
+    max-height: 20%; }
+  .flex-gt-md-25 {
+    -webkit-flex: 0 0 25%;
+        -ms-flex: 0 0 25%;
+            flex: 0 0 25%; }
+  .layout-row > .flex-gt-md-25 {
+    max-width: 25%; }
+  .layout-column > .flex-gt-md-25 {
+    max-height: 25%; }
+  .flex-gt-md-30 {
+    -webkit-flex: 0 0 30%;
+        -ms-flex: 0 0 30%;
+            flex: 0 0 30%; }
+  .layout-row > .flex-gt-md-30 {
+    max-width: 30%; }
+  .layout-column > .flex-gt-md-30 {
+    max-height: 30%; }
+  .flex-gt-md-35 {
+    -webkit-flex: 0 0 35%;
+        -ms-flex: 0 0 35%;
+            flex: 0 0 35%; }
+  .layout-row > .flex-gt-md-35 {
+    max-width: 35%; }
+  .layout-column > .flex-gt-md-35 {
+    max-height: 35%; }
+  .flex-gt-md-40 {
+    -webkit-flex: 0 0 40%;
+        -ms-flex: 0 0 40%;
+            flex: 0 0 40%; }
+  .layout-row > .flex-gt-md-40 {
+    max-width: 40%; }
+  .layout-column > .flex-gt-md-40 {
+    max-height: 40%; }
+  .flex-gt-md-45 {
+    -webkit-flex: 0 0 45%;
+        -ms-flex: 0 0 45%;
+            flex: 0 0 45%; }
+  .layout-row > .flex-gt-md-45 {
+    max-width: 45%; }
+  .layout-column > .flex-gt-md-45 {
+    max-height: 45%; }
+  .flex-gt-md-50 {
+    -webkit-flex: 0 0 50%;
+        -ms-flex: 0 0 50%;
+            flex: 0 0 50%; }
+  .layout-row > .flex-gt-md-50 {
+    max-width: 50%; }
+  .layout-column > .flex-gt-md-50 {
+    max-height: 50%; }
+  .flex-gt-md-55 {
+    -webkit-flex: 0 0 55%;
+        -ms-flex: 0 0 55%;
+            flex: 0 0 55%; }
+  .layout-row > .flex-gt-md-55 {
+    max-width: 55%; }
+  .layout-column > .flex-gt-md-55 {
+    max-height: 55%; }
+  .flex-gt-md-60 {
+    -webkit-flex: 0 0 60%;
+        -ms-flex: 0 0 60%;
+            flex: 0 0 60%; }
+  .layout-row > .flex-gt-md-60 {
+    max-width: 60%; }
+  .layout-column > .flex-gt-md-60 {
+    max-height: 60%; }
+  .flex-gt-md-65 {
+    -webkit-flex: 0 0 65%;
+        -ms-flex: 0 0 65%;
+            flex: 0 0 65%; }
+  .layout-row > .flex-gt-md-65 {
+    max-width: 65%; }
+  .layout-column > .flex-gt-md-65 {
+    max-height: 65%; }
+  .flex-gt-md-70 {
+    -webkit-flex: 0 0 70%;
+        -ms-flex: 0 0 70%;
+            flex: 0 0 70%; }
+  .layout-row > .flex-gt-md-70 {
+    max-width: 70%; }
+  .layout-column > .flex-gt-md-70 {
+    max-height: 70%; }
+  .flex-gt-md-75 {
+    -webkit-flex: 0 0 75%;
+        -ms-flex: 0 0 75%;
+            flex: 0 0 75%; }
+  .layout-row > .flex-gt-md-75 {
+    max-width: 75%; }
+  .layout-column > .flex-gt-md-75 {
+    max-height: 75%; }
+  .flex-gt-md-80 {
+    -webkit-flex: 0 0 80%;
+        -ms-flex: 0 0 80%;
+            flex: 0 0 80%; }
+  .layout-row > .flex-gt-md-80 {
+    max-width: 80%; }
+  .layout-column > .flex-gt-md-80 {
+    max-height: 80%; }
+  .flex-gt-md-85 {
+    -webkit-flex: 0 0 85%;
+        -ms-flex: 0 0 85%;
+            flex: 0 0 85%; }
+  .layout-row > .flex-gt-md-85 {
+    max-width: 85%; }
+  .layout-column > .flex-gt-md-85 {
+    max-height: 85%; }
+  .flex-gt-md-90 {
+    -webkit-flex: 0 0 90%;
+        -ms-flex: 0 0 90%;
+            flex: 0 0 90%; }
+  .layout-row > .flex-gt-md-90 {
+    max-width: 90%; }
+  .layout-column > .flex-gt-md-90 {
+    max-height: 90%; }
+  .flex-gt-md-95 {
+    -webkit-flex: 0 0 95%;
+        -ms-flex: 0 0 95%;
+            flex: 0 0 95%; }
+  .layout-row > .flex-gt-md-95 {
+    max-width: 95%; }
+  .layout-column > .flex-gt-md-95 {
+    max-height: 95%; }
+  .flex-gt-md-100 {
+    -webkit-flex: 0 0 100%;
+        -ms-flex: 0 0 100%;
+            flex: 0 0 100%; }
+  .layout-row > .flex-gt-md-100 {
+    max-width: 100%; }
+  .layout-column > .flex-gt-md-100 {
+    max-height: 100%; }
+  .flex-gt-md-33, .flex-gt-md-34 {
+    -webkit-flex: 0 0 33.33%;
+        -ms-flex: 0 0 33.33%;
+            flex: 0 0 33.33%; }
+  .flex-gt-md-66, .flex-gt-md-67 {
+    -webkit-flex: 0 0 66.66%;
+        -ms-flex: 0 0 66.66%;
+            flex: 0 0 66.66%; }
+  .layout-row > .flex-gt-md-33, .layout-row > .flex-gt-md-34 {
+    max-width: 33.33%; }
+  .layout-row > .flex-gt-md-66, .layout-row > .flex-gt-md-67 {
+    max-width: 66.66%; }
+  .layout-column > .flex-gt-md-33, .layout-column > .flex-gt-md-34 {
+    max-height: 33.33%; }
+  .layout-column > .flex-gt-md-66, .layout-column > .flex-gt-md-67 {
+    max-height: 66.66%; } }
+
+@media (min-width: 960px) and (max-width: 1199px) {
+  .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-lg):not(.show) {
+    display: none; }
+  .hide-lg:not(.show-lg):not(.show) {
+    display: none; }
+  .flex-order-lg-0 {
+    -webkit-order: 0;
+        -ms-flex-order: 0;
+            order: 0; }
+  .flex-order-lg-1 {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1; }
+  .flex-order-lg-2 {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2; }
+  .flex-order-lg-3 {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3; }
+  .flex-order-lg-4 {
+    -webkit-order: 4;
+        -ms-flex-order: 4;
+            order: 4; }
+  .flex-order-lg-5 {
+    -webkit-order: 5;
+        -ms-flex-order: 5;
+            order: 5; }
+  .flex-order-lg-6 {
+    -webkit-order: 6;
+        -ms-flex-order: 6;
+            order: 6; }
+  .flex-order-lg-7 {
+    -webkit-order: 7;
+        -ms-flex-order: 7;
+            order: 7; }
+  .flex-order-lg-8 {
+    -webkit-order: 8;
+        -ms-flex-order: 8;
+            order: 8; }
+  .flex-order-lg-9 {
+    -webkit-order: 9;
+        -ms-flex-order: 9;
+            order: 9; }
+  .layout-align-lg-center, .layout-align-lg-center-center, .layout-align-lg-center-start, .layout-align-lg-center-end {
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center; }
+  .layout-align-lg-end, .layout-align-lg-end-center, .layout-align-lg-end-start, .layout-align-lg-end-end {
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end; }
+  .layout-align-lg-space-around, .layout-align-lg-space-around-center, .layout-align-lg-space-around-start, .layout-align-lg-space-around-end {
+    -webkit-justify-content: space-around;
+        -ms-flex-pack: distribute;
+            justify-content: space-around; }
+  .layout-align-lg-space-between, .layout-align-lg-space-between-center, .layout-align-lg-space-between-start, .layout-align-lg-space-between-end {
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between; }
+  .layout-align-lg-center-center, .layout-align-lg-start-center, .layout-align-lg-end-center, .layout-align-lg-space-between-center, .layout-align-lg-space-around-center {
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .layout-align-lg-center-start, .layout-align-lg-start-start, .layout-align-lg-end-start, .layout-align-lg-space-between-start, .layout-align-lg-space-around-start {
+    -webkit-align-items: flex-start;
+        -ms-flex-align: start;
+            align-items: flex-start; }
+  .layout-align-lg-center-end, .layout-align-lg-start-end, .layout-align-lg-end-end, .layout-align-lg-space-between-end, .layout-align-lg-space-around-end {
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end; }
+  .layout-lg {
+    box-sizing: border-box;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flexbox;
+    display: flex; }
+  .layout-lg-column {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+  .layout-lg-row {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  .offset-lg-5 {
+    margin-left: 5%; }
+  .offset-lg-10 {
+    margin-left: 10%; }
+  .offset-lg-15 {
+    margin-left: 15%; }
+  .offset-lg-20 {
+    margin-left: 20%; }
+  .offset-lg-25 {
+    margin-left: 25%; }
+  .offset-lg-30 {
+    margin-left: 30%; }
+  .offset-lg-35 {
+    margin-left: 35%; }
+  .offset-lg-40 {
+    margin-left: 40%; }
+  .offset-lg-45 {
+    margin-left: 45%; }
+  .offset-lg-50 {
+    margin-left: 50%; }
+  .offset-lg-55 {
+    margin-left: 55%; }
+  .offset-lg-60 {
+    margin-left: 60%; }
+  .offset-lg-65 {
+    margin-left: 65%; }
+  .offset-lg-70 {
+    margin-left: 70%; }
+  .offset-lg-75 {
+    margin-left: 75%; }
+  .offset-lg-80 {
+    margin-left: 80%; }
+  .offset-lg-85 {
+    margin-left: 85%; }
+  .offset-lg-90 {
+    margin-left: 90%; }
+  .offset-lg-95 {
+    margin-left: 95%; }
+  .offset-lg-33, .offset-lg-34 {
+    margin-left: 33.33%; }
+  .offset-lg-66, .offset-lg-67 {
+    margin-left: 66.66%; }
+  .flex-lg {
+    box-sizing: border-box;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1; }
+  .flex-lg-0 {
+    -webkit-flex: 0 0 0%;
+        -ms-flex: 0 0 0%;
+            flex: 0 0 0%; }
+  .layout-row > .flex-lg-0 {
+    max-width: 0%; }
+  .layout-column > .flex-lg-0 {
+    max-height: 0%; }
+  .flex-lg-5 {
+    -webkit-flex: 0 0 5%;
+        -ms-flex: 0 0 5%;
+            flex: 0 0 5%; }
+  .layout-row > .flex-lg-5 {
+    max-width: 5%; }
+  .layout-column > .flex-lg-5 {
+    max-height: 5%; }
+  .flex-lg-10 {
+    -webkit-flex: 0 0 10%;
+        -ms-flex: 0 0 10%;
+            flex: 0 0 10%; }
+  .layout-row > .flex-lg-10 {
+    max-width: 10%; }
+  .layout-column > .flex-lg-10 {
+    max-height: 10%; }
+  .flex-lg-15 {
+    -webkit-flex: 0 0 15%;
+        -ms-flex: 0 0 15%;
+            flex: 0 0 15%; }
+  .layout-row > .flex-lg-15 {
+    max-width: 15%; }
+  .layout-column > .flex-lg-15 {
+    max-height: 15%; }
+  .flex-lg-20 {
+    -webkit-flex: 0 0 20%;
+        -ms-flex: 0 0 20%;
+            flex: 0 0 20%; }
+  .layout-row > .flex-lg-20 {
+    max-width: 20%; }
+  .layout-column > .flex-lg-20 {
+    max-height: 20%; }
+  .flex-lg-25 {
+    -webkit-flex: 0 0 25%;
+        -ms-flex: 0 0 25%;
+            flex: 0 0 25%; }
+  .layout-row > .flex-lg-25 {
+    max-width: 25%; }
+  .layout-column > .flex-lg-25 {
+    max-height: 25%; }
+  .flex-lg-30 {
+    -webkit-flex: 0 0 30%;
+        -ms-flex: 0 0 30%;
+            flex: 0 0 30%; }
+  .layout-row > .flex-lg-30 {
+    max-width: 30%; }
+  .layout-column > .flex-lg-30 {
+    max-height: 30%; }
+  .flex-lg-35 {
+    -webkit-flex: 0 0 35%;
+        -ms-flex: 0 0 35%;
+            flex: 0 0 35%; }
+  .layout-row > .flex-lg-35 {
+    max-width: 35%; }
+  .layout-column > .flex-lg-35 {
+    max-height: 35%; }
+  .flex-lg-40 {
+    -webkit-flex: 0 0 40%;
+        -ms-flex: 0 0 40%;
+            flex: 0 0 40%; }
+  .layout-row > .flex-lg-40 {
+    max-width: 40%; }
+  .layout-column > .flex-lg-40 {
+    max-height: 40%; }
+  .flex-lg-45 {
+    -webkit-flex: 0 0 45%;
+        -ms-flex: 0 0 45%;
+            flex: 0 0 45%; }
+  .layout-row > .flex-lg-45 {
+    max-width: 45%; }
+  .layout-column > .flex-lg-45 {
+    max-height: 45%; }
+  .flex-lg-50 {
+    -webkit-flex: 0 0 50%;
+        -ms-flex: 0 0 50%;
+            flex: 0 0 50%; }
+  .layout-row > .flex-lg-50 {
+    max-width: 50%; }
+  .layout-column > .flex-lg-50 {
+    max-height: 50%; }
+  .flex-lg-55 {
+    -webkit-flex: 0 0 55%;
+        -ms-flex: 0 0 55%;
+            flex: 0 0 55%; }
+  .layout-row > .flex-lg-55 {
+    max-width: 55%; }
+  .layout-column > .flex-lg-55 {
+    max-height: 55%; }
+  .flex-lg-60 {
+    -webkit-flex: 0 0 60%;
+        -ms-flex: 0 0 60%;
+            flex: 0 0 60%; }
+  .layout-row > .flex-lg-60 {
+    max-width: 60%; }
+  .layout-column > .flex-lg-60 {
+    max-height: 60%; }
+  .flex-lg-65 {
+    -webkit-flex: 0 0 65%;
+        -ms-flex: 0 0 65%;
+            flex: 0 0 65%; }
+  .layout-row > .flex-lg-65 {
+    max-width: 65%; }
+  .layout-column > .flex-lg-65 {
+    max-height: 65%; }
+  .flex-lg-70 {
+    -webkit-flex: 0 0 70%;
+        -ms-flex: 0 0 70%;
+            flex: 0 0 70%; }
+  .layout-row > .flex-lg-70 {
+    max-width: 70%; }
+  .layout-column > .flex-lg-70 {
+    max-height: 70%; }
+  .flex-lg-75 {
+    -webkit-flex: 0 0 75%;
+        -ms-flex: 0 0 75%;
+            flex: 0 0 75%; }
+  .layout-row > .flex-lg-75 {
+    max-width: 75%; }
+  .layout-column > .flex-lg-75 {
+    max-height: 75%; }
+  .flex-lg-80 {
+    -webkit-flex: 0 0 80%;
+        -ms-flex: 0 0 80%;
+            flex: 0 0 80%; }
+  .layout-row > .flex-lg-80 {
+    max-width: 80%; }
+  .layout-column > .flex-lg-80 {
+    max-height: 80%; }
+  .flex-lg-85 {
+    -webkit-flex: 0 0 85%;
+        -ms-flex: 0 0 85%;
+            flex: 0 0 85%; }
+  .layout-row > .flex-lg-85 {
+    max-width: 85%; }
+  .layout-column > .flex-lg-85 {
+    max-height: 85%; }
+  .flex-lg-90 {
+    -webkit-flex: 0 0 90%;
+        -ms-flex: 0 0 90%;
+            flex: 0 0 90%; }
+  .layout-row > .flex-lg-90 {
+    max-width: 90%; }
+  .layout-column > .flex-lg-90 {
+    max-height: 90%; }
+  .flex-lg-95 {
+    -webkit-flex: 0 0 95%;
+        -ms-flex: 0 0 95%;
+            flex: 0 0 95%; }
+  .layout-row > .flex-lg-95 {
+    max-width: 95%; }
+  .layout-column > .flex-lg-95 {
+    max-height: 95%; }
+  .flex-lg-100 {
+    -webkit-flex: 0 0 100%;
+        -ms-flex: 0 0 100%;
+            flex: 0 0 100%; }
+  .layout-row > .flex-lg-100 {
+    max-width: 100%; }
+  .layout-column > .flex-lg-100 {
+    max-height: 100%; }
+  .flex-lg-33, .flex-lg-34 {
+    -webkit-flex: 0 0 33.33%;
+        -ms-flex: 0 0 33.33%;
+            flex: 0 0 33.33%; }
+  .flex-lg-66, .flex-lg-67 {
+    -webkit-flex: 0 0 66.66%;
+        -ms-flex: 0 0 66.66%;
+            flex: 0 0 66.66%; }
+  .layout-row > .flex-lg-33, .layout-row > .flex-lg-34 {
+    max-width: 33.33%; }
+  .layout-row > .flex-lg-66, .layout-row > .flex-lg-67 {
+    max-width: 66.66%; }
+  .layout-column > .flex-lg-33, .layout-column > .flex-lg-34 {
+    max-height: 33.33%; }
+  .layout-column > .flex-lg-66, .layout-column > .flex-lg-67 {
+    max-height: 66.66%; } }
+
+@media (min-width: 1200px) {
+  .hide-gt-sm:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-md:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide-gt-lg:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show), .hide:not(.show-gt-sm):not(.show-gt-md):not(.show-gt-lg):not(.show) {
+    display: none; }
+  .flex-order-gt-lg-0 {
+    -webkit-order: 0;
+        -ms-flex-order: 0;
+            order: 0; }
+  .flex-order-gt-lg-1 {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1; }
+  .flex-order-gt-lg-2 {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2; }
+  .flex-order-gt-lg-3 {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3; }
+  .flex-order-gt-lg-4 {
+    -webkit-order: 4;
+        -ms-flex-order: 4;
+            order: 4; }
+  .flex-order-gt-lg-5 {
+    -webkit-order: 5;
+        -ms-flex-order: 5;
+            order: 5; }
+  .flex-order-gt-lg-6 {
+    -webkit-order: 6;
+        -ms-flex-order: 6;
+            order: 6; }
+  .flex-order-gt-lg-7 {
+    -webkit-order: 7;
+        -ms-flex-order: 7;
+            order: 7; }
+  .flex-order-gt-lg-8 {
+    -webkit-order: 8;
+        -ms-flex-order: 8;
+            order: 8; }
+  .flex-order-gt-lg-9 {
+    -webkit-order: 9;
+        -ms-flex-order: 9;
+            order: 9; }
+  .layout-align-gt-lg-center, .layout-align-gt-lg-center-center, .layout-align-gt-lg-center-start, .layout-align-gt-lg-center-end {
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center; }
+  .layout-align-gt-lg-end, .layout-align-gt-lg-end-center, .layout-align-gt-lg-end-start, .layout-align-gt-lg-end-end {
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end; }
+  .layout-align-gt-lg-space-around, .layout-align-gt-lg-space-around-center, .layout-align-gt-lg-space-around-start, .layout-align-gt-lg-space-around-end {
+    -webkit-justify-content: space-around;
+        -ms-flex-pack: distribute;
+            justify-content: space-around; }
+  .layout-align-gt-lg-space-between, .layout-align-gt-lg-space-between-center, .layout-align-gt-lg-space-between-start, .layout-align-gt-lg-space-between-end {
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between; }
+  .layout-align-gt-lg-center-center, .layout-align-gt-lg-start-center, .layout-align-gt-lg-end-center, .layout-align-gt-lg-space-between-center, .layout-align-gt-lg-space-around-center {
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .layout-align-gt-lg-center-start, .layout-align-gt-lg-start-start, .layout-align-gt-lg-end-start, .layout-align-gt-lg-space-between-start, .layout-align-gt-lg-space-around-start {
+    -webkit-align-items: flex-start;
+        -ms-flex-align: start;
+            align-items: flex-start; }
+  .layout-align-gt-lg-center-end, .layout-align-gt-lg-start-end, .layout-align-gt-lg-end-end, .layout-align-gt-lg-space-between-end, .layout-align-gt-lg-space-around-end {
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end; }
+  .layout-gt-lg {
+    box-sizing: border-box;
+    display: -webkit-flex;
+    display: -moz-flex;
+    display: -ms-flexbox;
+    display: flex; }
+  .layout-gt-lg-column {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+  .layout-gt-lg-row {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  .offset-gt-lg-5 {
+    margin-left: 5%; }
+  .offset-gt-lg-10 {
+    margin-left: 10%; }
+  .offset-gt-lg-15 {
+    margin-left: 15%; }
+  .offset-gt-lg-20 {
+    margin-left: 20%; }
+  .offset-gt-lg-25 {
+    margin-left: 25%; }
+  .offset-gt-lg-30 {
+    margin-left: 30%; }
+  .offset-gt-lg-35 {
+    margin-left: 35%; }
+  .offset-gt-lg-40 {
+    margin-left: 40%; }
+  .offset-gt-lg-45 {
+    margin-left: 45%; }
+  .offset-gt-lg-50 {
+    margin-left: 50%; }
+  .offset-gt-lg-55 {
+    margin-left: 55%; }
+  .offset-gt-lg-60 {
+    margin-left: 60%; }
+  .offset-gt-lg-65 {
+    margin-left: 65%; }
+  .offset-gt-lg-70 {
+    margin-left: 70%; }
+  .offset-gt-lg-75 {
+    margin-left: 75%; }
+  .offset-gt-lg-80 {
+    margin-left: 80%; }
+  .offset-gt-lg-85 {
+    margin-left: 85%; }
+  .offset-gt-lg-90 {
+    margin-left: 90%; }
+  .offset-gt-lg-95 {
+    margin-left: 95%; }
+  .offset-gt-lg-33, .offset-gt-lg-34 {
+    margin-left: 33.33%; }
+  .offset-gt-lg-66, .offset-gt-lg-67 {
+    margin-left: 66.66%; }
+  .flex-gt-lg {
+    box-sizing: border-box;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1; }
+  .flex-gt-lg-0 {
+    -webkit-flex: 0 0 0%;
+        -ms-flex: 0 0 0%;
+            flex: 0 0 0%; }
+  .layout-row > .flex-gt-lg-0 {
+    max-width: 0%; }
+  .layout-column > .flex-gt-lg-0 {
+    max-height: 0%; }
+  .flex-gt-lg-5 {
+    -webkit-flex: 0 0 5%;
+        -ms-flex: 0 0 5%;
+            flex: 0 0 5%; }
+  .layout-row > .flex-gt-lg-5 {
+    max-width: 5%; }
+  .layout-column > .flex-gt-lg-5 {
+    max-height: 5%; }
+  .flex-gt-lg-10 {
+    -webkit-flex: 0 0 10%;
+        -ms-flex: 0 0 10%;
+            flex: 0 0 10%; }
+  .layout-row > .flex-gt-lg-10 {
+    max-width: 10%; }
+  .layout-column > .flex-gt-lg-10 {
+    max-height: 10%; }
+  .flex-gt-lg-15 {
+    -webkit-flex: 0 0 15%;
+        -ms-flex: 0 0 15%;
+            flex: 0 0 15%; }
+  .layout-row > .flex-gt-lg-15 {
+    max-width: 15%; }
+  .layout-column > .flex-gt-lg-15 {
+    max-height: 15%; }
+  .flex-gt-lg-20 {
+    -webkit-flex: 0 0 20%;
+        -ms-flex: 0 0 20%;
+            flex: 0 0 20%; }
+  .layout-row > .flex-gt-lg-20 {
+    max-width: 20%; }
+  .layout-column > .flex-gt-lg-20 {
+    max-height: 20%; }
+  .flex-gt-lg-25 {
+    -webkit-flex: 0 0 25%;
+        -ms-flex: 0 0 25%;
+            flex: 0 0 25%; }
+  .layout-row > .flex-gt-lg-25 {
+    max-width: 25%; }
+  .layout-column > .flex-gt-lg-25 {
+    max-height: 25%; }
+  .flex-gt-lg-30 {
+    -webkit-flex: 0 0 30%;
+        -ms-flex: 0 0 30%;
+            flex: 0 0 30%; }
+  .layout-row > .flex-gt-lg-30 {
+    max-width: 30%; }
+  .layout-column > .flex-gt-lg-30 {
+    max-height: 30%; }
+  .flex-gt-lg-35 {
+    -webkit-flex: 0 0 35%;
+        -ms-flex: 0 0 35%;
+            flex: 0 0 35%; }
+  .layout-row > .flex-gt-lg-35 {
+    max-width: 35%; }
+  .layout-column > .flex-gt-lg-35 {
+    max-height: 35%; }
+  .flex-gt-lg-40 {
+    -webkit-flex: 0 0 40%;
+        -ms-flex: 0 0 40%;
+            flex: 0 0 40%; }
+  .layout-row > .flex-gt-lg-40 {
+    max-width: 40%; }
+  .layout-column > .flex-gt-lg-40 {
+    max-height: 40%; }
+  .flex-gt-lg-45 {
+    -webkit-flex: 0 0 45%;
+        -ms-flex: 0 0 45%;
+            flex: 0 0 45%; }
+  .layout-row > .flex-gt-lg-45 {
+    max-width: 45%; }
+  .layout-column > .flex-gt-lg-45 {
+    max-height: 45%; }
+  .flex-gt-lg-50 {
+    -webkit-flex: 0 0 50%;
+        -ms-flex: 0 0 50%;
+            flex: 0 0 50%; }
+  .layout-row > .flex-gt-lg-50 {
+    max-width: 50%; }
+  .layout-column > .flex-gt-lg-50 {
+    max-height: 50%; }
+  .flex-gt-lg-55 {
+    -webkit-flex: 0 0 55%;
+        -ms-flex: 0 0 55%;
+            flex: 0 0 55%; }
+  .layout-row > .flex-gt-lg-55 {
+    max-width: 55%; }
+  .layout-column > .flex-gt-lg-55 {
+    max-height: 55%; }
+  .flex-gt-lg-60 {
+    -webkit-flex: 0 0 60%;
+        -ms-flex: 0 0 60%;
+            flex: 0 0 60%; }
+  .layout-row > .flex-gt-lg-60 {
+    max-width: 60%; }
+  .layout-column > .flex-gt-lg-60 {
+    max-height: 60%; }
+  .flex-gt-lg-65 {
+    -webkit-flex: 0 0 65%;
+        -ms-flex: 0 0 65%;
+            flex: 0 0 65%; }
+  .layout-row > .flex-gt-lg-65 {
+    max-width: 65%; }
+  .layout-column > .flex-gt-lg-65 {
+    max-height: 65%; }
+  .flex-gt-lg-70 {
+    -webkit-flex: 0 0 70%;
+        -ms-flex: 0 0 70%;
+            flex: 0 0 70%; }
+  .layout-row > .flex-gt-lg-70 {
+    max-width: 70%; }
+  .layout-column > .flex-gt-lg-70 {
+    max-height: 70%; }
+  .flex-gt-lg-75 {
+    -webkit-flex: 0 0 75%;
+        -ms-flex: 0 0 75%;
+            flex: 0 0 75%; }
+  .layout-row > .flex-gt-lg-75 {
+    max-width: 75%; }
+  .layout-column > .flex-gt-lg-75 {
+    max-height: 75%; }
+  .flex-gt-lg-80 {
+    -webkit-flex: 0 0 80%;
+        -ms-flex: 0 0 80%;
+            flex: 0 0 80%; }
+  .layout-row > .flex-gt-lg-80 {
+    max-width: 80%; }
+  .layout-column > .flex-gt-lg-80 {
+    max-height: 80%; }
+  .flex-gt-lg-85 {
+    -webkit-flex: 0 0 85%;
+        -ms-flex: 0 0 85%;
+            flex: 0 0 85%; }
+  .layout-row > .flex-gt-lg-85 {
+    max-width: 85%; }
+  .layout-column > .flex-gt-lg-85 {
+    max-height: 85%; }
+  .flex-gt-lg-90 {
+    -webkit-flex: 0 0 90%;
+        -ms-flex: 0 0 90%;
+            flex: 0 0 90%; }
+  .layout-row > .flex-gt-lg-90 {
+    max-width: 90%; }
+  .layout-column > .flex-gt-lg-90 {
+    max-height: 90%; }
+  .flex-gt-lg-95 {
+    -webkit-flex: 0 0 95%;
+        -ms-flex: 0 0 95%;
+            flex: 0 0 95%; }
+  .layout-row > .flex-gt-lg-95 {
+    max-width: 95%; }
+  .layout-column > .flex-gt-lg-95 {
+    max-height: 95%; }
+  .flex-gt-lg-100 {
+    -webkit-flex: 0 0 100%;
+        -ms-flex: 0 0 100%;
+            flex: 0 0 100%; }
+  .layout-row > .flex-gt-lg-100 {
+    max-width: 100%; }
+  .layout-column > .flex-gt-lg-100 {
+    max-height: 100%; }
+  .flex-gt-lg-33, .flex-gt-lg-34 {
+    -webkit-flex: 0 0 33.33%;
+        -ms-flex: 0 0 33.33%;
+            flex: 0 0 33.33%; }
+  .flex-gt-lg-66, .flex-gt-lg-67 {
+    -webkit-flex: 0 0 66.66%;
+        -ms-flex: 0 0 66.66%;
+            flex: 0 0 66.66%; }
+  .layout-row > .flex-gt-lg-33, .layout-row > .flex-gt-lg-34 {
+    max-width: 33.33%; }
+  .layout-row > .flex-gt-lg-66, .layout-row > .flex-gt-lg-67 {
+    max-width: 66.66%; }
+  .layout-column > .flex-gt-lg-33, .layout-column > .flex-gt-lg-34 {
+    max-height: 33.33%; }
+  .layout-column > .flex-gt-lg-66, .layout-column > .flex-gt-lg-67 {
+    max-height: 66.66%; } }
+
+@-webkit-keyframes md-autocomplete-list-out {
+  0% {
+    -webkit-animation-timing-function: linear;
+            animation-timing-function: linear; }
+
+  50% {
+    opacity: 0;
+    height: 40px;
+    -webkit-animation-timing-function: ease-in;
+            animation-timing-function: ease-in; }
+
+  100% {
+    height: 0;
+    opacity: 0; } }
+
+@keyframes md-autocomplete-list-out {
+  0% {
+    -webkit-animation-timing-function: linear;
+            animation-timing-function: linear; }
+
+  50% {
+    opacity: 0;
+    height: 40px;
+    -webkit-animation-timing-function: ease-in;
+            animation-timing-function: ease-in; }
+
+  100% {
+    height: 0;
+    opacity: 0; } }
+
+@-webkit-keyframes md-autocomplete-list-in {
+  0% {
+    opacity: 0;
+    height: 0;
+    -webkit-animation-timing-function: ease-out;
+            animation-timing-function: ease-out; }
+
+  50% {
+    opacity: 0;
+    height: 40px; }
+
+  100% {
+    opacity: 1;
+    height: 40px; } }
+
+@keyframes md-autocomplete-list-in {
+  0% {
+    opacity: 0;
+    height: 0;
+    -webkit-animation-timing-function: ease-out;
+            animation-timing-function: ease-out; }
+
+  50% {
+    opacity: 0;
+    height: 40px; }
+
+  100% {
+    opacity: 1;
+    height: 40px; } }
+
+md-autocomplete {
+  border-radius: 2px;
+  display: block;
+  height: 40px;
+  position: relative;
+  overflow: visible;
+  min-width: 190px; }
+  md-autocomplete[disabled] input {
+    cursor: not-allowed; }
+  md-autocomplete[md-floating-label] {
+    padding-bottom: 26px;
+    border-radius: 0;
+    background: transparent;
+    height: auto; }
+    md-autocomplete[md-floating-label] md-input-container {
+      padding-bottom: 0; }
+    md-autocomplete[md-floating-label] md-autocomplete-wrap {
+      height: auto; }
+    md-autocomplete[md-floating-label] button {
+      position: absolute;
+      top: auto;
+      bottom: 0;
+      right: 0;
+      width: 30px;
+      height: 30px; }
+  md-autocomplete md-autocomplete-wrap {
+    display: block;
+    position: relative;
+    overflow: visible;
+    height: 40px; }
+    md-autocomplete md-autocomplete-wrap.md-menu-showing {
+      z-index: 51; }
+    md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] {
+      position: absolute;
+      bottom: 0;
+      left: 0;
+      width: 100%;
+      height: 3px;
+      transition: none; }
+      md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] .md-container {
+        transition: none;
+        top: auto;
+        height: 3px; }
+      md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter {
+        transition: opacity 0.15s linear; }
+        md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter.ng-enter-active {
+          opacity: 1; }
+      md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave {
+        transition: opacity 0.15s linear; }
+        md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave.ng-leave-active {
+          opacity: 0; }
+  md-autocomplete input:not(.md-input) {
+    font-size: 14px;
+    box-sizing: border-box;
+    border: none;
+    box-shadow: none;
+    outline: none;
+    background: transparent;
+    width: 100%;
+    padding: 0 15px;
+    line-height: 40px;
+    height: 40px; }
+    md-autocomplete input:not(.md-input)::-ms-clear {
+      display: none; }
+  md-autocomplete button {
+    position: relative;
+    line-height: 20px;
+    text-align: center;
+    width: 30px;
+    height: 30px;
+    cursor: pointer;
+    border: none;
+    border-radius: 50%;
+    padding: 0;
+    font-size: 12px;
+    background: transparent;
+    margin: auto 5px; }
+    md-autocomplete button:after {
+      content: '';
+      position: absolute;
+      top: -6px;
+      right: -6px;
+      bottom: -6px;
+      left: -6px;
+      border-radius: 50%;
+      -webkit-transform: scale(0);
+              transform: scale(0);
+      opacity: 0;
+      transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
+    md-autocomplete button:focus {
+      outline: none; }
+      md-autocomplete button:focus:after {
+        -webkit-transform: scale(1);
+                transform: scale(1);
+        opacity: 1; }
+    md-autocomplete button md-icon {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      -webkit-transform: translate3d(-50%, -50%, 0) scale(0.9);
+              transform: translate3d(-50%, -50%, 0) scale(0.9); }
+      md-autocomplete button md-icon path {
+        stroke-width: 0; }
+    md-autocomplete button.ng-enter {
+      -webkit-transform: scale(0);
+              transform: scale(0);
+      transition: -webkit-transform 0.15s ease-out;
+      transition: transform 0.15s ease-out; }
+      md-autocomplete button.ng-enter.ng-enter-active {
+        -webkit-transform: scale(1);
+                transform: scale(1); }
+    md-autocomplete button.ng-leave {
+      transition: -webkit-transform 0.15s ease-out;
+      transition: transform 0.15s ease-out; }
+      md-autocomplete button.ng-leave.ng-leave-active {
+        -webkit-transform: scale(0);
+                transform: scale(0); }
+  @media screen and (-ms-high-contrast: active) {
+    md-autocomplete input {
+      border: 1px solid #fff; }
+    md-autocomplete li:focus {
+      color: #fff; } }
+
+.md-virtual-repeat-container.md-autocomplete-suggestions-container {
+  position: absolute;
+  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
+  height: 225.5px;
+  max-height: 225.5px;
+  z-index: 100; }
+
+.md-autocomplete-suggestions {
+  margin: 0;
+  list-style: none;
+  padding: 0; }
+  .md-autocomplete-suggestions li {
+    cursor: pointer;
+    font-size: 14px;
+    overflow: hidden;
+    padding: 0 15px;
+    line-height: 48px;
+    height: 48px;
+    transition: background 0.15s linear;
+    margin: 0;
+    white-space: nowrap;
+    text-overflow: ellipsis; }
+    .md-autocomplete-suggestions li:focus {
+      outline: none; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-autocomplete, .md-autocomplete-suggestions {
+    border: 1px solid #fff; } }
+
+md-backdrop {
+  transition: opacity 450ms;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 50; }
+  md-backdrop.md-menu-backdrop {
+    position: fixed !important;
+    z-index: 98; }
+  md-backdrop.md-select-backdrop {
+    z-index: 81;
+    transition-duration: 0; }
+  md-backdrop.md-dialog-backdrop {
+    z-index: 79; }
+  md-backdrop.md-bottom-sheet-backdrop {
+    z-index: 69; }
+  md-backdrop.md-sidenav-backdrop {
+    z-index: 59; }
+  md-backdrop.md-click-catcher {
+    position: absolute; }
+  md-backdrop.md-opaque {
+    opacity: .48; }
+    md-backdrop.md-opaque.ng-enter {
+      opacity: 0; }
+    md-backdrop.md-opaque.ng-enter.md-opaque.ng-enter-active {
+      opacity: .48; }
+    md-backdrop.md-opaque.ng-leave {
+      opacity: .48;
+      transition: opacity 400ms; }
+    md-backdrop.md-opaque.ng-leave.md-opaque.ng-leave-active {
+      opacity: 0; }
+
+md-bottom-sheet {
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  padding: 8px 16px 88px 16px;
+  z-index: 70;
+  border-top-width: 1px;
+  border-top-style: solid;
+  -webkit-transform: translate3d(0, 80px, 0);
+          transform: translate3d(0, 80px, 0);
+  transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+  transition-property: -webkit-transform;
+  transition-property: transform; }
+  md-bottom-sheet.md-has-header {
+    padding-top: 0; }
+  md-bottom-sheet.ng-enter {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+            transform: translate3d(0, 100%, 0); }
+  md-bottom-sheet.ng-enter-active {
+    opacity: 1;
+    display: block;
+    -webkit-transform: translate3d(0, 80px, 0) !important;
+            transform: translate3d(0, 80px, 0) !important; }
+  md-bottom-sheet.ng-leave-active {
+    -webkit-transform: translate3d(0, 100%, 0) !important;
+            transform: translate3d(0, 100%, 0) !important;
+    transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+  md-bottom-sheet .md-subheader {
+    background-color: transparent;
+    font-family: Roboto, 'Helvetica Neue', sans-serif;
+    line-height: 56px;
+    padding: 0;
+    white-space: nowrap; }
+  md-bottom-sheet md-inline-icon {
+    display: inline-block;
+    height: 24px;
+    width: 24px;
+    fill: #444; }
+  md-bottom-sheet md-list-item {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    outline: none; }
+    md-bottom-sheet md-list-item:hover {
+      cursor: pointer; }
+  md-bottom-sheet.md-list md-list-item {
+    padding: 0;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center;
+    height: 48px; }
+    md-bottom-sheet.md-list md-list-item div.md-icon-container {
+      display: inline-block;
+      height: 24px;
+      margin-right: 32px; }
+  md-bottom-sheet.md-grid {
+    padding-left: 24px;
+    padding-right: 24px;
+    padding-top: 0; }
+    md-bottom-sheet.md-grid md-list {
+      display: -webkit-flex;
+      display: -ms-flexbox;
+      display: flex;
+      -webkit-flex-direction: row;
+          -ms-flex-direction: row;
+              flex-direction: row;
+      -webkit-flex-wrap: wrap;
+          -ms-flex-wrap: wrap;
+              flex-wrap: wrap;
+      transition: all 0.5s;
+      -webkit-align-items: center;
+          -ms-flex-align: center;
+              align-items: center; }
+    md-bottom-sheet.md-grid md-list-item {
+      -webkit-flex-direction: column;
+          -ms-flex-direction: column;
+              flex-direction: column;
+      -webkit-align-items: center;
+          -ms-flex-align: center;
+              align-items: center;
+      transition: all 0.5s;
+      height: 96px;
+      margin-top: 8px;
+      margin-bottom: 8px;
+      /* Mixin for how many grid items to show per row */ }
+      @media screen and (max-width: 600px) {
+        md-bottom-sheet.md-grid md-list-item {
+          -webkit-flex: 1 1 33.33333%;
+              -ms-flex: 1 1 33.33333%;
+                  flex: 1 1 33.33333%;
+          max-width: 33.33333%; }
+          md-bottom-sheet.md-grid md-list-item:nth-of-type(3n+1) {
+            -webkit-align-items: flex-start;
+                -ms-flex-align: start;
+                    align-items: flex-start; }
+          md-bottom-sheet.md-grid md-list-item:nth-of-type(3n) {
+            -webkit-align-items: flex-end;
+                -ms-flex-align: end;
+                    align-items: flex-end; } }
+      @media screen and (min-width: 600px) and (max-width: 960px) {
+        md-bottom-sheet.md-grid md-list-item {
+          -webkit-flex: 1 1 25%;
+              -ms-flex: 1 1 25%;
+                  flex: 1 1 25%;
+          max-width: 25%; } }
+      @media screen and (min-width: 960px) and (max-width: 1200px) {
+        md-bottom-sheet.md-grid md-list-item {
+          -webkit-flex: 1 1 16.66667%;
+              -ms-flex: 1 1 16.66667%;
+                  flex: 1 1 16.66667%;
+          max-width: 16.66667%; } }
+      @media screen and (min-width: 1200px) {
+        md-bottom-sheet.md-grid md-list-item {
+          -webkit-flex: 1 1 14.28571%;
+              -ms-flex: 1 1 14.28571%;
+                  flex: 1 1 14.28571%;
+          max-width: 14.28571%; } }
+      md-bottom-sheet.md-grid md-list-item .md-list-item-content {
+        display: -webkit-flex;
+        display: -ms-flexbox;
+        display: flex;
+        -webkit-flex-direction: column;
+            -ms-flex-direction: column;
+                flex-direction: column;
+        -webkit-align-items: center;
+            -ms-flex-align: center;
+                align-items: center;
+        width: 48px;
+        padding-bottom: 16px; }
+      md-bottom-sheet.md-grid md-list-item .md-grid-item-content {
+        border: 1px solid transparent;
+        display: -webkit-flex;
+        display: -ms-flexbox;
+        display: flex;
+        -webkit-flex-direction: column;
+            -ms-flex-direction: column;
+                flex-direction: column;
+        -webkit-align-items: center;
+            -ms-flex-align: center;
+                align-items: center;
+        width: 80px; }
+      md-bottom-sheet.md-grid md-list-item .md-icon-container {
+        display: inline-block;
+        box-sizing: border-box;
+        height: 48px;
+        width: 48px;
+        margin: 0 0; }
+      md-bottom-sheet.md-grid md-list-item .md-grid-text {
+        font-weight: 400;
+        line-height: 16px;
+        font-size: 13px;
+        margin: 0;
+        white-space: nowrap;
+        width: 64px;
+        text-align: center;
+        text-transform: none;
+        padding-top: 8px; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-bottom-sheet {
+    border: 1px solid #fff; } }
+
+.md-button {
+  border-radius: 3px;
+  box-sizing: border-box;
+  color: currentColor;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  position: relative;
+  outline: none;
+  border: 0;
+  display: inline-block;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  padding: 0 6px;
+  margin: 6px 8px;
+  line-height: 36px;
+  min-height: 36px;
+  background: transparent;
+  white-space: nowrap;
+  min-width: 88px;
+  text-align: center;
+  text-transform: uppercase;
+  font-weight: 500;
+  font-size: 14px;
+  font-style: inherit;
+  font-variant: inherit;
+  font-family: inherit;
+  text-decoration: none;
+  cursor: pointer;
+  overflow: hidden;
+  transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
+  .md-button:focus {
+    outline: none; }
+  .md-button:hover, .md-button:focus {
+    text-decoration: none; }
+  .md-button.ng-hide, .md-button.ng-leave {
+    transition: none; }
+  .md-button.md-cornered {
+    border-radius: 0; }
+  .md-button.md-icon {
+    padding: 0;
+    background: none; }
+  .md-button.md-raised:not([disabled]) {
+    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); }
+  .md-button.md-icon-button {
+    margin: 0 6px;
+    height: 48px;
+    min-width: 0;
+    line-height: 48px;
+    padding-left: 0;
+    padding-right: 0;
+    width: 48px;
+    border-radius: 50%; }
+    .md-button.md-icon-button .md-ripple-container {
+      border-radius: 50%;
+      background-clip: padding-box;
+      overflow: hidden;
+      -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC'); }
+  .md-button.md-fab {
+    z-index: 20;
+    line-height: 56px;
+    min-width: 0;
+    width: 56px;
+    height: 56px;
+    vertical-align: middle;
+    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+    border-radius: 50%;
+    background-clip: padding-box;
+    overflow: hidden;
+    transition: 0.2s linear;
+    transition-property: background-color, box-shadow; }
+    .md-button.md-fab.md-fab-bottom-right {
+      top: auto;
+      right: 20px;
+      bottom: 20px;
+      left: auto;
+      position: absolute; }
+    .md-button.md-fab.md-fab-bottom-left {
+      top: auto;
+      right: auto;
+      bottom: 20px;
+      left: 20px;
+      position: absolute; }
+    .md-button.md-fab.md-fab-top-right {
+      top: 20px;
+      right: 20px;
+      bottom: auto;
+      left: auto;
+      position: absolute; }
+    .md-button.md-fab.md-fab-top-left {
+      top: 20px;
+      right: auto;
+      bottom: auto;
+      left: 20px;
+      position: absolute; }
+    .md-button.md-fab .md-ripple-container {
+      border-radius: 50%;
+      background-clip: padding-box;
+      overflow: hidden;
+      -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC'); }
+    .md-button.md-fab.md-mini {
+      line-height: 40px;
+      width: 40px;
+      height: 40px; }
+  .md-button:not([disabled]).md-raised.md-focused, .md-button:not([disabled]).md-fab.md-focused {
+    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); }
+  .md-button:not([disabled]).md-raised:active, .md-button:not([disabled]).md-fab:active {
+    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); }
+  .md-button .md-ripple-container {
+    border-radius: 3px;
+    background-clip: padding-box;
+    overflow: hidden;
+    -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC'); }
+
+.md-toast-open-top .md-button.md-fab-top-left, .md-toast-open-top .md-button.md-fab-top-right {
+  -webkit-transform: translate3d(0, 42px, 0);
+          transform: translate3d(0, 42px, 0); }
+  .md-toast-open-top .md-button.md-fab-top-left:not([disabled]).md-focused, .md-toast-open-top .md-button.md-fab-top-left:not([disabled]):hover, .md-toast-open-top .md-button.md-fab-top-right:not([disabled]).md-focused, .md-toast-open-top .md-button.md-fab-top-right:not([disabled]):hover {
+    -webkit-transform: translate3d(0, 41px, 0);
+            transform: translate3d(0, 41px, 0); }
+
+.md-toast-open-bottom .md-button.md-fab-bottom-left, .md-toast-open-bottom .md-button.md-fab-bottom-right {
+  -webkit-transform: translate3d(0, -42px, 0);
+          transform: translate3d(0, -42px, 0); }
+  .md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]).md-focused, .md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]):hover, .md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]).md-focused, .md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]):hover {
+    -webkit-transform: translate3d(0, -43px, 0);
+            transform: translate3d(0, -43px, 0); }
+
+.md-button-group {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  width: 100%; }
+
+.md-button-group > .md-button {
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  display: block;
+  overflow: hidden;
+  width: 0;
+  border-width: 1px 0px 1px 1px;
+  border-radius: 0;
+  text-align: center;
+  text-overflow: ellipsis;
+  white-space: nowrap; }
+  .md-button-group > .md-button:first-child {
+    border-radius: 2px 0px 0px 2px; }
+  .md-button-group > .md-button:last-child {
+    border-right-width: 1px;
+    border-radius: 0px 2px 2px 0px; }
+
+@media screen and (-ms-high-contrast: active) {
+  .md-button.md-raised, .md-button.md-fab {
+    border: 1px solid #fff; } }
+
+md-card {
+  box-sizing: border-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  margin: 8px;
+  box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); }
+  md-card > img, md-card > :not(md-card-content) img {
+    width: 100%; }
+  md-card md-card-content {
+    padding: 16px; }
+  md-card .md-actions {
+    margin: 0; }
+    md-card .md-actions .md-button {
+      margin-bottom: 8px;
+      margin-top: 8px;
+      margin-right: 4px;
+      margin-left: 4px; }
+  md-card md-card-footer {
+    padding: 16px; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-card {
+    border: 1px solid #fff; } }
+
+md-checkbox {
+  box-sizing: border-box;
+  display: block;
+  margin: 8px;
+  white-space: nowrap;
+  cursor: pointer;
+  outline: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  padding-left: 18px;
+  padding-right: 0;
+  position: relative;
+  line-height: 26px;
+  min-width: 18px;
+  min-height: 18px; }
+  html[dir=rtl] md-checkbox {
+    padding-left: 0;
+    unicode-bidi: embed; }
+  body[dir=rtl] md-checkbox {
+    padding-left: 0;
+    unicode-bidi: embed; }
+  md-checkbox bdo[dir=rtl] {
+    direction: rtl;
+    unicode-bidi: bidi-override; }
+  md-checkbox bdo[dir=ltr] {
+    direction: ltr;
+    unicode-bidi: bidi-override; }
+  html[dir=rtl] md-checkbox {
+    padding-right: 18px;
+    unicode-bidi: embed; }
+  body[dir=rtl] md-checkbox {
+    padding-right: 18px;
+    unicode-bidi: embed; }
+  md-checkbox bdo[dir=rtl] {
+    direction: rtl;
+    unicode-bidi: bidi-override; }
+  md-checkbox bdo[dir=ltr] {
+    direction: ltr;
+    unicode-bidi: bidi-override; }
+  md-checkbox.md-focused:not([disabled]) .md-container:before {
+    left: -8px;
+    top: -8px;
+    right: -8px;
+    bottom: -8px; }
+  md-checkbox.md-focused:not([disabled]):not(.md-checked) .md-container:before {
+    background-color: rgba(0, 0, 0, 0.12); }
+  md-checkbox .md-container {
+    position: absolute;
+    top: 50%;
+    -webkit-transform: translateY(-50%);
+            transform: translateY(-50%);
+    box-sizing: border-box;
+    display: inline-block;
+    width: 18px;
+    height: 18px;
+    left: 0;
+    right: auto; }
+    html[dir=rtl] md-checkbox .md-container {
+      left: auto;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-checkbox .md-container {
+      left: auto;
+      unicode-bidi: embed; }
+    md-checkbox .md-container bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-checkbox .md-container bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+    html[dir=rtl] md-checkbox .md-container {
+      right: 0;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-checkbox .md-container {
+      right: 0;
+      unicode-bidi: embed; }
+    md-checkbox .md-container bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-checkbox .md-container bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+    md-checkbox .md-container:before {
+      box-sizing: border-box;
+      background-color: transparent;
+      border-radius: 50%;
+      content: '';
+      position: absolute;
+      display: block;
+      height: auto;
+      left: 0;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      transition: all 0.5s;
+      width: auto; }
+    md-checkbox .md-container:after {
+      box-sizing: border-box;
+      content: '';
+      position: absolute;
+      top: -10px;
+      right: -10px;
+      bottom: -10px;
+      left: -10px; }
+    md-checkbox .md-container .md-ripple-container {
+      position: absolute;
+      display: block;
+      width: auto;
+      height: auto;
+      left: -15px;
+      top: -15px;
+      right: -15px;
+      bottom: -15px; }
+  md-checkbox.md-align-top-left > div.md-container {
+    top: 12px; }
+  md-checkbox .md-icon {
+    box-sizing: border-box;
+    transition: 240ms;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 18px;
+    height: 18px;
+    border-width: 2px;
+    border-style: solid;
+    border-radius: 2px; }
+  md-checkbox.md-checked .md-icon {
+    border: none; }
+  md-checkbox[disabled] {
+    cursor: no-drop; }
+  md-checkbox.md-checked .md-icon:after {
+    box-sizing: border-box;
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg);
+    position: absolute;
+    left: 6px;
+    top: 2px;
+    display: table;
+    width: 6px;
+    height: 12px;
+    border-width: 2px;
+    border-style: solid;
+    border-top: 0;
+    border-left: 0;
+    content: ''; }
+  md-checkbox .md-label {
+    box-sizing: border-box;
+    position: relative;
+    display: inline-block;
+    vertical-align: middle;
+    white-space: normal;
+    -webkit-user-select: text;
+       -moz-user-select: text;
+        -ms-user-select: text;
+            user-select: text;
+    margin-left: 10px;
+    margin-right: 0; }
+    html[dir=rtl] md-checkbox .md-label {
+      margin-left: 0;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-checkbox .md-label {
+      margin-left: 0;
+      unicode-bidi: embed; }
+    md-checkbox .md-label bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-checkbox .md-label bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+    html[dir=rtl] md-checkbox .md-label {
+      margin-right: 10px;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-checkbox .md-label {
+      margin-right: 10px;
+      unicode-bidi: embed; }
+    md-checkbox .md-label bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-checkbox .md-label bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+
+.md-contact-chips .md-chips .md-chip {
+  padding: 0 25px 0 0; }
+  .md-contact-chips .md-chips .md-chip .md-contact-avatar {
+    float: left; }
+    .md-contact-chips .md-chips .md-chip .md-contact-avatar img {
+      height: 32px;
+      border-radius: 16px; }
+  .md-contact-chips .md-chips .md-chip .md-contact-name {
+    display: inline-block;
+    height: 32px;
+    margin-left: 8px; }
+
+.md-contact-suggestion {
+  height: 56px; }
+  .md-contact-suggestion img {
+    height: 40px;
+    border-radius: 20px;
+    margin-top: 8px; }
+  .md-contact-suggestion .md-contact-name {
+    margin-left: 8px;
+    width: 120px; }
+  .md-contact-suggestion .md-contact-name, .md-contact-suggestion .md-contact-email {
+    display: inline-block;
+    overflow: hidden;
+    text-overflow: ellipsis; }
+
+.md-contact-chips-suggestions li {
+  height: 100%; }
+
+.md-chips {
+  display: block;
+  font-family: Roboto, 'Helvetica Neue', sans-serif;
+  font-size: 16px;
+  padding: 0 0 8px 3px;
+  vertical-align: middle; }
+  .md-chips:after {
+    content: '';
+    display: table;
+    clear: both; }
+  .md-chips:not(.md-readonly) {
+    cursor: text; }
+    .md-chips:not(.md-readonly) .md-chip {
+      padding-right: 22px; }
+  .md-chips .md-chip {
+    cursor: default;
+    border-radius: 16px;
+    display: block;
+    height: 32px;
+    line-height: 32px;
+    margin: 8px 8px 0 0;
+    padding: 0 12px 0 12px;
+    float: left;
+    box-sizing: border-box;
+    max-width: 100%;
+    position: relative; }
+    .md-chips .md-chip .md-chip-content {
+      display: block;
+      padding-right: 4px;
+      float: left;
+      white-space: nowrap;
+      max-width: 100%;
+      overflow: hidden;
+      text-overflow: ellipsis; }
+      .md-chips .md-chip .md-chip-content:focus {
+        outline: none; }
+    .md-chips .md-chip .md-chip-remove-container {
+      position: absolute;
+      right: 0;
+      line-height: 22px; }
+    .md-chips .md-chip .md-chip-remove {
+      text-align: center;
+      width: 32px;
+      height: 32px;
+      min-width: 0;
+      padding: 0;
+      background: transparent;
+      border: none;
+      box-shadow: none;
+      margin: 0;
+      position: relative; }
+      .md-chips .md-chip .md-chip-remove md-icon {
+        height: 18px;
+        width: 18px;
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        -webkit-transform: translate3d(-50%, -50%, 0);
+                transform: translate3d(-50%, -50%, 0); }
+  .md-chips .md-chip-input-container {
+    display: block;
+    line-height: 32px;
+    margin: 8px 8px 0 0;
+    padding: 0 12px 0 12px;
+    float: left; }
+    .md-chips .md-chip-input-container input:not([type]), .md-chips .md-chip-input-container input[type="email"], .md-chips .md-chip-input-container input[type="number"], .md-chips .md-chip-input-container input[type="tel"], .md-chips .md-chip-input-container input[type="url"], .md-chips .md-chip-input-container input[type="text"] {
+      border: 0;
+      height: 32px;
+      line-height: 32px;
+      padding: 0; }
+      .md-chips .md-chip-input-container input:not([type]):focus, .md-chips .md-chip-input-container input[type="email"]:focus, .md-chips .md-chip-input-container input[type="number"]:focus, .md-chips .md-chip-input-container input[type="tel"]:focus, .md-chips .md-chip-input-container input[type="url"]:focus, .md-chips .md-chip-input-container input[type="text"]:focus {
+        outline: none; }
+    .md-chips .md-chip-input-container md-autocomplete, .md-chips .md-chip-input-container md-autocomplete-wrap {
+      background: transparent;
+      height: 32px; }
+    .md-chips .md-chip-input-container md-autocomplete md-autocomplete-wrap {
+      box-shadow: none; }
+    .md-chips .md-chip-input-container md-autocomplete input {
+      position: relative; }
+    .md-chips .md-chip-input-container input {
+      border: 0;
+      height: 32px;
+      line-height: 32px;
+      padding: 0; }
+      .md-chips .md-chip-input-container input:focus {
+        outline: none; }
+    .md-chips .md-chip-input-container md-autocomplete, .md-chips .md-chip-input-container md-autocomplete-wrap {
+      height: 32px; }
+    .md-chips .md-chip-input-container md-autocomplete {
+      box-shadow: none; }
+      .md-chips .md-chip-input-container md-autocomplete input {
+        position: relative; }
+    .md-chips .md-chip-input-container:not(:first-child) {
+      margin: 8px 8px 0 0; }
+    .md-chips .md-chip-input-container input {
+      background: transparent;
+      border-width: 0; }
+  .md-chips md-autocomplete button {
+    display: none; }
+
+@media screen and (-ms-high-contrast: active) {
+  .md-chip-input-container, md-chip {
+    border: 1px solid #fff; }
+  .md-chip-input-container md-autocomplete {
+    border: none; } }
+
+md-content {
+  display: block;
+  position: relative;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch; }
+  md-content[md-scroll-y] {
+    overflow-y: auto;
+    overflow-x: hidden; }
+  md-content[md-scroll-x] {
+    overflow-x: auto;
+    overflow-y: hidden; }
+  md-content.autoScroll {
+    -webkit-overflow-scrolling: auto; }
+
+/** Styles for mdCalendar. */
+md-calendar {
+  font-size: 13px;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none; }
+
+.md-calendar-scroll-mask {
+  display: inline-block;
+  overflow: hidden;
+  height: 308px; }
+  .md-calendar-scroll-mask .md-virtual-repeat-scroller {
+    overflow-y: scroll;
+    -webkit-overflow-scrolling: touch; }
+    .md-calendar-scroll-mask .md-virtual-repeat-scroller::-webkit-scrollbar {
+      display: none; }
+  .md-calendar-scroll-mask .md-virtual-repeat-offsetter {
+    width: 100%; }
+
+.md-calendar-scroll-container {
+  display: inline-block;
+  height: 308px;
+  width: 340px; }
+
+.md-calendar-date {
+  height: 44px;
+  width: 44px;
+  text-align: center;
+  padding: 0;
+  border: none; }
+  .md-calendar-date:first-child {
+    padding-left: 16px; }
+  .md-calendar-date:last-child {
+    padding-right: 16px; }
+  .md-calendar-date.md-calendar-date-disabled {
+    cursor: default; }
+
+.md-calendar-date-selection-indicator {
+  transition: background-color, color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+  border-radius: 50%;
+  display: inline-block;
+  width: 40px;
+  height: 40px;
+  line-height: 40px; }
+  .md-calendar-date:not(.md-disabled) .md-calendar-date-selection-indicator {
+    cursor: pointer; }
+
+.md-calendar-month-label {
+  height: 44px;
+  font-size: 13px;
+  padding: 0 0 0 24px; }
+
+.md-calendar-day-header {
+  table-layout: fixed;
+  border-spacing: 0;
+  border-collapse: collapse; }
+  .md-calendar-day-header th {
+    height: 44px;
+    width: 44px;
+    text-align: center;
+    padding: 0;
+    border: none;
+    font-weight: normal;
+    height: 40px; }
+    .md-calendar-day-header th:first-child {
+      padding-left: 16px; }
+    .md-calendar-day-header th:last-child {
+      padding-right: 16px; }
+
+.md-calendar {
+  table-layout: fixed;
+  border-spacing: 0;
+  border-collapse: collapse; }
+  .md-calendar tr:last-child td {
+    border-bottom-width: 1px;
+    border-bottom-style: solid; }
+  .md-calendar:first-child {
+    border-top: 1px solid transparent; }
+
+/** Styles for mdDatepicker. */
+md-datepicker {
+  white-space: nowrap; }
+
+.md-datepicker-button {
+  display: inline-block;
+  box-sizing: border-box;
+  background: none; }
+
+.md-datepicker-input {
+  font-size: 14px;
+  box-sizing: border-box;
+  border: none;
+  box-shadow: none;
+  outline: none;
+  background: transparent;
+  min-width: 120px;
+  max-width: 328px; }
+  .md-datepicker-input::-ms-clear {
+    display: none; }
+
+.md-datepicker-input-container {
+  position: relative;
+  padding-bottom: 5px;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+  display: inline-block;
+  width: auto;
+  margin-left: 12px; }
+  .md-datepicker-input-container.md-datepicker-focused {
+    border-bottom-width: 2px; }
+
+.md-datepicker-calendar-pane {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 99;
+  border-width: 1px;
+  border-style: solid;
+  background: transparent;
+  -webkit-transform: scale(0);
+          transform: scale(0);
+  -webkit-transform-origin: 0 0;
+          transform-origin: 0 0;
+  transition: -webkit-transform 0.2s cubic-bezier(0.25, 0.8, 0.25, 1);
+  transition: transform 0.2s cubic-bezier(0.25, 0.8, 0.25, 1); }
+  .md-datepicker-calendar-pane.md-pane-open {
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+
+.md-datepicker-input-mask {
+  height: 40px;
+  width: 340px;
+  position: relative;
+  background: transparent;
+  pointer-events: none;
+  cursor: text; }
+
+.md-datepicker-input-mask-opaque {
+  position: absolute;
+  right: 0;
+  left: 120px;
+  background: white;
+  height: 100%; }
+
+.md-datepicker-calendar {
+  opacity: 0;
+  transition: opacity 0.2s cubic-bezier(0.5, 0, 0.25, 1); }
+  .md-pane-open .md-datepicker-calendar {
+    opacity: 1; }
+  .md-datepicker-calendar md-calendar:focus {
+    outline: none; }
+
+.md-datepicker-expand-triangle {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  width: 0;
+  height: 0;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  border-top: 5px solid rgba(0, 0, 0, 0.2); }
+
+.md-datepicker-triangle-button {
+  position: absolute;
+  right: 0;
+  top: 0;
+  -webkit-transform: translateY(-25%) translateX(45%);
+          transform: translateY(-25%) translateX(45%); }
+
+.md-datepicker-triangle-button.md-button.md-icon-button {
+  height: 100%;
+  width: 36px;
+  position: absolute; }
+
+md-datepicker[disabled] .md-datepicker-input-container {
+  border-bottom-color: transparent; }
+md-datepicker[disabled] .md-datepicker-triangle-button {
+  display: none; }
+
+.md-datepicker-open .md-datepicker-input-container {
+  margin-left: -12px;
+  border: none; }
+.md-datepicker-open .md-datepicker-input {
+  margin-left: 24px;
+  height: 40px; }
+.md-datepicker-open .md-datepicker-triangle-button {
+  display: none; }
+
+.md-dialog-is-showing {
+  max-height: 100%; }
+
+.md-dialog-container {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 80;
+  overflow: hidden; }
+
+md-dialog {
+  opacity: 0;
+  min-width: 240px;
+  max-width: 80%;
+  max-height: 80%;
+  position: relative;
+  overflow: auto;
+  box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.14), 0px 16px 24px 2px rgba(0, 0, 0, 0.098), 0px 6px 30px 5px rgba(0, 0, 0, 0.084);
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column; }
+  md-dialog.md-transition-in {
+    opacity: 1;
+    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+    -webkit-transform: translate3d(0, 0, 0) scale(1);
+            transform: translate3d(0, 0, 0) scale(1); }
+  md-dialog.md-transition-out {
+    opacity: 0;
+    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+    -webkit-transform: translate3d(0, 100%, 0) scale(0.2);
+            transform: translate3d(0, 100%, 0) scale(0.2); }
+  md-dialog > form {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column;
+    overflow: auto; }
+  md-dialog md-dialog-content {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1;
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column;
+    padding: 24px;
+    overflow: auto;
+    -webkit-overflow-scrolling: touch; }
+    md-dialog md-dialog-content:not([layout=row]) > *:first-child:not(.md-subheader) {
+      margin-top: 0; }
+    md-dialog md-dialog-content:focus {
+      outline: none; }
+    md-dialog md-dialog-content .md-subheader {
+      margin: 0; }
+      md-dialog md-dialog-content .md-subheader.sticky-clone {
+        box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.16); }
+    md-dialog md-dialog-content.sticky-container {
+      padding: 0; }
+      md-dialog md-dialog-content.sticky-container > div {
+        padding: 24px;
+        padding-top: 0; }
+    md-dialog md-dialog-content .md-dialog-content-body {
+      width: 100%; }
+  md-dialog .md-actions {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2;
+    box-sizing: border-box;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center;
+    -webkit-justify-content: flex-end;
+        -ms-flex-pack: end;
+            justify-content: flex-end;
+    margin-bottom: 0;
+    padding-right: 8px;
+    padding-left: 16px;
+    min-height: 52px;
+    overflow: hidden; }
+    md-dialog .md-actions .md-button {
+      margin-bottom: 8px;
+      margin-left: 8px;
+      margin-right: 0;
+      margin-top: 8px; }
+  md-dialog.md-content-overflow .md-actions {
+    border-top-width: 1px;
+    border-top-style: solid; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-dialog {
+    border: 1px solid #fff; } }
+
+md-divider {
+  display: block;
+  border-top-width: 1px;
+  border-top-style: solid;
+  margin: 0; }
+  md-divider[md-inset] {
+    margin-left: 80px; }
+
+md-fab-speed-dial {
+  position: relative;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  /*
+   * Handle the animations
+   */ }
+  md-fab-speed-dial.md-fab-bottom-right {
+    top: auto;
+    right: 20px;
+    bottom: 20px;
+    left: auto;
+    position: absolute; }
+  md-fab-speed-dial.md-fab-bottom-left {
+    top: auto;
+    right: auto;
+    bottom: 20px;
+    left: 20px;
+    position: absolute; }
+  md-fab-speed-dial.md-fab-top-right {
+    top: 20px;
+    right: 20px;
+    bottom: auto;
+    left: auto;
+    position: absolute; }
+  md-fab-speed-dial.md-fab-top-left {
+    top: 20px;
+    right: auto;
+    bottom: auto;
+    left: 20px;
+    position: absolute; }
+  md-fab-speed-dial .md-css-variables {
+    z-index: 20; }
+  md-fab-speed-dial.md-is-open .md-fab-action-item {
+    visibility: visible;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  md-fab-speed-dial md-fab-actions {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    height: auto; }
+    md-fab-speed-dial md-fab-actions .md-fab-action-item {
+      visibility: hidden;
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+  md-fab-speed-dial.md-down {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+    md-fab-speed-dial.md-down md-fab-trigger {
+      -webkit-order: 1;
+          -ms-flex-order: 1;
+              order: 1; }
+    md-fab-speed-dial.md-down md-fab-actions {
+      -webkit-flex-direction: column;
+          -ms-flex-direction: column;
+              flex-direction: column;
+      -webkit-order: 2;
+          -ms-flex-order: 2;
+              order: 2; }
+  md-fab-speed-dial.md-up {
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column; }
+    md-fab-speed-dial.md-up md-fab-trigger {
+      -webkit-order: 2;
+          -ms-flex-order: 2;
+              order: 2; }
+    md-fab-speed-dial.md-up md-fab-actions {
+      -webkit-flex-direction: column-reverse;
+          -ms-flex-direction: column-reverse;
+              flex-direction: column-reverse;
+      -webkit-order: 1;
+          -ms-flex-order: 1;
+              order: 1; }
+  md-fab-speed-dial.md-left {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+    md-fab-speed-dial.md-left md-fab-trigger {
+      -webkit-order: 2;
+          -ms-flex-order: 2;
+              order: 2; }
+    md-fab-speed-dial.md-left md-fab-actions {
+      -webkit-flex-direction: row-reverse;
+          -ms-flex-direction: row-reverse;
+              flex-direction: row-reverse;
+      -webkit-order: 1;
+          -ms-flex-order: 1;
+              order: 1; }
+      md-fab-speed-dial.md-left md-fab-actions .md-fab-action-item {
+        transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+  md-fab-speed-dial.md-right {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+    md-fab-speed-dial.md-right md-fab-trigger {
+      -webkit-order: 1;
+          -ms-flex-order: 1;
+              order: 1; }
+    md-fab-speed-dial.md-right md-fab-actions {
+      -webkit-flex-direction: row;
+          -ms-flex-direction: row;
+              flex-direction: row;
+      -webkit-order: 2;
+          -ms-flex-order: 2;
+              order: 2; }
+      md-fab-speed-dial.md-right md-fab-actions .md-fab-action-item {
+        transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+  md-fab-speed-dial.md-scale .md-fab-action-item {
+    opacity: 0;
+    -webkit-transform: scale(0);
+            transform: scale(0);
+    transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+    transition-duration: 0.14286s; }
+
+md-fab-toolbar {
+  display: block;
+  /*
+   * Closed styling
+   */
+  /*
+   * Hover styling
+   */ }
+  md-fab-toolbar.md-fab-bottom-right {
+    top: auto;
+    right: 20px;
+    bottom: 20px;
+    left: auto;
+    position: absolute; }
+  md-fab-toolbar.md-fab-bottom-left {
+    top: auto;
+    right: auto;
+    bottom: 20px;
+    left: 20px;
+    position: absolute; }
+  md-fab-toolbar.md-fab-top-right {
+    top: 20px;
+    right: 20px;
+    bottom: auto;
+    left: auto;
+    position: absolute; }
+  md-fab-toolbar.md-fab-top-left {
+    top: 20px;
+    right: auto;
+    bottom: auto;
+    left: 20px;
+    position: absolute; }
+  md-fab-toolbar .md-fab-toolbar-wrapper {
+    display: block;
+    position: relative;
+    overflow: hidden;
+    height: 68px; }
+  md-fab-toolbar md-fab-trigger {
+    position: absolute;
+    z-index: 20; }
+    md-fab-toolbar md-fab-trigger button {
+      overflow: visible !important; }
+    md-fab-toolbar md-fab-trigger .md-fab-toolbar-background {
+      display: block;
+      position: absolute;
+      z-index: 21;
+      opacity: 1;
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+    md-fab-toolbar md-fab-trigger md-icon {
+      position: relative;
+      z-index: 22;
+      opacity: 1;
+      transition: all 200ms ease-in; }
+  md-fab-toolbar.md-left md-fab-trigger {
+    right: 0; }
+  md-fab-toolbar.md-left .md-toolbar-tools {
+    -webkit-flex-direction: row-reverse;
+        -ms-flex-direction: row-reverse;
+            flex-direction: row-reverse; }
+    md-fab-toolbar.md-left .md-toolbar-tools > .md-button:first-child {
+      margin-right: 0.6rem; }
+    md-fab-toolbar.md-left .md-toolbar-tools > .md-button:first-child {
+      margin-left: -0.8rem; }
+    md-fab-toolbar.md-left .md-toolbar-tools > .md-button:last-child {
+      margin-right: 8px; }
+  md-fab-toolbar.md-right md-fab-trigger {
+    left: 0; }
+  md-fab-toolbar.md-right .md-toolbar-tools {
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+  md-fab-toolbar md-toolbar {
+    background-color: transparent !important;
+    pointer-events: none;
+    z-index: 23; }
+    md-fab-toolbar md-toolbar .md-toolbar-tools {
+      padding: 0 20px;
+      margin-top: 3px; }
+    md-fab-toolbar md-toolbar .md-fab-action-item {
+      opacity: 0;
+      -webkit-transform: scale(0);
+              transform: scale(0);
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+      transition-duration: 0.15s; }
+  md-fab-toolbar.md-is-open md-fab-trigger > button {
+    box-shadow: none; }
+    md-fab-toolbar.md-is-open md-fab-trigger > button md-icon {
+      opacity: 0; }
+  md-fab-toolbar.md-is-open .md-fab-action-item {
+    opacity: 1;
+    -webkit-transform: scale(1);
+            transform: scale(1); }
+
+md-grid-list {
+  box-sizing: border-box;
+  display: block;
+  position: relative; }
+  md-grid-list md-grid-tile, md-grid-list md-grid-tile > figure, md-grid-list md-grid-tile-header, md-grid-list md-grid-tile-footer {
+    box-sizing: border-box; }
+  md-grid-list md-grid-tile {
+    display: block;
+    position: absolute; }
+    md-grid-list md-grid-tile figure {
+      display: -webkit-flex;
+      display: -ms-flexbox;
+      display: flex;
+      -webkit-align-items: center;
+          -ms-flex-align: center;
+              align-items: center;
+      -webkit-justify-content: center;
+          -ms-flex-pack: center;
+              justify-content: center;
+      height: 100%;
+      position: absolute;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      padding: 0;
+      margin: 0; }
+    md-grid-list md-grid-tile md-grid-tile-header, md-grid-list md-grid-tile md-grid-tile-footer {
+      display: -webkit-flex;
+      display: -ms-flexbox;
+      display: flex;
+      -webkit-flex-direction: row;
+          -ms-flex-direction: row;
+              flex-direction: row;
+      -webkit-align-items: center;
+          -ms-flex-align: center;
+              align-items: center;
+      height: 48px;
+      color: #fff;
+      background: rgba(0, 0, 0, 0.18);
+      overflow: hidden;
+      position: absolute;
+      left: 0;
+      right: 0; }
+      md-grid-list md-grid-tile md-grid-tile-header h3, md-grid-list md-grid-tile md-grid-tile-header h4, md-grid-list md-grid-tile md-grid-tile-footer h3, md-grid-list md-grid-tile md-grid-tile-footer h4 {
+        font-weight: 400;
+        margin: 0 0 0 16px; }
+      md-grid-list md-grid-tile md-grid-tile-header h3, md-grid-list md-grid-tile md-grid-tile-footer h3 {
+        font-size: 14px; }
+      md-grid-list md-grid-tile md-grid-tile-header h4, md-grid-list md-grid-tile md-grid-tile-footer h4 {
+        font-size: 12px; }
+    md-grid-list md-grid-tile md-grid-tile-header {
+      top: 0; }
+    md-grid-list md-grid-tile md-grid-tile-footer {
+      bottom: 0; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-grid-tile {
+    border: 1px solid #fff; }
+  md-grid-tile-footer {
+    border-top: 1px solid #fff; } }
+
+md-icon {
+  margin: auto;
+  background-repeat: no-repeat no-repeat;
+  display: inline-block;
+  vertical-align: middle;
+  fill: currentColor;
+  height: 24px;
+  width: 24px; }
+  md-icon svg {
+    pointer-events: none; }
+  md-icon[md-font-icon] {
+    line-height: 1;
+    width: auto; }
+
+md-input-container {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  position: relative;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  padding: 2px;
+  padding-bottom: 26px;
+  /*
+   * The .md-input class is added to the input/textarea
+   */ }
+  md-input-container > md-icon {
+    position: absolute;
+    top: 5px;
+    left: 2px; }
+    md-input-container > md-icon + input {
+      margin-left: 36px; }
+  md-input-container textarea, md-input-container input[type="text"], md-input-container input[type="password"], md-input-container input[type="datetime"], md-input-container input[type="datetime-local"], md-input-container input[type="date"], md-input-container input[type="month"], md-input-container input[type="time"], md-input-container input[type="week"], md-input-container input[type="number"], md-input-container input[type="email"], md-input-container input[type="url"], md-input-container input[type="search"], md-input-container input[type="tel"], md-input-container input[type="color"] {
+    /* remove default appearance from all input/textarea */
+    -moz-appearance: none;
+    -webkit-appearance: none; }
+  md-input-container input[type="date"], md-input-container input[type="datetime-local"], md-input-container input[type="month"], md-input-container input[type="time"], md-input-container input[type="week"] {
+    min-height: 26px; }
+  md-input-container textarea {
+    resize: none;
+    overflow: hidden; }
+  md-input-container textarea.md-input {
+    min-height: 26px;
+    -ms-flex-preferred-size: auto; }
+  md-input-container label {
+    position: relative;
+    top: -2px; }
+  md-input-container label:not(.md-no-float), md-input-container .md-placeholder {
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1;
+    pointer-events: none;
+    -webkit-font-smoothing: antialiased;
+    padding-left: 2px;
+    z-index: 1;
+    -webkit-transform: translate3d(0, 28px, 0) scale(1);
+            transform: translate3d(0, 28px, 0) scale(1);
+    transition: -webkit-transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.25s;
+    transition: transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.25s;
+    -webkit-transform-origin: left top;
+            transform-origin: left top; }
+    html[dir=rtl] md-input-container label:not(.md-no-float), html[dir=rtl] md-input-container .md-placeholder {
+      -webkit-transform-origin: right top;
+              transform-origin: right top;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-input-container label:not(.md-no-float), body[dir=rtl] md-input-container .md-placeholder {
+      -webkit-transform-origin: right top;
+              transform-origin: right top;
+      unicode-bidi: embed; }
+    md-input-container label:not(.md-no-float) bdo[dir=rtl], md-input-container .md-placeholder bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-input-container label:not(.md-no-float) bdo[dir=ltr], md-input-container .md-placeholder bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+  md-input-container .md-placeholder {
+    position: absolute;
+    top: 0;
+    opacity: 0;
+    transition-property: opacity, -webkit-transform;
+    transition-property: opacity, transform;
+    -webkit-transform: translate3d(0, 30px, 0);
+            transform: translate3d(0, 30px, 0); }
+    md-input-container .md-placeholder.md-static {
+      position: static; }
+  md-input-container.md-input-focused .md-placeholder {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 24px, 0);
+            transform: translate3d(0, 24px, 0); }
+  md-input-container.md-input-has-value .md-placeholder {
+    transition: none;
+    opacity: 0; }
+  md-input-container:not(.md-input-has-value) input:not(:focus), md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-ampm-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-day-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-hour-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-millisecond-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-minute-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-month-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-second-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-week-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-year-field, md-input-container:not(.md-input-has-value) input:not(:focus)::-webkit-datetime-edit-text {
+    color: transparent; }
+  md-input-container .md-input {
+    -webkit-order: 2;
+        -ms-flex-order: 2;
+            order: 2;
+    display: block;
+    margin-top: auto;
+    background: none;
+    padding-top: 2px;
+    padding-bottom: 1px;
+    padding-left: 2px;
+    padding-right: 2px;
+    border-width: 0 0 1px 0;
+    line-height: 26px;
+    -ms-flex-preferred-size: 26px;
+    border-radius: 0; }
+    md-input-container .md-input:focus {
+      outline: none; }
+    md-input-container .md-input:invalid {
+      outline: none;
+      box-shadow: none; }
+    md-input-container .md-input.md-no-flex {
+      -webkit-flex: none !important;
+          -ms-flex: none !important;
+              flex: none !important; }
+  md-input-container ng-messages, md-input-container data-ng-messages, md-input-container x-ng-messages, md-input-container [ng-messages], md-input-container [data-ng-messages], md-input-container [x-ng-messages] {
+    -webkit-order: 3;
+        -ms-flex-order: 3;
+            order: 3;
+    position: relative; }
+  md-input-container ng-message, md-input-container data-ng-message, md-input-container x-ng-message, md-input-container [ng-message], md-input-container [data-ng-message], md-input-container [x-ng-message], md-input-container .md-char-counter {
+    position: absolute;
+    font-size: 12px;
+    line-height: 24px; }
+    md-input-container ng-message:not(.md-char-counter), md-input-container data-ng-message:not(.md-char-counter), md-input-container x-ng-message:not(.md-char-counter), md-input-container [ng-message]:not(.md-char-counter), md-input-container [data-ng-message]:not(.md-char-counter), md-input-container [x-ng-message]:not(.md-char-counter), md-input-container .md-char-counter:not(.md-char-counter) {
+      padding-right: 30px; }
+    md-input-container ng-message.ng-enter, md-input-container data-ng-message.ng-enter, md-input-container x-ng-message.ng-enter, md-input-container [ng-message].ng-enter, md-input-container [data-ng-message].ng-enter, md-input-container [x-ng-message].ng-enter, md-input-container .md-char-counter.ng-enter {
+      transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+      transition-delay: 0.2s; }
+    md-input-container ng-message.ng-leave, md-input-container data-ng-message.ng-leave, md-input-container x-ng-message.ng-leave, md-input-container [ng-message].ng-leave, md-input-container [data-ng-message].ng-leave, md-input-container [x-ng-message].ng-leave, md-input-container .md-char-counter.ng-leave {
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+    md-input-container ng-message.ng-enter, md-input-container ng-message.ng-leave.ng-leave-active, md-input-container data-ng-message.ng-enter, md-input-container data-ng-message.ng-leave.ng-leave-active, md-input-container x-ng-message.ng-enter, md-input-container x-ng-message.ng-leave.ng-leave-active, md-input-container [ng-message].ng-enter, md-input-container [ng-message].ng-leave.ng-leave-active, md-input-container [data-ng-message].ng-enter, md-input-container [data-ng-message].ng-leave.ng-leave-active, md-input-container [x-ng-message].ng-enter, md-input-container [x-ng-message].ng-leave.ng-leave-active, md-input-container .md-char-counter.ng-enter, md-input-container .md-char-counter.ng-leave.ng-leave-active {
+      opacity: 0;
+      -webkit-transform: translate3d(0, -20%, 0);
+              transform: translate3d(0, -20%, 0); }
+    md-input-container ng-message.ng-leave, md-input-container ng-message.ng-enter.ng-enter-active, md-input-container data-ng-message.ng-leave, md-input-container data-ng-message.ng-enter.ng-enter-active, md-input-container x-ng-message.ng-leave, md-input-container x-ng-message.ng-enter.ng-enter-active, md-input-container [ng-message].ng-leave, md-input-container [ng-message].ng-enter.ng-enter-active, md-input-container [data-ng-message].ng-leave, md-input-container [data-ng-message].ng-enter.ng-enter-active, md-input-container [x-ng-message].ng-leave, md-input-container [x-ng-message].ng-enter.ng-enter-active, md-input-container .md-char-counter.ng-leave, md-input-container .md-char-counter.ng-enter.ng-enter-active {
+      opacity: 1;
+      -webkit-transform: translate3d(0, 0, 0);
+              transform: translate3d(0, 0, 0); }
+  md-input-container .md-char-counter {
+    bottom: 2px;
+    right: 2px; }
+  md-input-container.md-input-focused label:not(.md-no-float), md-input-container.md-input-has-value label:not(.md-no-float) {
+    -webkit-transform: translate3d(0, 6px, 0) scale(0.75);
+            transform: translate3d(0, 6px, 0) scale(0.75); }
+  md-input-container.md-input-focused .md-input, md-input-container .md-input.ng-invalid.ng-dirty {
+    padding-bottom: 0;
+    border-width: 0 0 2px 0; }
+  md-input-container .md-input[disabled], [disabled] md-input-container .md-input {
+    background-position: 0 bottom;
+    background-size: 4px 1px;
+    background-repeat: repeat-x;
+    margin-bottom: -1px; }
+
+md-input-container.md-icon-float {
+  margin-top: -16px;
+  transition: margin-top 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); }
+  md-input-container.md-icon-float > label {
+    pointer-events: none;
+    position: absolute;
+    margin-left: 36px; }
+  md-input-container.md-icon-float > md-icon {
+    top: 26px;
+    left: 2px; }
+    md-input-container.md-icon-float > md-icon + input, md-input-container.md-icon-float > md-icon + textarea {
+      margin-left: 36px; }
+  md-input-container.md-icon-float > input, md-input-container.md-icon-float > textarea {
+    padding-top: 24px; }
+  md-input-container.md-icon-float.md-input-focused, md-input-container.md-icon-float.md-input-has-value {
+    margin-top: -8px; }
+    md-input-container.md-icon-float.md-input-focused label, md-input-container.md-icon-float.md-input-has-value label {
+      -webkit-transform: translate3d(0, 6px, 0) scale(0.75);
+              transform: translate3d(0, 6px, 0) scale(0.75);
+      transition: -webkit-transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.5s;
+      transition: transform cubic-bezier(0.25, 0.8, 0.25, 1) 0.5s; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-input-container.md-default-theme > md-icon {
+    fill: #fff; } }
+
+md-list {
+  display: block;
+  padding: 8px 0px 8px 0px; }
+  md-list .md-subheader {
+    font-size: 14px;
+    font-weight: 500;
+    letter-spacing: 0.01em;
+    line-height: 0.75em; }
+
+md-list-item.md-proxy-focus.md-focused .md-no-style {
+  transition: background-color 0.15s linear; }
+md-list-item.md-no-proxy, md-list-item .md-no-style {
+  position: relative;
+  padding: 0px 16px;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1; }
+  md-list-item.md-no-proxy.md-button, md-list-item .md-no-style.md-button {
+    font-size: inherit;
+    height: inherit;
+    text-align: left;
+    text-transform: none;
+    width: 100%;
+    white-space: normal;
+    -webkit-flex-direction: inherit;
+        -ms-flex-direction: inherit;
+            flex-direction: inherit;
+    -webkit-align-items: inherit;
+        -ms-flex-align: inherit;
+            align-items: inherit; }
+  md-list-item.md-no-proxy:focus, md-list-item .md-no-style:focus {
+    outline: none; }
+md-list-item.md-with-secondary {
+  position: relative; }
+md-list-item.md-clickable:hover {
+  cursor: pointer; }
+md-list-item md-divider {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 100%; }
+  md-list-item md-divider[md-inset] {
+    left: 96px;
+    width: calc(100% - 96px);
+    margin: 0; }
+
+md-list-item, md-list-item .md-list-item-inner {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-justify-content: flex-start;
+      -ms-flex-pack: start;
+          justify-content: flex-start;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  min-height: 64px; }
+  md-list-item > div.md-primary > md-icon, md-list-item > div.md-secondary > md-icon, md-list-item > md-icon:first-child, md-list-item > md-icon.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-icon, md-list-item .md-list-item-inner > div.md-secondary > md-icon, md-list-item .md-list-item-inner > md-icon:first-child, md-list-item .md-list-item-inner > md-icon.md-secondary {
+    width: 24px;
+    margin-top: 16px;
+    margin-bottom: 12px;
+    box-sizing: content-box; }
+  md-list-item > div.md-primary > md-checkbox, md-list-item > div.md-secondary > md-checkbox, md-list-item > md-checkbox:first-child, md-list-item md-checkbox.md-secondary, md-list-item .md-list-item-inner > div.md-primary > md-checkbox, md-list-item .md-list-item-inner > div.md-secondary > md-checkbox, md-list-item .md-list-item-inner > md-checkbox:first-child, md-list-item .md-list-item-inner md-checkbox.md-secondary {
+    -webkit-align-self: center;
+        -ms-flex-item-align: center;
+            align-self: center; }
+    md-list-item > div.md-primary > md-checkbox .md-label, md-list-item > div.md-secondary > md-checkbox .md-label, md-list-item > md-checkbox:first-child .md-label, md-list-item md-checkbox.md-secondary .md-label, md-list-item .md-list-item-inner > div.md-primary > md-checkbox .md-label, md-list-item .md-list-item-inner > div.md-secondary > md-checkbox .md-label, md-list-item .md-list-item-inner > md-checkbox:first-child .md-label, md-list-item .md-list-item-inner md-checkbox.md-secondary .md-label {
+      display: none; }
+  md-list-item > md-icon:first-child, md-list-item .md-list-item-inner > md-icon:first-child {
+    margin-right: 32px; }
+  md-list-item > md-checkbox:first-child, md-list-item .md-list-item-inner > md-checkbox:first-child {
+    width: 24px;
+    margin-left: 3px;
+    margin-right: 29px; }
+  md-list-item > .md-avatar:first-child, md-list-item .md-list-item-inner > .md-avatar:first-child {
+    width: 40px;
+    height: 40px;
+    margin-top: 8px;
+    margin-bottom: 8px;
+    margin-right: 16px;
+    border-radius: 50%;
+    box-sizing: content-box; }
+  md-list-item md-checkbox.md-secondary, md-list-item md-switch.md-secondary, md-list-item .md-list-item-inner md-checkbox.md-secondary, md-list-item .md-list-item-inner md-switch.md-secondary {
+    margin-right: 0;
+    margin-top: 0;
+    margin-bottom: 0; }
+  md-list-item button.md-button.md-secondary-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container {
+    background-color: transparent;
+    -webkit-align-self: center;
+        -ms-flex-item-align: center;
+            align-self: center;
+    border-radius: 50%;
+    margin: 0px;
+    min-width: 0px; }
+    md-list-item button.md-button.md-secondary-container .md-ripple, md-list-item button.md-button.md-secondary-container .md-ripple-container, md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple, md-list-item .md-list-item-inner button.md-button.md-secondary-container .md-ripple-container {
+      border-radius: 50%; }
+  md-list-item .md-secondary-container, md-list-item .md-secondary, md-list-item .md-list-item-inner .md-secondary-container, md-list-item .md-list-item-inner .md-secondary {
+    margin-left: 16px;
+    position: absolute;
+    right: 16px;
+    top: 50%;
+    -webkit-transform: translate3d(0, -50%, 0);
+            transform: translate3d(0, -50%, 0); }
+  md-list-item > .md-button.md-secondary-container > .md-secondary, md-list-item .md-list-item-inner > .md-button.md-secondary-container > .md-secondary {
+    margin-left: 0px;
+    position: static; }
+  md-list-item > p, md-list-item > .md-list-item-inner > p, md-list-item .md-list-item-inner > p, md-list-item .md-list-item-inner > .md-list-item-inner > p {
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1;
+    margin: 0; }
+
+md-list-item.md-2-line, md-list-item.md-2-line > .md-no-style, md-list-item.md-3-line, md-list-item.md-3-line > .md-no-style {
+  -webkit-align-items: flex-start;
+      -ms-flex-align: start;
+          align-items: flex-start; }
+  md-list-item.md-2-line .md-list-item-text, md-list-item.md-2-line > .md-no-style .md-list-item-text, md-list-item.md-3-line .md-list-item-text, md-list-item.md-3-line > .md-no-style .md-list-item-text {
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1;
+    padding: 16px 0;
+    text-overflow: ellipsis; }
+    md-list-item.md-2-line .md-list-item-text.md-offset, md-list-item.md-2-line > .md-no-style .md-list-item-text.md-offset, md-list-item.md-3-line .md-list-item-text.md-offset, md-list-item.md-3-line > .md-no-style .md-list-item-text.md-offset {
+      margin-left: 56px; }
+    md-list-item.md-2-line .md-list-item-text h3, md-list-item.md-2-line > .md-no-style .md-list-item-text h3, md-list-item.md-3-line .md-list-item-text h3, md-list-item.md-3-line > .md-no-style .md-list-item-text h3 {
+      font-size: 16px;
+      font-weight: 400;
+      letter-spacing: 0.01em;
+      margin: 0 0 6px 0;
+      line-height: 0.75em; }
+    md-list-item.md-2-line .md-list-item-text h4, md-list-item.md-2-line > .md-no-style .md-list-item-text h4, md-list-item.md-3-line .md-list-item-text h4, md-list-item.md-3-line > .md-no-style .md-list-item-text h4 {
+      font-size: 14px;
+      letter-spacing: 0.01em;
+      margin: 10px 0 5px 0;
+      font-weight: 400;
+      line-height: 0.75em; }
+    md-list-item.md-2-line .md-list-item-text p, md-list-item.md-2-line > .md-no-style .md-list-item-text p, md-list-item.md-3-line .md-list-item-text p, md-list-item.md-3-line > .md-no-style .md-list-item-text p {
+      font-size: 14px;
+      font-weight: 500;
+      letter-spacing: 0.01em;
+      margin: 0 0 0 0;
+      line-height: 1.6em; }
+
+md-list-item.md-2-line > .md-avatar:first-child, md-list-item.md-2-line > .md-no-style > .md-avatar:first-child {
+  margin-top: 12px; }
+md-list-item.md-2-line > md-icon:first-child, md-list-item.md-2-line > .md-no-style > md-icon:first-child {
+  -webkit-align-self: flex-start;
+      -ms-flex-item-align: start;
+          align-self: flex-start; }
+md-list-item.md-2-line .md-list-item-text, md-list-item.md-2-line > .md-no-style .md-list-item-text {
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  padding-top: 19px; }
+
+md-list-item.md-3-line > md-icon:first-child, md-list-item.md-3-line > .md-avatar:first-child, md-list-item.md-3-line > .md-no-style > md-icon:first-child, md-list-item.md-3-line > .md-no-style > .md-avatar:first-child {
+  margin-top: 16px; }
+
+.md-open-menu-container {
+  position: fixed;
+  left: 0;
+  top: 0;
+  z-index: 99;
+  opacity: 0;
+  border-radius: 2px; }
+  .md-open-menu-container md-menu-divider {
+    margin-top: 4px;
+    margin-bottom: 4px;
+    height: 1px;
+    width: 100%; }
+  .md-open-menu-container md-menu-content > * {
+    opacity: 0; }
+  .md-open-menu-container:not(.md-clickable) {
+    pointer-events: none; }
+  .md-open-menu-container.md-active {
+    opacity: 1;
+    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+    transition-duration: 200ms; }
+    .md-open-menu-container.md-active > md-menu-content > * {
+      opacity: 1;
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+      transition-duration: 200ms;
+      transition-delay: 100ms; }
+  .md-open-menu-container.md-leave {
+    opacity: 0;
+    transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+    transition-duration: 250ms; }
+
+md-menu-content {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  padding: 8px 0;
+  max-height: 304px;
+  overflow-y: auto; }
+  md-menu-content.md-dense {
+    max-height: 208px; }
+    md-menu-content.md-dense md-menu-item {
+      height: 32px;
+      min-height: 0px; }
+
+md-menu-item {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: row;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  min-height: 48px;
+  height: 48px;
+  -webkit-align-content: center;
+      -ms-flex-line-pack: center;
+          align-content: center;
+  -webkit-justify-content: flex-start;
+      -ms-flex-pack: start;
+          justify-content: flex-start; }
+  md-menu-item > * {
+    width: 100%;
+    margin: auto 0;
+    padding-left: 16px;
+    padding-right: 16px; }
+  md-menu-item > .md-button {
+    border-radius: 0;
+    margin: auto 0;
+    font-size: 15px;
+    text-transform: none;
+    font-weight: 400;
+    text-align: start;
+    height: 100%;
+    padding-left: 16px;
+    padding-right: 16px;
+    display: inline-block;
+    -webkit-align-items: baseline;
+        -ms-flex-align: baseline;
+            align-items: baseline;
+    -webkit-align-content: left;
+        -ms-flex-line-pack: left;
+            align-content: left;
+    width: 100%; }
+    md-menu-item > .md-button md-icon {
+      margin: auto 16px auto 0; }
+    md-menu-item > .md-button p {
+      display: inline-block;
+      margin: auto; }
+    md-menu-item > .md-button span {
+      margin-top: auto;
+      margin-bottom: auto; }
+
+.md-menu {
+  padding: 8px 0; }
+
+md-toolbar .md-menu {
+  height: auto;
+  margin: auto; }
+
+@media (max-width: 599px) {
+  md-menu-content {
+    min-width: 112px; }
+  md-menu-content[width="3"] {
+    min-width: 168px; }
+  md-menu-content[width="4"] {
+    min-width: 224px; }
+  md-menu-content[width="5"] {
+    min-width: 280px; }
+  md-menu-content[width="6"] {
+    min-width: 336px; }
+  md-menu-content[width="7"] {
+    min-width: 392px; } }
+
+@media (min-width: 600px) {
+  md-menu-content {
+    min-width: 96px; }
+  md-menu-content[width="3"] {
+    min-width: 192px; }
+  md-menu-content[width="4"] {
+    min-width: 256px; }
+  md-menu-content[width="5"] {
+    min-width: 320px; }
+  md-menu-content[width="6"] {
+    min-width: 384px; }
+  md-menu-content[width="7"] {
+    min-width: 448px; } }
+
+md-toolbar.md-menu-toolbar h2.md-toolbar-tools {
+  line-height: 1rem;
+  height: auto;
+  padding: 28px;
+  padding-bottom: 12px; }
+
+md-menu-bar {
+  padding: 0 20px;
+  display: block;
+  position: relative;
+  z-index: 2; }
+  md-menu-bar .md-menu {
+    display: inline-block;
+    padding: 0;
+    position: relative; }
+  md-menu-bar button {
+    font-size: 14px;
+    padding: 0 10px;
+    margin: 0;
+    border: 0;
+    background-color: transparent;
+    height: 40px; }
+  md-menu-bar md-backdrop.md-menu-backdrop {
+    z-index: -2; }
+
+md-menu-content.md-menu-bar-menu.md-dense {
+  max-height: none;
+  padding: 16px 0; }
+  md-menu-content.md-menu-bar-menu.md-dense md-menu-item.md-indent {
+    position: relative; }
+    md-menu-content.md-menu-bar-menu.md-dense md-menu-item.md-indent > md-icon {
+      position: absolute;
+      padding: 0;
+      width: 24px;
+      top: 6px;
+      left: 24px; }
+    md-menu-content.md-menu-bar-menu.md-dense md-menu-item.md-indent > .md-button, md-menu-content.md-menu-bar-menu.md-dense md-menu-item.md-indent .md-menu > .md-button {
+      padding: 0 32px 0 64px; }
+  md-menu-content.md-menu-bar-menu.md-dense .md-button {
+    min-height: 0;
+    height: 32px;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex; }
+    md-menu-content.md-menu-bar-menu.md-dense .md-button span {
+      -webkit-flex-grow: 1;
+          -ms-flex-positive: 1;
+              flex-grow: 1; }
+    md-menu-content.md-menu-bar-menu.md-dense .md-button span.md-alt-text {
+      -webkit-flex-grow: 0;
+          -ms-flex-positive: 0;
+              flex-grow: 0;
+      -webkit-align-self: flex-end;
+          -ms-flex-item-align: end;
+              align-self: flex-end;
+      margin: 0 8px; }
+  md-menu-content.md-menu-bar-menu.md-dense md-menu-divider {
+    margin: 8px 0; }
+  md-menu-content.md-menu-bar-menu.md-dense .md-menu {
+    padding: 0; }
+    md-menu-content.md-menu-bar-menu.md-dense .md-menu > .md-button {
+      position: relative;
+      margin: 0;
+      width: 100%;
+      text-align: left;
+      text-align: start;
+      text-transform: none;
+      font-weight: normal;
+      border-radius: 0px;
+      padding-left: 16px; }
+      md-menu-content.md-menu-bar-menu.md-dense .md-menu > .md-button:after {
+        display: block;
+        content: '\25BC';
+        position: absolute;
+        top: 0px;
+        speak: none;
+        -webkit-transform: rotate(270deg) scaleY(0.45) scaleX(0.9);
+                transform: rotate(270deg) scaleY(0.45) scaleX(0.9);
+        right: 28px; }
+
+@-webkit-keyframes outer-rotate {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+@keyframes outer-rotate {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg); } }
+
+@-webkit-keyframes left-wobble {
+  0%, 100% {
+    -webkit-transform: rotate(130deg);
+            transform: rotate(130deg); }
+
+  50% {
+    -webkit-transform: rotate(-5deg);
+            transform: rotate(-5deg); } }
+
+@keyframes left-wobble {
+  0%, 100% {
+    -webkit-transform: rotate(130deg);
+            transform: rotate(130deg); }
+
+  50% {
+    -webkit-transform: rotate(-5deg);
+            transform: rotate(-5deg); } }
+
+@-webkit-keyframes right-wobble {
+  0%, 100% {
+    -webkit-transform: rotate(-130deg);
+            transform: rotate(-130deg); }
+
+  50% {
+    -webkit-transform: rotate(5deg);
+            transform: rotate(5deg); } }
+
+@keyframes right-wobble {
+  0%, 100% {
+    -webkit-transform: rotate(-130deg);
+            transform: rotate(-130deg); }
+
+  50% {
+    -webkit-transform: rotate(5deg);
+            transform: rotate(5deg); } }
+
+@-webkit-keyframes sporadic-rotate {
+  12.5% {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+
+  25% {
+    -webkit-transform: rotate(270deg);
+            transform: rotate(270deg); }
+
+  37.5% {
+    -webkit-transform: rotate(405deg);
+            transform: rotate(405deg); }
+
+  50% {
+    -webkit-transform: rotate(540deg);
+            transform: rotate(540deg); }
+
+  62.5% {
+    -webkit-transform: rotate(675deg);
+            transform: rotate(675deg); }
+
+  75% {
+    -webkit-transform: rotate(810deg);
+            transform: rotate(810deg); }
+
+  87.5% {
+    -webkit-transform: rotate(945deg);
+            transform: rotate(945deg); }
+
+  100% {
+    -webkit-transform: rotate(1080deg);
+            transform: rotate(1080deg); } }
+
+@keyframes sporadic-rotate {
+  12.5% {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+
+  25% {
+    -webkit-transform: rotate(270deg);
+            transform: rotate(270deg); }
+
+  37.5% {
+    -webkit-transform: rotate(405deg);
+            transform: rotate(405deg); }
+
+  50% {
+    -webkit-transform: rotate(540deg);
+            transform: rotate(540deg); }
+
+  62.5% {
+    -webkit-transform: rotate(675deg);
+            transform: rotate(675deg); }
+
+  75% {
+    -webkit-transform: rotate(810deg);
+            transform: rotate(810deg); }
+
+  87.5% {
+    -webkit-transform: rotate(945deg);
+            transform: rotate(945deg); }
+
+  100% {
+    -webkit-transform: rotate(1080deg);
+            transform: rotate(1080deg); } }
+
+md-progress-circular {
+  width: 100px;
+  height: 100px;
+  display: block;
+  position: relative;
+  padding-top: 0 !important;
+  margin-bottom: 0 !important;
+  overflow: hidden;
+  -webkit-transform: scale(0.5);
+          transform: scale(0.5); }
+  md-progress-circular .md-inner {
+    width: 100px;
+    height: 100px;
+    position: relative; }
+    md-progress-circular .md-inner .md-gap {
+      position: absolute;
+      left: 49px;
+      right: 49px;
+      top: 0;
+      bottom: 0;
+      border-top-width: 10px;
+      border-top-style: solid;
+      box-sizing: border-box; }
+    md-progress-circular .md-inner .md-left, md-progress-circular .md-inner .md-right {
+      position: absolute;
+      top: 0;
+      height: 100px;
+      width: 49px;
+      overflow: hidden; }
+      md-progress-circular .md-inner .md-left .md-half-circle, md-progress-circular .md-inner .md-right .md-half-circle {
+        position: absolute;
+        top: 0;
+        width: 100px;
+        height: 100px;
+        box-sizing: border-box;
+        border-width: 10px;
+        border-style: solid;
+        border-bottom-color: transparent;
+        border-radius: 50%; }
+    md-progress-circular .md-inner .md-left {
+      left: 0; }
+      md-progress-circular .md-inner .md-left .md-half-circle {
+        left: 0;
+        border-right-color: transparent; }
+    md-progress-circular .md-inner .md-right {
+      right: 0; }
+      md-progress-circular .md-inner .md-right .md-half-circle {
+        right: 0;
+        border-left-color: transparent; }
+  md-progress-circular[value="0"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="0"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-135deg);
+            transform: rotate(-135deg); }
+  md-progress-circular[value="0"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="1"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="1"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-131.4deg);
+            transform: rotate(-131.4deg); }
+  md-progress-circular[value="1"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="2"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="2"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-127.8deg);
+            transform: rotate(-127.8deg); }
+  md-progress-circular[value="2"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="3"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="3"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-124.2deg);
+            transform: rotate(-124.2deg); }
+  md-progress-circular[value="3"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="4"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="4"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-120.6deg);
+            transform: rotate(-120.6deg); }
+  md-progress-circular[value="4"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="5"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="5"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-117deg);
+            transform: rotate(-117deg); }
+  md-progress-circular[value="5"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="6"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="6"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-113.4deg);
+            transform: rotate(-113.4deg); }
+  md-progress-circular[value="6"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="7"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="7"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-109.8deg);
+            transform: rotate(-109.8deg); }
+  md-progress-circular[value="7"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="8"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="8"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-106.2deg);
+            transform: rotate(-106.2deg); }
+  md-progress-circular[value="8"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="9"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="9"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-102.6deg);
+            transform: rotate(-102.6deg); }
+  md-progress-circular[value="9"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="10"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="10"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-99deg);
+            transform: rotate(-99deg); }
+  md-progress-circular[value="10"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="11"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="11"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-95.4deg);
+            transform: rotate(-95.4deg); }
+  md-progress-circular[value="11"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="12"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="12"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-91.8deg);
+            transform: rotate(-91.8deg); }
+  md-progress-circular[value="12"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="13"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="13"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-88.2deg);
+            transform: rotate(-88.2deg); }
+  md-progress-circular[value="13"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="14"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="14"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-84.6deg);
+            transform: rotate(-84.6deg); }
+  md-progress-circular[value="14"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="15"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="15"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-81deg);
+            transform: rotate(-81deg); }
+  md-progress-circular[value="15"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="16"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="16"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-77.4deg);
+            transform: rotate(-77.4deg); }
+  md-progress-circular[value="16"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="17"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="17"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-73.8deg);
+            transform: rotate(-73.8deg); }
+  md-progress-circular[value="17"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="18"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="18"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-70.2deg);
+            transform: rotate(-70.2deg); }
+  md-progress-circular[value="18"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="19"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="19"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-66.6deg);
+            transform: rotate(-66.6deg); }
+  md-progress-circular[value="19"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="20"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="20"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-63deg);
+            transform: rotate(-63deg); }
+  md-progress-circular[value="20"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="21"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="21"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-59.4deg);
+            transform: rotate(-59.4deg); }
+  md-progress-circular[value="21"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="22"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="22"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-55.8deg);
+            transform: rotate(-55.8deg); }
+  md-progress-circular[value="22"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="23"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="23"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-52.2deg);
+            transform: rotate(-52.2deg); }
+  md-progress-circular[value="23"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="24"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="24"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-48.6deg);
+            transform: rotate(-48.6deg); }
+  md-progress-circular[value="24"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="25"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="25"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-45deg);
+            transform: rotate(-45deg); }
+  md-progress-circular[value="25"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="26"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="26"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-41.4deg);
+            transform: rotate(-41.4deg); }
+  md-progress-circular[value="26"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="27"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="27"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-37.8deg);
+            transform: rotate(-37.8deg); }
+  md-progress-circular[value="27"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="28"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="28"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-34.2deg);
+            transform: rotate(-34.2deg); }
+  md-progress-circular[value="28"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="29"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="29"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-30.6deg);
+            transform: rotate(-30.6deg); }
+  md-progress-circular[value="29"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="30"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="30"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-27deg);
+            transform: rotate(-27deg); }
+  md-progress-circular[value="30"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="31"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="31"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-23.4deg);
+            transform: rotate(-23.4deg); }
+  md-progress-circular[value="31"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="32"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="32"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-19.8deg);
+            transform: rotate(-19.8deg); }
+  md-progress-circular[value="32"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="33"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="33"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-16.2deg);
+            transform: rotate(-16.2deg); }
+  md-progress-circular[value="33"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="34"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="34"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-12.6deg);
+            transform: rotate(-12.6deg); }
+  md-progress-circular[value="34"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="35"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="35"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-9deg);
+            transform: rotate(-9deg); }
+  md-progress-circular[value="35"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="36"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="36"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-5.4deg);
+            transform: rotate(-5.4deg); }
+  md-progress-circular[value="36"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="37"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="37"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(-1.8deg);
+            transform: rotate(-1.8deg); }
+  md-progress-circular[value="37"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="38"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="38"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(1.8deg);
+            transform: rotate(1.8deg); }
+  md-progress-circular[value="38"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="39"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="39"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(5.4deg);
+            transform: rotate(5.4deg); }
+  md-progress-circular[value="39"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="40"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="40"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(9deg);
+            transform: rotate(9deg); }
+  md-progress-circular[value="40"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="41"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="41"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(12.6deg);
+            transform: rotate(12.6deg); }
+  md-progress-circular[value="41"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="42"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="42"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(16.2deg);
+            transform: rotate(16.2deg); }
+  md-progress-circular[value="42"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="43"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="43"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(19.8deg);
+            transform: rotate(19.8deg); }
+  md-progress-circular[value="43"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="44"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="44"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(23.4deg);
+            transform: rotate(23.4deg); }
+  md-progress-circular[value="44"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="45"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="45"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(27deg);
+            transform: rotate(27deg); }
+  md-progress-circular[value="45"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="46"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="46"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(30.6deg);
+            transform: rotate(30.6deg); }
+  md-progress-circular[value="46"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="47"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="47"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(34.2deg);
+            transform: rotate(34.2deg); }
+  md-progress-circular[value="47"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="48"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="48"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(37.8deg);
+            transform: rotate(37.8deg); }
+  md-progress-circular[value="48"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="49"] .md-inner .md-left .md-half-circle {
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="49"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(41.4deg);
+            transform: rotate(41.4deg); }
+  md-progress-circular[value="49"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="50"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(135deg);
+            transform: rotate(135deg); }
+  md-progress-circular[value="50"] .md-inner .md-right .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="50"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    border-bottom-color: transparent !important; }
+  md-progress-circular[value="51"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(138.6deg);
+            transform: rotate(138.6deg); }
+  md-progress-circular[value="51"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="51"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="52"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(142.2deg);
+            transform: rotate(142.2deg); }
+  md-progress-circular[value="52"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="52"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="53"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(145.8deg);
+            transform: rotate(145.8deg); }
+  md-progress-circular[value="53"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="53"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="54"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(149.4deg);
+            transform: rotate(149.4deg); }
+  md-progress-circular[value="54"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="54"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="55"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(153deg);
+            transform: rotate(153deg); }
+  md-progress-circular[value="55"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="55"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="56"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(156.6deg);
+            transform: rotate(156.6deg); }
+  md-progress-circular[value="56"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="56"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="57"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(160.2deg);
+            transform: rotate(160.2deg); }
+  md-progress-circular[value="57"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="57"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="58"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(163.8deg);
+            transform: rotate(163.8deg); }
+  md-progress-circular[value="58"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="58"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="59"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(167.4deg);
+            transform: rotate(167.4deg); }
+  md-progress-circular[value="59"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="59"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="60"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(171deg);
+            transform: rotate(171deg); }
+  md-progress-circular[value="60"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="60"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="61"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(174.6deg);
+            transform: rotate(174.6deg); }
+  md-progress-circular[value="61"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="61"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="62"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(178.2deg);
+            transform: rotate(178.2deg); }
+  md-progress-circular[value="62"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="62"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="63"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(181.8deg);
+            transform: rotate(181.8deg); }
+  md-progress-circular[value="63"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="63"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="64"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(185.4deg);
+            transform: rotate(185.4deg); }
+  md-progress-circular[value="64"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="64"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="65"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(189deg);
+            transform: rotate(189deg); }
+  md-progress-circular[value="65"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="65"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="66"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(192.6deg);
+            transform: rotate(192.6deg); }
+  md-progress-circular[value="66"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="66"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="67"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(196.2deg);
+            transform: rotate(196.2deg); }
+  md-progress-circular[value="67"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="67"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="68"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(199.8deg);
+            transform: rotate(199.8deg); }
+  md-progress-circular[value="68"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="68"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="69"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(203.4deg);
+            transform: rotate(203.4deg); }
+  md-progress-circular[value="69"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="69"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="70"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(207deg);
+            transform: rotate(207deg); }
+  md-progress-circular[value="70"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="70"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="71"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(210.6deg);
+            transform: rotate(210.6deg); }
+  md-progress-circular[value="71"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="71"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="72"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(214.2deg);
+            transform: rotate(214.2deg); }
+  md-progress-circular[value="72"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="72"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="73"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(217.8deg);
+            transform: rotate(217.8deg); }
+  md-progress-circular[value="73"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="73"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="74"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(221.4deg);
+            transform: rotate(221.4deg); }
+  md-progress-circular[value="74"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="74"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="75"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(225deg);
+            transform: rotate(225deg); }
+  md-progress-circular[value="75"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="75"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="76"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(228.6deg);
+            transform: rotate(228.6deg); }
+  md-progress-circular[value="76"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="76"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="77"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(232.2deg);
+            transform: rotate(232.2deg); }
+  md-progress-circular[value="77"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="77"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="78"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(235.8deg);
+            transform: rotate(235.8deg); }
+  md-progress-circular[value="78"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="78"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="79"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(239.4deg);
+            transform: rotate(239.4deg); }
+  md-progress-circular[value="79"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="79"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="80"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(243deg);
+            transform: rotate(243deg); }
+  md-progress-circular[value="80"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="80"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="81"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(246.6deg);
+            transform: rotate(246.6deg); }
+  md-progress-circular[value="81"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="81"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="82"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(250.2deg);
+            transform: rotate(250.2deg); }
+  md-progress-circular[value="82"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="82"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="83"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(253.8deg);
+            transform: rotate(253.8deg); }
+  md-progress-circular[value="83"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="83"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="84"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(257.4deg);
+            transform: rotate(257.4deg); }
+  md-progress-circular[value="84"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="84"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="85"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(261deg);
+            transform: rotate(261deg); }
+  md-progress-circular[value="85"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="85"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="86"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(264.6deg);
+            transform: rotate(264.6deg); }
+  md-progress-circular[value="86"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="86"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="87"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(268.2deg);
+            transform: rotate(268.2deg); }
+  md-progress-circular[value="87"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="87"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="88"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(271.8deg);
+            transform: rotate(271.8deg); }
+  md-progress-circular[value="88"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="88"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="89"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(275.4deg);
+            transform: rotate(275.4deg); }
+  md-progress-circular[value="89"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="89"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="90"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(279deg);
+            transform: rotate(279deg); }
+  md-progress-circular[value="90"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="90"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="91"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(282.6deg);
+            transform: rotate(282.6deg); }
+  md-progress-circular[value="91"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="91"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="92"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(286.2deg);
+            transform: rotate(286.2deg); }
+  md-progress-circular[value="92"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="92"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="93"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(289.8deg);
+            transform: rotate(289.8deg); }
+  md-progress-circular[value="93"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="93"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="94"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(293.4deg);
+            transform: rotate(293.4deg); }
+  md-progress-circular[value="94"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="94"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="95"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(297deg);
+            transform: rotate(297deg); }
+  md-progress-circular[value="95"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="95"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="96"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(300.6deg);
+            transform: rotate(300.6deg); }
+  md-progress-circular[value="96"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="96"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="97"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(304.2deg);
+            transform: rotate(304.2deg); }
+  md-progress-circular[value="97"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="97"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="98"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(307.8deg);
+            transform: rotate(307.8deg); }
+  md-progress-circular[value="98"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="98"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="99"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(311.4deg);
+            transform: rotate(311.4deg); }
+  md-progress-circular[value="99"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="99"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[value="100"] .md-inner .md-left .md-half-circle {
+    transition: -webkit-transform 0.1s linear;
+    transition: transform 0.1s linear;
+    -webkit-transform: rotate(315deg);
+            transform: rotate(315deg); }
+  md-progress-circular[value="100"] .md-inner .md-right .md-half-circle {
+    -webkit-transform: rotate(45deg);
+            transform: rotate(45deg); }
+  md-progress-circular[value="100"] .md-inner .md-gap {
+    border-bottom-width: 10px;
+    border-bottom-style: solid;
+    transition: border-bottom-color 0.1s linear; }
+  md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper {
+    -webkit-animation: outer-rotate 2.91667s linear infinite;
+            animation: outer-rotate 2.91667s linear infinite; }
+    md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner {
+      -webkit-animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite;
+              animation: sporadic-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite; }
+      md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle {
+        -webkit-animation-iteration-count: infinite;
+                animation-iteration-count: infinite;
+        -webkit-animation-duration: 1.3125s;
+                animation-duration: 1.3125s;
+        -webkit-animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1);
+                animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); }
+      md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle {
+        -webkit-animation-name: left-wobble;
+                animation-name: left-wobble; }
+      md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle {
+        -webkit-animation-name: right-wobble;
+                animation-name: right-wobble; }
+
+.ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper, md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper {
+  -webkit-animation: none;
+          animation: none; }
+  .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner, md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner {
+    -webkit-animation: none;
+            animation: none; }
+    .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle, md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-left .md-half-circle {
+      -webkit-animation-name: none;
+              animation-name: none; }
+    .ng-hide md-progress-circular[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle, md-progress-circular.ng-hide[md-mode=indeterminate] .md-spinner-wrapper .md-inner .md-right .md-half-circle {
+      -webkit-animation-name: none;
+              animation-name: none; }
+
+md-progress-linear:not([md-mode="indeterminate"]) {
+  display: block;
+  width: 100%;
+  height: 5px; }
+  md-progress-linear:not([md-mode="indeterminate"]) .md-container {
+    overflow: hidden;
+    position: relative;
+    height: 5px;
+    top: 5px;
+    -webkit-transform: translate(0, 5px) scale(1, 0);
+            transform: translate(0, 5px) scale(1, 0);
+    transition: all .3s linear; }
+  md-progress-linear:not([md-mode="indeterminate"]) .md-container.md-ready {
+    -webkit-transform: translate(0, 0) scale(1, 1);
+            transform: translate(0, 0) scale(1, 1); }
+  md-progress-linear:not([md-mode="indeterminate"]) .md-bar {
+    height: 5px;
+    position: absolute;
+    width: 100%; }
+  md-progress-linear:not([md-mode="indeterminate"]) .md-bar1, md-progress-linear:not([md-mode="indeterminate"]) .md-bar2 {
+    transition: all 0.2s linear; }
+  md-progress-linear:not([md-mode="indeterminate"])[md-mode=determinate] .md-bar1 {
+    display: none; }
+  md-progress-linear:not([md-mode="indeterminate"])[md-mode=buffer] .md-container {
+    background-color: transparent !important; }
+  md-progress-linear:not([md-mode="indeterminate"])[md-mode=buffer] .md-dashed:before {
+    content: "";
+    display: block;
+    height: 5px;
+    width: 100%;
+    margin-top: 0;
+    position: absolute;
+    background-color: transparent;
+    background-size: 10px 10px !important;
+    background-position: 0px -23px;
+    -webkit-animation: buffer 3s infinite linear;
+            animation: buffer 3s infinite linear; }
+  md-progress-linear:not([md-mode="indeterminate"])[md-mode=query] .md-bar2 {
+    -webkit-animation: query .8s infinite cubic-bezier(0.39, 0.575, 0.565, 1);
+            animation: query .8s infinite cubic-bezier(0.39, 0.575, 0.565, 1); }
+
+md-progress-linear[md-mode="indeterminate"] {
+  display: block;
+  width: 100%;
+  height: 5px;
+  position: relative; }
+  md-progress-linear[md-mode="indeterminate"] .md-container {
+    width: 100%;
+    overflow: hidden;
+    position: relative;
+    height: 5px;
+    top: 5px;
+    transition: all .3s linear; }
+    md-progress-linear[md-mode="indeterminate"] .md-container .md-bar {
+      height: 5px;
+      left: 0;
+      width: 80%;
+      position: absolute;
+      top: 0;
+      bottom: 0; }
+    md-progress-linear[md-mode="indeterminate"] .md-container .md-bar1 {
+      -webkit-animation: md-progress-linear-indeterminate-scale-1 4s infinite, md-progress-linear-indeterminate-1 4s infinite;
+              animation: md-progress-linear-indeterminate-scale-1 4s infinite, md-progress-linear-indeterminate-1 4s infinite; }
+    md-progress-linear[md-mode="indeterminate"] .md-container .md-bar2 {
+      -webkit-animation: md-progress-linear-indeterminate-scale-2 4s infinite, md-progress-linear-indeterminate-2 4s infinite;
+              animation: md-progress-linear-indeterminate-scale-2 4s infinite, md-progress-linear-indeterminate-2 4s infinite; }
+
+@-webkit-keyframes query {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(35%) scale(.3, 1);
+            transform: translateX(35%) scale(.3, 1); }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-50%) scale(0, 1);
+            transform: translateX(-50%) scale(0, 1); } }
+
+@keyframes query {
+  0% {
+    opacity: 1;
+    -webkit-transform: translateX(35%) scale(.3, 1);
+            transform: translateX(35%) scale(.3, 1); }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translateX(-50%) scale(0, 1);
+            transform: translateX(-50%) scale(0, 1); } }
+
+@-webkit-keyframes buffer {
+  0% {
+    opacity: 1;
+    background-position: 0px -23px; }
+
+  50% {
+    opacity: 0; }
+
+  100% {
+    opacity: 1;
+    background-position: -200px -23px; } }
+
+@keyframes buffer {
+  0% {
+    opacity: 1;
+    background-position: 0px -23px; }
+
+  50% {
+    opacity: 0; }
+
+  100% {
+    opacity: 1;
+    background-position: -200px -23px; } }
+
+@-webkit-keyframes md-progress-linear-indeterminate-scale-1 {
+  0% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1);
+    -webkit-animation-timing-function: linear;
+            animation-timing-function: linear; }
+
+  36.6% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1);
+    -webkit-animation-timing-function: cubic-bezier(0.33473, 0.12482, 0.78584, 1);
+            animation-timing-function: cubic-bezier(0.33473, 0.12482, 0.78584, 1); }
+
+  69.15% {
+    -webkit-transform: scaleX(0.83);
+            transform: scaleX(0.83);
+    -webkit-animation-timing-function: cubic-bezier(0.22573, 0, 0.23365, 1.37098);
+            animation-timing-function: cubic-bezier(0.22573, 0, 0.23365, 1.37098); }
+
+  100% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1); } }
+
+@keyframes md-progress-linear-indeterminate-scale-1 {
+  0% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1);
+    -webkit-animation-timing-function: linear;
+            animation-timing-function: linear; }
+
+  36.6% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1);
+    -webkit-animation-timing-function: cubic-bezier(0.33473, 0.12482, 0.78584, 1);
+            animation-timing-function: cubic-bezier(0.33473, 0.12482, 0.78584, 1); }
+
+  69.15% {
+    -webkit-transform: scaleX(0.83);
+            transform: scaleX(0.83);
+    -webkit-animation-timing-function: cubic-bezier(0.22573, 0, 0.23365, 1.37098);
+            animation-timing-function: cubic-bezier(0.22573, 0, 0.23365, 1.37098); }
+
+  100% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1); } }
+
+@-webkit-keyframes md-progress-linear-indeterminate-1 {
+  0% {
+    left: -105.16667%;
+    -webkit-animation-timing-function: linear;
+            animation-timing-function: linear; }
+
+  20% {
+    left: -105.16667%;
+    -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.70173, 0.49582);
+            animation-timing-function: cubic-bezier(0.5, 0, 0.70173, 0.49582); }
+
+  69.15% {
+    left: 21.5%;
+    -webkit-animation-timing-function: cubic-bezier(0.30244, 0.38135, 0.55, 0.95635);
+            animation-timing-function: cubic-bezier(0.30244, 0.38135, 0.55, 0.95635); }
+
+  100% {
+    left: 95.44444%; } }
+
+@keyframes md-progress-linear-indeterminate-1 {
+  0% {
+    left: -105.16667%;
+    -webkit-animation-timing-function: linear;
+            animation-timing-function: linear; }
+
+  20% {
+    left: -105.16667%;
+    -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.70173, 0.49582);
+            animation-timing-function: cubic-bezier(0.5, 0, 0.70173, 0.49582); }
+
+  69.15% {
+    left: 21.5%;
+    -webkit-animation-timing-function: cubic-bezier(0.30244, 0.38135, 0.55, 0.95635);
+            animation-timing-function: cubic-bezier(0.30244, 0.38135, 0.55, 0.95635); }
+
+  100% {
+    left: 95.44444%; } }
+
+@-webkit-keyframes md-progress-linear-indeterminate-scale-2 {
+  0% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1);
+    -webkit-animation-timing-function: cubic-bezier(0.20503, 0.05705, 0.57661, 0.45397);
+            animation-timing-function: cubic-bezier(0.20503, 0.05705, 0.57661, 0.45397); }
+
+  19.15% {
+    -webkit-transform: scaleX(0.57);
+            transform: scaleX(0.57);
+    -webkit-animation-timing-function: cubic-bezier(0.15231, 0.19643, 0.64837, 1.00432);
+            animation-timing-function: cubic-bezier(0.15231, 0.19643, 0.64837, 1.00432); }
+
+  44.15% {
+    -webkit-transform: scaleX(0.91);
+            transform: scaleX(0.91);
+    -webkit-animation-timing-function: cubic-bezier(0.25776, -0.00316, 0.21176, 1.38179);
+            animation-timing-function: cubic-bezier(0.25776, -0.00316, 0.21176, 1.38179); }
+
+  100% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1); } }
+
+@keyframes md-progress-linear-indeterminate-scale-2 {
+  0% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1);
+    -webkit-animation-timing-function: cubic-bezier(0.20503, 0.05705, 0.57661, 0.45397);
+            animation-timing-function: cubic-bezier(0.20503, 0.05705, 0.57661, 0.45397); }
+
+  19.15% {
+    -webkit-transform: scaleX(0.57);
+            transform: scaleX(0.57);
+    -webkit-animation-timing-function: cubic-bezier(0.15231, 0.19643, 0.64837, 1.00432);
+            animation-timing-function: cubic-bezier(0.15231, 0.19643, 0.64837, 1.00432); }
+
+  44.15% {
+    -webkit-transform: scaleX(0.91);
+            transform: scaleX(0.91);
+    -webkit-animation-timing-function: cubic-bezier(0.25776, -0.00316, 0.21176, 1.38179);
+            animation-timing-function: cubic-bezier(0.25776, -0.00316, 0.21176, 1.38179); }
+
+  100% {
+    -webkit-transform: scaleX(0.1);
+            transform: scaleX(0.1); } }
+
+@-webkit-keyframes md-progress-linear-indeterminate-2 {
+  0% {
+    left: -54.88889%;
+    -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.51506, 0.40968);
+            animation-timing-function: cubic-bezier(0.15, 0, 0.51506, 0.40968); }
+
+  25% {
+    left: -17.25%;
+    -webkit-animation-timing-function: cubic-bezier(0.31033, 0.28406, 0.8, 0.73372);
+            animation-timing-function: cubic-bezier(0.31033, 0.28406, 0.8, 0.73372); }
+
+  48.35% {
+    left: 29.5%;
+    -webkit-animation-timing-function: cubic-bezier(0.4, 0.62703, 0.6, 0.90203);
+            animation-timing-function: cubic-bezier(0.4, 0.62703, 0.6, 0.90203); }
+
+  100% {
+    left: 117.38889%; } }
+
+@keyframes md-progress-linear-indeterminate-2 {
+  0% {
+    left: -54.88889%;
+    -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.51506, 0.40968);
+            animation-timing-function: cubic-bezier(0.15, 0, 0.51506, 0.40968); }
+
+  25% {
+    left: -17.25%;
+    -webkit-animation-timing-function: cubic-bezier(0.31033, 0.28406, 0.8, 0.73372);
+            animation-timing-function: cubic-bezier(0.31033, 0.28406, 0.8, 0.73372); }
+
+  48.35% {
+    left: 29.5%;
+    -webkit-animation-timing-function: cubic-bezier(0.4, 0.62703, 0.6, 0.90203);
+            animation-timing-function: cubic-bezier(0.4, 0.62703, 0.6, 0.90203); }
+
+  100% {
+    left: 117.38889%; } }
+
+md-radio-button, .md-switch-thumb {
+  box-sizing: border-box;
+  display: block;
+  margin: 15px;
+  white-space: nowrap;
+  cursor: pointer; }
+  md-radio-button .md-container, .md-switch-thumb .md-container {
+    box-sizing: border-box;
+    position: relative;
+    top: 4px;
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    cursor: pointer; }
+    md-radio-button .md-container .md-ripple-container, .md-switch-thumb .md-container .md-ripple-container {
+      position: absolute;
+      display: block;
+      width: 48px;
+      height: 48px;
+      left: -16px;
+      top: -16px; }
+    md-radio-button .md-container:before, .md-switch-thumb .md-container:before {
+      box-sizing: border-box;
+      background-color: transparent;
+      border-radius: 50%;
+      content: '';
+      position: absolute;
+      display: block;
+      height: auto;
+      left: 0;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      transition: all 0.5s;
+      width: auto; }
+  md-radio-button.md-align-top-left > div.md-container, .md-switch-thumb.md-align-top-left > div.md-container {
+    top: -15px; }
+  md-radio-button .md-off, .md-switch-thumb .md-off {
+    box-sizing: border-box;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 16px;
+    height: 16px;
+    border-style: solid;
+    border-width: 2px;
+    border-radius: 50%;
+    transition: border-color ease 0.28s; }
+  md-radio-button .md-on, .md-switch-thumb .md-on {
+    box-sizing: border-box;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+    transition: -webkit-transform ease 0.28s;
+    transition: transform ease 0.28s;
+    -webkit-transform: scale(0);
+            transform: scale(0); }
+  md-radio-button.md-checked .md-on, .md-switch-thumb.md-checked .md-on {
+    -webkit-transform: scale(0.5);
+            transform: scale(0.5); }
+  md-radio-button .md-label, .md-switch-thumb .md-label {
+    box-sizing: border-box;
+    position: relative;
+    display: inline-block;
+    margin-left: 10px;
+    margin-right: 0;
+    vertical-align: middle;
+    white-space: normal;
+    pointer-events: none;
+    width: auto; }
+    html[dir=rtl] md-radio-button .md-label, html[dir=rtl] .md-switch-thumb .md-label {
+      margin-left: 0;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-radio-button .md-label, body[dir=rtl] .md-switch-thumb .md-label {
+      margin-left: 0;
+      unicode-bidi: embed; }
+    md-radio-button .md-label bdo[dir=rtl], .md-switch-thumb .md-label bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-radio-button .md-label bdo[dir=ltr], .md-switch-thumb .md-label bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+    html[dir=rtl] md-radio-button .md-label, html[dir=rtl] .md-switch-thumb .md-label {
+      margin-right: 10px;
+      unicode-bidi: embed; }
+    body[dir=rtl] md-radio-button .md-label, body[dir=rtl] .md-switch-thumb .md-label {
+      margin-right: 10px;
+      unicode-bidi: embed; }
+    md-radio-button .md-label bdo[dir=rtl], .md-switch-thumb .md-label bdo[dir=rtl] {
+      direction: rtl;
+      unicode-bidi: bidi-override; }
+    md-radio-button .md-label bdo[dir=ltr], .md-switch-thumb .md-label bdo[dir=ltr] {
+      direction: ltr;
+      unicode-bidi: bidi-override; }
+  md-radio-button .circle, .md-switch-thumb .circle {
+    border-radius: 50%; }
+
+md-radio-group:focus {
+  outline: none; }
+md-radio-group.md-focused .md-checked .md-container:before {
+  left: -8px;
+  top: -8px;
+  right: -8px;
+  bottom: -8px; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-radio-button.md-default-theme .md-on {
+    background-color: #fff; } }
+
+.md-select-menu-container {
+  position: fixed;
+  left: 0;
+  top: 0;
+  z-index: 99;
+  opacity: 0; }
+  .md-select-menu-container:not(.md-clickable) {
+    pointer-events: none; }
+  .md-select-menu-container md-progress-circular {
+    display: table;
+    margin: 24px auto !important; }
+  .md-select-menu-container.md-active {
+    opacity: 1; }
+    .md-select-menu-container.md-active md-select-menu {
+      transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+      transition-duration: 150ms; }
+      .md-select-menu-container.md-active md-select-menu > * {
+        opacity: 1;
+        transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+        transition-duration: 150ms;
+        transition-delay: 100ms; }
+  .md-select-menu-container.md-leave {
+    opacity: 0;
+    transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+    transition-duration: 250ms; }
+
+md-input-container > md-select {
+  margin: auto 0 0 0;
+  -webkit-order: 2;
+      -ms-flex-order: 2;
+          order: 2; }
+
+md-select {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  margin: 20px 0 26px 0; }
+  md-select:focus {
+    outline: none; }
+  md-select[disabled]:hover {
+    cursor: default; }
+  md-select:not([disabled]):hover {
+    cursor: pointer; }
+  md-select:not([disabled]).ng-invalid.ng-dirty .md-select-value {
+    border-bottom: 2px solid;
+    padding-bottom: 0; }
+  md-select:not([disabled]):focus .md-select-value {
+    border-bottom-width: 2px;
+    border-bottom-style: solid;
+    padding-bottom: 0; }
+
+.md-select-value {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  padding: 2px 2px 1px;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+  background-color: transparent;
+  position: relative;
+  box-sizing: content-box;
+  min-width: 64px;
+  min-height: 26px;
+  -webkit-flex-grow: 1;
+      -ms-flex-positive: 1;
+          flex-grow: 1; }
+  .md-select-value *:first-child {
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    overflow: hidden;
+    max-width: calc(100% - 2*8px);
+    -webkit-transform: translate3d(0, 2px, 0);
+            transform: translate3d(0, 2px, 0); }
+  .md-select-value .md-select-icon {
+    display: block;
+    -webkit-align-items: flex-end;
+        -ms-flex-align: end;
+            align-items: flex-end;
+    text-align: end;
+    width: 24px;
+    margin: 0 4px;
+    -webkit-transform: translate3d(0, 1px, 0);
+            transform: translate3d(0, 1px, 0); }
+  .md-select-value .md-select-icon:after {
+    display: block;
+    content: '\25BC';
+    position: relative;
+    top: 2px;
+    speak: none;
+    -webkit-transform: scaleY(0.6) scaleX(1);
+            transform: scaleY(0.6) scaleX(1); }
+  .md-select-value.md-select-placeholder {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-order: 1;
+        -ms-flex-order: 1;
+            order: 1;
+    pointer-events: none;
+    -webkit-font-smoothing: antialiased;
+    padding-left: 2px;
+    z-index: 1; }
+
+md-select-menu {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084);
+  max-height: 256px;
+  min-height: 48px;
+  overflow-y: hidden;
+  -webkit-transform-origin: left top;
+          transform-origin: left top;
+  -webkit-transform: scale(1);
+          transform: scale(1); }
+  md-select-menu.md-reverse {
+    -webkit-flex-direction: column-reverse;
+        -ms-flex-direction: column-reverse;
+            flex-direction: column-reverse; }
+  md-select-menu:not(.md-overflow) md-content {
+    padding-top: 8px;
+    padding-bottom: 8px; }
+  html[dir=rtl] md-select-menu {
+    -webkit-transform-origin: right top;
+            transform-origin: right top;
+    unicode-bidi: embed; }
+  body[dir=rtl] md-select-menu {
+    -webkit-transform-origin: right top;
+            transform-origin: right top;
+    unicode-bidi: embed; }
+  md-select-menu bdo[dir=rtl] {
+    direction: rtl;
+    unicode-bidi: bidi-override; }
+  md-select-menu bdo[dir=ltr] {
+    direction: ltr;
+    unicode-bidi: bidi-override; }
+  md-select-menu md-content {
+    min-width: 136px;
+    min-height: 48px;
+    max-height: 256px;
+    overflow-y: auto; }
+  md-select-menu > * {
+    opacity: 0; }
+
+md-option {
+  cursor: pointer;
+  position: relative;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  width: auto;
+  padding: 0 16px 0 16px;
+  height: 48px; }
+  md-option:focus {
+    outline: none; }
+  md-option .md-text {
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    width: auto;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    font-size: 16px; }
+
+md-optgroup {
+  display: block; }
+  md-optgroup label {
+    display: block;
+    font-size: 14px;
+    text-transform: uppercase;
+    padding: 16px;
+    font-weight: 500; }
+  md-optgroup md-option {
+    padding-left: 32px;
+    padding-right: 32px; }
+
+@media screen and (-ms-high-contrast: active) {
+  .md-select-backdrop {
+    background-color: transparent; }
+  md-select-menu {
+    border: 1px solid #fff; } }
+
+md-sidenav {
+  box-sizing: border-box;
+  position: absolute;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  z-index: 60;
+  width: 304px;
+  min-width: 304px;
+  max-width: 304px;
+  bottom: 0;
+  background-color: white;
+  overflow: auto; }
+  md-sidenav ul {
+    list-style: none; }
+  md-sidenav.md-closed {
+    display: none; }
+  md-sidenav.md-closed-add, md-sidenav.md-closed-remove {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    transition: 0.2s ease-in all; }
+  md-sidenav.md-closed-add.md-closed-add-active, md-sidenav.md-closed-remove.md-closed-remove-active {
+    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
+  md-sidenav.md-locked-open-add, md-sidenav.md-locked-open-remove {
+    position: static;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0); }
+  md-sidenav.md-locked-open {
+    width: 304px;
+    min-width: 304px;
+    max-width: 304px; }
+  md-sidenav.md-locked-open, md-sidenav.md-locked-open.md-closed, md-sidenav.md-locked-open.md-closed.md-sidenav-left, md-sidenav.md-locked-open.md-closed, md-sidenav.md-locked-open.md-closed.md-sidenav-right, md-sidenav.md-locked-open-remove.md-closed {
+    position: static;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0); }
+  md-sidenav.md-locked-open-remove-active {
+    transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+    width: 0;
+    min-width: 0; }
+  md-sidenav.md-closed.md-locked-open-add {
+    width: 0;
+    min-width: 0;
+    -webkit-transform: translate3d(0%, 0, 0);
+            transform: translate3d(0%, 0, 0); }
+  md-sidenav.md-closed.md-locked-open-add-active {
+    transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+    width: 304px;
+    min-width: 304px;
+    -webkit-transform: translate3d(0%, 0, 0);
+            transform: translate3d(0%, 0, 0); }
+
+.md-sidenav-backdrop.md-locked-open {
+  display: none; }
+
+.md-sidenav-left, md-sidenav {
+  left: 0;
+  top: 0;
+  -webkit-transform: translate3d(0%, 0, 0);
+          transform: translate3d(0%, 0, 0); }
+  .md-sidenav-left.md-closed, md-sidenav.md-closed {
+    -webkit-transform: translate3d(-100%, 0, 0);
+            transform: translate3d(-100%, 0, 0); }
+
+.md-sidenav-right {
+  left: 100%;
+  top: 0;
+  -webkit-transform: translate3d(-100%, 0, 0);
+          transform: translate3d(-100%, 0, 0); }
+  .md-sidenav-right.md-closed {
+    -webkit-transform: translate3d(0%, 0, 0);
+            transform: translate3d(0%, 0, 0); }
+
+@media (max-width: 360px) {
+  md-sidenav {
+    width: 85%; } }
+
+@media screen and (-ms-high-contrast: active) {
+  .md-sidenav-left, md-sidenav {
+    border-right: 1px solid #fff; }
+  .md-sidenav-right {
+    border-left: 1px solid #fff; } }
+
+@-webkit-keyframes sliderFocusThumb {
+  0% {
+    opacity: 0;
+    -webkit-transform: scale(0);
+            transform: scale(0); }
+
+  50% {
+    -webkit-transform: scale(1);
+            transform: scale(1);
+    opacity: 1; }
+
+  100% {
+    opacity: 0; } }
+
+@keyframes sliderFocusThumb {
+  0% {
+    opacity: 0;
+    -webkit-transform: scale(0);
+            transform: scale(0); }
+
+  50% {
+    -webkit-transform: scale(1);
+            transform: scale(1);
+    opacity: 1; }
+
+  100% {
+    opacity: 0; } }
+
+md-slider {
+  height: 48px;
+  position: relative;
+  display: block;
+  margin-left: 4px;
+  margin-right: 4px;
+  padding: 0;
+  /**
+   * Track
+   */
+  /**
+   * Slider thumb
+   */
+  /* The sign that's focused in discrete mode */
+  /**
+   * The border/background that comes in when focused in non-discrete mode
+   */
+  /* Don't animate left/right while panning */ }
+  md-slider *, md-slider *:after {
+    box-sizing: border-box; }
+  md-slider .md-slider-wrapper {
+    position: relative; }
+  md-slider .md-track-container {
+    width: 100%;
+    position: absolute;
+    top: 23px;
+    height: 2px; }
+  md-slider .md-track {
+    position: absolute;
+    left: 0;
+    right: 0;
+    height: 100%; }
+  md-slider .md-track-fill {
+    transition: width 0.05s linear; }
+  md-slider .md-track-ticks {
+    position: absolute;
+    left: 0;
+    right: 0;
+    height: 100%; }
+  md-slider .md-track-ticks canvas {
+    width: 100%; }
+  md-slider .md-thumb-container {
+    position: absolute;
+    left: 0;
+    top: 50%;
+    -webkit-transform: translate3d(-50%, -50%, 0);
+            transform: translate3d(-50%, -50%, 0);
+    transition: left 0.1s linear; }
+  md-slider .md-thumb {
+    z-index: 1;
+    position: absolute;
+    left: -19px;
+    top: 5px;
+    width: 38px;
+    height: 38px;
+    border-radius: 38px;
+    -webkit-transform: scale(0.5);
+            transform: scale(0.5);
+    transition: all 0.1s linear; }
+    md-slider .md-thumb:after {
+      content: '';
+      position: absolute;
+      left: 3px;
+      top: 3px;
+      width: 32px;
+      height: 32px;
+      border-radius: 32px;
+      border-width: 3px;
+      border-style: solid; }
+  md-slider .md-sign {
+    /* Center the children (slider-thumb-text) */
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center;
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center;
+    position: absolute;
+    left: -14px;
+    top: -20px;
+    width: 28px;
+    height: 28px;
+    border-radius: 28px;
+    -webkit-transform: scale(0.4) translate3d(0, 70px, 0);
+            transform: scale(0.4) translate3d(0, 70px, 0);
+    transition: all 0.2s ease-in-out;
+    /* The arrow pointing down under the sign */ }
+    md-slider .md-sign:after {
+      position: absolute;
+      content: '';
+      left: 0px;
+      border-radius: 16px;
+      top: 19px;
+      border-left: 14px solid transparent;
+      border-right: 14px solid transparent;
+      border-top-width: 16px;
+      border-top-style: solid;
+      opacity: 0;
+      -webkit-transform: translate3d(0, -8px, 0);
+              transform: translate3d(0, -8px, 0);
+      transition: all 0.2s ease-in-out; }
+    md-slider .md-sign .md-thumb-text {
+      z-index: 1;
+      font-size: 12px;
+      font-weight: bold; }
+  md-slider .md-focus-thumb {
+    position: absolute;
+    left: -24px;
+    top: 0px;
+    width: 48px;
+    height: 48px;
+    border-radius: 48px;
+    display: none;
+    opacity: 0;
+    background-color: #C0C0C0;
+    -webkit-animation: sliderFocusThumb 0.4s linear;
+            animation: sliderFocusThumb 0.4s linear; }
+  md-slider .md-focus-ring {
+    position: absolute;
+    left: -24px;
+    top: 0px;
+    width: 48px;
+    height: 48px;
+    border-radius: 48px;
+    -webkit-transform: scale(0);
+            transform: scale(0);
+    transition: all 0.2s linear;
+    opacity: 0.26; }
+  md-slider .md-disabled-thumb {
+    position: absolute;
+    left: -22px;
+    top: 2px;
+    width: 44px;
+    height: 44px;
+    border-radius: 44px;
+    -webkit-transform: scale(0.35);
+            transform: scale(0.35);
+    border-width: 6px;
+    border-style: solid;
+    display: none; }
+  md-slider.md-min .md-thumb:after {
+    background-color: white; }
+  md-slider.md-min .md-sign {
+    opacity: 0; }
+  md-slider:focus {
+    outline: none; }
+  md-slider.dragging .md-thumb-container, md-slider.dragging .md-track-fill {
+    transition: none; }
+  md-slider:not([md-discrete]) {
+    /* Hide the sign and ticks in non-discrete mode */ }
+    md-slider:not([md-discrete]) .md-track-ticks, md-slider:not([md-discrete]) .md-sign {
+      display: none; }
+    md-slider:not([md-discrete]):not([disabled]):hover .md-thumb {
+      -webkit-transform: scale(0.6);
+              transform: scale(0.6); }
+    md-slider:not([md-discrete]):not([disabled]):focus .md-focus-thumb, md-slider:not([md-discrete]):not([disabled]).active .md-focus-thumb {
+      display: block; }
+    md-slider:not([md-discrete]):not([disabled]):focus .md-focus-ring, md-slider:not([md-discrete]):not([disabled]).active .md-focus-ring {
+      -webkit-transform: scale(1);
+              transform: scale(1); }
+    md-slider:not([md-discrete]):not([disabled]):focus .md-thumb, md-slider:not([md-discrete]):not([disabled]).active .md-thumb {
+      -webkit-transform: scale(0.85);
+              transform: scale(0.85); }
+  md-slider[md-discrete] {
+    /* Hide the focus thumb in discrete mode */ }
+    md-slider[md-discrete] .md-focus-thumb, md-slider[md-discrete] .md-focus-ring {
+      display: none; }
+    md-slider[md-discrete]:not([disabled]):focus .md-sign, md-slider[md-discrete]:not([disabled]):focus .md-sign:after, md-slider[md-discrete]:not([disabled]).active .md-sign, md-slider[md-discrete]:not([disabled]).active .md-sign:after {
+      opacity: 1;
+      -webkit-transform: translate3d(0, 0, 0) scale(1);
+              transform: translate3d(0, 0, 0) scale(1); }
+  md-slider[disabled] .md-track-fill {
+    display: none; }
+  md-slider[disabled] .md-sign {
+    display: none; }
+  md-slider[disabled] .md-thumb {
+    -webkit-transform: scale(0.35);
+            transform: scale(0.35); }
+  md-slider[disabled] .md-disabled-thumb {
+    display: block; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-slider.md-default-theme .md-track {
+    border-bottom: 1px solid #fff; } }
+
+.md-sticky-clone {
+  z-index: 2;
+  top: 0;
+  left: 0;
+  right: 0;
+  position: absolute !important;
+  -webkit-transform: translate3d(-9999px, -9999px, 0);
+          transform: translate3d(-9999px, -9999px, 0); }
+  .md-sticky-clone[sticky-state="active"] {
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0); }
+    .md-sticky-clone[sticky-state="active"]:not(.md-sticky-no-effect) .md-subheader-inner {
+      -webkit-animation: subheaderStickyHoverIn 0.3s ease-out both;
+              animation: subheaderStickyHoverIn 0.3s ease-out both; }
+
+@-webkit-keyframes subheaderStickyHoverIn {
+  0% {
+    box-shadow: 0 0 0 0 transparent; }
+
+  100% {
+    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } }
+
+@keyframes subheaderStickyHoverIn {
+  0% {
+    box-shadow: 0 0 0 0 transparent; }
+
+  100% {
+    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } }
+
+@-webkit-keyframes subheaderStickyHoverOut {
+  0% {
+    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); }
+
+  100% {
+    box-shadow: 0 0 0 0 transparent; } }
+
+@keyframes subheaderStickyHoverOut {
+  0% {
+    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); }
+
+  100% {
+    box-shadow: 0 0 0 0 transparent; } }
+
+.md-subheader-wrapper:not(.md-sticky-no-effect) {
+  transition: 0.2s ease-out margin; }
+  .md-subheader-wrapper:not(.md-sticky-no-effect) .md-subheader {
+    margin: 0; }
+  .md-subheader-wrapper:not(.md-sticky-no-effect).md-sticky-clone {
+    z-index: 2; }
+  .md-subheader-wrapper:not(.md-sticky-no-effect)[sticky-state="active"] {
+    margin-top: -2px; }
+  .md-subheader-wrapper:not(.md-sticky-no-effect):not(.md-sticky-clone)[sticky-prev-state="active"] .md-subheader-inner:after {
+    -webkit-animation: subheaderStickyHoverOut 0.3s ease-out both;
+            animation: subheaderStickyHoverOut 0.3s ease-out both; }
+
+.md-subheader {
+  display: block;
+  font-size: 14px;
+  font-weight: 500;
+  line-height: 1em;
+  margin: 0 0 0 0;
+  margin-right: 16px;
+  position: relative; }
+  .md-subheader .md-subheader-inner {
+    display: block;
+    padding: 16px 0px 16px 16px; }
+  .md-subheader .md-subheader-content {
+    display: block;
+    z-index: 1;
+    position: relative; }
+
+md-switch {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  margin: 15px;
+  white-space: nowrap;
+  cursor: pointer;
+  outline: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none; }
+  md-switch .md-container {
+    cursor: -webkit-grab;
+    cursor: grab;
+    width: 36px;
+    height: 24px;
+    position: relative;
+    -webkit-user-select: none;
+       -moz-user-select: none;
+        -ms-user-select: none;
+            user-select: none;
+    margin-right: 8px; }
+  md-switch:not([disabled]) .md-dragging, md-switch:not([disabled]).md-dragging .md-container {
+    cursor: -webkit-grabbing;
+    cursor: grabbing; }
+  md-switch.md-focused:not([disabled]) .md-thumb:before {
+    left: -8px;
+    top: -8px;
+    right: -8px;
+    bottom: -8px; }
+  md-switch.md-focused:not([disabled]):not(.md-checked) .md-thumb:before {
+    background-color: rgba(0, 0, 0, 0.12); }
+  md-switch .md-label {
+    border-color: transparent;
+    border-width: 0; }
+  md-switch .md-bar {
+    left: 1px;
+    width: 34px;
+    top: 5px;
+    height: 14px;
+    border-radius: 8px;
+    position: absolute; }
+  md-switch .md-thumb-container {
+    top: 2px;
+    left: 0;
+    width: 16px;
+    position: absolute;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+    z-index: 1; }
+  md-switch.md-checked .md-thumb-container {
+    -webkit-transform: translate3d(100%, 0, 0);
+            transform: translate3d(100%, 0, 0); }
+  md-switch .md-thumb {
+    position: absolute;
+    margin: 0;
+    left: 0;
+    top: 0;
+    outline: none;
+    height: 20px;
+    width: 20px;
+    border-radius: 50%;
+    box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); }
+    md-switch .md-thumb:before {
+      background-color: transparent;
+      border-radius: 50%;
+      content: '';
+      position: absolute;
+      display: block;
+      height: auto;
+      left: 0;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      transition: all 0.5s;
+      width: auto; }
+    md-switch .md-thumb .md-ripple-container {
+      position: absolute;
+      display: block;
+      width: auto;
+      height: auto;
+      left: -20px;
+      top: -20px;
+      right: -20px;
+      bottom: -20px; }
+  md-switch:not(.md-dragging) .md-bar, md-switch:not(.md-dragging) .md-thumb-container, md-switch:not(.md-dragging) .md-thumb {
+    transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1);
+    transition-property: -webkit-transform, background-color;
+    transition-property: transform, background-color; }
+  md-switch:not(.md-dragging) .md-bar, md-switch:not(.md-dragging) .md-thumb {
+    transition-delay: 0.05s; }
+
+@media screen and (-ms-high-contrast: active) {
+  md-switch.md-default-theme .md-bar {
+    background-color: #666; }
+  md-switch.md-default-theme.md-checked .md-bar {
+    background-color: #9E9E9E; }
+  md-switch.md-default-theme .md-thumb {
+    background-color: #fff; } }
+
+@-webkit-keyframes md-tab-content-hide {
+  0% {
+    opacity: 1; }
+
+  50% {
+    opacity: 1; }
+
+  100% {
+    opacity: 0; } }
+
+@keyframes md-tab-content-hide {
+  0% {
+    opacity: 1; }
+
+  50% {
+    opacity: 1; }
+
+  100% {
+    opacity: 0; } }
+
+md-tab-data {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: -1;
+  opacity: 0; }
+
+md-tabs {
+  display: block;
+  margin: 0;
+  border-radius: 2px;
+  overflow: hidden;
+  position: relative;
+  -webkit-flex-shrink: 0;
+      -ms-flex-negative: 0;
+          flex-shrink: 0; }
+  md-tabs:not(.md-no-tab-content):not(.md-dynamic-height) {
+    min-height: 248px; }
+  md-tabs[md-align-tabs="bottom"] md-tabs-wrapper {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 48px; }
+  md-tabs[md-align-tabs="bottom"] md-tabs-content-wrapper {
+    top: 0;
+    bottom: 48px; }
+  md-tabs.md-dynamic-height md-tabs-content-wrapper {
+    min-height: 0;
+    position: relative;
+    top: auto;
+    left: auto;
+    right: auto;
+    bottom: auto;
+    overflow: visible; }
+  md-tabs.md-dynamic-height md-tab-content.md-active {
+    position: relative; }
+  md-tabs[md-border-bottom] md-tabs-wrapper {
+    border-width: 0 0 1px;
+    border-style: solid; }
+  md-tabs[md-border-bottom]:not(.md-dynamic-height) md-tabs-content-wrapper {
+    top: 49px; }
+
+md-tabs-wrapper {
+  display: block;
+  position: relative; }
+  md-tabs-wrapper md-prev-button, md-tabs-wrapper md-next-button {
+    height: 100%;
+    width: 32px;
+    position: absolute;
+    top: 50%;
+    -webkit-transform: translateY(-50%);
+            transform: translateY(-50%);
+    line-height: 1em;
+    z-index: 2;
+    cursor: pointer;
+    font-size: 16px;
+    background: transparent no-repeat center center;
+    transition: all 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
+    md-tabs-wrapper md-prev-button:focus, md-tabs-wrapper md-next-button:focus {
+      outline: none; }
+    md-tabs-wrapper md-prev-button.md-disabled, md-tabs-wrapper md-next-button.md-disabled {
+      opacity: 0.25;
+      cursor: default; }
+    md-tabs-wrapper md-prev-button.ng-leave, md-tabs-wrapper md-next-button.ng-leave {
+      transition: none; }
+    md-tabs-wrapper md-prev-button md-icon, md-tabs-wrapper md-next-button md-icon {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      -webkit-transform: translate3d(-50%, -50%, 0);
+              transform: translate3d(-50%, -50%, 0); }
+  md-tabs-wrapper md-prev-button {
+    left: 0;
+    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMjA4IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTUuNCw3LjQgMTQsNiA4LDEyIDE0LDE4IDE1LjQsMTYuNiAxMC44LDEyIAkJIiBzdHlsZT0iZmlsbDp3aGl0ZTsiLz4gPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+IDwvZz4gPC9nPiA8ZyBpZD0iR3JpZCIgZGlzcGxheT0ibm9uZSI+IDxnIGRpc3BsYXk9ImlubGluZSI+IDwvZz4gPC9nPiA8L3N2Zz4NCg=='); }
+  md-tabs-wrapper md-next-button {
+    right: 0;
+    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMzM2IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTAsNiA4LjYsNy40IDEzLjIsMTIgOC42LDE2LjYgMTAsMTggMTYsMTIgCQkiIHN0eWxlPSJmaWxsOndoaXRlOyIvPiA8cmVjdCBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz4gPC9nPiA8L2c+IDxnIGlkPSJHcmlkIiBkaXNwbGF5PSJub25lIj4gPGcgZGlzcGxheT0iaW5saW5lIj4gPC9nPiA8L2c+IDwvc3ZnPg0K'); }
+    md-tabs-wrapper md-next-button md-icon {
+      -webkit-transform: translate3d(-50%, -50%, 0) rotate(180deg);
+              transform: translate3d(-50%, -50%, 0) rotate(180deg); }
+  md-tabs-wrapper.md-stretch-tabs md-pagination-wrapper {
+    width: 100%;
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row; }
+    md-tabs-wrapper.md-stretch-tabs md-pagination-wrapper md-tab-item {
+      -webkit-flex-grow: 1;
+          -ms-flex-positive: 1;
+              flex-grow: 1; }
+
+md-tabs-canvas {
+  position: relative;
+  overflow: hidden;
+  display: block;
+  height: 48px; }
+  md-tabs-canvas:after {
+    content: '';
+    display: table;
+    clear: both; }
+  md-tabs-canvas .md-dummy-wrapper {
+    position: absolute;
+    top: 0;
+    left: 0; }
+  md-tabs-canvas.md-paginated {
+    margin: 0 32px; }
+  md-tabs-canvas.md-center-tabs {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-flex-direction: column;
+        -ms-flex-direction: column;
+            flex-direction: column;
+    text-align: center; }
+    md-tabs-canvas.md-center-tabs .md-tab {
+      float: none;
+      display: inline-block; }
+
+md-pagination-wrapper {
+  height: 48px;
+  display: block;
+  transition: -webkit-transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
+  transition: transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
+  position: absolute;
+  width: 999999px;
+  left: 0;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0); }
+  md-pagination-wrapper:after {
+    content: '';
+    display: table;
+    clear: both; }
+  md-pagination-wrapper.md-center-tabs {
+    position: relative;
+    width: initial;
+    -webkit-flex: 1;
+        -ms-flex: 1;
+            flex: 1;
+    margin: 0 auto; }
+
+md-tabs-content-wrapper {
+  display: block;
+  position: absolute;
+  top: 48px;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  overflow: hidden; }
+
+md-tab-content {
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  -webkit-transform: translateX(0);
+          transform: translateX(0);
+  transition: -webkit-transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
+  transition: transform 0.5s cubic-bezier(0.35, 0, 0.25, 1);
+  overflow: auto; }
+  md-tab-content.md-no-scroll {
+    bottom: auto;
+    overflow: hidden; }
+  md-tab-content.ng-leave, md-tab-content.md-no-transition {
+    transition: none; }
+  md-tab-content.md-left {
+    -webkit-transform: translateX(-100%);
+            transform: translateX(-100%);
+    -webkit-animation: 1s md-tab-content-hide;
+            animation: 1s md-tab-content-hide;
+    opacity: 0; }
+    md-tab-content.md-left * {
+      transition: visibility 0s linear;
+      transition-delay: 0.5s;
+      visibility: hidden; }
+  md-tab-content.md-right {
+    -webkit-transform: translateX(100%);
+            transform: translateX(100%);
+    -webkit-animation: 1s md-tab-content-hide;
+            animation: 1s md-tab-content-hide;
+    opacity: 0; }
+    md-tab-content.md-right * {
+      transition: visibility 0s linear;
+      transition-delay: 0.5s;
+      visibility: hidden; }
+  md-tab-content > div.ng-leave {
+    -webkit-animation: 1s md-tab-content-hide;
+            animation: 1s md-tab-content-hide; }
+
+md-ink-bar {
+  position: absolute;
+  left: auto;
+  right: auto;
+  bottom: 0;
+  height: 2px; }
+  md-ink-bar.md-left {
+    transition: left 0.225s cubic-bezier(0.35, 0, 0.25, 1), right 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
+  md-ink-bar.md-right {
+    transition: left 0.5s cubic-bezier(0.35, 0, 0.25, 1), right 0.225s cubic-bezier(0.35, 0, 0.25, 1); }
+
+md-tab {
+  position: absolute;
+  z-index: -1;
+  left: -9999px; }
+
+.md-tab {
+  font-size: 14px;
+  text-align: center;
+  line-height: 24px;
+  padding: 12px 24px;
+  transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1);
+  cursor: pointer;
+  white-space: nowrap;
+  position: relative;
+  text-transform: uppercase;
+  float: left;
+  font-weight: 500;
+  box-sizing: border-box;
+  overflow: hidden;
+  text-overflow: ellipsis; }
+  .md-tab.md-focused {
+    box-shadow: none;
+    outline: none; }
+  .md-tab.md-active {
+    cursor: default; }
+  .md-tab.md-disabled {
+    pointer-events: none;
+    -ms-touch-action: pan-y;
+        touch-action: pan-y;
+    -webkit-user-select: none;
+       -moz-user-select: none;
+        -ms-user-select: none;
+            user-select: none;
+    -webkit-user-drag: none;
+    opacity: 0.5;
+    cursor: default; }
+  .md-tab.ng-leave {
+    transition: none; }
+
+md-toolbar + md-tabs {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0; }
+
+md-toast {
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  position: absolute;
+  z-index: 90;
+  box-sizing: border-box;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  min-height: 48px;
+  padding-left: 24px;
+  padding-right: 24px;
+  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+  border-radius: 2px;
+  font-size: 14px;
+  cursor: default;
+  height: auto;
+  max-height: 168px;
+  max-width: 100%;
+  overflow: hidden;
+  opacity: 1;
+  -webkit-transform: translate3d(0, 0, 0) rotateZ(0deg);
+          transform: translate3d(0, 0, 0) rotateZ(0deg);
+  transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+  /* Transition differently when swiping */ }
+  md-toast.md-capsule {
+    border-radius: 24px; }
+  md-toast.ng-leave-active {
+    transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+  md-toast.md-swipeleft, md-toast.md-swiperight, md-toast.md-swipeup, md-toast.md-swipedown {
+    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
+  md-toast.ng-enter {
+    -webkit-transform: translate3d(0, 100%, 0);
+            transform: translate3d(0, 100%, 0);
+    opacity: 0; }
+    md-toast.ng-enter.md-top {
+      -webkit-transform: translate3d(0, -100%, 0);
+              transform: translate3d(0, -100%, 0); }
+    md-toast.ng-enter.ng-enter-active {
+      -webkit-transform: translate3d(0, 0, 0);
+              transform: translate3d(0, 0, 0);
+      opacity: 1; }
+  md-toast.ng-leave.ng-leave-active {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+            transform: translate3d(0, 100%, 0); }
+    md-toast.ng-leave.ng-leave-active.md-top {
+      -webkit-transform: translate3d(0, -100%, 0);
+              transform: translate3d(0, -100%, 0); }
+    md-toast.ng-leave.ng-leave-active.md-swipeleft {
+      -webkit-transform: translate3d(-100%, 0%, 0);
+              transform: translate3d(-100%, 0%, 0); }
+    md-toast.ng-leave.ng-leave-active.md-swiperight {
+      -webkit-transform: translate3d(100%, 0%, 0);
+              transform: translate3d(100%, 0%, 0); }
+  md-toast .md-action {
+    line-height: 19px;
+    margin-left: 24px;
+    cursor: pointer;
+    text-transform: uppercase;
+    float: right; }
+    md-toast .md-action.md-button {
+      min-width: 0; }
+
+@media (max-width: 600px) {
+  md-toast {
+    left: 0;
+    right: 0;
+    width: 100%;
+    max-width: 100%;
+    min-width: 0;
+    border-radius: 0;
+    bottom: 0; }
+    md-toast.md-top {
+      bottom: auto;
+      top: 0; } }
+
+@media (min-width: 600px) {
+  md-toast {
+    min-width: 288px;
+    /*
+     * When the toast doesn't take up the whole screen,
+     * make it rotate when the user swipes it away
+     */ }
+    md-toast.md-bottom {
+      bottom: 8px; }
+    md-toast.md-left {
+      left: 8px; }
+    md-toast.md-right {
+      right: 8px; }
+    md-toast.md-top {
+      top: 8px; }
+    md-toast.ng-leave.ng-leave-active.md-swipeleft {
+      -webkit-transform: translate3d(-100%, 25%, 0) rotateZ(-15deg);
+              transform: translate3d(-100%, 25%, 0) rotateZ(-15deg); }
+    md-toast.ng-leave.ng-leave-active.md-swiperight {
+      -webkit-transform: translate3d(100%, 25%, 0) rotateZ(15deg);
+              transform: translate3d(100%, 25%, 0) rotateZ(15deg); }
+    md-toast.ng-leave.ng-leave-active.md-top.md-swipeleft {
+      -webkit-transform: translate3d(-100%, 0, 0) rotateZ(-15deg);
+              transform: translate3d(-100%, 0, 0) rotateZ(-15deg); }
+    md-toast.ng-leave.ng-leave-active.md-top.md-swiperight {
+      -webkit-transform: translate3d(100%, 0, 0) rotateZ(15deg);
+              transform: translate3d(100%, 0, 0) rotateZ(15deg); } }
+
+@media (min-width: 1200px) {
+  md-toast {
+    max-width: 568px; } }
+
+@media screen and (-ms-high-contrast: active) {
+  md-toast {
+    border: 1px solid #fff; } }
+
+md-toolbar {
+  box-sizing: border-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: column;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  position: relative;
+  z-index: 2;
+  font-size: 20px;
+  min-height: 64px;
+  width: 100%; }
+  md-toolbar.md-whiteframe-z1-add, md-toolbar.md-whiteframe-z1-remove {
+    transition: box-shadow 0.5s linear; }
+  md-toolbar md-toolbar-filler {
+    width: 72px; }
+  md-toolbar *, md-toolbar *:before, md-toolbar *:after {
+    box-sizing: border-box; }
+  md-toolbar.md-tall {
+    height: 128px;
+    min-height: 128px;
+    max-height: 128px; }
+  md-toolbar.md-medium-tall {
+    height: 88px;
+    min-height: 88px;
+    max-height: 88px; }
+    md-toolbar.md-medium-tall .md-toolbar-tools {
+      height: 48px;
+      min-height: 48px;
+      max-height: 48px; }
+  md-toolbar > .md-indent {
+    margin-left: 64px; }
+  md-toolbar ~ md-content > md-list {
+    padding: 0; }
+    md-toolbar ~ md-content > md-list md-list-item:last-child md-divider {
+      display: none; }
+
+.md-toolbar-tools {
+  font-size: 20px;
+  letter-spacing: 0.005em;
+  box-sizing: border-box;
+  font-weight: 400;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-flex-direction: row;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  width: 100%;
+  height: 64px;
+  max-height: 64px;
+  padding: 0 16px;
+  margin: 0; }
+  .md-toolbar-tools h1, .md-toolbar-tools h2, .md-toolbar-tools h3 {
+    font-size: inherit;
+    font-weight: inherit;
+    margin: inherit; }
+  .md-toolbar-tools a {
+    color: inherit;
+    text-decoration: none; }
+  .md-toolbar-tools .fill-height {
+    display: -webkit-flex;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center; }
+  .md-toolbar-tools .md-button {
+    margin-top: 0;
+    margin-bottom: 0; }
+  .md-toolbar-tools > .md-button:first-child {
+    margin-left: -8px; }
+  .md-toolbar-tools > .md-button:last-child {
+    margin-right: -8px; }
+  .md-toolbar-tools > md-menu:last-child {
+    margin-right: -8px; }
+    .md-toolbar-tools > md-menu:last-child > .md-button {
+      margin-right: 0; }
+  @media screen and (-ms-high-contrast: active) {
+    .md-toolbar-tools {
+      border-bottom: 1px solid #fff; } }
+
+@media only screen and (min-width: 0) and (max-width: 600px) and (orientation: portrait) {
+  md-toolbar {
+    min-height: 56px; }
+  .md-toolbar-tools {
+    height: 56px;
+    max-height: 56px; } }
+
+@media only screen and (min-width: 0) and (max-width: 600px) and (orientation: landscape) {
+  md-toolbar {
+    min-height: 48px; }
+  .md-toolbar-tools {
+    height: 48px;
+    max-height: 48px; } }
+
+md-tooltip {
+  position: absolute;
+  z-index: 100;
+  overflow: hidden;
+  pointer-events: none;
+  border-radius: 4px;
+  font-weight: 500;
+  font-size: 14px; }
+  @media screen and (min-width: 600px) {
+    md-tooltip {
+      font-size: 10px; } }
+  md-tooltip .md-background {
+    position: absolute;
+    border-radius: 50%;
+    -webkit-transform: translate(-50%, -50%) scale(0);
+            transform: translate(-50%, -50%) scale(0);
+    opacity: 1; }
+    md-tooltip .md-background.md-show-add {
+      transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+      -webkit-transform: translate(-50%, -50%) scale(0);
+              transform: translate(-50%, -50%) scale(0);
+      opacity: 0; }
+    md-tooltip .md-background.md-show, md-tooltip .md-background.md-show-add-active {
+      -webkit-transform: translate(-50%, -50%) scale(1);
+              transform: translate(-50%, -50%) scale(1);
+      opacity: 1; }
+    md-tooltip .md-background.md-show-remove {
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+      md-tooltip .md-background.md-show-remove.md-show-remove-active {
+        -webkit-transform: translate(-50%, -50%) scale(0);
+                transform: translate(-50%, -50%) scale(0);
+        opacity: 0; }
+  md-tooltip .md-content {
+    position: relative;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    background: transparent;
+    opacity: 0;
+    height: 32px;
+    line-height: 32px;
+    padding-left: 16px;
+    padding-right: 16px; }
+    @media screen and (min-width: 600px) {
+      md-tooltip .md-content {
+        height: 22px;
+        line-height: 22px;
+        padding-left: 8px;
+        padding-right: 8px; } }
+    md-tooltip .md-content.md-show-add {
+      transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+      opacity: 0; }
+    md-tooltip .md-content.md-show, md-tooltip .md-content.md-show-add-active {
+      opacity: 1; }
+    md-tooltip .md-content.md-show-remove {
+      transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+      md-tooltip .md-content.md-show-remove.md-show-remove-active {
+        opacity: 0; }
+  md-tooltip.md-hide {
+    transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+  md-tooltip.md-show {
+    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+    pointer-events: auto;
+    -webkit-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0); }
+
+.md-virtual-repeat-container {
+  box-sizing: border-box;
+  display: block;
+  margin: 0;
+  overflow: hidden;
+  padding: 0;
+  position: relative; }
+  .md-virtual-repeat-container .md-virtual-repeat-scroller {
+    bottom: 0;
+    box-sizing: border-box;
+    left: 0;
+    margin: 0;
+    overflow-x: hidden;
+    padding: 0;
+    position: absolute;
+    right: 0;
+    top: 0; }
+  .md-virtual-repeat-container .md-virtual-repeat-sizer {
+    box-sizing: border-box;
+    height: 1px;
+    display: inline-block;
+    margin: 0;
+    padding: 0;
+    width: 1px; }
+  .md-virtual-repeat-container .md-virtual-repeat-offsetter {
+    box-sizing: border-box;
+    left: 0;
+    margin: 0;
+    padding: 0;
+    position: absolute;
+    right: 16px;
+    top: 0; }
+
+.md-virtual-repeat-container.md-orient-horizontal .md-virtual-repeat-scroller {
+  overflow-x: auto;
+  overflow-y: hidden; }
+.md-virtual-repeat-container.md-orient-horizontal .md-virtual-repeat-offsetter {
+  bottom: 16px;
+  right: auto;
+  white-space: nowrap; }
+
+.md-whiteframe-z1 {
+  box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.14), 0px 2px 2px 0px rgba(0, 0, 0, 0.098), 0px 1px 5px 0px rgba(0, 0, 0, 0.084); }
+
+.md-whiteframe-z2 {
+  box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.14), 0 4px 5px 0 rgba(0, 0, 0, 0.098), 0 1px 10px 0 rgba(0, 0, 0, 0.084); }
+
+.md-whiteframe-z3 {
+  box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.14), 0px 6px 10px 0px rgba(0, 0, 0, 0.098), 0px 1px 18px 0px rgba(0, 0, 0, 0.084); }
+
+.md-whiteframe-z4 {
+  box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.14), 0px 8px 10px 1px rgba(0, 0, 0, 0.098), 0px 3px 14px 2px rgba(0, 0, 0, 0.084); }
+
+.md-whiteframe-z5 {
+  box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.14), 0px 16px 24px 2px rgba(0, 0, 0, 0.098), 0px 6px 30px 5px rgba(0, 0, 0, 0.084); }
+
+@media screen and (-ms-high-contrast: active) {
+  md-whiteframe {
+    border: 1px solid #fff; } }

+ 17 - 0
css/angular.typeahead.css

@@ -0,0 +1,17 @@
+/* scaffolding */
+/* ----------- */
+
+
+.typeahead.dropdown-menu {
+  width: 460px;
+  border-radius: 0 0 0 0 !important;
+  top: 38px !important;
+  padding: 8px 0;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+          box-shadow: 0 5px 10px rgba(0,0,0,.2);
+}
+

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3 - 0
css/font-awesome.min.css


+ 476 - 0
css/main.css

@@ -0,0 +1,476 @@
+html {
+  height: 100%;
+  width: 100%;
+}
+
+body {
+  background-color: #333;
+  background: url("../img/background.png") no-repeat top center fixed;
+  background-size: cover;
+  margin: 0;
+  padding: 0;
+  height: 100%;
+  width: 100%;
+  overflow: auto;
+}
+
+a {
+  text-decoration: none;
+}
+
+.bg-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+  padding: 10px;
+  margin: 1em;
+}
+
+.bg-info {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+  padding: 10px;
+  margin: 1em;
+  text-align: center;
+}
+
+.title {
+  position: absolute;
+  z-index: 9999999999;
+  cursor: pointer;
+}
+
+.data-loading-txt {
+  position: relative;
+  top: -40px;
+  left: 50px;
+  font-size: 15px;
+  font-weight: bold;
+  color: #666;
+}
+
+#result {
+  background: white;
+  opacity: 0.9;
+  height: 0px;
+  overflow: hidden;
+  background: url("../img/filter.png") bottom left repeat-x;
+}
+
+#result .result-container {
+  height: 100%;
+  margin: 0;
+  padding: 1em;
+  box-sizing: border-box;
+}
+
+#result .result-box {
+  background: white;
+  border-radius: 10px;
+  height: calc(100% - 15px);
+}
+
+.box-header {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+}
+
+.box-description {
+  height: 80px;
+  overflow: auto;
+}
+
+.box-description-more {
+  text-align: right;
+}
+
+.box-eligibilite-title {
+  text-transform: uppercase;
+  color: #666;
+}
+
+.box-eligibilite-title .btn{
+  float: right;
+  z-index: 1000;
+  position: relative;
+}
+
+.box-eligibilite-yes {
+  color: #8cc474;
+}
+
+.box-eligibilite-no {
+  color: #e46f61;
+}
+
+.box-eligibilite {
+  height: calc(100% - 140px);
+}
+
+.box-eligibilite > div {
+  height: 100%;
+}
+
+.box-eligibilite-spinner {
+  text-align: center;
+  position:relative;
+  top: 50%;
+  margin-top: -28px;
+}
+
+.box-eligibilite-none {
+  text-align: center;
+  position:relative;
+  top: 50%;
+  font-size: 25px;
+  text-transform: uppercase;
+  color: #bbb;
+  margin-top: -35px;
+}
+
+.box-body {
+  overflow: auto;
+  padding: 1em;
+  box-sizing: border-box;
+  height: calc(100% - 100px);
+  border-left: 7px solid silver;
+  border-radius: 0 0 0 10px;
+}
+
+.box-logo,
+.box-title-description {
+  display: table-cell;
+  vertical-align: top;
+}
+
+.box-title {
+  text-align: center;
+  font-size: 24px;
+  white-space: nowrap;
+  font-weight: 200;
+  margin-top: 5px;
+}
+
+.solution {
+  font-size: 16px;
+}
+
+.box-logo,
+.box-logo img {
+  width: 100px;
+  height: 100px;
+  border-radius: 10px 0 10px 0;
+}
+
+.md-sidenav-right {
+  z-index: 99999999999999;
+}
+
+.md-sidenav-right .md-toolbar-tools {
+  font-size: 20px;
+  position: relative;
+  top: 21px;
+}
+
+.md-sidenav-right md-progress-circular {
+  position: absolute;
+  right: 7px;
+  top: 7px;
+}
+
+.force-hidden .md-inner {
+  display: none !important;
+}
+
+.md-sidenav-right md-progress-circular .md-right .md-half-circle {
+  border-right-color: white !important;
+  border-top-color: white !important;
+}
+
+.md-sidenav-right md-progress-circular .md-left .md-half-circle {
+  border-left-color: white !important;
+  border-top-color: white !important;
+}
+
+.md-sidenav-right md-progress-circular .md-inner {
+  display: none;
+}
+
+
+.md-label:before {
+  content: no-close-quote;
+}
+
+.md-sidenav-right .section-title {
+  text-transform: uppercase;
+  color: #999;
+  white-space: nowrap;
+  font-size: 13px;
+  padding-bottom: 10px;
+  margin-bottom: 7px;
+  border-bottom: 1px solid #999;
+}
+
+
+.md-sidenav-rightmd-checkbox .md-label {
+  position: relative;
+  top: -2px;
+}
+
+md-checkbox {
+  margin: 5px 0 0 0;
+}
+
+.address-bar {
+  position: absolute;
+  right: 20px;
+  z-index: 1000;
+}
+
+.address-bar .input-type {
+  position: absolute;
+  top: 20px;
+  right: 100px;
+}
+
+.address-bar input {
+  width: 400px;
+  height: 41px;
+  padding: 0 10px;
+  font-size: 15px;
+  line-height: 30px;
+  color: #777;
+}
+
+.address-bar button {
+  height: 41px;
+  position: absolute;
+  top: 20px;
+  right: 40px;
+  border-radius: 0 0 0 0 !important;
+  box-shadow: none;
+}
+
+.address-bar .md-menu {
+  position: absolute;
+  top: 26px;
+  right: -4px;
+  cursor: pointer;
+}
+
+.address-bar button i {
+  padding: 0 10px;
+}
+
+.title img {
+  height: 50px;
+  margin: 1em;
+}
+
+#map {
+  height: 100%;
+  width: 100%;
+}
+
+.popup-title {
+  font-weight: bold;
+}
+
+.popup-line {
+  white-space: nowrap;
+  position: relative;
+}
+
+.leaflet-popup-content {
+  width: 380px !important;
+  max-height: 380px;
+  overflow: auto;
+}
+
+.popup-label {
+  color: rgba(0,0,0,0.54);
+  width: inherit;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: auto;
+  font-size: 12px;
+}
+
+.popup-value {
+  color: #333;
+  font-size: 14px;
+  height: 26px;
+  line-height: 23px;
+  border-bottom: 1px solid #ddd;
+  margin-bottom: 13px;
+}
+
+.popup-small-date {
+  position: absolute;
+  font-size: 10px;
+  right: 0px;
+  top: 20px;
+}
+
+md-toast {
+  padding-top: 10px !important;
+  font-size: 14px !important;
+}
+
+md-toast.md-bottom {
+  bottom: 15px;
+}
+
+md-toast.md-right {
+  right: 15px;
+}
+
+md-radio-group.md-default-theme:focus:not(:empty) {
+  border-color: transparent !important;
+}
+
+md-radio-button {
+  margin: 5px 0px;
+}
+
+.modal-backdrop.in {
+  opacity: 0.7 !important;
+}
+
+.formulaire .section {
+  padding-bottom: 20px;
+}
+
+.formulaire .no-padding {
+  padding-bottom: 0px;
+}
+
+.formulaire .section-name {
+  text-transform: uppercase;
+  font-size: 22px;
+}
+
+.formulaire md-input-container {
+  padding-left: 10px;
+  padding-bottom: 20px;
+}
+
+.formulaire md-select,
+.formulaire input {
+}
+
+.formulaire md-select-value > span,
+.formulaire md-input-container label {
+  height: 16px;
+  margin-bottom: 5px;
+}
+
+.formulaire md-select-value.md-select-placeholder > span {
+  position: relative;
+  top: -2px;
+  font-weight: bold;
+}
+
+.formulaire md-select-value {
+  width: 100%;
+}
+
+.formulaire md-select-value > span {
+  position: relative;
+  top: 6px;
+}
+
+.formulaire md-content {
+  display: flex;
+}
+
+.formulaire md-content,
+.formulaire md-content input {
+  width: 100%;
+  vertical-align: top;
+}
+
+.formulaire md-select,
+.formulaire textarea {
+  width: 100%;
+}
+
+.formulaire .md-select-icon {
+  display: none;
+}
+
+.md-select-menu-container {
+  z-index: 1050;
+}
+
+.form-required {
+  color: rgb(196,59,29);
+}
+
+md-checkbox .md-label:before {
+  display: none;
+}
+
+md-checkbox {
+  padding: 0;
+}
+
+md-checkbox .md-label {
+  margin-left: 25px;
+  line-height: 16px;
+  font-size: 12px;
+}
+
+md-checkbox .md-container {
+  position: absolute;
+  top: 10px;
+}
+
+.formulaire .pres-text {
+  font-size: 12px;
+  line-height: 16px;
+}
+
+#mn_inscription .modal-body {
+  max-height: 400px;
+  overflow: auto;
+  min-height: 150px;
+}
+
+.mn-form-in-progress,
+.mn-form-error,
+.mn-form-ok {
+  text-align: center;
+  font-size: 20px;
+}
+
+.mn-form-error i{
+  color: #EF5050;
+}
+
+.mn-form-ok i{
+  color: #68C782;
+}
+
+.mn-form-in-progress i,
+.mn-form-error i,
+.mn-form-ok i {
+  font-size: 80px;
+  margin-bottom: 30px;
+}
+
+.mn-form md-radio-group,
+.mn-form md-radio-button {
+  display: block;
+}
+
+.mn-form md-radio-button .md-label{
+  white-space: nowrap;
+}
+
+.mn-form .alerte {
+  margin-top: 30px;
+  color: rgb(196,59,29);
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 4 - 0
css/material-design-iconic-font.min.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 163 - 0
css/theme.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
data/Contour_Manche.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
data/Couverture_MIMO_deploiement_5zones.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
data/Couverture_mimo.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
data/FFTH_zapm_partielle.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3 - 0
data/TEL_FT_ADSL.json


+ 23 - 0
data/dictionary.json

@@ -0,0 +1,23 @@
+{
+  "DATE_DEB_ETUDES_PREV"   : "Date début études prévisionnelle",
+  "DATE_DEB_ETUDES_REEL"   : "Date début études réelle",
+  "DATE_DEB_PIQ_PREV"      : "Date début piquetage prévisionnelle",
+  "DATE_DEB_PIQ_REEL"      : "Date début piquetage réelle",
+  "DATE_DEB_TRAV_PREV"     : "Date début travaux prévisionnelle",
+  "DATE_DEB_TRAV_REEL"     : "Date début travaux réelle",
+  "DATE_FIN_ETUDES_PREV"   : "Date fin études prévisionnelle",
+  "DATE_FIN_ETUDES_REEL"   : "Date fin études réelle",
+  "DATE_FIN_PIQ_PREV"      : "Date fin piquetage prévisionnelle",
+  "DATE_FIN_PIQ_REEL"      : "Date fin piquetage réelle",
+  "DATE_FIN_TRAV_PREV"     : "Date fin travaux prévisionnelle",
+  "DATE_FIN_TRAV_REEL"     : "Date fin travaux réelle",
+  "DATE_PREM_REUNION_PUB"  : "Date première réunion publique",
+  "DATE_VALID_ETUDES_PREV" : "Date validation études prévisionnelle",
+  "DATE_VALID_ETUDES_REEL" : "Date validation études réelle",
+  "PHASE_TRAV"             : "Phase travaux",
+  "ID_SITE_MIMO"           : "Identifiant site MiMo",
+  "DB_MIN"                 : "Affaiblissement minimum (db)",
+  "DB_MAX"                 : "Affaiblissement maximum (db)",
+  "KM²"                    : "Surface zone (km²))",
+  "CODE_NRA"               : "Identifiant NRA"
+}

+ 50 - 0
datastores.php

@@ -0,0 +1,50 @@
+<?php
+function connect(){
+
+  $link = mysql_connect('localhost','mn','fernandoalonso') or die(mysql_error());
+  mysql_select_db('MN', $link) or die(mysql_error());
+}
+
+
+function executeQuery($requete) {
+  $resultat = mysql_query($requete) or die(mysql_error());
+
+  if(substr($requete, 0, 6) === 'SELECT'){
+    while($donnees=mysql_fetch_array($resultat)){
+      $resultats[]=$donnees;
+    }
+    if (!isset($resultats)) {
+      return null;
+    }
+  }
+  else if(substr($requete, 0, 6) === 'INSERT'){
+    $resultats = mysql_insert_id();
+  }
+  else {
+    $resultats = 'ok';
+  }
+
+  return $resultats;
+}
+
+connect();
+
+if($_POST['query']) {
+  $resultat = executeQuery($_POST['query']);
+}
+
+if($_POST['mail']) {
+    // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
+     $headers  = 'MIME-Version: 1.0' . "\r\n";
+     $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
+
+     // En-têtes additionnels
+     $headers .= 'From: Manche Numérique <francoisbeaufils@free.fr>' . "\r\n";
+
+     // Envoi
+     $to=$_POST['mail']['to'];
+     mail($to, $_POST['mail']['sujet'], $_POST['mail']['message'], $headers);
+}
+
+echo json_encode($resultat);
+?>

BIN
fonts/FontAwesome.otf


BIN
fonts/Material-Design-Iconic-Font.eot


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 28 - 0
fonts/Material-Design-Iconic-Font.svg


BIN
fonts/Material-Design-Iconic-Font.ttf


BIN
fonts/Material-Design-Iconic-Font.woff


BIN
fonts/fontawesome-webfont.eot


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 196 - 0
fonts/fontawesome-webfont.svg


BIN
fonts/fontawesome-webfont.ttf


BIN
fonts/fontawesome-webfont.woff


+ 125 - 0
html/form.html

@@ -0,0 +1,125 @@
+<div class = "formulaire">
+
+  <div
+    class     = "section"
+    ng-repeat = "section in formulaires.eligibilite.sections"
+    ng-class  = "{'no-padding': !formulaires.eligibilite.sections[$index+1].visible}">
+      <div
+        class  = "section-name"
+        ng-if  = "section.visible">
+          {{section.name}}
+      </div>
+
+      <div ng-repeat = "line in section.lines">
+
+      <div
+        class = "pres-text"
+        ng-if = "line.text">
+        {{line.text}}
+      </div>
+
+      <md-content
+        layout    = "row"
+        layout-sm = "column">
+
+        <md-input-container
+          class     = "{{ctrl.id}} {{ctrl.type}} {{($last && ctrl.type === 'checkbox')? 'no-padding' : ''}}"
+          style     = "width: {{ctrl.width || '100%'}};"
+          ng-repeat = "ctrl in line.ctrls">
+
+          <label>
+
+            {{ctrl.name}}
+            <span
+              ng-if = "ctrl.require"
+              class = "form-required">
+
+              *
+            </span>
+
+            <span
+              ng-if = "ctrl.invalid && ctrl.type !== 'select'"
+              class = "form-required">
+
+              {{ctrl.msg}}
+            </span>
+            </label>
+          </label>
+
+          <!-- Type text-->
+          <input
+            ng-if     = "ctrl.type === 'text'"
+            ng-model  = "result.eligibilite[ctrl.id]"
+            ng-change = "ready ? isFormValid() : null">
+
+          <!-- Type select-->
+          <span
+            ng-if = "ctrl.type === 'select' && ctrl.invalid"
+            class = "form-required">
+
+            {{ctrl.msg}}
+          </span>
+
+          <md-select
+            ng-if     = "ctrl.type === 'select'"
+            ng-change = "ready ? isFormValid() : null"
+            ng-model  = "result.eligibilite[ctrl.id]">
+
+            <md-option
+              ng-repeat = "state in ctrl.options.categories"
+              value     = "{{state.id}}">
+
+              {{state.name}}
+            </md-option>
+          </md-select>
+
+           <!-- Type radio -->
+          <md-radio-group
+            ng-if    = "ctrl.type === 'radio'"
+            ng-model = "result.eligibilite[ctrl.id]">
+
+            <md-radio-button
+              ng-repeat = "state in ctrl.options.categories"
+              value     = "{{state.id}}"
+              class     = "md-primary">
+
+              {{state.name}}
+            </md-radio-button>
+
+            <md-radio-button
+              value     = "autre"
+              class     = "md-primary">
+
+              Autre: Préciser...
+            </md-radio-button>
+          </md-radio-group>
+
+          <!-- Type checkbox -->
+          <md-checkbox
+            ng-model   = "result.eligibilite[ctrl.id]"
+            ng-change  = "ready ? isFormValid() : null"
+            aria-label = "{{ctrl.name}}"
+            ng-if      = "ctrl.type === 'checkbox'">
+
+            {{ctrl.libelle}}
+          </md-checkbox>
+
+          <!-- Type textarea-->
+          <textarea
+            ng-if     = "ctrl.type === 'textarea'"
+            ng-model  = "result.eligibilite[ctrl.id]"
+            ng-change = "ready ? isFormValid() : null"
+            columns   = "1">
+          </textarea>
+
+          <!-- Alerte -->
+          <div
+            class = "alerte"
+            ng-if = "ctrl.options.alertes[result.eligibilite[ctrl.id]]">
+            <i class = "fa fa-exclamation-circle"></i>
+            {{ctrl.options.alertes[result.eligibilite[ctrl.id]]}}
+          </div>
+        </md-input-container>
+      </md-content>
+  </div>
+</div>

BIN
img/adsl.png


BIN
img/background.png


BIN
img/favicon.ico


BIN
img/fibre.png


BIN
img/filter.png


BIN
img/logo.png


BIN
img/mimo.png


+ 638 - 0
index.html

@@ -0,0 +1,638 @@
+<!DOCTYPE html>
+<html
+  ng-app = "application"
+  lang   = "en-US">
+
+  <head>
+
+    <!-- Page title -->
+    <title>Manche Numérique</title>
+
+    <!-- Meta tags -->
+    <meta charset = "UTF-8">
+    <meta name = "description" content = "Zeno-Labs">
+    <meta name = "keywords"    content = "HTML,CSS,JavaScript">
+    <meta name = "author"      content = "Francois Beaufils">
+
+    <!-- Angulars Material CSS using RawGit to load directly from `bower-material/master` -->
+    <link rel = "stylesheet" href = "css/angular-material.css">
+    <link rel = "stylesheet" href = "css/theme.css">
+
+    <!-- Favicon-->
+    <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
+
+    <!-- Material design CSS font http://zavoloklom.github.io/material-design-iconic-font/examples.html -->
+    <link rel="stylesheet" href="css/material-design-iconic-font.min.css">
+    <link rel="stylesheet" href="css/font-awesome.min.css">
+
+    <!-- Roboto font-->
+    <link href='http://fonts.googleapis.com/css?family=Roboto:500,300,400' rel='stylesheet' type='text/css'>
+
+    <!-- Specific CSS -->
+    <link rel = "stylesheet" href = "css/main.css">
+
+    <script type = "text/javascript" src = "https://code.jquery.com/jquery-2.1.3.min.js"></script>
+    <script type = "text/javascript" src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
+    <script type = "text/javascript" src = "js/proj4js/dist/proj4.js"></script>
+
+    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
+    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
+
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.min.js"></script>
+
+    <!-- Angular Material Dependencies -->
+    <script type = "text/javascript" src = "http://cdn.jsdelivr.net/hammerjs/2.0.4/hammer.js"></script>
+    <script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.js"></script>
+    <script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-animate.js"></script>
+    <script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-aria.js"></script>
+
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/skrollr/0.6.29/skrollr.min.js"></script>
+
+
+    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
+
+    <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
+    <link rel="stylesheet" href="css/angular.typeahead.css" />
+    <script src="js/bootstrap-typeahead.min"></script>
+    <!-- Angular Material Javascript using RawGit to load directly from `bower-material/master` -->
+    <script type = "text/javascript" src = "js/angular-material.js"></script>
+
+    <script type = "text/javascript" src = "js/angular-adaptive-detection.js"></script>
+    <script type = "text/javascript" src = "js/app.js"></script>
+  </head>
+
+  <body ng-controller = "mainController">
+
+    <div class = "title">
+
+      <div
+        class = "data-loading"
+        ng-if = "!loaded">
+
+        <md-progress-circular
+          class       = "md-warn md-hue-3"
+          md-mode     = "indeterminate"
+          md-diameter = "25">
+        </md-progress-circular>
+
+        <div class = "data-loading-txt">
+
+          Téléchargement des données...
+        </div>
+      </div>
+
+      <img
+        src      = "img/logo.png"
+        ng-if    = "loaded"
+        ng-click = "toggleResultPane()"/>
+    </div>
+
+    <div class = "address-bar">
+
+      <div class = "input-type">
+
+        <input
+          type             = "text"
+          ng-model         = "address"
+          ng-focus         = "closeRight()"
+          class            =  "typeahead"
+          options          = "typeAheadOpts"
+          datasets         = "allAdresses"
+          ng-keypress      = "($event.which === 13) ? onSubmitAddress():0"
+          autofocus/>
+      </div>
+
+      <md-button
+        aria-label = "submit"
+        ng-click = "onSubmitAddress()"
+        class    = "md-raised md-primary">
+
+        <i class = "md-search md-2x"></i>
+      </md-button>
+
+      <i class = "md-menu md-2x" ng-click = "toggleRight()"></i>
+    </div>
+
+    <md-sidenav class="md-sidenav-right md-whiteframe-z2" md-component-id="right">
+      <md-toolbar class="md-theme-light">
+        <h1 class="md-toolbar-tools">Options</h1>
+
+        <md-progress-circular
+          id          = "layer-loading"
+          class       = "md-warn md-hue-3 force-hidden"
+          md-mode     = "indeterminate"
+          md-diameter = "25">
+        </md-progress-circular>
+      </md-toolbar>
+      <md-content class="md-padding">
+
+        <div class = "section-title">
+
+          Type de vue
+        </div>
+
+        <md-radio-group ng-model="mapType">
+
+          <md-radio-button
+            value      = "Carte"
+            ng-click   = "changeMap('carte')"
+            aria-label = "Carte">Carte
+          </md-radio-button>
+
+          <br/>
+
+          <md-radio-button
+            value      = "Satellite"
+            ng-click   = "changeMap('satellite')"
+            aria-label = "Satellite">Satellite
+          </md-radio-button>
+        </md-radio-group>
+
+        <br/>
+        <br/>
+
+        <div class = "section-title">
+
+          Montrer les zones de découpages
+        </div>
+
+        <md-checkbox ng-model="view.ftth" aria-label="Fibre optique">Fibre optique</md-checkbox>
+        <br/>
+        <md-checkbox ng-model="view.mimo" aria-label="Réseau Mimo">Réseau Mimo</md-checkbox>
+        <br/>
+        <md-checkbox ng-model="view.adsl" aria-label="ADSL">ADSL</md-checkbox>
+
+      </md-content>
+    </md-sidenav>
+
+    <div id="map"></div>
+
+    <div id="result">
+
+      <div
+        layout = "row"
+        layout-margin
+        class  = "result-container">
+
+        <div
+          flex
+          flex-order = "1"
+          class      = "result-box">
+
+          <div class = "box-header">
+            <div class = "box-logo">
+
+              <img src = "img/fibre.png"/>
+            </div>
+
+            <div class = "box-title-description">
+
+              <div class = "box-title">
+
+                <span class = "solution">
+
+                  Solution n°1:
+                </span>
+                <br>
+                Fibre optique (FTTH)
+              </div>
+            </div>
+          </div>
+
+          <div
+            class    = "box-body  box-body-ftth"
+            ng-style = "{'border-color': colors.ftth}">
+
+            <div class = "box-description">
+
+              Une fibre optique est un fil en verre ou en plastique très fin qui a la propriété d'être un conducteur de la lumière et sert dans la transmission de données et de lumière. Elle offre un débit d'information nettement supérieur à celui des câbles coaxiaux et peuvent servir de support à un réseau « large bande » par lequel transitent aussi bien la télévision, le téléphone, la visioconférence ou les données informatiques.
+            </div>
+
+            <div class = "box-description-more">
+
+              <a
+                href   = "http://fr.wikipedia.org/wiki/Fibre_optique"
+                target = "_blank">
+
+                En savoir plus
+              </a>
+            </div>
+
+            <hr>
+
+            <div class = "box-eligibilite-title">
+
+              éligibilité au pré-raccordement
+
+              <span>
+
+                <span
+                  ng-if = "results.ftth.DATE_DEB_TRAV_PREV"
+                  class = "box-eligibilite-yes">
+
+                  OUI
+                </span>
+
+                <span
+                  ng-if = "!results.ftth.DATE_DEB_TRAV_PREV"
+                  class = "box-eligibilite-no">
+
+                  NON
+                </span>
+
+                <button
+                  ng-if       = "results.ftth.DATE_DEB_TRAV_PREV"
+                  type        = "button"
+                  class       = "btn btn-primary btn-lg"
+                  data-toggle = "modal"
+                  ng-click    = "initPopup()"
+                  data-target = "#mn_inscription">
+
+                  Inscription
+                </button>
+              </span>
+            </div>
+
+            <div class = "box-eligibilite">
+
+              <div
+                ng-if = "results.ftth !== undefined">
+
+                <div
+                  ng-if        = "results.ftth"
+                  style        = "margin-top: 30px;"
+                  ng-bind-html = "computeDateFtthAvailable(results.ftth.DATE_FIN_TRAV_PREV)">
+                </div>
+
+                <div
+                  class = "box-description-more"
+                  ng-if = "!results.ftth._advanced"
+                  style = "margin-bottom: 30px;">
+
+                  <a
+                    href     = ""
+                    ng-click = "results.ftth._advanced = true">
+
+                    + détails
+                  </a>
+                </div>
+
+                <div
+                  ng-if        = "results.ftth._advanced"
+                  ng-bind-html = "formatResults('ftth', results.ftth)">
+                </div>
+              </div>
+
+              <div
+                ng-if = "results.ftth === undefined"
+                class = "box-eligibilite-spinner">
+
+                <md-progress-circular class="md-warn md-hue-3" md-mode="indeterminate"></md-progress-circular>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div
+          flex
+          flex-order = "2"
+          class      = "result-box">
+
+          <div class = "box-header">
+            <div class = "box-logo">
+
+              <img src = "img/adsl.png"/>
+            </div>
+
+            <div class = "box-title-description">
+
+              <div class = "box-title">
+
+                <span class = "solution">
+
+                  Solution n°2:
+                </span>
+                <br>
+                ADSL (téléphone)
+              </div>
+            </div>
+          </div>
+
+          <div
+            class    = "box-body  box-body-adsl"
+            ng-style = "{'border-color': colors.adsl}">
+
+            <div class = "box-description">
+
+              L'ADSL est une technique de communication numérique qui permet d'utiliser une ligne téléphonique pour transmettre et recevoir des données numériques de manière indépendante du service téléphonique conventionnel via un filtre ADSL branché à la prise.
+            </div>
+
+            <div class = "box-description-more">
+
+              <a
+                href   = "http://fr.wikipedia.org/wiki/Asymmetric_Digital_Subscriber_Line"
+                target = "_blank">
+
+                En savoir plus
+              </a>
+            </div>
+
+
+            <hr>
+
+            <div class = "box-eligibilite-title">
+
+              éligibilité
+
+              <span>
+
+                <span
+                  ng-if = "results.adsl"
+                  class = "box-eligibilite-yes">
+
+                  OUI
+                </span>
+
+                <span
+                  ng-if = "!results.adsl"
+                  class = "box-eligibilite-no">
+
+                  NON
+                </span>
+              </span>
+            </div>
+
+            <div class = "box-eligibilite">
+
+              <div
+                ng-if = "results.adsl !== undefined">
+
+                <div
+                  class = "box-eligibilite-none"
+                  ng-if = "!results.adsl">
+
+                  Non éligible
+                </div>
+
+                <div
+                  class = "popup-line"
+                  ng-if = "!results.adsl._advanced && results.adsl.LEGENDE">
+
+                  <span class="popup-title">{{results.adsl.LEGENDE}}</span>
+                </div>
+
+                <div
+                  class = "box-description-more"
+                  ng-if = "!results.adsl._advanced"
+                  style = "margin-bottom: 30px;">
+
+                  <a
+                    href     = ""
+                    ng-click = "results.adsl._advanced = true">
+
+                    + détails
+                  </a>
+                </div>
+
+                <div
+                  ng-if        = "results.adsl._advanced"
+                  ng-bind-html = "formatResults('adsl', results.adsl)">
+                </div>
+              </div>
+
+              <div
+                ng-if = "results.adsl === undefined"
+                class = "box-eligibilite-spinner">
+
+                <md-progress-circular class="md-warn md-hue-3" md-mode="indeterminate"></md-progress-circular>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div
+          flex
+          flex-order = "3"
+          class      = "result-box">
+
+          <div class = "box-header">
+            <div class = "box-logo">
+
+              <img src = "img/mimo.png"/>
+            </div>
+
+            <div class = "box-title-description">
+
+              <div class = "box-title">
+
+                <span class = "solution">
+
+                  Solution n°3:
+                </span>
+                <br>
+                Réseau MiMo
+              </div>
+            </div>
+          </div>
+
+          <div
+            class    = "box-body  box-body-mimo"
+            ng-style = "{'border-color': colors.mimo}">
+
+            <div class = "box-description">
+
+              MiMo est une technique de multiplexage utilisée dans les réseaux sans fil et les réseaux mobiles permettant des transferts de données à plus longue portée et à plus grande vitesse qu’avec des antennes "classiques".
+            </div>
+
+            <div class = "box-description-more">
+
+              <a
+                href   = "http://fr.wikipedia.org/wiki/MIMO_(t%C3%A9l%C3%A9communications)"
+                target = "_blank">
+
+                En savoir plus
+              </a>
+            </div>
+
+            <hr>
+
+            <div class = "box-eligibilite-title">
+
+              éligibilité
+
+              <span>
+
+                <span
+                  ng-if = "results.mimo"
+                  class = "box-eligibilite-yes">
+
+                  OUI
+                </span>
+
+                <span
+                  ng-if = "!results.mimo"
+                  class = "box-eligibilite-no">
+
+                  NON
+                </span>
+              </span>
+            </div>
+
+            <div class = "box-eligibilite">
+
+              <div
+                ng-if = "results.mimo">
+
+                <p class="bg-warning">Votre éligibilité à la technologie MiMo est théorique. Seul le passage d'un antenniste pourra confirmer votre niveau de signal.</p>
+
+                <div>
+                Vous pouvez souscrire à une offre d'accès internet auprès de ce FAI:
+                  <p class="bg-info">
+                    <a
+                      href = "https://www.ozone.net/"
+                      target = "_blank">
+
+                      Ozone.net
+                    </a>
+                    <br/>
+                    <i class ="fa fa-phone"></i>
+                    0 973 01 1000
+                  </p>
+                </div>
+                <div
+                  class = "box-description-more"
+                  ng-if = "!results.mimo._advanced"
+                  style = "margin-bottom: 30px;">
+
+                  <a
+                    href     = ""
+                    ng-click = "results.mimo._advanced = true">
+
+                    + détails
+                  </a>
+                </div>
+
+                <div
+                  ng-if        = "results.mimo_advanced"
+                  ng-bind-html = "formatResults('mimo', results.mimo)">
+                </div>
+              </div>
+
+              <div
+                ng-if = "!results.ftth.DATE_DEB_TRAV_PREV && !results.adsl && !results.mimo">
+
+                <p class="bg-warning">Nous vous invitons à contacter les services de <a href="http://www.manchenumerique.fr" >Manche Numérique</a> qui vous indiqueront la procédure pour une connecion internet par satellite et bénéficier d'une prise en charge de l'installationdu kit satellitaire par un antenniste.</p>
+
+              </div>
+
+              <div
+                ng-if = "results.mimo === undefined"
+                class = "box-eligibilite-spinner">
+
+                <md-progress-circular class="md-warn md-hue-3" md-mode="indeterminate"></md-progress-circular>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- Modal -->
+    <div
+      class          = "modal fade"
+      id             = "mn_inscription"
+      tabindex       = "-1"
+      role           = "dialog"
+      aria-labelledby="mn_inscriptionLabel">
+
+      <div
+        class = "modal-dialog"
+        role  = "document">
+
+        <div class = "modal-content">
+
+          <div class = "modal-header">
+
+            <button
+              type         = "button"
+              class        = "close"
+              data-dismiss = "modal"
+              aria-label   = "Close">
+
+              <span aria-hidden = "true">&times;</span>
+            </button>
+
+            <h4
+              class = "modal-title"
+              id    = "mn_inscriptionLabel">
+
+              FORMULAIRE DE DEMANDE DE PRÉ-RACCORDEMENT À LA FIBRE OPTIQUE
+            </h4>
+          </div>
+
+          <div class = "modal-body">
+
+            <div ng-if = "!postForm">
+
+              Vous souhaitez être pré-raccordé au réseau de fibre optique, nous vous remercions de bien vouloir compléter ce formulaire. Après vérification de votre demande, Manche Numérique se chargera de transmettre votre demande ainsi que vos coordonnées à l’entreprise en charge des travaux de pré-raccordement pour une prise de rendez-vous.
+            </div>
+
+            <div
+              class      = "mn-form"
+              ng-if      = "!postForm"
+              ng-include = "'./html/form.html'">
+
+            </div>
+
+            <div
+              class      = "mn-form-in-progress"
+              ng-if      = "postForm.inProgress">
+
+                <i class="fa fa-circle-o-notch fa-spin"></i>
+                <br/>
+                Enregistrement en cours...
+            </div>
+
+            <div
+              class      = "mn-form-error"
+              ng-if      = "postForm.error">
+
+                <i class="fa fa-exclamation-circle"></i>
+                <br/>
+                Error: {{postForm.error}}
+            </div>
+
+            <div
+              class      = "mn-form-ok"
+              ng-if      = "postForm.ok">
+
+                <i class="fa fa-check-circle-o"></i>
+                <br/>
+                Votre demande a bien été prise en compte. Un mail de confirmation vous a été envoyé.
+            </div>
+          </div>
+
+          <div class = "modal-footer">
+
+            <button
+              type         = "button"
+              class        = "btn btn-default"
+              data-dismiss = "modal">
+
+              Fermer
+            </button>
+
+            <button
+              type        = "button"
+              ng-if       = "!postForm"
+              ng-click    = "ready = true; isFormValid() ? postFormEl() : null"
+              class       = "btn btn-primary">
+
+              Valider
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>

+ 139 - 0
js/angular-adaptive-detection.js

@@ -0,0 +1,139 @@
+(function () {
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name adaptive.detection
+ *
+ * @description
+ * The main module which holds everything together.
+ */
+var adaptive = angular.module('adaptive.detection', []);
+
+/**
+ * @ngdoc object
+ * @name adaptive.detection.$detectionProvider
+ *
+ * @description
+ * The `$detectionProvider` provides an interface to configure `$detection service for
+ * runtime.
+ */
+adaptive.provider('$detection', [function() {
+
+  this.userAgent = navigator.userAgent;
+
+  /**
+   * @ngdoc function
+   * @name adaptive.detection.$detectionProvider#setUserAgent
+   * @methodOf adaptive.detection.$detectionProvider
+   *
+   * @description
+   * Let's you configure a custom User Agent string during your apps configuration.
+   *
+   * <pre>
+   * var app = angular.module('myApp', ['adaptive.detection']);
+   *
+   * app.config(['$detectionProvider', function ($detectionProvider) {
+   *   // sets custom User Agent
+   *   $detectionProvider.setUserAgent('angular browser');
+   * }]);
+   * </pre>
+   *
+   * @param {string} Custom User Agent string
+   */
+  this.setUserAgent = function(userAgent) {
+    this.userAgent = userAgent;
+  };
+
+  /**
+   * @ngdoc object
+   * @name adaptive.detection.$detection
+   *
+   * @description
+   * The `$detection` service can be injected anywhere in your app during runtime like
+   * every other service. It provides methods to detect wheter a the current client is
+   * for example and iOS device or an Android device.
+   *
+   * You are also able to retreive the current User Agent using this service.
+   */
+  this.$get = function() {
+    var userAgent = this.userAgent;
+
+    return {
+
+      /**
+       * @ngdoc function
+       * @name adaptive.detection.$detection#getUserAgent
+       * @methodOf adaptive.detection.$detection
+       *
+       * @description
+       * Returns the current User Agent which was set with `$detectionProvider.setUserAgent'.
+       *
+       * @return {string} userAgent
+       */
+      getUserAgent: function(){
+        return userAgent;
+      },
+
+      /**
+       * @ngdoc function
+       * @name adaptive.detection.$detection#isiOS
+       * @methodOf adaptive.detection.$detection
+       *
+       * @description
+       * Returns true if current device is an iOS device.
+       *
+       * @return {bool}
+       */
+      isiOS: function(){
+        return (/(iPad|iPhone|iPod)/gi).test(userAgent);
+      },
+      /**
+       * @ngdoc function
+       * @name adaptive.detection.$detection#isAndroid
+       * @methodOf adaptive.detection.$detection
+       *
+       * @description
+       * Returns true if current device is an Android device.
+       *
+       * @return {bool}
+       */
+      isAndroid: function(){
+        return (/(Android)/gi).test(userAgent);
+      },
+      /**
+       * @ngdoc function
+       * @name adaptive.detection.$detection#isWindowsPhone
+       * @methodOf adaptive.detection.$detection
+       *
+       * @description
+       * Returns true if current device is a Windows Phone device.
+       *
+       * @return {bool}
+       */
+      isWindowsPhone: function(){
+        return (/(IEMobile)/gi).test(userAgent);
+      },
+      /**
+       * @ngdoc function
+       * @name adaptive.detection.$detection#isBB10
+       * @methodOf adaptive.detection.$detection
+       *
+       * @description
+       * Returns true if current device is a BlackBerry 10 device.
+       *
+       * @return {bool}
+       */
+      isBB10: function(){
+        return (/(BB10)/gi).test(userAgent);
+      },
+
+      isMobile: function(){
+        return this.isiOS() || this.isAndroid() || this.isBB10() || this.isWindowsPhone();
+      }
+    };
+  };
+
+}]);
+
+})();

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 21316 - 0
js/angular-material.js


+ 1214 - 0
js/app.js

@@ -0,0 +1,1214 @@
+// file:///Users/francoisbeaufils/Downloads/geocoder-demo-master/index.html
+var app = angular.module('application', ['ngMaterial', 'adaptive.detection']);
+
+app.directive('skrollr', function() {
+  var directiveDefinitionObject = {
+    link: function() {
+      skrollr.init();
+    }
+  };
+
+  return directiveDefinitionObject;
+});
+
+
+app.controller('mainController', function($scope, $detection, $http, $mdSidenav, $timeout, $sce, $mdToast) {
+  $scope.title   = "Manche Numerique";
+
+  var nbJoursFTTH = 300,
+      siteName    = 'Eligibilité Manche Numérique',
+      siteUrl     = 'http://eligibilite.manchenumerique.fr',
+      siteEmail   = 'ffth@manchenumerique.fr',
+      siteAddresse= '235, rue Joseph Cugnot Zone Delta, 50000 SAINT LÔ';
+
+  var catTypeVoie = [
+    {
+      "name": "Allée",
+      "id"  : "allee"
+    },
+    {
+      "name": "Avenue",
+      "id"  : "avenue"
+    },
+    {
+      "name": "Boulevard",
+      "id"  : "boulevard"
+    },
+    {
+      "name": "Carrefour",
+      "id"  : "carrefour"
+    },
+    {
+      "name": "Chemin",
+      "id"  : "chemin"
+    },
+    {
+      "name": "Cité",
+      "id"  : "cite"
+    },
+    {
+      "name": "Hammeau",
+      "id"  : "hammeau"
+    },
+    {
+      "name": "Impasse",
+      "id"  : "impasse"
+    },
+    {
+      "name": "Lieu-dit",
+      "id"  : "lieu_dit"
+    },
+    {
+      "name": "Lotissement",
+      "id"  : "lotissement"
+    },
+    {
+      "name": "Place",
+      "id"  : "place"
+    },
+    {
+      "name": "Résidence",
+      "id"  : "residence"
+    },
+    {
+      "name": "Route",
+      "id"  : "route"
+    },
+    {
+      "name": "Rue",
+      "id"  : "rue"
+    },
+    {
+      "name": "Villa",
+      "id"  : "villa"
+    },
+    {
+      "name": "Village",
+      "id"  : "village"
+    }
+  ];
+
+  var catVousEtes = [
+    {
+      "name": "Locataire de ce logement",
+      "id"  : "locataire"
+    },
+    {
+      "name": "Occupant à titre gratuit de ce logement",
+      "id"  : "occupant_gratuit"
+    },
+    {
+      "name": "Propriétaire de ce logement",
+      "id"  : "proprietaire"
+    }
+  ];
+
+  var catCeLogementEst = [
+    {
+      "name": "Votre résidence principale",
+      "id"  : "residence_principale"
+    },
+    {
+      "name": "Votre résidence secondaire",
+      "id"  : "residence_secondaire"
+    }
+  ];
+
+  $scope.formulaires = {
+    "eligibilite": {
+      "sections": [
+        {
+          "name": "Générale",
+          "visible": false,
+          "lines": [
+            {
+              "ctrls": [
+                {
+                  "name"   : "Prénom",
+                  "id"     : "prenom",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": true,
+                  "isValid": function(value) {
+                    return !!value && value.length > 2;
+                  },
+                  "msg"    : 'Prénom invalide'
+                },
+                {
+                  "name"   : "Nom",
+                  "id"     : "nom",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": true,
+                  "isValid": function(value) {
+                    return !!value && value.length > 2;
+                  },
+                  "msg"    : 'Nom invalide'
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Email",
+                  "id"     : "email",
+                  "type"   : "text",
+                  "width"  : null,
+                  "require": true,
+                  "isValid": function(value) {
+                    function validateEmail(email) {
+                        var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
+                        return re.test(email);
+                    }
+                    return validateEmail(value);
+                  },
+                  "msg"    : 'Email invalide.'
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Téléphone fixe",
+                  "id"     : "telephone_fixe",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": false
+                },
+                {
+                  "name"   : "Téléphone portable",
+                  "id"     : "telephone_portable",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": false
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "Adresse",
+          "visible": true,
+          "lines": [
+            {
+              "ctrls": [
+                {
+                  "name"   : "Numero",
+                  "id"     : "numero_voie",
+                  "type"   : "text",
+                  "width"  : "80px",
+                  "require": false
+                },
+                {
+                  "name"   : "Type voie",
+                  "id"     : "type_voie",
+                  "type"   : "select",
+                  "width"  : "106px",
+                  "require": false,
+                  "options": {
+                    "categories": catTypeVoie
+                  }
+                },
+                {
+                  "name"   : "Nom voie",
+                  "id"     : "nom_voie",
+                  "type"   : "text",
+                  "width"  : "378px",
+                  "require": true,
+                  "isValid": function(value) {
+                    return !!value;
+                  },
+                  "msg"    : 'Nom de voie invalide.'
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Complément Adresse",
+                  "id"     : "complement_addresse",
+                  "type"   : "textarea",
+                  "width"  : null,
+                  "require": false
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Bâtiment",
+                  "id"     : "batiment",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": false
+                },
+                {
+                  "name"   : "Cage escalier",
+                  "id"     : "cage_escalier",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": false
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Etage / Niveau",
+                  "id"     : "etage",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": false
+                },
+                {
+                  "name"   : "Numero appartement / porte",
+                  "id"     : "numero_appartement",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": false
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Code postal",
+                  "id"     : "code_postal",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": true,
+                  "isValid": function(value) {
+                    if(!value || value.length !== 5 || isNaN(parseInt(value, 10))) {
+                      return false;
+                    }
+                    return true;
+                  },
+                  "msg"    : 'Non valide'
+                },
+                {
+                  "name"   : "Ville",
+                  "id"     : "ville",
+                  "type"   : "text",
+                  "width"  : "50%",
+                  "require": true,
+                  "isValid": function(value) {
+                    return !!value && value.length > 2;
+                  },
+                  "msg"    : 'Ville invalide.'
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "Logement",
+          "visible": true,
+          "lines": [
+            {
+              "ctrls": [
+                {
+                  "name"   : "Vous êtes",
+                  "id"     : "vous_etes",
+                  "type"   : "radio",
+                  "width"  : null,
+                  "require": true,
+                  "options": {
+                    "categories": catVousEtes,
+                    "alertes": {
+                      "locataire": "Si vous êtes locataire, vous devez impérativement avertir votre propriétaire que vous souhaitez bénéficier du pré-raccordement à la fibre optique."
+                    }
+                  },
+                  "isValid": function(value) {
+                    return !!value;
+                  },
+                  "msg"    : 'Vous devez sélectionner une entrée.'
+                }
+              ]
+            },
+            {
+              "ctrls": [
+                {
+                  "name"   : "Ce logement est",
+                  "id"     : "ce_logement_est",
+                  "type"   : "radio",
+                  "width"  : null,
+                  "require": true,
+                  "options": {
+                    "categories": catCeLogementEst
+                  },
+                  "isValid": function(value) {
+                    return !!value;
+                  },
+                  "msg"    : 'Vous devez sélectionner une entrée.'
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "Conditions pour le raccordement final d’abonné dans un immeuble individuel",
+          "visible": true,
+          "lines": [
+            {
+              "text": "Le Syndicat Mixte Manche Numérique, composé du Département de la Manche et des Etablissements Publics de Coopération Intercommunale (EPCI) du département, a pour mission l'aménagement numérique du territoire manchois, du point de vue tant des réseaux que du développement des usages du numérique.\r\nDans ce cadre, Manche Numérique a élaboré un Schéma Directeur Territorial d'Aménagement Numérique (SDTAN), qui vise une couverture FTTH (fibre optique jusqu’à l’abonné) universelle du département. Le SDTAN prévoit ainsi le déploiement d’un réseau de communications électroniques à très haut débit FTTH sur le territoire de la Manche.\r\nManche Numérique assurera le déploiement de ce réseau public sous sa maîtrise d’ouvrage. S’agissant de l’exploitation du réseau, celle-ci sera confiée à un délégataire de service public désigné par Manche Numérique à l’issue d’une procédure de mise en concurrence. Le futur gestionnaire du réseau aura en charge notamment sa commercialisation auprès des opérateurs de communications électroniques (les fournisseurs d’accès à internet), qui eux-mêmes délivreront des services de communications électroniques aux utilisateurs finals (les abonnés).\r\nDans le cadre du déploiement de ce réseau, Manche Numérique réalise sous sa maîtrise d’ouvrage des raccordements finals d’abonnés au futur réseau, qui seront ensuite remis au futur délégataire de service public en vue de leur gestion.\r\nC’est dans ce contexte que Manche Numérique propose aux intéressés qui le souhaitent, de faire d’ores et déjà raccorder leur logement ou local à usage professionnel, au futur réseau de communications électroniques à très haut débit FTTH.",
+              "ctrls": [
+                  {
+                    "name"   : "Accord",
+                    "id"     : "accord",
+                    "libelle": "Je souhaite être pré-raccordé au réseau de fibre optique et accepte les conditions de paiement de 50€. IMPORTANT : le règlement ne vous sera demandé qu’après travaux effectués",
+                    "type"   : "checkbox",
+                    "width"  : null,
+                    "require": true,
+                    "isValid": function(value) {
+                      return !!value;
+                    },
+                    "msg"    : 'Vous devez doner votre accord.'
+                  }
+               ]
+            }
+          ]
+        },
+        {
+          "name": "Informatique et libertés",
+          "visible": false,
+          "lines": [
+            {
+              "ctrls": [
+                  {
+                    "name"   : "Informatique et libertés",
+                    "id"     : "info_et_libertes",
+                    "libelle": 'La personne responsable du traitement de la présente demande de pré-raccordement est le représentant du Syndicat Mixte Manche Numérique, le Président, Monsieur Serge DESLANDES. Les informations portées sur ce formulaire sont obligatoires. Elles font l’objet d’un traitement informatisé destiné au raccordement final de l’usager à la fibre optique (FTTH) ainsi qu’à l’exploitation du réseau optique. Les destinataires des données sont : le Syndicat Mixte Manche Numérique, les entreprises en charge de réaliser les travaux de raccordement, ainsi que l’exploitant du réseau optique. Conformément à la loi "informatique et libertés" du 6 janvier 1978 modifiée, vous bénéficiez d’un droit d’accès, de rectification aux informations qui vous concernent, d’opposition au traitement de vos données personnelles. Si vous souhaitez exercer ce droit et obtenir communication des informations vous concernant, veuillez-vous adresser au Syndicat Mixte Manche Numérique ftth@manchenumerique.fr. Dans l’hypothèse où le présent formulaire est incomplet et/ou illisible, la présente demande de raccordement ne sera pas traitée.',
+                    "type"   : "checkbox",
+                    "width"  : null,
+                    "require": true,
+                    "isValid": function(value) {
+                      return !!value;
+                    },
+                    "msg"    : 'Vous devez accepter.'
+                  }
+               ]
+            }
+          ]
+        }
+      ]
+    }
+  };
+
+
+  $scope.closeRight = function() {
+    $mdSidenav('right').close().then(function(){});
+  };
+
+  $scope.toggleRight = function() {
+    $mdSidenav('right').toggle()
+    .then(function(){});
+  };
+
+  var stlo = [49.1154686, -1.0828136000000086];
+
+  var map = L.map('map', {zoomControl:false}).setView(stlo, 9);
+
+  map.on('dblclick', function(e) {
+    var p = e.latlng;
+    console.log('click', e.latlng); // e is an event object (MouseEvent in this case)
+    $scope.geoCode = {
+      x: p.lng,
+      y: p.lat
+    };
+    addCurrentMarker();
+    $scope.showResultPane();
+    getResults();
+  });
+
+  //http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
+  //http://{s}.api.cartocdn.com/base-light/{z}/{x}/{y}.png
+  //http://{s}.api.cartocdn.com/base-flatblue/{z}/{x}/{y}.png
+  //http://{s}.api.cartocdn.com/base-dark/{z}/{x}/{y}.png
+  //http://{s}.tile.osm.org/{z}/{x}/{y}.png
+  //http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/14/5616/8137
+
+  var maps = {
+    "carte"     : 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',
+    "satellite" : 'http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'
+  };
+
+  var cLayer = L.tileLayer(maps.carte, {
+      attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
+      maxZoom: 18
+  }).addTo(map);
+
+  var styleOpts = {
+    color    : 'red',
+    fillColor: 'red',
+    weight   : 8
+  };
+
+  $scope.data = {};
+
+  var parseData = function(identifier, data, style, properties) {
+    var getPolygonsCoord = function(type, coord) {
+      var result = [];
+      if(type === 'Polygon') {
+        result.push(_.map(coord[0], function(r) {return [r[1], r[0]];}));
+      }
+      if(type === 'MultiPolygon') {
+        var p = [];
+        _.each(coord, function(c) {
+          result.push(_.map(c[0], function(r) {return [r[1], r[0]];}));
+        });
+
+      }
+      return result;
+    };
+
+    var records = [];
+    _.each(data.features, function(r) {
+      var record = r.properties;
+      var polygons = getPolygonsCoord(r.geometry.type, r.geometry.coordinates);
+      record._coordinates = r.geometry.coordinates;
+      record._type        = r.geometry.type;
+      record._polygons    = polygons;
+      record._style       = style;
+      record._properties  = properties;
+      records.push(record);
+    });
+    $scope.data[identifier] = records;
+  };
+
+  var isDate = function(value) {
+    return (value.toString().length === 14 && value.toString().substring(0,2) === "20");
+  };
+
+  var formatDate = function(value) {
+    return moment(value.toString().substr(0,4) + '-' + value.toString().substr(4,2) + '-' + value.toString().substr(6,2)).locale("fr");
+  };
+
+  $scope.getHtmlContent = function(identifier, record) {
+
+    var title = record._properties.name.string ? record._properties.name.string : record[record._properties.name.key];
+
+    // Tooltip content
+    var tooltip = '<div class="popup-line"><span class="popup-title">' + title +'</span></div>' +
+                  '<hr>';
+
+    _.each(record, function(value, property) {
+      if(property.charAt(0) === '_' ||
+         (record._properties.hidden && record._properties.hidden.indexOf(property) !== -1) ||
+         record._properties.name.key === property ||
+         value === null |
+         typeof value === 'undefined') {
+
+        return;
+      }
+
+      var label = $scope.dictionary[property] || property;
+
+      value = $scope.dictionary[value] || value;
+
+      var date;
+      if(property.substring(0, 5) === 'DATE_' && !$scope.dictionary[value] && isDate(value)) {
+        date = formatDate(value);
+      }
+      tooltip += '<div class="popup-line"><div class="popup-label">' + label + '</div><div class="popup-value">' + (date ? date.locale("fr").format('ddd, LL') : value) + '</div><div class="popup-small-date">' + (date ? date.locale("fr").fromNow() : '') + '</div></div>';
+    });
+
+    return tooltip;
+  };
+
+  $scope.formatResults = function(identifier, results) {
+    return $sce.trustAsHtml($scope.getHtmlContent(identifier, results));
+  };
+
+  $scope.computeDateFtthAvailable = function(date) {
+    if(!date) {return;}
+    var momentDate = formatDate(date);
+
+    momentDate.add(nbJoursFTTH, 'days');
+
+    var result =  '<div class="popup-line"><div class="box-eligibilite-title">Date prévisionnelle abonnement FTTH</div><div style="font-weight: bold;" class="popup-value">' + momentDate.locale("fr").format('ddd, LL') + '</div><div class="popup-small-date">' + momentDate.locale("fr").fromNow() + '</div></div>';
+    return $sce.trustAsHtml(result);
+  };
+
+  var layer = {};
+  $scope.computeLayer = function(identifier) {
+    var Lpolygons = [];
+    _.each($scope.data[identifier], function(record) {
+
+      _.each(record._polygons, function(polygon) {
+        Lpolygons.push(L.polygon(polygon, record._style).bindPopup($scope.getHtmlContent(identifier, record)));
+      });
+    });
+    layer[identifier] = L.layerGroup(Lpolygons);
+  };
+
+  $scope.showLayer = function(identifier) {
+    map.addLayer(layer[identifier]);
+  };
+
+  $scope.hideLayer = function(identifier) {
+    map.removeLayer(layer[identifier]);
+  };
+
+  $scope.colors = {
+    "ftth": "#8cc474", // green
+    "mimo": "#f9b256", // orange
+    "adsl": "#76a7fa"  // blue
+  };
+
+  $http({method: 'POST', url: 'data/dictionary.json'}).success(function(data) {
+    $scope.dictionary = data;
+  });
+
+  $http({method: 'POST', url: 'data/Contour_Manche.json'}).success(function(data) {
+
+    var style = {
+      color    : 'blue',
+      fillColor: 'blue',
+      weight   : 2
+    };
+    $scope.data.manche = [{
+      _polygons   : [data.features[0].geometry.coordinates[0]],
+      _style      : style,
+      _properties : {
+        name : {string: 'Manche'}
+      }
+    }];
+
+    var mancheCoordinates = data && data.features && data.features[0] &&  data.features[0].geometry && data.features[0].geometry.coordinates && data.features[0].geometry.coordinates[0]; // response data
+    _.each(mancheCoordinates, function(c, i) {
+      mancheCoordinates[i] = [c[1], c[0]];
+    });
+
+    // Rectangle coordinates around Manche
+    //var mancheCoordinates = [[49.732307856286, -1.97117692088061],[48.4, -1.75],[48.4, -0.5],[49.732307856286, -1.2]];
+
+    // Debug: show manche limits
+    //L.polygon(mancheCoordinates, {color: 'blue', fillColor: 'blue',weight: 8}).addTo(map);
+
+    var searchExtent = {
+      "xmin" : _.max(_.map(mancheCoordinates, function(c) {return c[1];})),
+      "ymin" : _.max(_.map(mancheCoordinates, function(c) {return c[0];})),
+      "xmax" : _.min(_.map(mancheCoordinates, function(c) {return c[1];})),
+      "ymax" : _.min(_.map(mancheCoordinates, function(c) {return c[0];})),
+      "spatialReference" : {"wkid" : 84}
+    };
+
+    var suggestURL = 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/suggest?f=pjson&searchExtent=' + JSON.stringify(searchExtent);
+    var findURL    = 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find?f=pjson&searchExtent=' + JSON.stringify(searchExtent);
+
+    $('.address-bar input').typeahead({
+      onSelect: function(item) {
+        $scope.address  = item.text;
+        var suggestion  = _.find($scope.suggestions, {text: item.text});
+        $scope.magicKey = suggestion && suggestion.magicKey;
+        $scope.$evalAsync();
+        $scope.onSubmitAddress();
+      },
+      ajax: {
+        url: suggestURL,
+        timeout: 500,
+        displayField: "text",
+        triggerLength: 1,
+        method: "get",
+        loadingClass: "loading-circle",
+        preDispatch: function (query) {
+          var q = query;
+          $('.typeahead.dropdown-menu').hide();
+          $scope.suggestions = null;
+          return {
+              text: q
+          };
+        },
+        valueField: 'suggestions',
+        preProcess: function (data) {
+          console.log('suggestions', data && data.suggestions);
+
+          $scope.suggestions = data.suggestions;
+          $scope.magicKey = null;
+          return data.suggestions;
+        }
+      }
+    });
+
+    $scope.getGeoCode = function(address, magicKey, callback) {
+      getGeoCodeInProgress = true;
+      var url = findURL + "&text=" + address + ((magicKey) ? ("&magicKey=" + magicKey) : ', Basse-Normandie, France');
+      console.log('url', url);
+      $.get(
+      url,
+      function(data, status) {
+        data = JSON.parse(data);
+
+        if (status === 'success' && data.locations[0]) {
+
+          if(data.locations[0].extent.xmax < searchExtent.xmin &&
+            data.locations[0].extent.xmax > searchExtent.xmax &&
+            data.locations[0].extent.xmin > searchExtent.xmax&&
+            data.locations[0].extent.xmin > searchExtent.xmax) {
+
+            getGeoCodeInProgress = false;
+            return callback(null, data);
+          }
+          getGeoCodeInProgress = false;
+          callback('No result for ' + address);
+        } else {
+          getGeoCodeInProgress = false;
+          callback(status !== 'success' ? status : 'No result for ' + address);
+        }
+      });
+    };
+  });
+
+  console.time('FTTH data');
+  $http({method: 'POST', url: 'data/FFTH_zapm_partielle.json'}).success(function(data) {
+    var style = {
+      color    : $scope.colors.ftth,
+      fillColor: $scope.colors.ftth,
+      weight   : 2
+    };
+
+    var properties = {
+      name  : {key: 'ATD'},
+      hidden: ['ID_PM', 'MARCHE', 'ID_FT_ADSL', 'ID_FTTH_MN_ZAPM_PARTIELLE', 'ID_ZAPM_PARTIELLE', 'ID_ZAPM'],
+      position: ['DATE_DEB_TRAV_PREV']
+    };
+
+    parseData('ftth', data, style, properties);
+    console.timeEnd('FTTH data');
+    console.debug('Data for FTTH are ready', data);
+    if($scope.data.mimo && $scope.data.adsl && $scope.data.ftth) {
+      $scope.loaded = true;
+    }
+    $scope.$evalAsync();
+  });
+
+  console.time('ADSL data');
+  $http({method: 'POST', url: 'data/TEL_FT_ADSL.json'}).success(function(data) {
+    var style = {
+      color    : $scope.colors.adsl,
+      fillColor: $scope.colors.adsl,
+      weight   : 2
+    };
+
+    var properties = {
+      name  : {key: 'LEGENDE'},
+      hidden: ['NATURE', 'NRA_CETE', 'NRA_TMP', 'NRA_DPT', 'ID_FT_ADSL']
+    };
+
+    parseData('adsl', data, style, properties);
+    console.timeEnd('ADSL data');
+    console.debug('Data for ADSL are ready', data);
+    if($scope.data.mimo && $scope.data.adsl && $scope.data.ftth) {
+     $scope.loaded = true;
+    }
+    $scope.$evalAsync();
+  });
+
+  console.time('MiMo data');
+  $http({method: 'POST', url: 'data/Couverture_mimo.json'}).success(function(data) {
+    var style = {
+      color    : $scope.colors.mimo,
+      fillColor: $scope.colors.mimo,
+      weight   : 2
+    };
+
+    var properties = {
+      name  : {string: 'Couverture MiMo'},
+      hidden: ['ID_MIMO_COUVERTURE']
+    };
+
+    parseData('mimo', data, style, properties);
+    console.timeEnd('MiMo data');
+    console.debug('Data for MIMO are ready', data);
+    if($scope.data.mimo && $scope.data.adsl && $scope.data.ftth) {
+     $scope.loaded = true;
+    }
+    $scope.$evalAsync();
+  });
+
+  window.map = map;
+
+  var getGeoCodeInProgress = false;
+
+
+  var isInside = function(polygon, point) {
+    // ray-casting algorithm based on
+    // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
+
+    var y = point.x ? point.x : point[0],
+        x = point.y ? point.y : point[1];
+
+    var inside = false;
+    for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
+        var xi = polygon[i][0], yi = polygon[i][1];
+        var xj = polygon[j][0], yj = polygon[j][1];
+
+        var intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
+
+        if (intersect) {
+          inside = !inside;
+        }
+    }
+
+    return inside;
+  };
+
+  var getRecordsFor = function(identifier, coordinates) {
+    var records = [];
+    _.each($scope.data[identifier], function(record) {
+      _.some(record._polygons, function(polygon) {
+        if(isInside(polygon, coordinates)) {
+          records.push(record);
+          return true;
+        }
+      });
+    });
+
+
+
+    // Debug
+    var debug = false;
+    if (debug) {
+      var colors = ['red', 'green', 'blue', 'black', 'silver', 'yellow'];
+
+      var marker = L.marker([coordinates.y, coordinates.x]).addTo(map);
+      var Lpolygons = [];
+      _.each(records, function(record, i) {
+        var style = {
+          color    : colors[i],
+          fillColor: colors[i],
+          weight   : 4
+        };
+        _.each(record._polygons, function(polygon) {
+          Lpolygons.push(L.polygon(polygon, style).bindPopup($scope.getHtmlContent(identifier, record)));
+        });
+      });
+      L.layerGroup(Lpolygons).addTo(map);
+    }
+    return records;
+  };
+
+  $scope.showResultPane = function() {
+    $('#result').animate({height: ($('body').height() / 2) + 'px'}, 1000);
+
+    $('#map').animate({
+      height: ($('body').height() / 2) + 'px',
+    }, 1000, function() {
+
+      // Animation complete.
+      map.invalidateSize();
+      map.setView(new L.LatLng($scope.geoCode.y, $scope.geoCode.x), 14);
+    });
+  };
+
+  $scope.isFormValid = function() {
+
+    if(!$scope.result || !$scope.result.eligibilite) {return;}
+
+    var isValid = true;
+    _.each($scope.formulaires.eligibilite.sections, function(section) {
+      _.each(section.lines, function(line) {
+        _.each(line.ctrls, function(ctrl) {
+          ctrl.invalid = false;
+          if(ctrl.require && !ctrl.isValid($scope.result.eligibilite[ctrl.id])) {
+            isValid = false;
+            ctrl.invalid = true;
+          }
+        });
+      });
+    });
+
+    return isValid;
+  };
+
+  $scope.hideResultPane = function() {
+    if(!$('#result').height()) {return;}
+    $('#result').animate({height: 0}, 1000);
+
+    $('#map').animate({
+      height: $('body').height(),
+    }, 1000, function() {
+
+      // Animation complete.
+      map.invalidateSize();
+      var centerPoint = $scope.geoCode ? new L.LatLng($scope.geoCode.y, $scope.geoCode.x) : stlo;
+      map.setView(centerPoint, 14);
+    });
+  };
+
+  var computeFullAdress = function() {
+    return $scope.result.eligibilite.complement_addresse;
+  };
+
+  var reverseLocation = function(geoCode, address, callback) {
+    var reverseGeo = 'http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode?f=pjson&distance=300';
+    var url        = reverseGeo + '&location=' + (geoCode ? $scope.geoCode.x + ',' + $scope.geoCode.y : address) ;
+    $.get(
+    url,
+    function(data, status) {
+      data = JSON.parse(data);
+      var adresse = data && data.address && data.address.Match_addr;
+
+      if(data && data.address && data.address.Address) {
+
+        var i     = 0;
+        var num   = '';
+        while(!isNaN(parseInt(data.address.Address[i], 10))) {
+          num += data.address.Address[i];
+          i++;
+        }
+        data.address.StreetNumber = num;
+        data.address.Address      = data.address.Address.substr(num.length).trim();
+
+        var typeVoie = data.address.Address.substring(0, data.address.Address.indexOf(' ')).toLowerCase();
+        type = _.find(catTypeVoie, function(c){
+          if(c.id === typeVoie || c.name.toLowerCase() === typeVoie) {
+            return true;
+          }
+        });
+        if(type) {
+          data.address.StreetType = type.id;
+          data.address.Address = data.address.Address.substr(typeVoie.length).trim();
+        }
+
+      }
+
+      if(adresse)
+      console.log('Reverse', data, '=>', data && data.address);
+      callback(adresse, data.address);
+      $scope.$evalAsync();
+    });
+  };
+
+  $scope.initPopup = function() {
+    console.log('initPopup', $scope.geoCode);
+    $scope.postForm = null;
+    reverseLocation($scope.geoCode, null, function(string, address) {
+      console.log('add', address);
+      $scope.result = {eligibilite: {}};
+
+      // Debug
+      // $scope.result.eligibilite.prenom = 'Francois';
+      // $scope.result.eligibilite.nom = 'Beaufils';
+      // $scope.result.eligibilite.email = 'francoisbeaufils@zeno-labs.com';
+      // $scope.result.eligibilite.vous_etes = 'locataire';
+      // $scope.result.eligibilite.ce_logement_est = 'residence_principale';
+      // $scope.result.eligibilite.info_et_libertes = true;
+      // $scope.result.eligibilite.accord = true;
+
+      $scope.result.eligibilite.geo_code            = JSON.stringify($scope.geoCode);
+      $scope.result.eligibilite.code_postal         = address.Postal;
+      $scope.result.eligibilite.complement_addresse = address.Match_addr;
+      $scope.result.eligibilite.nom_voie            = address.Address;
+      $scope.result.eligibilite.numero_voie         = address.StreetNumber;
+      $scope.result.eligibilite.type_voie           = address.StreetType;
+      $scope.result.eligibilite.ville               = address.City;
+    });
+  };
+
+  $scope.postFormEl = function() {
+    $scope.postForm = {inProgress: true};
+    console.log('postForm', $scope.result.eligibilite);
+    $scope.$evalAsync();
+
+    function mysql_real_escape_string (str) {
+        if(typeof str !== 'string') {return str;}
+
+        return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
+            switch (char) {
+                case "\0":
+                    return "\\0";
+                case "\x08":
+                    return "\\b";
+                case "\x09":
+                    return "\\t";
+                case "\x1a":
+                    return "\\z";
+                case "\n":
+                    return "\\n";
+                case "\r":
+                    return "\\r";
+                case "\"":
+                case "'":
+                case "\\":
+                case "%":
+                    return "\\"+char; // prepends a backslash to backslash, percent,
+                                      // and double/single quotes
+            }
+        });
+    }
+
+    var keys   = '';
+    var values = '';
+    _.each($scope.result.eligibilite, function(value, key) {
+      keys   += '`' + key + '`, ';
+      values += "'" + mysql_real_escape_string(value) + "', ";
+    });
+
+    var query = "INSERT INTO `eligibilite`.`demandes` (" + keys.substring(0, keys.length -2) + ") VALUES (" + values.substring(0, values.length -2) + ");";
+
+    console.log('query', query);
+
+    $.ajax({
+      method : "POST",
+      url    : "ajax/datastores.php",
+      data   :  {query: query}
+    })
+    .done(function( msg ) {
+
+      if(!isNaN(msg)) {
+        $scope.postForm = {ok: true};
+
+        var numDemande =  moment().format('YYYYMMDD') + msg;
+
+        var body = 'Bonjour ' + $scope.result.eligibilite.prenom + ' ' + $scope.result.eligibilite.nom + ', <br>' +
+              'Nous vous confirmons votre demande de pré-raccordement FTTH. <br><br>' +
+              'Cette demande porte le numéro: ' +
+              '<span style="color: #31708f;font-size:17px; font-weight:bold;">' + numDemande + '</span><br><br>' +
+              'Voici le détail de votre demande:' +
+              '<div style="color: #31708f;background-color: #d9edf7;border-color: #bce8f1;padding: 10px;margin: 1em;font-size:14px;">' +
+              '<table style="line-height: 40px;">';
+
+        //  _.each($scope.result.eligibilite, function(value, key) {
+        //   body += '<tr>';
+        //   body += '<th style="text-align:left;">' + key + '</th>';
+        //   body += '<td>' + value + '</td>';
+        //   body += '</tr>';
+        // });
+
+        // Numero demande
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Numéro demande</th>';
+        body += '<td>' + numDemande + '</td>';
+        body += '</tr>';
+
+        // Date demande
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Date</th>';
+        body += '<td>' + moment().lang('fr').format('LLLL') + '</td>';
+        body += '</tr>';
+
+        // Demandeur
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Demandeur</th>';
+        body += '<td>' + $scope.result.eligibilite.prenom + ' ' + $scope.result.eligibilite.nom + '</td>';
+        body += '</tr>';
+
+        // Email
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Email</th>';
+        body += '<td>' + $scope.result.eligibilite.email + '</td>';
+        body += '</tr>';
+
+        // Adresse
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Adresse</th>';
+        body += '<td>' + computeFullAdress() + '</td>';
+        body += '</tr>';
+
+        // Vous etes
+        var cat = _.find(catVousEtes, {id: $scope.result.eligibilite.vous_etes});
+        var res = cat && cat.name ? cat.name : $scope.result.eligibilite.vous_etes;
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Vous êtes</th>';
+        body += '<td>' + res + '</td>';
+        body += '</tr>';
+
+        // Ce logement est
+        var cat2 = _.find(catCeLogementEst, {id: $scope.result.eligibilite.ce_logement_est});
+        var res2 = cat2 && cat2.name ? cat2.name : $scope.result.eligibilite.ce_logement_est;
+        body += '<tr>';
+        body += '<th style="text-align: left;white-space: nowrap;height: 40px;color: #666;">Ce logement est</th>';
+        body += '<td>' + res2 + '</td>';
+        body += '</tr>';
+
+        console.log('$scope.result', $scope.result);
+
+        body += '</table></div><br>';
+
+        body += 'Conformément à la loi "informatique et libertés" du 6 janvier 1978 modifiée, vous bénéficiez d’un droit d’accès, de rectification aux informations qui vous concernent, d’opposition au traitement de vos données personnelles. Si vous souhaitez exercer ce droit et obtenir communication des informations vous concernant, merci de nous contacter :' + '<br>' +
+                '<div style="">' +
+                ' Email: ' + siteEmail + '<br>' +
+                ' Adresse: ' + siteAddresse + '<br>' +
+                '</div><br><br>';
+
+        body += 'A bientôt sur:  <a href="' + siteUrl + '">' + siteName + '</a>';
+
+        var mail = {
+          to     : $scope.result.eligibilite.email,
+          sujet  : 'Votre demande de pré-raccordement FTTH n° ' + numDemande,
+          message: body
+        };
+
+        $.ajax({
+          method : "POST",
+          url    : "ajax/datastores.php",
+          data   :  {mail: mail}
+        })
+        .done(function( msg ) {
+          console.log('Mail result', msg);
+        });
+
+        $scope.result.eligibilite = {};
+      }
+      else {
+        $scope.postForm = {error: msg};
+      }
+      $scope.$apply();
+    });
+  };
+
+  $scope.toggleResultPane = function() {
+    if($('#result').height()) {
+      return $scope.hideResultPane();
+    }
+    if($scope.results && $scope.results.ftth) {
+      return $scope.showResultPane();
+    }
+  };
+
+  var parseResults = function(records) {
+    if(!records.length) {
+      return null;
+    }
+    if(records.length === 1) {
+      return records[0];
+    }
+    var result = records[0];
+    return result;
+  };
+
+  var currentMarker;
+
+  var ariaz = function(address, callback) {
+    var url = 'http://www.eligibilite-adsl.com/testXmlAriase.php?ip=80.13.25.43&insee=35238&rivoli=8993&numeroVoie=2&complementNumeroVoie=';
+      $.get(
+      url,
+      function(data, status) {
+        callback(data);
+      });
+  };
+
+  var addCurrentMarker = function() {
+    if(currentMarker) {
+      map.removeLayer(currentMarker);
+    }
+    currentMarker = L.marker([$scope.geoCode.y, $scope.geoCode.x], {draggable: true}).addTo(map); //.bindPopup(data.locations[0].name).openPopup();
+
+    reverseLocation($scope.geoCode, null, function(address) {
+      $scope.address = address;
+    });
+
+    currentMarker.on('dragend', function(event) {
+      var p = currentMarker.getLatLng();
+      console.log('dragend', p);
+
+
+
+      $scope.geoCode = {
+        x: p.lng,
+        y: p.lat
+      };
+
+      reverseLocation($scope.geoCode, null, function(address) {
+        $scope.address = address;
+        ariaz(address, function(result) {
+          console.log('ariaz', result);
+        });
+        getResults();
+      });
+
+    });
+  };
+
+  var getResults = function() {
+    $scope.results = {};
+    $scope.results.ftth = parseResults(getRecordsFor('ftth', $scope.geoCode));
+    $scope.results.adsl = parseResults(getRecordsFor('adsl', $scope.geoCode));
+    $scope.results.mimo = parseResults(getRecordsFor('mimo', $scope.geoCode));
+    $scope.$evalAsync();
+  };
+
+  $scope.onSubmitAddress = function() {
+    $scope.results = null;
+
+    $scope.getGeoCode($scope.address, $scope.magicKey, function(err, data) {
+
+      $scope.geoCode = data && data.locations && data.locations[0] && data.locations[0].feature.geometry;
+      if(err) {console.error('Geocode error', err);}
+
+      var toast = toast || {
+            template: '<md-toast><i class = " md-error"></i> Oups! Aucun résultat trouvé dans la Manche pour: ' + $scope.address + '</md-toast>',
+            hideDelay: 3000,
+            position: 'bottom right'
+      };
+
+          // $mdToast.simple()
+          //   .template(')
+          //   .position('bottom right')
+          //   .hideDelay(3000);
+
+      if(err || !$scope.geoCode) {
+        $scope.hideResultPane();
+
+        $mdToast.show(toast);
+      }
+      console.log('Addresses found for', $scope.address, '=>', data, '=> Geocode:', $scope.geoCode);
+
+      if($scope.geoCode) {
+        addCurrentMarker();
+        $scope.showResultPane();
+
+        getResults();
+      }
+    });
+  };
+
+  $scope.mapType = 'Carte';
+  $scope.changeMap = function(value) {
+    console.log('Goto', value);
+    map.removeLayer(cLayer);
+    cLayer = L.tileLayer(maps[value], {
+        attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
+        maxZoom: 18
+    }).addTo(map);
+  };
+
+  $scope.view    = {};
+  $scope.isShown = {};
+  $scope.$watch('view', function(view) {
+    if(_.isEmpty(view)) {return;}
+    $('#layer-loading').removeClass('force-hidden').find('.md-inner').show();
+    setTimeout(function() {
+      _.each(view, function(value, key) {
+        if($scope.isShown[key] !== value) {
+          if(value) {
+            if(typeof $scope.isShown[key] !== 'undefined') {
+              $scope.showLayer(key);
+              $('#layer-loading').find('.md-inner').hide();
+            }
+            else {
+              $timeout(function() {
+                $scope.computeLayer(key);
+                $scope.showLayer(key);
+                $('#layer-loading').find('.md-inner').hide();
+              }, 500);
+            }
+          }
+          else {
+            $scope.hideLayer(key);
+            setTimeout(function() {
+              $('#layer-loading').find('.md-inner').hide();
+            }, 1000);
+          }
+          $scope.isShown[key] = value;
+        }
+      });
+    });
+  }, true);
+
+  $(window).resize(function() {
+    if(!$('#result').height()) {return;}
+    $scope.showResultPane();
+  });
+});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 9 - 0
js/bootstrap-typeahead.min.js


+ 7 - 0
js/proj4js/.gitignore

@@ -0,0 +1,7 @@
+*~
+node_modules
+.c9revisions
+coverage
+projs.js
+.DS_STORE
+dist

+ 11 - 0
js/proj4js/.jshintrc

@@ -0,0 +1,11 @@
+{
+  "curly": true,
+  "eqeqeq": true,
+  "latedef": "nofunc",
+  "undef": true,
+  "unused": true,
+  "trailing": true,
+  "indent": 2,
+  "browser": true,
+  "node": true
+}

+ 4 - 0
js/proj4js/.npmignore

@@ -0,0 +1,4 @@
+*~
+.c9revisions
+coverage
+projs.js

+ 4 - 0
js/proj4js/.travis.yml

@@ -0,0 +1,4 @@
+language: node_js
+
+node_js:
+  - "0.10"

+ 25 - 0
js/proj4js/AUTHORS

@@ -0,0 +1,25 @@
+Mike Adair <madair@dmsolutions.ca>
+Richard Greenwood <rich@greenwoodmap.com>
+Calvin Metcalf <calvin.metcalf@gmail.com>
+Richard Marsden (http://www.winwaed.com)
+#credit for
+#src/projCode/gnom.js
+#src/projCode/cea.js
+T. Mittan
+#credit for
+#src/projCode/eqdc.js
+#src/projCode/equi.js
+#src/projCode/merc.js
+#src/projCode/mill.js
+#src/projCode/omerc.js
+#src/projCode/ortho.js
+#src/projCode/poly.js
+#src/projCode/poly.js
+D. Steinwand
+#credit for
+#src/projCode/merc.js
+#src/projCode/laea.js
+#src/projCode/moll.js
+S. Nelson
+#credit for
+#src/projCode/moll.js

+ 110 - 0
js/proj4js/Gruntfile.js

@@ -0,0 +1,110 @@
+var projs = [
+  'tmerc',
+  'utm',
+  'sterea',
+  'stere',
+  'somerc',
+  'omerc',
+  'lcc',
+  'krovak',
+  'cass',
+  'laea',
+  'aea',
+  'gnom',
+  'cea',
+  'eqc',
+  'poly',
+  'nzmg',
+  'mill',
+  'sinu',
+  'moll',
+  'eqdc',
+  'vandg',
+  'aeqd'
+];
+module.exports = function(grunt) {
+  grunt.initConfig({
+    pkg: grunt.file.readJSON('package.json'),
+    connect: {
+      server: {
+        options: {
+          port: process.env.PORT || 8080,
+          base: '.'
+        }
+      }
+    },
+    mocha_phantomjs: {
+      all: {
+        options: {
+          reporter: "dot",
+          urls: [ //my ide requries process.env.IP and PORT
+            "http://" + (process.env.IP || "127.0.0.1") + ":" + (process.env.PORT || "8080") + "/test/amd.html",
+            "http://" + (process.env.IP || "127.0.0.1") + ":" + (process.env.PORT || "8080") + "/test/opt.html"
+          ]
+        }
+      }
+    },
+    jshint: {
+      options: {
+        jshintrc: "./.jshintrc"
+      },
+      all: ['./lib/*.js', './lib/*/*.js']
+    },
+    browserify: {
+      all: {
+        files: {
+          'dist/proj4-src.js': ['lib/index.js'],
+        },
+        options: {
+          standalone: 'proj4',
+          alias: [
+            './projs:./includedProjections'
+            ]
+        }
+      }
+    },
+    uglify: {
+      options: {
+        report: 'gzip',
+        mangle:{
+          except: ['proj4','Projection','Point']
+        },
+      },
+      all: {
+        src: 'dist/proj4-src.js',
+        dest: 'dist/proj4.js'
+      }
+    }
+  });
+  grunt.loadNpmTasks('grunt-browserify');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+  grunt.loadNpmTasks('grunt-contrib-jshint');
+  grunt.loadNpmTasks('grunt-contrib-connect');
+  grunt.loadNpmTasks('grunt-mocha-phantomjs');
+  grunt.registerTask('custom',function(){
+    grunt.task.run('browserify', 'uglify');
+    var projections = this.args;
+    if(projections[0]==='default'){
+      grunt.file.write('./projs.js','module.exports = function(){}');
+      return;
+    }
+    if(projections[0]==='all'){
+      projections = projs;
+    }
+    grunt.file.write('./projs.js',[
+      "var projs = [",
+      " require('./lib/projections/"+projections.join("'),\n\trequire('./lib/projections/")+"')",
+      "];",
+      "module.exports = function(proj4){",
+      " projs.forEach(function(proj){",
+      "   proj4.Proj.projections.add(proj);",
+      " });",
+      "}"
+    ].join("\n"));
+  });
+  grunt.registerTask('build',function(){
+    var args = this.args.length?this.args[0].split(','):['default'];
+    grunt.task.run('jshint', 'custom:'+args.join(':'));
+  });
+  grunt.registerTask('default', ['build:all', 'connect','mocha_phantomjs']);
+};

+ 29 - 0
js/proj4js/LICENSE.md

@@ -0,0 +1,29 @@
+##Proj4js -- Javascript reprojection library. 
+ 
+Authors:
+- Mike Adair madairATdmsolutions.ca
+- Richard Greenwood richATgreenwoodmap.com
+- Didier Richard didier.richardATign.fr
+- Stephen Irons stephen.ironsATclear.net.nz
+- Olivier Terral oterralATgmail.com
+- Calvin Metcalf cmetcalfATappgeo.com
+
+Copyright (c) 2014, Mike Adair, Richard Greenwood, Didier Richard, Stephen Irons, Olivier Terral and Calvin Metcalf
+
+ 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._

+ 17 - 0
js/proj4js/PUBLISHING.md

@@ -0,0 +1,17 @@
+Publishing
+===
+
+Use `tin` to update the version number in the `package.json`, `component.json` & `bower.json`.
+
+    tin -v x.y.z
+
+Then run the publish script
+
+   ./publish.sh
+
+afterwards don't forget to update the versions to be a prerelease of the next version, so if you just published 1.1.1 then:
+
+    tin -v 1.1.2-alpha
+    git add package.json component.json bower.json
+    git commit -m 'update version to 1.1.2-alpha'
+    git push origin master

+ 153 - 0
js/proj4js/README.md

@@ -0,0 +1,153 @@
+#PROJ4JS [![Build Status](https://travis-ci.org/proj4js/proj4js.svg)](https://travis-ci.org/proj4js/proj4js)
+
+Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.
+Originally a port of [PROJ.4](http://trac.osgeo.org/proj/) and [GCTCP C](http://edcftp.cr.usgs.gov/pub//software/gctpc) it is
+a part of the [MetaCRS](http://wiki.osgeo.org/wiki/MetaCRS) group of projects.
+
+##Installing
+
+Depending on your preferences
+
+```bash
+npm install proj4
+bower install proj4
+jam install proj4
+component install proj4js/proj4js
+```
+
+or just manually grab the file `proj4.js` from the [latest release](https://github.com/proj4js/proj4js/releases).
+
+if you do not want to download anything, Proj4js is also hosted on [cdnjs](http://www.cdnjs.com/libraries/proj4js) for direct use in your browser applications.
+
+##Using
+
+the basic signature is:
+
+```javascript
+proj4(fromProjection[, toProjection2, coordinates])
+```
+
+Projections can be proj or wkt strings.
+
+Coordinates may an object of the form `{x:x,y:y}` or an array of the form `[x,y]`.
+
+When all 3 arguments  are given, the result is that the coordinates are transformed from projection1 to projection 2. And returned in the same format that they were given in.
+
+```javascript
+var firstProjection = 'PROJCS["NAD83 / Massachusetts Mainland",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","26986"],AXIS["X",EAST],AXIS["Y",NORTH]]';
+var secondProjection = "+proj=gnom +lat_0=90 +lon_0=0 +x_0=6300000 +y_0=6300000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
+//I'm not going to redefine those two in latter examples.
+proj4(firstProjection,secondProjection,[2,5]);
+// [-2690666.2977344505, 3662659.885459918]
+```
+
+If only 1 projection is given then it is assumed that it is being projected *from* WGS84 (fromProjection is WGS84).
+
+```javascript
+proj4(firstProjection,[-71,41]);
+// [242075.00535055372, 750123.32090043]
+```
+
+If no coordinates are given an object with two methods is returned, its methods are `forward` which projects from the first projection to the second and `inverse` which projects from the second to the first.
+
+```javascript
+proj4(firstProjection,secondProjection).forward([2,5]);
+// [-2690666.2977344505, 3662659.885459918]
+proj4(secondProjection,firstProjection).inverse([2,5]);
+// [-2690666.2977344505, 3662659.885459918]
+```
+
+and as above if only one projection is given, it's assumed to be coming from wgs84
+
+```javascript
+proj4(firstProjection).forward([-71,41]);
+// [242075.00535055372, 750123.32090043]
+proj4(firstProjection).inverse([242075.00535055372, 750123.32090043]);
+//[-71, 40.99999999999986]
+//the floating points to answer your question
+```
+
+## Named Projections
+
+If you prefer to define a projection as a string and reference it that way, you may use the proj4.defs method which can be called 2 ways, with a name and projection:
+
+```js
+proj4.defs('WGS84', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
+```
+
+or with an array
+
+```js
+proj4.defs([
+  [
+    'EPSG:4326',
+    '+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees'],
+  [
+    'EPSG:4269',
+    '+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees'
+  ]
+]);
+```
+
+you can then do 
+
+```js
+proj4('EPSG:4326');
+```
+
+instead of writing out the whole proj definition, by default proj4 has the following projections predefined:
+
+- 'EPSG:4326', which has the following alias
+    - 'WGS84'
+- 'EPSG:4269'
+- 'EPSG:3857', which has the following aliases
+    - 'EPSG:3785'
+    - 'GOOGLE'
+    - 'EPSG:900913'
+    - 'EPSG:102113'
+
+defined projections can also be accessed through the proj4.defs function (`proj4.defs('EPSG:4326')`).
+
+proj4.defs can also be used to define a named alias:
+
+```javascript
+proj4.defs('urn:x-ogc:def:crs:EPSG:4326', proj4.defs('EPSG:4326'));
+``` 
+
+##Developing
+to set up build tools make sure you have node and grunt-cli installed and then run `npm install`
+
+to do the complete build and browser tests run
+
+```bash
+grunt
+```
+
+to run node tests run
+
+```bash
+npm test
+```
+
+to run node tests with coverage run
+
+```bash
+node test --coverage
+```
+
+to create a build with only default projections (latlon and Mercator) run 
+
+```bash
+grunt build
+```
+
+to create a build with only custom projections include a comma separated list of projections codes (the file name in 'lib/projections' without the '.js') after a colon, e.g.
+
+```bash
+grunt build:tmerc
+#includes transverse Mercator
+grunt build:lcc
+#includes lambert conformal conic
+grunt build:omerc,moll
+#includes oblique Mercator and Mollweide
+```

+ 29 - 0
js/proj4js/REFERENCES.md

@@ -0,0 +1,29 @@
+1. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological Survey
+    Professional Paper 1395 (Supersedes USGS Bulletin 1532),
+    United State Government Printing Office, Washington D.C., 1987.
+2. Snyder, John P. and Voxland, Philip M., "An Album of Map Projections",
+    U.S. Geological Survey Professional Paper 1453 ,
+    United State Government Printing Office, Washington D.C., 1989.
+3. "Cartographic Projection Procedures for the UNIX Environment-
+    A User's Manual" by Gerald I. Evenden,
+    USGS Open File Report 90-284and Release 4 Interim Reports (2003)
+4. Snyder, John P., "Flattening the Earth -
+    Two Thousand Years of Map Projections", Univ. Chicago Press, 1993
+5. Wolfram Mathworld "Gnomonic Projection"
+    http://mathworld.wolfram.com/GnomonicProjection.html
+    Accessed: 12th November 2009
+6. "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
+    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
+7. Snyder, John P., "Map Projections--A Working Manual", U.S. Geological
+    Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United
+    State Government Printing Office, Washington D.C., 1987.
+8. "Software Documentation for GCTP General Cartographic Transformation
+    Package", U.S. Geological Survey National Mapping Division, May 1982.
+9. Department of Land and Survey Technical Circular 1973/32
+    http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf
+10. OSG Technical Report 4.1
+    http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf
+11. Formules et constantes pour le Calcul pour la
+    projection cylindrique conforme à axe oblique et pour la transformation entre
+    des systèmes de référence.
+    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf

+ 24 - 0
js/proj4js/bower.json

@@ -0,0 +1,24 @@
+{
+  "name": "proj4",
+  "version": "2.3.4-alpha",
+  "description": "Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",
+  "homepage": "https://github.com/proj4js/proj4js",
+  "main": "dist/proj4.js",
+  "keywords": [
+    "gis",
+    "projections",
+    "geospatial",
+    "transform",
+    "datum"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests",
+    "almond",
+    "src"
+  ]
+}

+ 21 - 0
js/proj4js/changelog.md

@@ -0,0 +1,21 @@
+Change log
+===
+- 2.2.1: Documentation fixes and added proj4.defs('name') as an alias for proj4.defs['name'];
+
+- 2.1.4: dist folder is added back in after accidentally omitting it in 2.1.1
+
+- 2.1.3: skipped as issues with the dist folder are ironed out.
+
+- 2.1.2: added sensible defaults for false eastings/northings
+
+- 2.1.1: tweaks to how we publish it, fixes related to errors with the OSGB36 and Reseau National Belge 1972 datums, we took the first steps towards depreciating the proj4.Point class.
+
+- 2.1.0: targeted builds for projections are now supported, and internally projection creation is more modular.
+
+- 2.0.3: mgrs is broken out into it's own module loaded via npm.
+
+- 2.0.2: module common is broken up into a collection of smaller modules. 
+
+- 2.0.1: fix typo in eqc projection.
+
+- 2.0.0: we start the change log.

+ 17 - 0
js/proj4js/component.json

@@ -0,0 +1,17 @@
+{
+  "name": "proj4",
+  "version": "2.3.4-alpha",
+  "description": "Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",
+  "repo": "proj4js/proj4js",
+  "keywords": [
+    "projections",
+    "proj4",
+    "transform",
+    "crs"
+  ],
+  "license": "MIT",
+  "main": "dist/proj4.js",
+  "scripts": [
+    "dist/proj4.js"
+  ]
+}

+ 35 - 0
js/proj4js/lib/Point.js

@@ -0,0 +1,35 @@
+var mgrs = require('mgrs');
+
+function Point(x, y, z) {
+  if (!(this instanceof Point)) {
+    return new Point(x, y, z);
+  }
+  if (Array.isArray(x)) {
+    this.x = x[0];
+    this.y = x[1];
+    this.z = x[2] || 0.0;
+  }else if(typeof x === 'object'){
+    this.x = x.x;
+    this.y = x.y;
+    this.z = x.z || 0.0;
+  } else if (typeof x === 'string' && typeof y === 'undefined') {
+    var coords = x.split(',');
+    this.x = parseFloat(coords[0], 10);
+    this.y = parseFloat(coords[1], 10);
+    this.z = parseFloat(coords[2], 10) || 0.0;
+  }
+  else {
+    this.x = x;
+    this.y = y;
+    this.z = z || 0.0;
+  }
+  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');
+}
+
+Point.fromMGRS = function(mgrsStr) {
+  return new Point(mgrs.toPoint(mgrsStr));
+};
+Point.prototype.toMGRS = function(accuracy) {
+  return mgrs.forward([this.x, this.y], accuracy);
+};
+module.exports = Point;

+ 33 - 0
js/proj4js/lib/Proj.js

@@ -0,0 +1,33 @@
+var parseCode = require("./parseCode");
+var extend = require('./extend');
+var projections = require('./projections');
+var deriveConstants = require('./deriveConstants');
+
+function Projection(srsCode,callback) {
+  if (!(this instanceof Projection)) {
+    return new Projection(srsCode);
+  }
+  callback = callback || function(error){
+    if(error){
+      throw error;
+    }
+  };
+  var json = parseCode(srsCode);
+  if(typeof json !== 'object'){
+    callback(srsCode);
+    return;
+  }
+  var modifiedJSON = deriveConstants(json);
+  var ourProj = Projection.projections.get(modifiedJSON.projName);
+  if(ourProj){
+    extend(this, modifiedJSON);
+    extend(this, ourProj);
+    this.init();
+    callback(null, this);
+  }else{
+    callback(srsCode);
+  }
+}
+Projection.projections = projections;
+Projection.projections.start();
+module.exports = Projection;

+ 51 - 0
js/proj4js/lib/adjust_axis.js

@@ -0,0 +1,51 @@
+module.exports = function(crs, denorm, point) {
+  var xin = point.x,
+    yin = point.y,
+    zin = point.z || 0.0;
+  var v, t, i;
+  for (i = 0; i < 3; i++) {
+    if (denorm && i === 2 && point.z === undefined) {
+      continue;
+    }
+    if (i === 0) {
+      v = xin;
+      t = 'x';
+    }
+    else if (i === 1) {
+      v = yin;
+      t = 'y';
+    }
+    else {
+      v = zin;
+      t = 'z';
+    }
+    switch (crs.axis[i]) {
+    case 'e':
+      point[t] = v;
+      break;
+    case 'w':
+      point[t] = -v;
+      break;
+    case 'n':
+      point[t] = v;
+      break;
+    case 's':
+      point[t] = -v;
+      break;
+    case 'u':
+      if (point[t] !== undefined) {
+        point.z = v;
+      }
+      break;
+    case 'd':
+      if (point[t] !== undefined) {
+        point.z = -v;
+      }
+      break;
+    default:
+      //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName);
+      return null;
+    }
+  }
+  return point;
+};

+ 3 - 0
js/proj4js/lib/common/acosh.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return 2 * Math.log(Math.sqrt((x + 1) / 2) + Math.sqrt((x - 1) / 2));
+};

+ 6 - 0
js/proj4js/lib/common/adjust_lat.js

@@ -0,0 +1,6 @@
+var HALF_PI = Math.PI/2;
+var sign = require('./sign');
+
+module.exports = function(x) {
+  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));
+};

+ 11 - 0
js/proj4js/lib/common/adjust_lon.js

@@ -0,0 +1,11 @@
+var TWO_PI = Math.PI * 2;
+// SPI is slightly greater than Math.PI, so values that exceed the -180..180
+// degree range by a tiny amount don't get wrapped. This prevents points that
+// have drifted from their original location along the 180th meridian (due to
+// floating point error) from changing their sign.
+var SPI = 3.14159265359;
+var sign = require('./sign');
+
+module.exports = function(x) {
+  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
+};

+ 4 - 0
js/proj4js/lib/common/asinh.js

@@ -0,0 +1,4 @@
+module.exports = function(x) {
+  var s = (x >= 0 ? 1 : -1);
+  return s * (Math.log(Math.abs(x) + Math.sqrt(x * x + 1)));
+};

+ 6 - 0
js/proj4js/lib/common/asinz.js

@@ -0,0 +1,6 @@
+module.exports = function(x) {
+  if (Math.abs(x) > 1) {
+    x = (x > 1) ? 1 : -1;
+  }
+  return Math.asin(x);
+};

+ 3 - 0
js/proj4js/lib/common/atanh.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return Math.log((x - 1) / (x + 1)) / 2;
+};

+ 5 - 0
js/proj4js/lib/common/cosh.js

@@ -0,0 +1,5 @@
+module.exports = function(x) {
+  var r = Math.exp(x);
+  r = (r + 1 / r) / 2;
+  return r;
+};

+ 3 - 0
js/proj4js/lib/common/e0fn.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));
+};

+ 3 - 0
js/proj4js/lib/common/e1fn.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));
+};

+ 3 - 0
js/proj4js/lib/common/e2fn.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return (0.05859375 * x * x * (1 + 0.75 * x));
+};

+ 3 - 0
js/proj4js/lib/common/e3fn.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return (x * x * x * (35 / 3072));
+};

+ 5 - 0
js/proj4js/lib/common/fL.js

@@ -0,0 +1,5 @@
+var HALF_PI = Math.PI/2;
+
+module.exports = function(x, L) {
+  return 2 * Math.atan(x * Math.exp(L)) - HALF_PI;
+};

+ 4 - 0
js/proj4js/lib/common/gN.js

@@ -0,0 +1,4 @@
+module.exports = function(a, e, sinphi) {
+  var temp = e * sinphi;
+  return a / Math.sqrt(1 - temp * temp);
+};

+ 16 - 0
js/proj4js/lib/common/imlfn.js

@@ -0,0 +1,16 @@
+module.exports = function(ml, e0, e1, e2, e3) {
+  var phi;
+  var dphi;
+
+  phi = ml / e0;
+  for (var i = 0; i < 15; i++) {
+    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));
+    phi += dphi;
+    if (Math.abs(dphi) <= 0.0000000001) {
+      return phi;
+    }
+  }
+
+  //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations");
+  return NaN;
+};

+ 30 - 0
js/proj4js/lib/common/inverseNadCvt.js

@@ -0,0 +1,30 @@
+var nad_intr = require('./nad_intr');
+var adjust_lon = require('./adjust_lon');
+module.exports = function(t, val, tb, ct) {
+  if (isNaN(t.x)) {
+    return val;
+  }
+  t.x = tb.x + t.x;
+  t.y = tb.y - t.y;
+  var i = 9,
+    tol = 1e-12;
+  var dif, del;
+  do {
+    del = nad_intr(t, ct);
+    if (isNaN(del.x)) {
+      break;
+    }
+    dif = {
+      "x": t.x - del.x - tb.x,
+      "y": t.y + del.y - tb.y
+    };
+    t.x -= dif.x;
+    t.y -= dif.y;
+  } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);
+  if (i < 0) {
+    return val;
+  }
+  val.x = adjust_lon(t.x + ct.ll[0]);
+  val.y = t.y + ct.ll[1];
+  return val;
+};

+ 13 - 0
js/proj4js/lib/common/invlatiso.js

@@ -0,0 +1,13 @@
+var fL = require('./fL');
+
+module.exports = function(eccent, ts) {
+  var phi = fL(1, ts);
+  var Iphi = 0;
+  var con = 0;
+  do {
+    Iphi = phi;
+    con = eccent * Math.sin(Iphi);
+    phi = fL(Math.exp(eccent * Math.log((1 + con) / (1 - con)) / 2), ts);
+  } while (Math.abs(phi - Iphi) > 1.0e-12);
+  return phi;
+};

+ 32 - 0
js/proj4js/lib/common/iqsfnz.js

@@ -0,0 +1,32 @@
+var HALF_PI = Math.PI/2;
+
+module.exports = function(eccent, q) {
+  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));
+  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {
+    if (q < 0) {
+      return (-1 * HALF_PI);
+    }
+    else {
+      return HALF_PI;
+    }
+  }
+  //var phi = 0.5* q/(1-eccent*eccent);
+  var phi = Math.asin(0.5 * q);
+  var dphi;
+  var sin_phi;
+  var cos_phi;
+  var con;
+  for (var i = 0; i < 30; i++) {
+    sin_phi = Math.sin(phi);
+    cos_phi = Math.cos(phi);
+    con = eccent * sin_phi;
+    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
+    phi += dphi;
+    if (Math.abs(dphi) <= 0.0000000001) {
+      return phi;
+    }
+  }
+
+  //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations");
+  return NaN;
+};

+ 16 - 0
js/proj4js/lib/common/latiso.js

@@ -0,0 +1,16 @@
+var HALF_PI = Math.PI/2;
+
+module.exports = function(eccent, phi, sinphi) {
+  if (Math.abs(phi) > HALF_PI) {
+    return Number.NaN;
+  }
+  if (phi === HALF_PI) {
+    return Number.POSITIVE_INFINITY;
+  }
+  if (phi === -1 * HALF_PI) {
+    return Number.NEGATIVE_INFINITY;
+  }
+
+  var con = eccent * sinphi;
+  return Math.log(Math.tan((HALF_PI + phi) / 2)) + eccent * Math.log((1 - con) / (1 + con)) / 2;
+};

+ 3 - 0
js/proj4js/lib/common/mlfn.js

@@ -0,0 +1,3 @@
+module.exports = function(e0, e1, e2, e3, phi) {
+  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));
+};

+ 4 - 0
js/proj4js/lib/common/msfnz.js

@@ -0,0 +1,4 @@
+module.exports = function(eccent, sinphi, cosphi) {
+  var con = eccent * sinphi;
+  return cosphi / (Math.sqrt(1 - con * con));
+};

+ 26 - 0
js/proj4js/lib/common/nadInterBreakout.js

@@ -0,0 +1,26 @@
+module.exports = function(indx, frct, letter, number, ct) {
+  var inx;
+  if (indx[letter] < 0) {
+    if (!(indx[letter] === -1 && frct[letter] > 0.99999999999)) {
+      return false;
+    }
+    indx[letter]++;
+    frct[letter] = 0;
+  }
+  else {
+    inx = indx[letter] + 1;
+    if (inx >= ct.lim[number]) {
+      if (!(inx === ct.lim[number] && frct[letter] < 1e-11)) {
+        return false;
+      }
+      if (letter === 'x') {
+        indx[letter]--;
+      }
+      else {
+        indx[letter]++;
+      }
+      frct[letter] = 1;
+    }
+  }
+  return [indx, frct];
+};

+ 31 - 0
js/proj4js/lib/common/nad_cvt.js

@@ -0,0 +1,31 @@
+var adjust_lon = require('./adjust_lon');
+var nad_intr = require('./nad_intr');
+var inverseNadCvt = require('./inverseNadCvt');
+
+module.exports = function(pin, inverse, ct) {
+  var val = {
+    "x": Number.NaN,
+    "y": Number.NaN
+  };
+  if (isNaN(pin.x)) {
+    return val;
+  }
+  var tb = {
+    "x": pin.x,
+    "y": pin.y
+  };
+  tb.x -= ct.ll[0];
+  tb.y -= ct.ll[1];
+  tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;
+  var t = nad_intr(tb, ct);
+  if (inverse) {
+    return inverseNadCvt(t, val, tb, ct);
+  }
+  else {
+    if (!isNaN(t.x)) {
+      val.x = pin.x - t.x;
+      val.y = pin.y + t.y;
+    }
+  }
+  return val;
+};

+ 67 - 0
js/proj4js/lib/common/nad_intr.js

@@ -0,0 +1,67 @@
+var nadInterBreakout = require("./nadInterBreakout");
+
+module.exports = function(pin, ct) {
+  // force computation by decreasing by 1e-7 to be as closed as possible
+  // from computation under C:C++ by leveraging rounding problems ...
+  var t = {
+    x: (pin.x - 1e-7) / ct.del[0],
+    y: (pin.y - 1e-7) / ct.del[1]
+  };
+  var indx = {
+    x: Math.floor(t.x),
+    y: Math.floor(t.y)
+  };
+  var frct = {
+    x: t.x - 1 * indx.x,
+    y: t.y - 1 * indx.y
+  };
+  var val = {
+    x: Number.NaN,
+    y: Number.NaN
+  };
+
+
+  var temp = nadInterBreakout(indx, frct, 'x', 0, ct);
+  if (temp) {
+    indx = temp[0];
+    frct = temp[1];
+  }
+  else {
+    return val;
+  }
+  temp = nadInterBreakout(indx, frct, 'y', 1, ct);
+  if (temp) {
+    indx = temp[0];
+    frct = temp[1];
+  }
+  else {
+    return val;
+  }
+  var inx = (indx.y * ct.lim[0]) + indx.x;
+  var f00 = {
+    x: ct.cvs[inx][0],
+    y: ct.cvs[inx][1]
+  };
+  inx++;
+  var f10 = {
+    x: ct.cvs[inx][0],
+    y: ct.cvs[inx][1]
+  };
+  inx += ct.lim[0];
+  var f11 = {
+    x: ct.cvs[inx][0],
+    y: ct.cvs[inx][1]
+  };
+  inx--;
+  var f01 = {
+    x: ct.cvs[inx][0],
+    y: ct.cvs[inx][1]
+  };
+  var m11 = frct.x * frct.y,
+    m10 = frct.x * (1 - frct.y),
+    m00 = (1 - frct.x) * (1 - frct.y),
+    m01 = (1 - frct.x) * frct.y;
+  val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);
+  val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);
+  return val;
+};

+ 16 - 0
js/proj4js/lib/common/phi2z.js

@@ -0,0 +1,16 @@
+var HALF_PI = Math.PI/2;
+module.exports = function(eccent, ts) {
+  var eccnth = 0.5 * eccent;
+  var con, dphi;
+  var phi = HALF_PI - 2 * Math.atan(ts);
+  for (var i = 0; i <= 15; i++) {
+    con = eccent * Math.sin(phi);
+    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
+    phi += dphi;
+    if (Math.abs(dphi) <= 0.0000000001) {
+      return phi;
+    }
+  }
+  //console.log("phi2z has NoConvergence");
+  return -9999;
+};

+ 24 - 0
js/proj4js/lib/common/pj_enfn.js

@@ -0,0 +1,24 @@
+var C00 = 1;
+var C02 = 0.25;
+var C04 = 0.046875;
+var C06 = 0.01953125;
+var C08 = 0.01068115234375;
+var C22 = 0.75;
+var C44 = 0.46875;
+var C46 = 0.01302083333333333333;
+var C48 = 0.00712076822916666666;
+var C66 = 0.36458333333333333333;
+var C68 = 0.00569661458333333333;
+var C88 = 0.3076171875;
+
+module.exports = function(es) {
+  var en = [];
+  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
+  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
+  var t = es * es;
+  en[2] = t * (C44 - es * (C46 + es * C48));
+  t *= es;
+  en[3] = t * (C66 - es * C68);
+  en[4] = t * es * C88;
+  return en;
+};

+ 20 - 0
js/proj4js/lib/common/pj_inv_mlfn.js

@@ -0,0 +1,20 @@
+var pj_mlfn = require("./pj_mlfn");
+var EPSLN = 1.0e-10;
+var MAX_ITER = 20;
+module.exports = function(arg, es, en) {
+  var k = 1 / (1 - es);
+  var phi = arg;
+  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */
+    var s = Math.sin(phi);
+    var t = 1 - es * s * s;
+    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;
+    //phi -= t * (t * Math.sqrt(t)) * k;
+    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;
+    phi -= t;
+    if (Math.abs(t) < EPSLN) {
+      return phi;
+    }
+  }
+  //..reportError("cass:pj_inv_mlfn: Convergence error");
+  return phi;
+};

+ 5 - 0
js/proj4js/lib/common/pj_mlfn.js

@@ -0,0 +1,5 @@
+module.exports = function(phi, sphi, cphi, en) {
+  cphi *= sphi;
+  sphi *= sphi;
+  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));
+};

+ 10 - 0
js/proj4js/lib/common/qsfnz.js

@@ -0,0 +1,10 @@
+module.exports = function(eccent, sinphi) {
+  var con;
+  if (eccent > 1.0e-7) {
+    con = eccent * sinphi;
+    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));
+  }
+  else {
+    return (2 * sinphi);
+  }
+};

+ 3 - 0
js/proj4js/lib/common/sign.js

@@ -0,0 +1,3 @@
+module.exports = function(x) {
+  return x<0 ? -1 : 1;
+};

+ 5 - 0
js/proj4js/lib/common/sinh.js

@@ -0,0 +1,5 @@
+module.exports = function(x) {
+  var r = Math.exp(x);
+  r = (r - 1 / r) / 2;
+  return r;
+};

+ 3 - 0
js/proj4js/lib/common/srat.js

@@ -0,0 +1,3 @@
+module.exports = function(esinp, exp) {
+  return (Math.pow((1 - esinp) / (1 + esinp), exp));
+};

+ 5 - 0
js/proj4js/lib/common/tanh.js

@@ -0,0 +1,5 @@
+module.exports = function(x) {
+  var r = Math.exp(x);
+  r = (r - 1 / r) / (r + 1 / r);
+  return r;
+};

+ 13 - 0
js/proj4js/lib/common/toPoint.js

@@ -0,0 +1,13 @@
+module.exports = function (array){
+  var out = {
+    x: array[0],
+    y: array[1]
+  };
+  if (array.length>2) {
+    out.z = array[2];
+  }
+  if (array.length>3) {
+    out.m = array[3];
+  }
+  return out;
+};

+ 8 - 0
js/proj4js/lib/common/tsfnz.js

@@ -0,0 +1,8 @@
+var HALF_PI = Math.PI/2;
+
+module.exports = function(eccent, phi, sinphi) {
+  var con = eccent * sinphi;
+  var com = 0.5 * eccent;
+  con = Math.pow(((1 - con) / (1 + con)), com);
+  return (Math.tan(0.5 * (HALF_PI - phi)) / con);
+};

+ 80 - 0
js/proj4js/lib/constants/Datum.js

@@ -0,0 +1,80 @@
+exports.wgs84 = {
+  towgs84: "0,0,0",
+  ellipse: "WGS84",
+  datumName: "WGS84"
+};
+exports.ch1903 = {
+  towgs84: "674.374,15.056,405.346",
+  ellipse: "bessel",
+  datumName: "swiss"
+};
+exports.ggrs87 = {
+  towgs84: "-199.87,74.79,246.62",
+  ellipse: "GRS80",
+  datumName: "Greek_Geodetic_Reference_System_1987"
+};
+exports.nad83 = {
+  towgs84: "0,0,0",
+  ellipse: "GRS80",
+  datumName: "North_American_Datum_1983"
+};
+exports.nad27 = {
+  nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
+  ellipse: "clrk66",
+  datumName: "North_American_Datum_1927"
+};
+exports.potsdam = {
+  towgs84: "606.0,23.0,413.0",
+  ellipse: "bessel",
+  datumName: "Potsdam Rauenberg 1950 DHDN"
+};
+exports.carthage = {
+  towgs84: "-263.0,6.0,431.0",
+  ellipse: "clark80",
+  datumName: "Carthage 1934 Tunisia"
+};
+exports.hermannskogel = {
+  towgs84: "653.0,-212.0,449.0",
+  ellipse: "bessel",
+  datumName: "Hermannskogel"
+};
+exports.ire65 = {
+  towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
+  ellipse: "mod_airy",
+  datumName: "Ireland 1965"
+};
+exports.rassadiran = {
+  towgs84: "-133.63,-157.5,-158.62",
+  ellipse: "intl",
+  datumName: "Rassadiran"
+};
+exports.nzgd49 = {
+  towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
+  ellipse: "intl",
+  datumName: "New Zealand Geodetic Datum 1949"
+};
+exports.osgb36 = {
+  towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
+  ellipse: "airy",
+  datumName: "Airy 1830"
+};
+exports.s_jtsk = {
+  towgs84: "589,76,480",
+  ellipse: 'bessel',
+  datumName: 'S-JTSK (Ferro)'
+};
+exports.beduaram = {
+  towgs84: '-106,-87,188',
+  ellipse: 'clrk80',
+  datumName: 'Beduaram'
+};
+exports.gunung_segara = {
+  towgs84: '-403,684,41',
+  ellipse: 'bessel',
+  datumName: 'Gunung Segara Jakarta'
+};
+exports.rnb72 = {
+  towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
+  ellipse: "intl",
+  datumName: "Reseau National Belge 1972"
+};

+ 215 - 0
js/proj4js/lib/constants/Ellipsoid.js

@@ -0,0 +1,215 @@
+exports.MERIT = {
+  a: 6378137.0,
+  rf: 298.257,
+  ellipseName: "MERIT 1983"
+};
+exports.SGS85 = {
+  a: 6378136.0,
+  rf: 298.257,
+  ellipseName: "Soviet Geodetic System 85"
+};
+exports.GRS80 = {
+  a: 6378137.0,
+  rf: 298.257222101,
+  ellipseName: "GRS 1980(IUGG, 1980)"
+};
+exports.IAU76 = {
+  a: 6378140.0,
+  rf: 298.257,
+  ellipseName: "IAU 1976"
+};
+exports.airy = {
+  a: 6377563.396,
+  b: 6356256.910,
+  ellipseName: "Airy 1830"
+};
+exports.APL4 = {
+  a: 6378137,
+  rf: 298.25,
+  ellipseName: "Appl. Physics. 1965"
+};
+exports.NWL9D = {
+  a: 6378145.0,
+  rf: 298.25,
+  ellipseName: "Naval Weapons Lab., 1965"
+};
+exports.mod_airy = {
+  a: 6377340.189,
+  b: 6356034.446,
+  ellipseName: "Modified Airy"
+};
+exports.andrae = {
+  a: 6377104.43,
+  rf: 300.0,
+  ellipseName: "Andrae 1876 (Den., Iclnd.)"
+};
+exports.aust_SA = {
+  a: 6378160.0,
+  rf: 298.25,
+  ellipseName: "Australian Natl & S. Amer. 1969"
+};
+exports.GRS67 = {
+  a: 6378160.0,
+  rf: 298.2471674270,
+  ellipseName: "GRS 67(IUGG 1967)"
+};
+exports.bessel = {
+  a: 6377397.155,
+  rf: 299.1528128,
+  ellipseName: "Bessel 1841"
+};
+exports.bess_nam = {
+  a: 6377483.865,
+  rf: 299.1528128,
+  ellipseName: "Bessel 1841 (Namibia)"
+};
+exports.clrk66 = {
+  a: 6378206.4,
+  b: 6356583.8,
+  ellipseName: "Clarke 1866"
+};
+exports.clrk80 = {
+  a: 6378249.145,
+  rf: 293.4663,
+  ellipseName: "Clarke 1880 mod."
+};
+exports.clrk58 = {
+  a: 6378293.645208759,
+  rf: 294.2606763692654,
+  ellipseName: "Clarke 1858"
+};
+exports.CPM = {
+  a: 6375738.7,
+  rf: 334.29,
+  ellipseName: "Comm. des Poids et Mesures 1799"
+};
+exports.delmbr = {
+  a: 6376428.0,
+  rf: 311.5,
+  ellipseName: "Delambre 1810 (Belgium)"
+};
+exports.engelis = {
+  a: 6378136.05,
+  rf: 298.2566,
+  ellipseName: "Engelis 1985"
+};
+exports.evrst30 = {
+  a: 6377276.345,
+  rf: 300.8017,
+  ellipseName: "Everest 1830"
+};
+exports.evrst48 = {
+  a: 6377304.063,
+  rf: 300.8017,
+  ellipseName: "Everest 1948"
+};
+exports.evrst56 = {
+  a: 6377301.243,
+  rf: 300.8017,
+  ellipseName: "Everest 1956"
+};
+exports.evrst69 = {
+  a: 6377295.664,
+  rf: 300.8017,
+  ellipseName: "Everest 1969"
+};
+exports.evrstSS = {
+  a: 6377298.556,
+  rf: 300.8017,
+  ellipseName: "Everest (Sabah & Sarawak)"
+};
+exports.fschr60 = {
+  a: 6378166.0,
+  rf: 298.3,
+  ellipseName: "Fischer (Mercury Datum) 1960"
+};
+exports.fschr60m = {
+  a: 6378155.0,
+  rf: 298.3,
+  ellipseName: "Fischer 1960"
+};
+exports.fschr68 = {
+  a: 6378150.0,
+  rf: 298.3,
+  ellipseName: "Fischer 1968"
+};
+exports.helmert = {
+  a: 6378200.0,
+  rf: 298.3,
+  ellipseName: "Helmert 1906"
+};
+exports.hough = {
+  a: 6378270.0,
+  rf: 297.0,
+  ellipseName: "Hough"
+};
+exports.intl = {
+  a: 6378388.0,
+  rf: 297.0,
+  ellipseName: "International 1909 (Hayford)"
+};
+exports.kaula = {
+  a: 6378163.0,
+  rf: 298.24,
+  ellipseName: "Kaula 1961"
+};
+exports.lerch = {
+  a: 6378139.0,
+  rf: 298.257,
+  ellipseName: "Lerch 1979"
+};
+exports.mprts = {
+  a: 6397300.0,
+  rf: 191.0,
+  ellipseName: "Maupertius 1738"
+};
+exports.new_intl = {
+  a: 6378157.5,
+  b: 6356772.2,
+  ellipseName: "New International 1967"
+};
+exports.plessis = {
+  a: 6376523.0,
+  rf: 6355863.0,
+  ellipseName: "Plessis 1817 (France)"
+};
+exports.krass = {
+  a: 6378245.0,
+  rf: 298.3,
+  ellipseName: "Krassovsky, 1942"
+};
+exports.SEasia = {
+  a: 6378155.0,
+  b: 6356773.3205,
+  ellipseName: "Southeast Asia"
+};
+exports.walbeck = {
+  a: 6376896.0,
+  b: 6355834.8467,
+  ellipseName: "Walbeck"
+};
+exports.WGS60 = {
+  a: 6378165.0,
+  rf: 298.3,
+  ellipseName: "WGS 60"
+};
+exports.WGS66 = {
+  a: 6378145.0,
+  rf: 298.25,
+  ellipseName: "WGS 66"
+};
+exports.WGS7 = {
+  a: 6378135.0,
+  rf: 298.26,
+  ellipseName: "WGS 72"
+};
+exports.WGS84 = {
+  a: 6378137.0,
+  rf: 298.257223563,
+  ellipseName: "WGS 84"
+};
+exports.sphere = {
+  a: 6370997.0,
+  b: 6370997.0,
+  ellipseName: "Normal Sphere (r=6370997)"
+};

+ 13 - 0
js/proj4js/lib/constants/PrimeMeridian.js

@@ -0,0 +1,13 @@
+exports.greenwich = 0.0; //"0dE",
+exports.lisbon = -9.131906111111; //"9d07'54.862\"W",
+exports.paris = 2.337229166667; //"2d20'14.025\"E",
+exports.bogota = -74.080916666667; //"74d04'51.3\"W",
+exports.madrid = -3.687938888889; //"3d41'16.58\"W",
+exports.rome = 12.452333333333; //"12d27'8.4\"E",
+exports.bern = 7.439583333333; //"7d26'22.5\"E",
+exports.jakarta = 106.807719444444; //"106d48'27.79\"E",
+exports.ferro = -17.666666666667; //"17d40'W",
+exports.brussels = 4.367975; //"4d22'4.71\"E",
+exports.stockholm = 18.058277777778; //"18d3'29.8\"E",
+exports.athens = 23.7163375; //"23d42'58.815\"E",
+exports.oslo = 10.722916666667; //"10d43'22.5\"E"

+ 23 - 0
js/proj4js/lib/constants/grids.js

@@ -0,0 +1,23 @@
+// Based on . CTABLE  structure :
+  // FIXME: better to have array instead of object holding longitudes, latitudes members
+  //        In the former case, one has to document index 0 is longitude and
+  //        1 is latitude ...
+  //        In the later case, grid object gets bigger !!!!
+  //        Solution 1 is chosen based on pj_gridinfo.c
+exports.null = { // name of grid's file
+  "ll": [-3.14159265, - 1.57079633], // lower-left coordinates in radians (longitude, latitude):
+  "del": [3.14159265, 1.57079633], // cell's size in radians (longitude, latitude):
+  "lim": [3, 3], // number of nodes in longitude, latitude (including edges):
+  "count": 9, // total number of nodes
+  "cvs": [ // shifts : in ntv2 reverse order : lon, lat in radians ...
+    [0.0, 0.0],
+    [0.0, 0.0],
+    [0.0, 0.0], // for (lon= 0; lon<lim[0]; lon++) {
+    [0.0, 0.0],
+    [0.0, 0.0],
+    [0.0, 0.0], //   for (lat= 0; lat<lim[1]; lat++) { p= cvs[lat*lim[0]+lon]; }
+    [0.0, 0.0],
+    [0.0, 0.0],
+    [0.0, 0.0] // }
+  ]
+};

+ 64 - 0
js/proj4js/lib/core.js

@@ -0,0 +1,64 @@
+var proj = require('./Proj');
+var transform = require('./transform');
+var wgs84 = proj('WGS84');
+
+function transformer(from, to, coords) {
+  var transformedArray;
+  if (Array.isArray(coords)) {
+    transformedArray = transform(from, to, coords);
+    if (coords.length === 3) {
+      return [transformedArray.x, transformedArray.y, transformedArray.z];
+    }
+    else {
+      return [transformedArray.x, transformedArray.y];
+    }
+  }
+  else {
+    return transform(from, to, coords);
+  }
+}
+
+function checkProj(item) {
+  if (item instanceof proj) {
+    return item;
+  }
+  if (item.oProj) {
+    return item.oProj;
+  }
+  return proj(item);
+}
+function proj4(fromProj, toProj, coord) {
+  fromProj = checkProj(fromProj);
+  var single = false;
+  var obj;
+  if (typeof toProj === 'undefined') {
+    toProj = fromProj;
+    fromProj = wgs84;
+    single = true;
+  }
+  else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
+    coord = toProj;
+    toProj = fromProj;
+    fromProj = wgs84;
+    single = true;
+  }
+  toProj = checkProj(toProj);
+  if (coord) {
+    return transformer(fromProj, toProj, coord);
+  }
+  else {
+    obj = {
+      forward: function(coords) {
+        return transformer(fromProj, toProj, coords);
+      },
+      inverse: function(coords) {
+        return transformer(toProj, fromProj, coords);
+      }
+    };
+    if (single) {
+      obj.oProj = toProj;
+    }
+    return obj;
+  }
+}
+module.exports = proj4;

+ 404 - 0
js/proj4js/lib/datum.js

@@ -0,0 +1,404 @@
+var HALF_PI = Math.PI/2;
+var PJD_3PARAM = 1;
+var PJD_7PARAM = 2;
+var PJD_GRIDSHIFT = 3;
+var PJD_WGS84 = 4; // WGS84 or equivalent
+var PJD_NODATUM = 5; // WGS84 or equivalent
+var SEC_TO_RAD = 4.84813681109535993589914102357e-6;
+var AD_C = 1.0026000;
+var COS_67P5 = 0.38268343236508977;
+var datum = function(proj) {
+  if (!(this instanceof datum)) {
+    return new datum(proj);
+  }
+  this.datum_type = PJD_WGS84; //default setting
+  if (!proj) {
+    return;
+  }
+  if (proj.datumCode && proj.datumCode === 'none') {
+    this.datum_type = PJD_NODATUM;
+  }
+  if (proj.datum_params) {
+    for (var i = 0; i < proj.datum_params.length; i++) {
+      proj.datum_params[i] = parseFloat(proj.datum_params[i]);
+    }
+    if (proj.datum_params[0] !== 0 || proj.datum_params[1] !== 0 || proj.datum_params[2] !== 0) {
+      this.datum_type = PJD_3PARAM;
+    }
+    if (proj.datum_params.length > 3) {
+      if (proj.datum_params[3] !== 0 || proj.datum_params[4] !== 0 || proj.datum_params[5] !== 0 || proj.datum_params[6] !== 0) {
+        this.datum_type = PJD_7PARAM;
+        proj.datum_params[3] *= SEC_TO_RAD;
+        proj.datum_params[4] *= SEC_TO_RAD;
+        proj.datum_params[5] *= SEC_TO_RAD;
+        proj.datum_params[6] = (proj.datum_params[6] / 1000000.0) + 1.0;
+      }
+    }
+  }
+  // DGR 2011-03-21 : nadgrids support
+  this.datum_type = proj.grids ? PJD_GRIDSHIFT : this.datum_type;
+
+  this.a = proj.a; //datum object also uses these values
+  this.b = proj.b;
+  this.es = proj.es;
+  this.ep2 = proj.ep2;
+  this.datum_params = proj.datum_params;
+  if (this.datum_type === PJD_GRIDSHIFT) {
+    this.grids = proj.grids;
+  }
+};
+datum.prototype = {
+
+
+  /****************************************************************/
+  // cs_compare_datums()
+  //   Returns TRUE if the two datums match, otherwise FALSE.
+  compare_datums: function(dest) {
+    if (this.datum_type !== dest.datum_type) {
+      return false; // false, datums are not equal
+    }
+    else if (this.a !== dest.a || Math.abs(this.es - dest.es) > 0.000000000050) {
+      // the tolerence for es is to ensure that GRS80 and WGS84
+      // are considered identical
+      return false;
+    }
+    else if (this.datum_type === PJD_3PARAM) {
+      return (this.datum_params[0] === dest.datum_params[0] && this.datum_params[1] === dest.datum_params[1] && this.datum_params[2] === dest.datum_params[2]);
+    }
+    else if (this.datum_type === PJD_7PARAM) {
+      return (this.datum_params[0] === dest.datum_params[0] && this.datum_params[1] === dest.datum_params[1] && this.datum_params[2] === dest.datum_params[2] && this.datum_params[3] === dest.datum_params[3] && this.datum_params[4] === dest.datum_params[4] && this.datum_params[5] === dest.datum_params[5] && this.datum_params[6] === dest.datum_params[6]);
+    }
+    else if (this.datum_type === PJD_GRIDSHIFT || dest.datum_type === PJD_GRIDSHIFT) {
+      //alert("ERROR: Grid shift transformations are not implemented.");
+      //return false
+      //DGR 2012-07-29 lazy ...
+      return this.nadgrids === dest.nadgrids;
+    }
+    else {
+      return true; // datums are equal
+    }
+  }, // cs_compare_datums()
+
+  /*
+   * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
+   * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
+   * according to the current ellipsoid parameters.
+   *
+   *    Latitude  : Geodetic latitude in radians                     (input)
+   *    Longitude : Geodetic longitude in radians                    (input)
+   *    Height    : Geodetic height, in meters                       (input)
+   *    X         : Calculated Geocentric X coordinate, in meters    (output)
+   *    Y         : Calculated Geocentric Y coordinate, in meters    (output)
+   *    Z         : Calculated Geocentric Z coordinate, in meters    (output)
+   *
+   */
+  geodetic_to_geocentric: function(p) {
+    var Longitude = p.x;
+    var Latitude = p.y;
+    var Height = p.z ? p.z : 0; //Z value not always supplied
+    var X; // output
+    var Y;
+    var Z;
+
+    var Error_Code = 0; //  GEOCENT_NO_ERROR;
+    var Rn; /*  Earth radius at location  */
+    var Sin_Lat; /*  Math.sin(Latitude)  */
+    var Sin2_Lat; /*  Square of Math.sin(Latitude)  */
+    var Cos_Lat; /*  Math.cos(Latitude)  */
+
+    /*
+     ** Don't blow up if Latitude is just a little out of the value
+     ** range as it may just be a rounding issue.  Also removed longitude
+     ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.
+     */
+    if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {
+      Latitude = -HALF_PI;
+    }
+    else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {
+      Latitude = HALF_PI;
+    }
+    else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) {
+      /* Latitude out of range */
+      //..reportError('geocent:lat out of range:' + Latitude);
+      return null;
+    }
+
+    if (Longitude > Math.PI) {
+      Longitude -= (2 * Math.PI);
+    }
+    Sin_Lat = Math.sin(Latitude);
+    Cos_Lat = Math.cos(Latitude);
+    Sin2_Lat = Sin_Lat * Sin_Lat;
+    Rn = this.a / (Math.sqrt(1.0e0 - this.es * Sin2_Lat));
+    X = (Rn + Height) * Cos_Lat * Math.cos(Longitude);
+    Y = (Rn + Height) * Cos_Lat * Math.sin(Longitude);
+    Z = ((Rn * (1 - this.es)) + Height) * Sin_Lat;
+
+    p.x = X;
+    p.y = Y;
+    p.z = Z;
+    return Error_Code;
+  }, // cs_geodetic_to_geocentric()
+
+
+  geocentric_to_geodetic: function(p) {
+    /* local defintions and variables */
+    /* end-criterium of loop, accuracy of sin(Latitude) */
+    var genau = 1e-12;
+    var genau2 = (genau * genau);
+    var maxiter = 30;
+
+    var P; /* distance between semi-minor axis and location */
+    var RR; /* distance between center and location */
+    var CT; /* sin of geocentric latitude */
+    var ST; /* cos of geocentric latitude */
+    var RX;
+    var RK;
+    var RN; /* Earth radius at location */
+    var CPHI0; /* cos of start or old geodetic latitude in iterations */
+    var SPHI0; /* sin of start or old geodetic latitude in iterations */
+    var CPHI; /* cos of searched geodetic latitude */
+    var SPHI; /* sin of searched geodetic latitude */
+    var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
+    var At_Pole; /* indicates location is in polar region */
+    var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
+
+    var X = p.x;
+    var Y = p.y;
+    var Z = p.z ? p.z : 0.0; //Z value not always supplied
+    var Longitude;
+    var Latitude;
+    var Height;
+
+    At_Pole = false;
+    P = Math.sqrt(X * X + Y * Y);
+    RR = Math.sqrt(X * X + Y * Y + Z * Z);
+
+    /*      special cases for latitude and longitude */
+    if (P / this.a < genau) {
+
+      /*  special case, if P=0. (X=0., Y=0.) */
+      At_Pole = true;
+      Longitude = 0.0;
+
+      /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
+       *  of ellipsoid (=center of mass), Latitude becomes PI/2 */
+      if (RR / this.a < genau) {
+        Latitude = HALF_PI;
+        Height = -this.b;
+        return;
+      }
+    }
+    else {
+      /*  ellipsoidal (geodetic) longitude
+       *  interval: -PI < Longitude <= +PI */
+      Longitude = Math.atan2(Y, X);
+    }
+
+    /* --------------------------------------------------------------
+     * Following iterative algorithm was developped by
+     * "Institut for Erdmessung", University of Hannover, July 1988.
+     * Internet: www.ife.uni-hannover.de
+     * Iterative computation of CPHI,SPHI and Height.
+     * Iteration of CPHI and SPHI to 10**-12 radian resp.
+     * 2*10**-7 arcsec.
+     * --------------------------------------------------------------
+     */
+    CT = Z / RR;
+    ST = P / RR;
+    RX = 1.0 / Math.sqrt(1.0 - this.es * (2.0 - this.es) * ST * ST);
+    CPHI0 = ST * (1.0 - this.es) * RX;
+    SPHI0 = CT * RX;
+    iter = 0;
+
+    /* loop to find sin(Latitude) resp. Latitude
+     * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
+    do {
+      iter++;
+      RN = this.a / Math.sqrt(1.0 - this.es * SPHI0 * SPHI0);
+
+      /*  ellipsoidal (geodetic) height */
+      Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - this.es * SPHI0 * SPHI0);
+
+      RK = this.es * RN / (RN + Height);
+      RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);
+      CPHI = ST * (1.0 - RK) * RX;
+      SPHI = CT * RX;
+      SDPHI = SPHI * CPHI0 - CPHI * SPHI0;
+      CPHI0 = CPHI;
+      SPHI0 = SPHI;
+    }
+    while (SDPHI * SDPHI > genau2 && iter < maxiter);
+
+    /*      ellipsoidal (geodetic) latitude */
+    Latitude = Math.atan(SPHI / Math.abs(CPHI));
+
+    p.x = Longitude;
+    p.y = Latitude;
+    p.z = Height;
+    return p;
+  }, // cs_geocentric_to_geodetic()
+
+  /** Convert_Geocentric_To_Geodetic
+   * The method used here is derived from 'An Improved Algorithm for
+   * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996
+   */
+  geocentric_to_geodetic_noniter: function(p) {
+    var X = p.x;
+    var Y = p.y;
+    var Z = p.z ? p.z : 0; //Z value not always supplied
+    var Longitude;
+    var Latitude;
+    var Height;
+
+    var W; /* distance from Z axis */
+    var W2; /* square of distance from Z axis */
+    var T0; /* initial estimate of vertical component */
+    var T1; /* corrected estimate of vertical component */
+    var S0; /* initial estimate of horizontal component */
+    var S1; /* corrected estimate of horizontal component */
+    var Sin_B0; /* Math.sin(B0), B0 is estimate of Bowring aux variable */
+    var Sin3_B0; /* cube of Math.sin(B0) */
+    var Cos_B0; /* Math.cos(B0) */
+    var Sin_p1; /* Math.sin(phi1), phi1 is estimated latitude */
+    var Cos_p1; /* Math.cos(phi1) */
+    var Rn; /* Earth radius at location */
+    var Sum; /* numerator of Math.cos(phi1) */
+    var At_Pole; /* indicates location is in polar region */
+
+    X = parseFloat(X); // cast from string to float
+    Y = parseFloat(Y);
+    Z = parseFloat(Z);
+
+    At_Pole = false;
+    if (X !== 0.0) {
+      Longitude = Math.atan2(Y, X);
+    }
+    else {
+      if (Y > 0) {
+        Longitude = HALF_PI;
+      }
+      else if (Y < 0) {
+        Longitude = -HALF_PI;
+      }
+      else {
+        At_Pole = true;
+        Longitude = 0.0;
+        if (Z > 0.0) { /* north pole */
+          Latitude = HALF_PI;
+        }
+        else if (Z < 0.0) { /* south pole */
+          Latitude = -HALF_PI;
+        }
+        else { /* center of earth */
+          Latitude = HALF_PI;
+          Height = -this.b;
+          return;
+        }
+      }
+    }
+    W2 = X * X + Y * Y;
+    W = Math.sqrt(W2);
+    T0 = Z * AD_C;
+    S0 = Math.sqrt(T0 * T0 + W2);
+    Sin_B0 = T0 / S0;
+    Cos_B0 = W / S0;
+    Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0;
+    T1 = Z + this.b * this.ep2 * Sin3_B0;
+    Sum = W - this.a * this.es * Cos_B0 * Cos_B0 * Cos_B0;
+    S1 = Math.sqrt(T1 * T1 + Sum * Sum);
+    Sin_p1 = T1 / S1;
+    Cos_p1 = Sum / S1;
+    Rn = this.a / Math.sqrt(1.0 - this.es * Sin_p1 * Sin_p1);
+    if (Cos_p1 >= COS_67P5) {
+      Height = W / Cos_p1 - Rn;
+    }
+    else if (Cos_p1 <= -COS_67P5) {
+      Height = W / -Cos_p1 - Rn;
+    }
+    else {
+      Height = Z / Sin_p1 + Rn * (this.es - 1.0);
+    }
+    if (At_Pole === false) {
+      Latitude = Math.atan(Sin_p1 / Cos_p1);
+    }
+
+    p.x = Longitude;
+    p.y = Latitude;
+    p.z = Height;
+    return p;
+  }, // geocentric_to_geodetic_noniter()
+
+  /****************************************************************/
+  // pj_geocentic_to_wgs84( p )
+  //  p = point to transform in geocentric coordinates (x,y,z)
+  geocentric_to_wgs84: function(p) {
+
+    if (this.datum_type === PJD_3PARAM) {
+      // if( x[io] === HUGE_VAL )
+      //    continue;
+      p.x += this.datum_params[0];
+      p.y += this.datum_params[1];
+      p.z += this.datum_params[2];
+
+    }
+    else if (this.datum_type === PJD_7PARAM) {
+      var Dx_BF = this.datum_params[0];
+      var Dy_BF = this.datum_params[1];
+      var Dz_BF = this.datum_params[2];
+      var Rx_BF = this.datum_params[3];
+      var Ry_BF = this.datum_params[4];
+      var Rz_BF = this.datum_params[5];
+      var M_BF = this.datum_params[6];
+      // if( x[io] === HUGE_VAL )
+      //    continue;
+      var x_out = M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF;
+      var y_out = M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF;
+      var z_out = M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF;
+      p.x = x_out;
+      p.y = y_out;
+      p.z = z_out;
+    }
+  }, // cs_geocentric_to_wgs84
+
+  /****************************************************************/
+  // pj_geocentic_from_wgs84()
+  //  coordinate system definition,
+  //  point to transform in geocentric coordinates (x,y,z)
+  geocentric_from_wgs84: function(p) {
+
+    if (this.datum_type === PJD_3PARAM) {
+      //if( x[io] === HUGE_VAL )
+      //    continue;
+      p.x -= this.datum_params[0];
+      p.y -= this.datum_params[1];
+      p.z -= this.datum_params[2];
+
+    }
+    else if (this.datum_type === PJD_7PARAM) {
+      var Dx_BF = this.datum_params[0];
+      var Dy_BF = this.datum_params[1];
+      var Dz_BF = this.datum_params[2];
+      var Rx_BF = this.datum_params[3];
+      var Ry_BF = this.datum_params[4];
+      var Rz_BF = this.datum_params[5];
+      var M_BF = this.datum_params[6];
+      var x_tmp = (p.x - Dx_BF) / M_BF;
+      var y_tmp = (p.y - Dy_BF) / M_BF;
+      var z_tmp = (p.z - Dz_BF) / M_BF;
+      //if( x[io] === HUGE_VAL )
+      //    continue;
+
+      p.x = x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp;
+      p.y = -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp;
+      p.z = Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp;
+    } //cs_geocentric_from_wgs84()
+  }
+};
+
+/** point object, nothing fancy, just allows values to be
+    passed back and forth by reference rather than by value.
+    Other point classes may be used as long as they have
+    x and y properties, which will get modified in the transform method.
+*/
+module.exports = datum;

+ 99 - 0
js/proj4js/lib/datum_transform.js

@@ -0,0 +1,99 @@
+var PJD_3PARAM = 1;
+var PJD_7PARAM = 2;
+var PJD_GRIDSHIFT = 3;
+var PJD_NODATUM = 5; // WGS84 or equivalent
+var SRS_WGS84_SEMIMAJOR = 6378137; // only used in grid shift transforms
+var SRS_WGS84_ESQUARED = 0.006694379990141316; //DGR: 2012-07-29
+module.exports = function(source, dest, point) {
+  var wp, i, l;
+
+  function checkParams(fallback) {
+    return (fallback === PJD_3PARAM || fallback === PJD_7PARAM);
+  }
+  // Short cut if the datums are identical.
+  if (source.compare_datums(dest)) {
+    return point; // in this case, zero is sucess,
+    // whereas cs_compare_datums returns 1 to indicate TRUE
+    // confusing, should fix this
+  }
+
+  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest
+  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {
+    return point;
+  }
+
+  //DGR: 2012-07-29 : add nadgrids support (begin)
+  var src_a = source.a;
+  var src_es = source.es;
+
+  var dst_a = dest.a;
+  var dst_es = dest.es;
+
+  var fallback = source.datum_type;
+  // If this datum requires grid shifts, then apply it to geodetic coordinates.
+  if (fallback === PJD_GRIDSHIFT) {
+    if (this.apply_gridshift(source, 0, point) === 0) {
+      source.a = SRS_WGS84_SEMIMAJOR;
+      source.es = SRS_WGS84_ESQUARED;
+    }
+    else {
+      // try 3 or 7 params transformation or nothing ?
+      if (!source.datum_params) {
+        source.a = src_a;
+        source.es = source.es;
+        return point;
+      }
+      wp = 1;
+      for (i = 0, l = source.datum_params.length; i < l; i++) {
+        wp *= source.datum_params[i];
+      }
+      if (wp === 0) {
+        source.a = src_a;
+        source.es = source.es;
+        return point;
+      }
+      if (source.datum_params.length > 3) {
+        fallback = PJD_7PARAM;
+      }
+      else {
+        fallback = PJD_3PARAM;
+      }
+    }
+  }
+  if (dest.datum_type === PJD_GRIDSHIFT) {
+    dest.a = SRS_WGS84_SEMIMAJOR;
+    dest.es = SRS_WGS84_ESQUARED;
+  }
+  // Do we need to go through geocentric coordinates?
+  if (source.es !== dest.es || source.a !== dest.a || checkParams(fallback) || checkParams(dest.datum_type)) {
+    //DGR: 2012-07-29 : add nadgrids support (end)
+    // Convert to geocentric coordinates.
+    source.geodetic_to_geocentric(point);
+    // CHECK_RETURN;
+    // Convert between datums
+    if (checkParams(source.datum_type)) {
+      source.geocentric_to_wgs84(point);
+      // CHECK_RETURN;
+    }
+    if (checkParams(dest.datum_type)) {
+      dest.geocentric_from_wgs84(point);
+      // CHECK_RETURN;
+    }
+    // Convert back to geodetic coordinates
+    dest.geocentric_to_geodetic(point);
+    // CHECK_RETURN;
+  }
+  // Apply grid shift to destination if required
+  if (dest.datum_type === PJD_GRIDSHIFT) {
+    this.apply_gridshift(dest, 1, point);
+    // CHECK_RETURN;
+  }
+
+  source.a = src_a;
+  source.es = src_es;
+  dest.a = dst_a;
+  dest.es = dst_es;
+
+  return point;
+};
+

+ 55 - 0
js/proj4js/lib/defs.js

@@ -0,0 +1,55 @@
+var globals = require('./global');
+var parseProj = require('./projString');
+var wkt = require('./wkt');
+
+function defs(name) {
+  /*global console*/
+  var that = this;
+  if (arguments.length === 2) {
+    var def = arguments[1];
+    if (typeof def === 'string') {
+      if (def.charAt(0) === '+') {
+        defs[name] = parseProj(arguments[1]);
+      }
+      else {
+        defs[name] = wkt(arguments[1]);
+      }
+    } else {
+      defs[name] = def;
+    }
+  }
+  else if (arguments.length === 1) {
+    if (Array.isArray(name)) {
+      return name.map(function(v) {
+        if (Array.isArray(v)) {
+          defs.apply(that, v);
+        }
+        else {
+          defs(v);
+        }
+      });
+    }
+    else if (typeof name === 'string') {
+      if (name in defs) {
+        return defs[name];
+      }
+    }
+    else if ('EPSG' in name) {
+      defs['EPSG:' + name.EPSG] = name;
+    }
+    else if ('ESRI' in name) {
+      defs['ESRI:' + name.ESRI] = name;
+    }
+    else if ('IAU2000' in name) {
+      defs['IAU2000:' + name.IAU2000] = name;
+    }
+    else {
+      console.log(name);
+    }
+    return;
+  }
+
+
+}
+globals(defs);
+module.exports = defs;

+ 56 - 0
js/proj4js/lib/deriveConstants.js

@@ -0,0 +1,56 @@
+var Datum = require('./constants/Datum');
+var Ellipsoid = require('./constants/Ellipsoid');
+var extend = require('./extend');
+var datum = require('./datum');
+var EPSLN = 1.0e-10;
+// ellipoid pj_set_ell.c
+var SIXTH = 0.1666666666666666667;
+/* 1/6 */
+var RA4 = 0.04722222222222222222;
+/* 17/360 */
+var RA6 = 0.02215608465608465608;
+module.exports = function(json) {
+  // DGR 2011-03-20 : nagrids -> nadgrids
+  if (json.datumCode && json.datumCode !== 'none') {
+    var datumDef = Datum[json.datumCode];
+    if (datumDef) {
+      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;
+      json.ellps = datumDef.ellipse;
+      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
+    }
+  }
+  if (!json.a) { // do we have an ellipsoid?
+    var ellipse = Ellipsoid[json.ellps] ? Ellipsoid[json.ellps] : Ellipsoid.WGS84;
+    extend(json, ellipse);
+  }
+  if (json.rf && !json.b) {
+    json.b = (1.0 - 1.0 / json.rf) * json.a;
+  }
+  if (json.rf === 0 || Math.abs(json.a - json.b) < EPSLN) {
+    json.sphere = true;
+    json.b = json.a;
+  }
+  json.a2 = json.a * json.a; // used in geocentric
+  json.b2 = json.b * json.b; // used in geocentric
+  json.es = (json.a2 - json.b2) / json.a2; // e ^ 2
+  json.e = Math.sqrt(json.es); // eccentricity
+  if (json.R_A) {
+    json.a *= 1 - json.es * (SIXTH + json.es * (RA4 + json.es * RA6));
+    json.a2 = json.a * json.a;
+    json.b2 = json.b * json.b;
+    json.es = 0;
+  }
+  json.ep2 = (json.a2 - json.b2) / json.b2; // used in geocentric
+  if (!json.k0) {
+    json.k0 = 1.0; //default value
+  }
+  //DGR 2010-11-12: axis
+  if (!json.axis) {
+    json.axis = "enu";
+  }
+
+  if (!json.datum) {
+    json.datum = datum(json);
+  }
+  return json;
+};

+ 14 - 0
js/proj4js/lib/extend.js

@@ -0,0 +1,14 @@
+module.exports = function(destination, source) {
+  destination = destination || {};
+  var value, property;
+  if (!source) {
+    return destination;
+  }
+  for (property in source) {
+    value = source[property];
+    if (value !== undefined) {
+      destination[property] = value;
+    }
+  }
+  return destination;
+};

+ 11 - 0
js/proj4js/lib/global.js

@@ -0,0 +1,11 @@
+module.exports = function(defs) {
+  defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
+  defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
+  defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
+
+  defs.WGS84 = defs['EPSG:4326'];
+  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857
+  defs.GOOGLE = defs['EPSG:3857'];
+  defs['EPSG:900913'] = defs['EPSG:3857'];
+  defs['EPSG:102113'] = defs['EPSG:3857'];
+};

+ 29 - 0
js/proj4js/lib/includedProjections.js

@@ -0,0 +1,29 @@
+var projs = [
+  require('./projections/tmerc'),
+  require('./projections/utm'),
+  require('./projections/sterea'),
+  require('./projections/stere'),
+  require('./projections/somerc'),
+  require('./projections/omerc'),
+  require('./projections/lcc'),
+  require('./projections/krovak'),
+  require('./projections/cass'),
+  require('./projections/laea'),
+  require('./projections/aea'),
+  require('./projections/gnom'),
+  require('./projections/cea'),
+  require('./projections/eqc'),
+  require('./projections/poly'),
+  require('./projections/nzmg'),
+  require('./projections/mill'),
+  require('./projections/sinu'),
+  require('./projections/moll'),
+  require('./projections/eqdc'),
+  require('./projections/vandg'),
+  require('./projections/aeqd')
+];
+module.exports = function(proj4){
+  projs.forEach(function(proj){
+    proj4.Proj.projections.add(proj);
+  });
+};

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است