diff --git a/app/config.json b/app/config.json index 29df7a239aa046db75fecf390cf08daf82680e66..47a3afb05ea525161dcad55d5fe12ed782b6831c 100644 --- a/app/config.json +++ b/app/config.json @@ -46,6 +46,7 @@ "es": { "enable": true, "askEnable": true, + "useRemoteStorage": true, "host": "g1.data.duniter.fr", "port": 443, "fallbackNodes": [ @@ -112,6 +113,7 @@ "es": { "enable": true, "askEnable": true, + "useRemoteStorage": true, "host": "g1.data.duniter.fr", "port": 443, "fallbackNodes": [ @@ -183,6 +185,7 @@ "es": { "enable": true, "askEnable": true, + "useRemoteStorage": true, "host": "g1.data.le-sou.org", "port": 443, "fallbackNodes": [ @@ -240,6 +243,7 @@ "es": { "enable": true, "askEnable": true, + "useRemoteStorage": true, "host": "g1-test.data.duniter.fr", "port": 443, "notifications": { diff --git a/scss/ionic.app.scss b/scss/ionic.app.scss index 2860659144c70635520c6439a20cbc096ccd7b64..8000587af18ab00324b4fb32bac84ee724d55f4a 100644 --- a/scss/ionic.app.scss +++ b/scss/ionic.app.scss @@ -1055,10 +1055,21 @@ $screen-menu: 845px; /****** * Wallet TX view *******/ -.view-wallet-tx { - .hero { - height: 100px; +@media screen and (max-width: $screen-sm-max) { + .view-wallet-tx { + .hero { + height: 100px; + } + } +} +@media screen and (min-width: $screen-md) { + .view-wallet-tx { + .hero { + height: 140px; + } } +} +.view-wallet-tx { /* set 'ion-refresher' background color */ .refresher-top-bg { @extend .refresher-light; diff --git a/www/css/ionic.app.min.css b/www/css/ionic.app.min.css index c54493752afee83a174c6b30fc495a0189f1cd8d..a449644c489d90b3bb5e115d241340fb2c010d06 100644 --- a/www/css/ionic.app.min.css +++ b/www/css/ionic.app.min.css @@ -18,4 +18,4 @@ * Released under the MIT license * https://github.com/fians/Waves/blob/master/LICENSE * - */.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink,.popup .button{position:relative;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.ink-ripple{position:absolute;border-radius:50%;width:100px;height:100px;margin-top:-50px;margin-left:-50px;opacity:0;background-color:rgba(255,255,255,.4);-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;transition:all .5s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:transform,opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.ink-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink-button,.ink-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.activated.button-text,.button-clear.activated,.button-clear:active,.button-fab.activated,.button-fab:active,.button-flat.activated,.button-flat:active,.button-raised.activated,.button-raised:active,.button-text:active,.ink-button.activated,.ink-button:active,.ink-circle.activated,.ink-circle:active,.ink.activated,.ink:active,.popup .button.activated,.popup .button:active{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.button-clear,.button-clear:link,.button-clear:visited,.button-fab,.button-fab:link,.button-fab:visited,.button-flat,.button-flat:link,.button-flat:visited,.button-raised,.button-raised:link,.button-raised:visited,.button-text,.button-text:link,.button-text:visited,.ink-button,.ink-button-input,.ink-button:link,.ink-button:visited{white-space:nowrap;vertical-align:middle;cursor:pointer;border:none;outline:0;font-size:14px;text-align:center;text-decoration:none;z-index:1}.ink-button{padding:10px 15px;border-radius:2px}.ink-button-input{margin:0;padding:10px 15px}.ink-input-wrapper{border-radius:2px;vertical-align:bottom}.ink-input-wrapper.ink-button{padding:0}.ink-input-wrapper .ink-button-input{position:relative;top:0;left:0;z-index:1}.ink-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%}.ink-float{-webkit-mask-image:none;-webkit-box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12);box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12)}.ink-float:active{-webkit-box-shadow:0 8px 20px 1px rgba(0,0,0,.3);box-shadow:0 8px 20px 1px rgba(0,0,0,.3)}.ink-block{display:block}.ink-ripple{z-index:0}.button-clear .ink-ripple,.button-text .ink-ripple,.ink-dark .ink-ripple,.list .ink-ripple,[class$="-100"]>.ink-ripple,[class$="-clear"]>.ink-ripple,[class$="-light"]>.ink-ripple,[class$="-stable"]>.ink-ripple{background-color:rgba(0,0,0,.2)}.tab-item{position:relative}*{font-family:RobotoDraft,Roboto,"Helvetica Neue","Segoe UI",sans-serif}.rounded{border-radius:4px}a{cursor:pointer}.has-header.expanded{top:76px}.bar{border-bottom:none;padding:0}.bar .button{min-height:44px;min-width:44px;max-width:48px;margin-bottom:0;max-height:44px;width:48px}.bar .title+.buttons.buttons-right{right:0;top:0}.title-left,.title.title-left{left:48px}.title-right,.title.title-right{left:48px}.activated.button-text,.bar .activated.button-text,.bar .button-positive,.bar .button-positive.activated,.bar .button-positive:active,.bar .button-positive:hover,.bar .button-text,.bar .button-text:active,.bar .button-text:hover,.bar-positive,.bar-positive.activated,.bar-positive:active,.bar-positive:hover,.button-bar-positive,.button-bar-positive.activated,.button-bar-positive:active,.button-bar-positive:hover,.button-positive,.button-positive.activated,.button-positive:active,.button-positive:hover,.button-text,.button-text:active,.button-text:hover,.header-positive,.header-positive.activated,.header-positive:active,.header-positive:hover,.positive-bg,.positive-bg.activated,.positive-bg:active,.positive-bg:hover,.positive-border,.positive-border.activated,.positive-border:active,.positive-border:hover{background-color:#3f51b5;color:#fff}.bar .button-positive-900,.bar .button-positive-900.activated,.bar .button-positive-900:active,.bar .button-positive-900:hover,.bar-positive-900,.bar-positive-900.activated,.bar-positive-900:active,.bar-positive-900:hover,.button-bar-positive-900,.button-bar-positive-900.activated,.button-bar-positive-900:active,.button-bar-positive-900:hover,.button-positive-900,.button-positive-900.activated,.button-positive-900:active,.button-positive-900:hover,.header-positive-900,.header-positive-900.activated,.header-positive-900:active,.header-positive-900:hover,.positive-900-bg,.positive-900-bg.activated,.positive-900-bg:active,.positive-900-bg:hover,.positive-900-border,.positive-900-border.activated,.positive-900-border:active,.positive-900-border:hover,.view-identity .activated.member.refresher-top-bg:before,.view-identity .member .activated.hero,.view-identity .member .hero,.view-identity .member .hero:active,.view-identity .member .hero:hover,.view-identity .member.refresher-top-bg:active:before,.view-identity .member.refresher-top-bg:before,.view-identity .member.refresher-top-bg:hover:before,.view-wallet .activated.refresher-top-bg:before,.view-wallet .refresher-top-bg:active:before,.view-wallet .refresher-top-bg:before,.view-wallet .refresher-top-bg:hover:before,.view-wallet-tx .activated.refresher-top-bg:before,.view-wallet-tx .refresher-top-bg:active:before,.view-wallet-tx .refresher-top-bg:before,.view-wallet-tx .refresher-top-bg:hover:before{background-color:#1a237e;color:#fff}.bar .button-positive-100,.bar .button-positive-100.activated,.bar .button-positive-100:active,.bar .button-positive-100:hover,.bar-positive-100,.bar-positive-100.activated,.bar-positive-100:active,.bar-positive-100:hover,.button-bar-positive-100,.button-bar-positive-100.activated,.button-bar-positive-100:active,.button-bar-positive-100:hover,.button-positive-100,.button-positive-100.activated,.button-positive-100:active,.button-positive-100:hover,.header-positive-100,.header-positive-100.activated,.header-positive-100:active,.header-positive-100:hover,.positive-100-bg,.positive-100-bg.activated,.positive-100-bg:active,.positive-100-bg:hover,.positive-100-border,.positive-100-border.activated,.positive-100-border:active,.positive-100-border:hover{background-color:#c5cae9;color:#fff}.bar .button-calm,.bar .button-calm.activated,.bar .button-calm:active,.bar .button-calm:hover,.bar-calm,.bar-calm.activated,.bar-calm:active,.bar-calm:hover,.button-bar-calm,.button-bar-calm.activated,.button-bar-calm:active,.button-bar-calm:hover,.button-calm,.button-calm.activated,.button-calm:active,.button-calm:hover,.calm-bg,.calm-bg.activated,.calm-bg:active,.calm-bg:hover,.calm-border,.calm-border.activated,.calm-border:active,.calm-border:hover,.header-calm,.header-calm.activated,.header-calm:active,.header-calm:hover{background-color:#2196f3;color:#fff}.bar .button-calm-900,.bar .button-calm-900.activated,.bar .button-calm-900:active,.bar .button-calm-900:hover,.bar-calm-900,.bar-calm-900.activated,.bar-calm-900:active,.bar-calm-900:hover,.button-bar-calm-900,.button-bar-calm-900.activated,.button-bar-calm-900:active,.button-bar-calm-900:hover,.button-calm-900,.button-calm-900.activated,.button-calm-900:active,.button-calm-900:hover,.calm-900-bg,.calm-900-bg.activated,.calm-900-bg:active,.calm-900-bg:hover,.calm-900-border,.calm-900-border.activated,.calm-900-border:active,.calm-900-border:hover,.header-calm-900,.header-calm-900.activated,.header-calm-900:active,.header-calm-900:hover{background-color:#0d47a1;color:#fff}.bar .button-calm-100,.bar .button-calm-100.activated,.bar .button-calm-100:active,.bar .button-calm-100:hover,.bar-calm-100,.bar-calm-100.activated,.bar-calm-100:active,.bar-calm-100:hover,.button-bar-calm-100,.button-bar-calm-100.activated,.button-bar-calm-100:active,.button-bar-calm-100:hover,.button-calm-100,.button-calm-100.activated,.button-calm-100:active,.button-calm-100:hover,.calm-100-bg,.calm-100-bg.activated,.calm-100-bg:active,.calm-100-bg:hover,.calm-100-border,.calm-100-border.activated,.calm-100-border:active,.calm-100-border:hover,.header-calm-100,.header-calm-100.activated,.header-calm-100:active,.header-calm-100:hover{background-color:#bbdefb;color:#fff}.bar .button-royal,.bar .button-royal.activated,.bar .button-royal:active,.bar .button-royal:hover,.bar-royal,.bar-royal.activated,.bar-royal:active,.bar-royal:hover,.button-bar-royal,.button-bar-royal.activated,.button-bar-royal:active,.button-bar-royal:hover,.button-royal,.button-royal.activated,.button-royal:active,.button-royal:hover,.header-royal,.header-royal.activated,.header-royal:active,.header-royal:hover,.royal-bg,.royal-bg.activated,.royal-bg:active,.royal-bg:hover,.royal-border,.royal-border.activated,.royal-border:active,.royal-border:hover{background-color:#673ab7;color:#fff}.bar .button-royal-900,.bar .button-royal-900.activated,.bar .button-royal-900:active,.bar .button-royal-900:hover,.bar-royal-900,.bar-royal-900.activated,.bar-royal-900:active,.bar-royal-900:hover,.button-bar-royal-900,.button-bar-royal-900.activated,.button-bar-royal-900:active,.button-bar-royal-900:hover,.button-royal-900,.button-royal-900.activated,.button-royal-900:active,.button-royal-900:hover,.header-royal-900,.header-royal-900.activated,.header-royal-900:active,.header-royal-900:hover,.royal-900-bg,.royal-900-bg.activated,.royal-900-bg:active,.royal-900-bg:hover,.royal-900-border,.royal-900-border.activated,.royal-900-border:active,.royal-900-border:hover{background-color:#311b92;color:#fff}.bar .button-royal-100,.bar .button-royal-100.activated,.bar .button-royal-100:active,.bar .button-royal-100:hover,.bar-royal-100,.bar-royal-100.activated,.bar-royal-100:active,.bar-royal-100:hover,.button-bar-royal-100,.button-bar-royal-100.activated,.button-bar-royal-100:active,.button-bar-royal-100:hover,.button-royal-100,.button-royal-100.activated,.button-royal-100:active,.button-royal-100:hover,.header-royal-100,.header-royal-100.activated,.header-royal-100:active,.header-royal-100:hover,.royal-100-bg,.royal-100-bg.activated,.royal-100-bg:active,.royal-100-bg:hover,.royal-100-border,.royal-100-border.activated,.royal-100-border:active,.royal-100-border:hover{background-color:#d1c4e9;color:#fff}.balanced-bg,.balanced-bg.activated,.balanced-bg:active,.balanced-bg:hover,.balanced-border,.balanced-border.activated,.balanced-border:active,.balanced-border:hover,.bar .button-balanced,.bar .button-balanced.activated,.bar .button-balanced:active,.bar .button-balanced:hover,.bar-balanced,.bar-balanced.activated,.bar-balanced:active,.bar-balanced:hover,.button-balanced,.button-balanced.activated,.button-balanced:active,.button-balanced:hover,.button-bar-balanced,.button-bar-balanced.activated,.button-bar-balanced:active,.button-bar-balanced:hover,.header-balanced,.header-balanced.activated,.header-balanced:active,.header-balanced:hover{background-color:#4caf50;color:#fff}.balanced-900-bg,.balanced-900-bg.activated,.balanced-900-bg:active,.balanced-900-bg:hover,.balanced-900-border,.balanced-900-border.activated,.balanced-900-border:active,.balanced-900-border:hover,.bar .button-balanced-900,.bar .button-balanced-900.activated,.bar .button-balanced-900:active,.bar .button-balanced-900:hover,.bar-balanced-900,.bar-balanced-900.activated,.bar-balanced-900:active,.bar-balanced-900:hover,.button-balanced-900,.button-balanced-900.activated,.button-balanced-900:active,.button-balanced-900:hover,.button-bar-balanced-900,.button-bar-balanced-900.activated,.button-bar-balanced-900:active,.button-bar-balanced-900:hover,.header-balanced-900,.header-balanced-900.activated,.header-balanced-900:active,.header-balanced-900:hover{background-color:#1b5e20;color:#fff}.balanced-100-bg,.balanced-100-bg.activated,.balanced-100-bg:active,.balanced-100-bg:hover,.balanced-100-border,.balanced-100-border.activated,.balanced-100-border:active,.balanced-100-border:hover,.bar .balanced-100-bg:hover,.bar .button-balanced-100,.bar .button-balanced-100.activated,.bar .button-balanced-100:active,.bar-balanced-100,.bar-balanced-100.activated,.bar-balanced-100:active,.bar-balanced-100:hover,.button-balanced-100,.button-balanced-100.activated,.button-balanced-100:active,.button-balanced-100:hover,.button-bar-balanced-100,.button-bar-balanced-100.activated,.button-bar-balanced-100:active,.button-bar-balanced-100:hover,.header-balanced-100,.header-balanced-100.activated,.header-balanced-100:active,.header-balanced-100:hover{background-color:#c8e6c9;color:#fff}.bar .button-energized,.bar .button-energized.activated,.bar .button-energized:active,.bar .button-energized:hover,.bar-energized,.bar-energized.activated,.bar-energized:active,.bar-energized:hover,.button-bar-energized,.button-bar-energized.activated,.button-bar-energized:active,.button-bar-energized:hover,.button-energized,.button-energized.activated,.button-energized:active,.button-energized:hover,.energized-bg,.energized-bg.activated,.energized-bg:active,.energized-bg:hover,.energized-border,.energized-border.activated,.energized-border:active,.energized-border:hover,.header-energized,.header-energized.activated,.header-energized:active,.header-energized:hover{background-color:#ff9800;color:#fff}.bar .button-energized-900,.bar .button-energized-900.activated,.bar .button-energized-900:active,.bar .button-energized-900:hover,.bar-energized-900,.bar-energized-900.activated,.bar-energized-900:active,.bar-energized-900:hover,.button-bar-energized-900,.button-bar-energized-900.activated,.button-bar-energized-900:active,.button-bar-energized-900:hover,.button-energized-900,.button-energized-900.activated,.button-energized-900:active,.button-energized-900:hover,.energized-900-bg,.energized-900-bg.activated,.energized-900-bg:active,.energized-900-bg:hover,.energized-900-border,.energized-900-border.activated,.energized-900-border:active,.energized-900-border:hover,.header-energized-900,.header-energized-900.activated,.header-energized-900:active,.header-energized-900:hover{background-color:#e65100;color:#fff}.bar .button-energized-100,.bar .button-energized-100.activated,.bar .button-energized-100:active,.bar .button-energized-100:hover,.bar-energized-100,.bar-energized-100.activated,.bar-energized-100:active,.bar-energized-100:hover,.button-bar-energized-100,.button-bar-energized-100.activated,.button-bar-energized-100:active,.button-bar-energized-100:hover,.button-energized-100,.button-energized-100.activated,.button-energized-100:active,.button-energized-100:hover,.energized-100-bg,.energized-100-bg.activated,.energized-100-bg:active,.energized-100-bg:hover,.energized-100-border,.energized-100-border.activated,.energized-100-border:active,.energized-100-border:hover,.header-energized-100,.header-energized-100.activated,.header-energized-100:active,.header-energized-100:hover,.modal.modal-help .activated.row.selected,.modal.modal-help .row.selected,.modal.modal-help .row.selected:active,.modal.modal-help .row.selected:hover{background-color:#ffe0b2}.assertive-bg,.assertive-bg.activated,.assertive-bg:active,.assertive-bg:hover,.assertive-border,.assertive-border.activated,.assertive-border:active,.assertive-border:hover,.bar .button-assertive,.bar .button-assertive.activated,.bar .button-assertive:active,.bar .button-assertive:hover,.bar-assertive,.bar-assertive.activated,.bar-assertive:active,.bar-assertive:hover,.button-assertive,.button-assertive.activated,.button-assertive:active,.button-assertive:hover,.button-bar-assertive,.button-bar-assertive.activated,.button-bar-assertive:active,.button-bar-assertive:hover,.header-assertive,.header-assertive.activated,.header-assertive:active,.header-assertive:hover{background-color:#f44336;color:#fff}.assertive-900-bg,.assertive-900-bg.activated,.assertive-900-bg:active,.assertive-900-bg:hover,.assertive-900-border,.assertive-900-border.activated,.assertive-900-border:active,.assertive-900-border:hover,.bar .button-assertive-900,.bar .button-assertive-900.activated,.bar .button-assertive-900:active,.bar .button-assertive-900:hover,.bar-assertive-900,.bar-assertive-900.activated,.bar-assertive-900:active,.bar-assertive-900:hover,.button-assertive-900,.button-assertive-900.activated,.button-assertive-900:active,.button-assertive-900:hover,.button-bar-assertive-900,.button-bar-assertive-900.activated,.button-bar-assertive-900:active,.button-bar-assertive-900:hover,.header-assertive-900,.header-assertive-900.activated,.header-assertive-900:active,.header-assertive-900:hover{background-color:#b71c1c;color:#fff}.assertive-100-bg,.assertive-100-bg.activated,.assertive-100-bg:active,.assertive-100-bg:hover,.assertive-100-border,.assertive-100-border.activated,.assertive-100-border:active,.assertive-100-border:hover,.bar .button-assertive-100,.bar .button-assertive-100.activated,.bar .button-assertive-100:active,.bar .button-assertive-100:hover,.bar-assertive-100,.bar-assertive-100.activated,.bar-assertive-100:active,.bar-assertive-100:hover,.button-assertive-100,.button-assertive-100.activated,.button-assertive-100:active,.button-assertive-100:hover,.button-bar-assertive-100,.button-bar-assertive-100.activated,.button-bar-assertive-100:active,.button-bar-assertive-100:hover,.header-assertive-100,.header-assertive-100.activated,.header-assertive-100:active,.header-assertive-100:hover{background-color:#ffcdd2;color:#fff}.bar .button-stable,.bar .button-stable.activated,.bar .button-stable:active,.bar .button-stable:hover,.bar-stable,.bar-stable.activated,.bar-stable:active,.bar-stable:hover,.button-bar-stable,.button-bar-stable.activated,.button-bar-stable:active,.button-bar-stable:hover,.button-stable,.button-stable.activated,.button-stable:active,.button-stable:hover,.header-stable,.header-stable.activated,.header-stable:active,.header-stable:hover,.stable-bg,.stable-bg.activated,.stable-bg:active,.stable-bg:hover,.stable-border,.stable-border.activated,.stable-border:active,.stable-border:hover{background-color:#e0e0e0;color:#fff}.icon-help,.icon-help *,.icon-help:active,.icon-help:active *,.icon-help:hover,.icon-help:hover *,.positive,.positive *,.positive:active,.positive:active *,.positive:hover,.positive:hover *,.text-editable:active:hover,.text-editable:active:hover *,.text-editable:hover,.text-editable:hover *{color:#3f51b5}.positive-900,.positive-900 *,.positive-900:active,.positive-900:active *,.positive-900:hover,.positive-900:hover *{color:#3f51b5}.positive-100,.positive-100 *,.positive-100:active,.positive-100:active *,.positive-100:hover,.positive-100:hover *{color:#c5cae9}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#2196f3}.calm-900,.calm-900 *,.calm-900:active,.calm-900:active *,.calm-900:hover,.calm-900:hover *{color:#0d47a1}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#bbdefb}.royal,.royal *,.royal:active,.royal:active *,.royal:hover,.royal:hover *{color:#673ab7}.royal-900,.royal-900 *,.royal-900:active,.royal-900:active *,.royal-900:hover,.royal-900:hover *{color:#311b92}.royal-100,.royal-100 *,.royal-100:active,.royal-100:active *,.royal-100:hover,.royal-100:hover *{color:#d1c4e9}.balanced,.balanced *,.balanced:active,.balanced:active *,.balanced:hover,.balanced:hover *{color:#4caf50}.balanced-900,.balanced-900 *,.balanced-900:active,.balanced-900:active *,.balanced-900:hover,.balanced-900:hover *{color:#1b5e20}.balanced-100,.balanced-100 *,.balanced-100:active,.balanced-100:active *,.balanced-100:hover,.balanced-100:hover *{color:#c8e6c9}.energized,.energized *,.energized:active,.energized:active *,.energized:hover,.energized:hover *{color:#ff9800}.energized-900,.energized-900 *,.energized-900:active,.energized-900:active *,.energized-900:hover,.energized-900:hover *{color:#e65100}.energized-100,.energized-100 *,.energized-100:active,.energized-100:active *,.energized-100:hover,.energized-100:hover *{color:#ffe0b2}.assertive,.assertive *,.assertive:active,.assertive:active *,.assertive:hover,.assertive:hover *,.icon-alert,.icon-alert *,.icon-alert:active,.icon-alert:active *,.icon-alert:hover,.icon-alert:hover *{color:#f44336}.assertive-900,.assertive-900 *,.assertive-900:active,.assertive-900:active *,.assertive-900:hover,.assertive-900:hover *{color:#b71c1c}.assertive-100,.assertive-100 *,.assertive-100:active,.assertive-100:active *,.assertive-100:hover,.assertive-100:hover *{color:#ffcdd2}.stable,.stable *,.stable:active,.stable:active *,.stable:hover,.stable:hover *{color:#e0e0e0}.light,.light *,.light:active,.light:active *,.light:hover,.light:hover *{color:#fff}.button-text-dark,.button-text-dark *,.button-text-dark:active,.button-text-dark:active *,.button-text-dark:hover,.button-text-dark:hover *,.dark,.dark *,.dark:active,.dark:active *,.dark:hover,.dark:hover *{color:#444}.light-border{border-color:#ddd}.navbar-default .navbar-nav>li>a{margin:0;padding-right:26px;padding-left:26px;border-top:3px solid transparent;color:#bfd5c9;opacity:1}.mid-bar{padding:16px}.mid-bar h1,.mid-bar h2,.mid-bar h3,.mid-bar h4,.mid-bar h5,.mid-bar h6{color:#fff;margin-bottom:5px}.mid-bar p{color:rgba(255,255,255,.5);margin-bottom:0}.card>.item-avatar,.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:95px}.item,.item-complex .item-content,.item-radio .item-content{background-color:transparent}.dark-bg h2,.item.dark-bg h2,.view-identity .hero h2,.view-identity .item.hero h2,.view-identity .item.refresher-top-bg:before h2,.view-identity .refresher-top-bg:before h2{color:#fff}.tabs-striped .tabs{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar .button.button-clear,.bar .button.button-text{color:#fff}#menu .footer .bar .button.button-icon .icon-help:before,.bar .button.button-icon #menu .footer .icon-help:before,.bar .button.button-icon .icon-alert:before,.bar .button.button-icon .icon-help:before,.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before{vertical-align:top;font-size:24px}.menu{background-color:transparent}.button-icon.button.activated,.button-icon.button.active{opacity:initial}.popover{opacity:0;position:absolute;right:8px;transform:translate(50%,-50%) scale(0,0);transition:transform .3s ease-in-out,opacity .3s ease-in-out;top:8px}.popover.ng-enter{opacity:1;transform:translate(0,-14px) scale(1,1);transition:transform .3s ease-in-out,opacity .3s ease-in-out}.popover.ng-leave{opacity:0;transform:translate(50%,-50%) scale(0,0);transition:transform .3s ease-in-out,opacity .3s ease-in-out}.button{overflow:hidden!important}@font-face{font-family:Cesiumicons;src:url(../fonts/cesiumicons.eot?v=1.2);src:url(../fonts/cesiumicons.eot?v=1.2#iefix) format("embedded-opentype"),url(../fonts/cesiumicons.ttf?v=1.2) format("truetype"),url(../fonts/cesiumicons.woff?v=1.2) format("woff"),url(../fonts/cesiumicons.woff) format("woff"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9ImNlc2l1bWljb25zIiBob3Jpei1hZHYteD0iMTAyNCI+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMDI0IiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTY0IiAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iMTAyNCIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwOyIgaG9yaXotYWR2LXg9IjUxMiIgZD0iIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMDsiIGQ9Ik03MDQuNjMxIDU3MS4xMjhjLTg4LjYxMy0xNDEuNDA5LTIyMC40MDMtMjYzLjQwOC0zODUuNTIxLTMwNS40NzMtNjcuMjUyLTE4LjQ5My0xMzcuMTEyLTI1LjgyMi0yMDYuNzA1LTI3LjAyMiA4NS41NDktMTYzLjA5NSAyNzUuODEtMjYyLjI3MiA0NTguNTQ1LTIzNy45NSAxODEuMTY2IDE5LjA3NiAzNDEuNjYyIDE1Ny4yMTUgMzg4LjMzOCAzMzMuMTYyLTU0LjYwMSAxMDMuOTI0LTE0MS40OSAxOTcuODc0LTI1NC42NTYgMjM3LjI4M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZD0iTTcwNS45MzcgNTcyLjA4OGMtMTYuNzU2LTExMS44MTUtODUuMDg2LTIwNy4yLTEwNy4yNjctMzE3LjIyMS05LjE4OC01MS41NDEgMjYuNzg2LTExMC42NDItMTQuNTc5LTE1NS41MTQtNDYuMjEtNTIuNDAyLTExOC45MDctNjUuMzc5LTE4MS45MzgtODcuNDY2IDE3Ny43My00Ny45MSAzNzkuNjYgMjQuMjE1IDQ4NS45ODIgMTc0Ljc4IDUwLjU1IDY5LjExNiA4MC45OTIgMTUyLjY4OSA4Ni42OTYgMjM4LjEyNS00Ni4wODUgOS40ODMtNjkuNDM2IDU1LjAyMC0xMTAuNTU2IDc0LjIwMS00OS45MTcgMjkuOTkyLTEwMy41NzEgNTMuNTE0LTE1OC4zMzkgNzMuMDk1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDI7IiBkPSJNNzA0LjQyMiA1NjMuNGMtMjMuNzg2LTUxLjQwOC0yNi40MzYtMTA5Ljc1Ny01NC4wODQtMTU5LjcyNi03LjIxMS0zMi45MDktNDEuMDkxLTg0LjI4OC0yOS40OTgtMTA2LjQ4OSAxMDEuNTktMTYuNTQyIDIwMy4xODEtMzMuMDg1IDMwNC43NzEtNDkuNjI3IDE4LjI3OCAzNS42NDkgMzEuODQ1IDczLjcxMSA0MC4yMDEgMTEyLjg5NC03My44NjggNzkuMjY5LTE1MC40NzEgMTYzLjQyNi0yNTUuMzU4IDIwMC42MzVsLTYuMDMyIDIuMzE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDM7IiBkPSJNNjY4LjYxNiA0NDUuNzk0Yy0yMC45ODMtMzEuNjc5LTI3LjI0NS03MC40MDgtNDQuMTA0LTEwNC40MjYtMTYuMjIxLTM1LjY4OS01MS40MTUtMTE5LjQ3MiAxOS42ODQtMTA5Ljg5IDUwLjQ1OSAyNC42NTQgOTUuMDUwLTEzLjM3OSAxNDUuODE5LTE2LjkyOSA0MC4zMTctNS41NjEgODIuMTM3LTQuNjY1IDEyMS4yOTUgNy4yMDEgMTQuOTgzIDMxLjcxNiA1MC42ODYgODIuNTk0IDM4LjcyNiAxMDguMzA1LTQ4LjU2MyA5Ljg2Ny05OS40NzMgMTMuODc5LTE0NS4yMTUgMzMuNjkgMTkuMjczIDQ1LjU5NS01NC45NzQgNTUuNDY1LTg5Ljk3NiA2OC44NC0xNS4zNDEgNC42MzctMzAuNzY1IDguOTk4LTQ2LjIyOSAxMy4yMDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGQ9Ik02MDcuNzE0IDE2MC44NzNjLTMwLjE4My04NS4wMDItMTIzLjE4Ni0xMTkuOTQ4LTIwMS44MzItMTQ1Ljk0MyA1LjAyMC0xMS4xODYgNzEuMTg2LTE2LjMyNSAxMDAuNzg3LTE3LjMyNiAxMTcuMTE1LTMuMDY3IDIzNC41NDIgNDEuMDg2IDMyMC40OCAxMjAuNzUyLTc0LjgzMSAyLjgzNC0xNDkuNTQ5IDE0Ljc4NC0yMTkuNDM1IDQyLjUxN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA1OyIgZD0iTTU5OC40ODUgMjY4LjUzNGMtNC4xNzQtNDIuNzY0LTI1LjE4OC0xMTUuOTM2IDM0LjAyOC0xMjguNDk0IDU4LjUzNy0xNC41ODEgMTE5LjQzNC0xOC41MTEgMTc3LjA2Ny0zNy4wMjAgNDUuMjAxIDM3LjQ0NyA4My4xNjcgODMuNTk5IDExMS4xMiAxMzUuMjE3LTEwNy45OC0xLjY4MS0yMTkuNDMxLTEwLjIwNC0zMjIuMjE1IDMwLjI5N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA2OyIgZD0iTTYwNy4yMSA2MDAuNzhjMTguOTU5IDIuMjkgMzUuMjM0IDEuODk2IDI4LjI4OC0yMS43MiA1LjkzNS0xNC42NDQtMzYuNjE0LTE0LjYwNy0yOC4yODggMS44NDEgMCA2LjYyNiAwIDEzLjI1MiAwIDE5Ljg3OXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA3OyIgZD0iTTQ0NC41NDEgNzAyLjk2MmMyMS4wODggMy45NTggMzIuNjU0LTEuNjA0IDI2Ljk1NC0yNC40MzUtNS42NzMtMTEuMDcxLTM3LjY5Ny03LjY1LTI2Ljk1NCAxNC4wMzYgMCAzLjQ2NiAwIDYuOTMzIDAgMTAuMzk5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDg7IiBkPSJNNTA0LjUzMiA2ODEuNzhjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwOTsiIGQ9Ik01MDIuNTM5IDQxNy40MjZjMTguNzg2IDAgMzcuNTcyIDAgNTYuMzU4IDAgMC0xOC43ODYgMC0zNy41NzIgMC01Ni4zNTgtMTguNzg2IDAtMzcuNTcyIDAtNTYuMzU4IDAgMCAxOC43ODYgMCAzNy41NzIgMCA1Ni4zNTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYTsiIGQ9Ik01MDguODU2IDYzMC4xNTdjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGQ9Ik01NjkuMTAzIDQ3NC4xNGMxOC45NyAxLjkyOSAzNi40OTIgMi40MDkgMjkuNDA0LTIxLjcyIDYuODk0LTE1LjkzMi0zNy4yMzUtMTUuODMzLTI5LjQwNCAwLjcyNSAwIDYuOTk4IDAgMTMuOTk2IDAgMjAuOTk0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGM7IiBkPSJNNjI3LjA4NyA1MzEuNDAzYzE5LjM1IDcuODY5IDI5LjQwOC05LjU4MiAxOS4zMzgtMjIuMDUzLTIxLjU4My00LjE0Ny0yMC44MDEgMy4zODctMTkuMzM4IDIyLjA1M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBkOyIgZD0iTTU0Ny42MjcgNTI1LjIzMWMxMy40NzgtMy4yOTggNDMuMjM2IDkuNjgyIDM2Ljc1NS0xMy41NzUgNi4yNTQtMjMuMDMwLTcuMDU3LTI2LjQ5Ni0yNy4xNS0yMy4xOC0xOC41NjctNS40OTYtNS44NzEgMjYuNTI3LTkuNjA1IDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBlOyIgZD0iTTQwMy44MDIgMzM1LjAyNGMxNC40MjYtMS45OTggMzYuNzMgMy44ODIgNDYuNTU2LTIuNzE1LTIuMDIwLTE0LjMxNSAzLjkxMy0zNi41ODQtMi43MTUtNDYuMjkyLTEyLjg3OSAzLjU0NS00MC4wMTctNy4xNjktNDMuODQxIDUuNDMgMCAxNC41MjYgMCAyOS4wNTEgMCA0My41Nzd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwZjsiIGQ9Ik00NDcuOTA3IDQwNi4wODRjMTYuODM2LTAuMTE3IDM5LjY3NyA1Ljc3IDMxLjg1NC0xOS4wMDUgNy44Mi0yNC4zNTUtMTYuMDgwLTE2Ljk5LTMxLjg1NC0xNy43NSAwIDEyLjI1MiAwIDI0LjUwMyAwIDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEwOyIgZD0iTTUxNS4yOTEgNDY4LjU2N2MtMTguOTcxIDEuODk0LTM2LjYxMiAyLjQ1OS0yOS41MS0yMS43Mi0yLjUzOC0xMi45OSAzOS42MjctMTMuMzc0IDI5LjUxIDUuODkxIDAgNS4yNzYgMCAxMC41NTMgMCAxNS44Mjl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGQ9Ik01NzguNDg2IDU3Mi44NjZjMjEuMjMyIDQuOTIgMjkuNDY5LTMuMTU2IDI0LjUwMy0yNC40MzUtMTMuMTA0LTguNTMyLTMyLjk1NS0yLjEwNi0yNC41MDMgMTkuMjAxdjUuMjM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTI7IiBkPSJNNjAxLjQ3MSA2NDEuNjg5Yy0xOC45NzEgMS44OTQtMzYuNjEyIDIuNDU5LTI5LjUxLTIxLjcyLTIuNTM4LTEyLjk5IDM5LjYyNy0xMy4zNzQgMjkuNTEgNS44OTEgMCA1LjI3NiAwIDEwLjU1MyAwIDE1LjgyOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE1OyIgZ2x5cGgtbmFtZT0iZGlhc3BvcmEiIGhvcml6LWFkdi14PSIxMDY0IiBkPSJNNjcwLjEgMjIuMTA5Yy0yOC42OTIgNDAuMDQ2LTczLjQ1OSAxMDIuNTcxLTk5LjQ4MiAxMzguOTQ1LTI2LjU3OSAzNy4xNTEtNDguMjAyIDY2LjE0Ni00OS4zNCA2Ni4xNjEtMS4xNjkgMC4wMTUtNDIuOTg2LTU2LjE5Ni05OC45MTItMTMyLjk2MS01My4yODgtNzMuMTQzLTk3LjMzLTEzMi45ODctOTcuODcyLTEzMi45ODctMS41MTYgMC0xOTIuMTE0IDEzNC4yNS0xOTIuNjA1IDEzNS42NjMtMC4yMzcgMC42ODQgNDIuODUgNjMuOTM1IDk1Ljc1MSAxNDAuNTU5czk2LjE4MiAxNDAuNTIzIDk2LjE4MiAxNDEuOTk5YzAgMi4zOC0xNy4xNDIgOC4zOTgtMTUxLjYwNSA1My4yMjYtODMuMzgzIDI3Ljc5OC0xNTIuNDIyIDUwLjg2MS0xNTMuNDIgNTEuMjUxLTEuMzg4IDAuNTQyIDYuNTUgMjcuMTAzIDMzLjc4MyAxMTMuMDMyIDE5LjU3OCA2MS43NzggMzYuMDQwIDExMi44MjggMzYuNTgxIDExMy40NDRzNzMuMDExLTIyLjU3NCAxNjEuMDQzLTUxLjUzNGM4OC4wMzMtMjguOTYgMTYwLjc5Ni01Mi42NTQgMTYxLjY5Ni01Mi42NTNzMS45MTkgMS4zNDggMi4yNjMgMi45OTRjMC4zNDQgMS42NDYgMS4xMDQgNzYuNjAxIDEuNjg4IDE2Ni41NjZzMS41NDYgMTY0LjMyMiAyLjEzNyAxNjUuMjM2YzAuODQ3IDEuMzA5IDI1LjU3NiAxLjY1OCAxMTYuMzY0IDEuNjQyIDYzLjQwOC0wLjAxMSAxMTUuOTQ4LTAuNDYgMTE2Ljc1Ni0wLjk5NyAxLjAxOC0wLjY3NyAyLjc1Ny01MC4xMzggNS42Ny0xNjEuMjI2IDQuNzgzLTE4Mi40MDggNC44ODYtMTg0Ljg1MiA3Ljc5NS0xODQuODUyIDEuMTI4IDAgNzAuODk2IDIzLjM1MyAxNTUuMDQxIDUxLjg5NnMxNTMuNCA1MS40MzMgMTUzLjkwMSA1MC44NjhjMS43LTEuOTE4IDcwLjcxNS0yMjYuNjAyIDY5Ljg2NS0yMjcuNDUxLTAuNDY0LTAuNDY0LTcwLjY5LTI0LjUxNC0xNTYuMDU2LTUzLjQ0NC0xMTcuNDMyLTM5Ljc5Ny0xNTUuMzE1LTUzLjE0My0xNTUuNjMzLTU0LjgyNy0wLjIzNS0xLjI0NCA0MC4xNDktNjEuNTk0IDkxLjQ5OS0xMzYuNzM3IDUwLjU1NS03My45ODEgOTEuNzMzLTEzNS4wNjIgOTEuNTA3LTEzNS43MzctMC41MjEtMS41NDktMTg5LjY4MS0xNDAuODg0LTE5MS4yNjMtMTQwLjg4NC0wLjY0MiAwLTI0LjY0MyAzMi43NjUtNTMuMzM1IDcyLjgxeiIgLz4KPC9mb250PjwvZGVmcz48L3N2Zz4=) format("svg");font-weight:400;font-style:normal}.cesiumicons,.cion,.ion-library:before,.ion-office:before,.ion-social-diaspora:before,.ion-social-duniter:before{display:inline-block;font-family:Cesiumicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-social-duniter:before{content:""}.ion-social-diaspora:before{content:""}.ion-office:before{content:""}.ion-library:before{content:""}@media screen and (max-width:400px){@-ms-viewport{width:320px}.item .badge{right:16px}}@media screen and (max-width:767px){.hidden-xs{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:300px!important;display:block!important}.badge:empty{display:none!important}.item .badge{right:16px}.padding-top-xs{padding-top:10px}}@media screen and (min-width:768px){.hidden-xs{display:inherit;visibility:visible}.row.hidden-xs{display:flex!important}.button.hidden-xs{display:inline-block}.item-toggle .toggle{right:32px}}@media screen and (max-width:767px){.visible-xs{display:inherit!important;visibility:visible!important}.button.visible-xs{display:block!important}}@media screen and (min-width:768px){.visible-xs{display:none!important;visibility:hidden!important}}@media screen and (max-width:767px){.padding-xs{padding:16px!important}}@media screen and (min-width:768px){.padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-padding-xs{padding:0!important}}@media screen and (min-width:768px){.no-padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-margin-xs{margin:0!important}}@media screen and (min-width:768px){.no-margin-xs{margin:inherit}}@media screen and (max-width:991px) and (min-width:768px){.hidden-sm,.row-header.hidden-sm{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (min-width:992px){.hidden-sm{display:inherit;visibility:visible}.row.hidden-sm{display:flex!important}.button.hidden-sm{display:flex}#menu .footer .popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip .icon-center.icon-alert .button.hidden-sm,.popover-helptip .icon-center.icon-help .button.hidden-sm,.popover-helptip .icon-left.icon-alert .button.hidden-sm,.popover-helptip .icon-left.icon-help .button.hidden-sm,.popover-helptip .icon-right.icon-alert .button.hidden-sm,.popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon.icon-bottom-center .button.hidden-sm,.popover-helptip .icon.icon-bottom-left .button.hidden-sm,.popover-helptip .icon.icon-bottom-right .button.hidden-sm,.popover-helptip .icon.icon-center .button.hidden-sm,.popover-helptip .icon.icon-left .button.hidden-sm,.popover-helptip .icon.icon-right .button.hidden-sm,.pull-left .button.hidden-sm,.pull-right .button.hidden-sm{display:inline-block}}@media screen and (max-width:767px){.hidden-sm{display:inherit;visibility:visible}}@media screen and (max-width:991px){.visible-sm{display:inherit!important;visibility:visible!important}.button.visible-sm{display:block!important}}@media screen and (min-width:992px){.visible-sm{display:none;visibility:hidden}}@media screen and (max-width:767px){.visible-sm{display:none;visibility:hidden}}@media screen and (max-width:991px){body{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEbSURBVDiNndMxK4ZRGMbx3zmRMrwvM2XCQFFik/IJpCw+hJLPgfIhLBY+gEEGJQPFwGZg9TIoBrfhOfSQHl7XeM7/fw3nvk+KCPWklEawgGlMlOMrnOMoIm6/8B8FKaWMFazhGQ94LFwbg+jHDvYi4u2zIKWUsIk5XNfE72ljHKfYiIjI5WIZMzhrkJW7s8IuQ8IwdnGDpwa5nhbGsJqxiNcuZIV9xWJWvXY3cr1kOmMSnX8UdDCZEb+RDYmMS9WMu80gLrNqw1r/KGjhPOMQvaol+Wva6MFhjoh7bGEUuVGrkgu7HRH3H8IBTjCLgQZ5oDAnxfnymRKWsI4X1Zw7NbGFPmxjP4qYfvjOQ5jHlGpHqCZ1geOIuKvz76QSW1T3cwmnAAAAAElFTkSuQmCC),auto}}@media screen and (min-width:992px){body{cursor:inherit}}@media screen and (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (min-width:1200px){.hidden-md{display:inherit;visibility:visible}}@media screen and (max-width:991px){.hidden-md{display:inherit;visibility:visible}}@media screen and (min-width:992px) and (max-width:1199px){.visible-md{display:inherit!important;visibility:visible!important}}@media screen and (min-width:1200px){.visible-md{display:none;visibility:hidden}}@media screen and (max-width:991px){.visible-md{display:none;visibility:hidden}}@media screen and (min-width:1200px){.hidden-lg{display:none!important;visibility:hidden!important}.visible-lg{display:inherit!important;visibility:visible!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:450px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (max-width:1199px){.hidden-lg{display:inherit;visibility:visible}}@media screen and (max-width:1199px){.visible-lg{display:none;visibility:hidden}}@media screen and (max-width:768px){.no-padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-margin-xs{margin:0!important}}@media screen and (min-width:992px){.disable-user-behavior,.scroll,body,html{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;-webkit-touch-callout:default!important;-webkit-tap-highlight-color:#387ef5;-webkit-user-drag:none!important;touch-action:auto!important;-ms-touch-action:auto!important;-ms-content-zooming:none!important}}@media screen and (max-width:844px){.hidden-nomenu{display:none!important;visibility:hidden!important}.visible-nomenu{display:inherit!important;visibility:visible!important}}@media screen and (min-width:845px){.hidden-nomenu{display:inherit;visibility:visible}.visible-nomenu{display:none!important;visibility:hidden!important}}@media screen and (min-width:845px){.hidden-menu{display:none!important;visibility:hidden!important}.visible-menu{display:inherit!important;visibility:visible!important}}@media screen and (max-width:844px){.hidden-menu{display:inherit;visibility:visible}.visible-menu{display:none;visibility:hidden}}.item.item-icon-right .item-select select,.item.item-icon-right.item-select select{right:48px;padding:0 20px 0 16px}.item.item-icon-right .item-select:after,.item.item-icon-right.item-select:after{right:56px}#unitPopover .item.selected,.popover-unit .item.selected{background-color:#f8f8f8}@media (max-width:767px){.popover-share{width:auto}}.popover-share{height:110px}.popover-share .bar{box-shadow:none!important}.popover-share .bar-header{height:20px}.popover-share .bar-header .title{font-size:12px;font-weight:700;height:20px;line-height:19px;max-width:260px;margin:0 5px;text-align:left}.popover-share .bar-header span{font-size:10px;margin:5px;height:20px;position:absolute;right:0;top:0;margin:0 5px;display:block}.popover-share .has-header{top:20px}.popover-share .has-footer{bottom:40px}.popover-share .bar-footer{color:#387ef5;height:40px}.popover-share .bar-footer .button-icon{padding:0 5px}.popover-share .bar-footer .button-close{position:absolute;right:0;bottom:0}.popover-share .item{padding:5px}.popover-share .item input{border:1px solid grey;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.3)}.popover-share .item input:focus{border-color:#387ef5;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.3),0 0 8px #08c}.popover-share .list .item{border-bottom:0!important}.popover-light .bar-footer,.popover-light .bar-header,.popover-notification .bar-footer,.popover-notification .bar-header{height:30px}.popover-light .bar-footer .title,.popover-light .bar-header .title,.popover-notification .bar-footer .title,.popover-notification .bar-header .title{color:#000;text-align:left;left:0!important;font-size:14px;line-height:30px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-light .bar-footer .icon.icon-center,.popover-helptip .popover-light .bar-footer .icon.icon-right,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-header .icon-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-center.icon-help,.popover-helptip .popover-light .bar-header .icon-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-center,.popover-helptip .popover-light .bar-header .icon.icon-bottom-right,.popover-helptip .popover-light .bar-header .icon.icon-center,.popover-helptip .popover-light .bar-header .icon.icon-right,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-footer .icon.icon-center,.popover-helptip .popover-notification .bar-footer .icon.icon-right,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-header .icon-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-header .icon.icon-center,.popover-helptip .popover-notification .bar-header .icon.icon-right,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-light .bar-footer .popover-helptip .icon.icon-center,.popover-light .bar-footer .popover-helptip .icon.icon-right,.popover-light .bar-footer .pull-right,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip .icon-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-center.icon-help,.popover-light .bar-header .popover-helptip .icon-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-center,.popover-light .bar-header .popover-helptip .icon.icon-bottom-right,.popover-light .bar-header .popover-helptip .icon.icon-center,.popover-light .bar-header .popover-helptip .icon.icon-right,.popover-light .bar-header .pull-right,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-footer .popover-helptip .icon.icon-center,.popover-notification .bar-footer .popover-helptip .icon.icon-right,.popover-notification .bar-footer .pull-right,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-header .popover-helptip .icon.icon-center,.popover-notification .bar-header .popover-helptip .icon.icon-right,.popover-notification .bar-header .pull-right{margin-right:10px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-light .bar-footer .icon.icon-left,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-header .icon-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-left,.popover-helptip .popover-light .bar-header .icon.icon-left,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-footer .icon.icon-left,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-header .icon-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-header .icon.icon-left,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-light .bar-footer .popover-helptip .icon.icon-left,.popover-light .bar-footer .pull-left,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip .icon-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-left,.popover-light .bar-header .popover-helptip .icon.icon-left,.popover-light .bar-header .pull-left,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-footer .popover-helptip .icon.icon-left,.popover-notification .bar-footer .pull-left,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-header .popover-helptip .icon.icon-left,.popover-notification .bar-header .pull-left{margin-left:10px}.popover-light .bar-footer a,.popover-light .bar-header a,.popover-notification .bar-footer a,.popover-notification .bar-header a{font-size:14px;text-decoration:none;line-height:30px}.popover-light .has-footer,.popover-notification .has-footer{bottom:28px}.popover-light .has-header,.popover-notification .has-header{top:30px}.popover-light .item.unread,.popover-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}.popover-light .item-avatar,.popover-notification .item-avatar{padding-top:12px;padding-bottom:8px;padding-left:76px;padding-right:10px;min-height:80px!important}#menu .footer .popover-light .item-avatar h4 i.icon-help,#menu .footer .popover-notification .item-avatar h4 i.icon-help,.popover-light .item-avatar h4 #menu .footer i.icon-help,.popover-light .item-avatar h4 i.icon,.popover-light .item-avatar h4 i.icon-alert,.popover-light .item-avatar h4 i.icon-help,.popover-notification .item-avatar h4 #menu .footer i.icon-help,.popover-notification .item-avatar h4 i.icon,.popover-notification .item-avatar h4 i.icon-alert,.popover-notification .item-avatar h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.popover-light .item-avatar .item-content .item-image,.popover-light .item-avatar .item-content>img:first-child,.popover-light .item-avatar .item-image,.popover-light .item-avatar>img:first-child,.popover-notification .item-avatar .item-content .item-image,.popover-notification .item-avatar .item-content>img:first-child,.popover-notification .item-avatar .item-image,.popover-notification .item-avatar>img:first-child{top:12px;left:10px}.popover-light .button.button-small,.popover-notification .button.button-small{height:30px;font-size:12px;padding:0 5px!important;line-height:30px}.popover-invitation,.popover-network,.popover-peer-info{width:420px}.popover-endpoints .item .badge,.popover-peer-info .item .badge{right:16px}.popover-endpoints .item .badge.badge-secondary,.popover-peer-info .item .badge.badge-secondary{top:35px!important}.popover-unit{height:108px;max-width:115px}.view-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}#menu .footer .view-notification ion-item h4 i.icon-help,.view-notification ion-item h4 #menu .footer i.icon-help,.view-notification ion-item h4 i.icon,.view-notification ion-item h4 i.icon-alert,.view-notification ion-item h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.bar.bar-header .button.button-clear.button-icon i.ion-android-more-vertical,.bar.bar-header .button.button-clear.button-icon.ion-android-more-vertical,.bar.bar-header .button.button-icon.button-text i.ion-android-more-vertical,.bar.bar-header .button.button-icon.ion-android-more-vertical.button-text{padding-left:8px;padding-right:8px}#menu .footer .popover-helptip .bar .buttons.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-right.icon-help,.bar .buttons.pull-right,.bar .popover-helptip #menu .footer .buttons.icon-bottom-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-bottom-right.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon-bottom-center.icon-alert,.bar .popover-helptip .buttons.icon-bottom-center.icon-help,.bar .popover-helptip .buttons.icon-bottom-right.icon-alert,.bar .popover-helptip .buttons.icon-bottom-right.icon-help,.bar .popover-helptip .buttons.icon-center.icon-alert,.bar .popover-helptip .buttons.icon-center.icon-help,.bar .popover-helptip .buttons.icon-right.icon-alert,.bar .popover-helptip .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon.icon-bottom-center,.bar .popover-helptip .buttons.icon.icon-bottom-right,.bar .popover-helptip .buttons.icon.icon-center,.bar .popover-helptip .buttons.icon.icon-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right,.popover-helptip #menu .footer .bar .buttons.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-right.icon-help,.popover-helptip .bar .buttons.icon-bottom-center.icon-alert,.popover-helptip .bar .buttons.icon-bottom-center.icon-help,.popover-helptip .bar .buttons.icon-bottom-right.icon-alert,.popover-helptip .bar .buttons.icon-bottom-right.icon-help,.popover-helptip .bar .buttons.icon-center.icon-alert,.popover-helptip .bar .buttons.icon-center.icon-help,.popover-helptip .bar .buttons.icon-right.icon-alert,.popover-helptip .bar .buttons.icon-right.icon-help,.popover-helptip .bar .buttons.icon.icon-bottom-center,.popover-helptip .bar .buttons.icon.icon-bottom-right,.popover-helptip .bar .buttons.icon.icon-center,.popover-helptip .bar .buttons.icon.icon-right,.popover-helptip .bar>.button.icon-bottom-center.icon-alert,.popover-helptip .bar>.button.icon-bottom-center.icon-help,.popover-helptip .bar>.button.icon-bottom-right.icon-alert,.popover-helptip .bar>.button.icon-bottom-right.icon-help,.popover-helptip .bar>.button.icon-center.icon-alert,.popover-helptip .bar>.button.icon-center.icon-help,.popover-helptip .bar>.button.icon-right.icon-alert,.popover-helptip .bar>.button.icon-right.icon-help,.popover-helptip .bar>.button.icon.icon-bottom-center,.popover-helptip .bar>.button.icon.icon-bottom-right,.popover-helptip .bar>.button.icon.icon-center,.popover-helptip .bar>.button.icon.icon-right{top:0!important}.bar.bar-header{padding-right:5px!important}.bar.bar-header .buttons-right span{margin-left:0!important}.bar .title+.buttons.buttons-right{right:5px}.button-icon{border-color:transparent;box-shadow:none!important}.button-small-padding{padding:0 7px!important}.button-text{color:grey!important;font-size:12px}.button-text.button-small{padding:5px 2px;font-size:12px!important}.button-text-positive{color:#387ef5!important}.button-text-stable{color:#b2b2b2!important}.popup-buttons .button.icon-left,.popup-buttons .button.icon-right{padding-left:32px!important;padding-right:32px!important;line-height:42px}#home .logo{margin-top:15px;width:100%;background-position:center center;background-repeat:no-repeat}#home .center{float:none;text-align:center;display:inline-block}#home .center .button{display:inline-block}@media screen and (max-width:767px){#home .logo{height:96px;background-image:url(data:image/png;base64,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);background-size:96px 96px}#home .footer{display:none}}@media screen and (min-width:768px) and (max-width:991px){#home .logo{height:144px;background-image:url(../img/logo_144px.png);background-size:144px 144px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){#home .logo{height:200px;background-image:url(../img/logo_200px.png);background-size:200px 200px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){.circle-bg-dark{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-725px -145px;background-size:1024px 1024px}.menu.menu-left{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-500px -100px;background-size:1024px 1024px;background-color:#f5f5f5;height:100%}.menu.menu-left .item.active{background-color:#b2e0ff!important}.menu.menu-left .item.active .item-content{background-color:transparent;opacity:1;color:#000}.menu.menu-left .item{opacity:.75;color:#000}.menu.menu-left .item .item-content{background-color:transparent;opacity:1}.menu.menu-left .item-menu-disable{color:#444!important}}.gray,.popover-helptip .button-close,.popover-share .bar-footer .button-close,.popover-share .bar-header span{color:grey!important}.gray b,.popover-helptip .button-close b,.popover-share .bar-footer .button-close b,.popover-share .bar-header span b{color:grey!important}.gray a,.icon-help a,.popover-helptip .button-close a,.popover-share .bar-footer .button-close a,.popover-share .bar-header span a,.positive a,.text-editable:hover a{color:inherit}.gray a:hover,.icon-help a:hover,.popover-helptip .button-close a:hover,.popover-share .bar-footer .button-close a:hover,.popover-share .bar-header span a:hover,.positive a:hover,.text-editable:hover a:hover{color:inherit}.gray a:visited,.icon-help a:visited,.popover-helptip .button-close a:visited,.popover-share .bar-footer .button-close a:visited,.popover-share .bar-header span a:visited,.positive a:visited,.text-editable:hover a:visited{color:inherit}.item a{text-decoration:none}.no-padding{padding:0!important}.avatar-member{background-image:url(data:image/png;base64,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)}.avatar.disable{opacity:.7}.avatar-wallet{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgBA0JMBOJU4OdAAAB2klEQVR42u3au0ocUQCH8e+IxFRKUohrkG0Eu4BiLrCFDxDBNtjoI1gYTJnGQrRInc4HyBuopNHgBVZIwCJFsHBXLURtQiIyKYyFN3B3zJyd3e/X7e7MmXP+e26zOyBJkiRJkiRJkiRJkiRJkppVSF9E0sk0r+jKuOYnrLMQTqMHkHSzQTHS17fLy3CYroi21JWYj9Z8KDIfvwdUKAC7bGfc+CH6gGrojTyJJBemMr/u+4sLpy2njRZnAAZgAK2t/YHKGUzeZlzz5w2yFU6/EKVsQHAIGIABGIABGIABRN4ILbOVcc1fM9IQCfp7gHOAARiAAbgMXpuhH/GJ0brK/sG78OVfKR0cXPnsQ/iYkwAYY6LOM4eZpXR5q3/t77bH+RkCO5HObZQeEL4nQ7ypcwh8boIAIJQpuwoYQMsugwBJ/73L/h1+3vr+OYtXXn/Lzz7gCV8ZqOH4LUrhz4155IzJvA6B0VqaDwzHu7f/PwEsc1zT8RXWmmoOCJWkl9L95wBWbw6AvO8DfrHkMmgABmAABtDw0j8gUaWHeA9K7odC7GVwhXGgGOmB2ZX4PaDAJs8i9d89XoRq5AAgecoMg3Rm3PhTysyFIyRJkiRJkiRJkiRJkiRJku7wFyuiadmIs5Q9AAAAAElFTkSuQmCC)}.item.item-icon-left>i.avatar:first-child{position:absolute;display:flex;height:100%;align-items:center;font-size:16px;left:16px;top:8px;max-height:32px;max-width:32px}.item.item-checkbox.item-avatar * .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar * .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar *>i.avatar:first-child,.item.item-checkbox.item-avatar *>i.item-image:first-child,.item.item-checkbox.item-avatar .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar>i.avatar:first-child,.item.item-checkbox.item-avatar>i.item-image:first-child{left:65px}.item.item-checkbox .item-content .item-avatar,.item.item-checkbox.item-avatar .item-content{padding-left:65px}.popup-container.confirm .popup,.popup-container.warning .popup{min-width:250px!important;width:350px!important}.popup-container.confirm .popup-head h1,.popup-container.confirm .popup-head h2,.popup-container.confirm .popup-head h3,.popup-container.confirm .popup-head h5,.popup-container.confirm .popup-head h6,.popup-container.confirm .popup-head p,.popup-container.warning .popup-head h1,.popup-container.warning .popup-head h2,.popup-container.warning .popup-head h3,.popup-container.warning .popup-head h5,.popup-container.warning .popup-head h6,.popup-container.warning .popup-head p{color:#fff}.popup-container.warning .popup-head{background-color:#ef473a}.popup-container.confirm .popup-head{background-color:#387ef5}.refresher-top-bg:before{position:absolute;display:block;top:0;width:100%;height:100px;z-index:-10;content:" "}.refresher-top-bg .scroll-refresher{z-index:50}.refresher-light .scroll-refresher .ionic-refresher-content,.view-identity .refresher-top-bg .scroll-refresher .ionic-refresher-content,.view-wallet .refresher-top-bg .scroll-refresher .ionic-refresher-content,.view-wallet-tx .refresher-top-bg .scroll-refresher .ionic-refresher-content{color:#fff}.refresher-light .scroll-refresher .spinner,.view-identity .refresher-top-bg .scroll-refresher .spinner,.view-wallet .refresher-top-bg .scroll-refresher .spinner,.view-wallet-tx .refresher-top-bg .scroll-refresher .spinner{stroke:#fff;fill:#fff}.view-wallet .refresher-top-bg:before{height:200px}.view-wallet .qrcode{position:absolute;top:30px;padding:3px;background:#fff;width:90px;max-width:30%;right:-170px;-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.view-wallet .qrcode img{width:100%}.view-wallet .qrcode.on{right:30px}.view-wallet .qrcode.active{top:0!important;right:0!important;padding:10px;width:200px;max-width:50%}.view-wallet .item-text-wrap{white-space:normal!important}.view-wallet .item .comment{font-style:italic!important}.popover-helptip .view-wallet .item h3 .button-close,.popover-share .bar-footer .view-wallet .item h3 .button-close,.popover-share .bar-header .view-wallet .item h3 span,.view-wallet .item h3 .gray,.view-wallet .item h3 .popover-helptip .button-close,.view-wallet .item h3 .popover-share .bar-footer .button-close,.view-wallet .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet .list .item span{display:inline}.view-wallet .item-divider .badge{top:16px!important}.view-wallet .item.item-wallet-event{padding-top:5px;padding-bottom:5px;min-height:30px;max-height:auto;height:auto}.view-wallet .item.item-wallet-event:last-child{min-height:48px}#menu .footer .view-wallet .item.item-icon-left.item-wallet-event .icon-help,.view-wallet .item.item-icon-left.item-wallet-event #menu .footer .icon-help,.view-wallet .item.item-icon-left.item-wallet-event .icon,.view-wallet .item.item-icon-left.item-wallet-event .icon-alert,.view-wallet .item.item-icon-left.item-wallet-event .icon-help{font-size:15px}@media screen and (max-width:991px){.view-wallet .qrcode{top:8px;width:60px;max-width:30%}.view-wallet .qrcode.on{right:8px}.view-wallet .hero.hero-qrcode-active h1,.view-wallet .hero.hero-qrcode-active h2,.view-wallet .hero.hero-qrcode-active h3,.view-wallet .hero.hero-qrcode-active h4,.view-wallet .hero.hero-qrcode-active h5,.view-wallet .hero.hero-qrcode-active i{margin-right:200px}}.popover-wallet-actions{height:400px}.view-wallet-tx .hero{height:100px}.view-wallet-tx .refresher-top-bg:before{height:100px}.view-wallet-tx .item-text-wrap{white-space:normal!important}.view-wallet-tx .item .comment{font-style:italic!important}.popover-helptip .view-wallet-tx .item h3 .button-close,.popover-share .bar-footer .view-wallet-tx .item h3 .button-close,.popover-share .bar-header .view-wallet-tx .item h3 span,.view-wallet-tx .item h3 .gray,.view-wallet-tx .item h3 .popover-helptip .button-close,.view-wallet-tx .item h3 .popover-share .bar-footer .button-close,.view-wallet-tx .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet-tx .list .item span{display:inline}.view-wallet-tx .item-divider .badge{top:16px!important}.stable-100-bg{background-color:#f2f2f2!important}.item-tx .badge-energized{background-color:rgba(255,201,0,.3);color:#888!important}.view-identity .hero,.view-identity .refresher-top-bg:before{height:200px}.card .card-header{font-size:90%;opacity:.8}.card .stable-900-bg,.card.stable-900-bg,.item .stable-900-bg,.item-complex .item-content .stable-900-bg,.item-radio .item-content .stable-900-bg,.item.stable-900-bg{background-color:#e0e0e0!important}.card .item{background:inherit}.card .stable-bg,.card.stable-bg,.item .stable-bg,.item-complex .item-content .stable-bg,.item-radio .item-content .stable-bg,.item.stable-bg{background-color:#f8f8f8!important}.card .card-header{padding-top:5px!important;padding-bottom:0!important;min-height:25px}.card .item .card-footer{margin-bottom:5px}.card .card-avatar .avatar,.card.card-avatar .avatar{box-shadow:0 3px 4px 0 rgba(0,0,0,.26);top:7px;background-color:#d9d9d9}.card .card-avatar img.avatar,.card.card-avatar img.avatar{border:0;min-height:54px;min-width:54px}.card .card-avatar .item.item-avatar,.card.card-avatar .item.item-avatar{padding-top:10px;padding-bottom:2px;min-height:45px!important}.card .card-avatar .card-footer,.card.card-avatar .card-footer{padding-left:88px;overflow:hidden}#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card .card-avatar .card-footer .popover-helptip .icon.icon-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-right a,.card .card-avatar .card-footer .pull-right a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card.card-avatar .card-footer .popover-helptip .icon.icon-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-right a,.card.card-avatar .card-footer .pull-right a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card .card-avatar .card-footer .icon.icon-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-right a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card.card-avatar .card-footer .icon.icon-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-right a{margin-right:8px}.a.underline:active,.underline a:active,.underline a:focus,.underline a:hover,a.underline:focus,a.underline:hover{outline:1px!important;text-decoration:underline!important}.card-avatar-small .card,.card-avatar-small .card .card-avatar,.card-avatar-small .card.card-avatar,.card-avatar-small.card{min-height:45px}.card-avatar-small .card .avatar,.card-avatar-small .card .card-avatar .avatar,.card-avatar-small .card .card-avatar .item-avatar .avatar,.card-avatar-small .card .item-avatar .avatar,.card-avatar-small .card.card-avatar .avatar,.card-avatar-small .card.card-avatar .item-avatar .avatar,.card-avatar-small.card .avatar,.card-avatar-small.card .item-avatar .avatar{box-shadow:0 2px 2px 0 rgba(0,0,0,.26);height:30px!important;width:30px!important;left:5px!important}.card-avatar-small .card .card-avatar .item.item-avatar,.card-avatar-small .card .item.item-avatar,.card-avatar-small .card.card-avatar .item.item-avatar,.card-avatar-small.card .item.item-avatar{min-height:25px!important;padding-left:42px!important}.card-avatar-small .card .card-avatar .card-footer,.card-avatar-small .card .card-footer,.card-avatar-small .card.card-avatar .card-footer,.card-avatar-small.card .card-footer{padding-top:0;padding-left:42px!important}.gallery .card-gallery,.gallery .card.card-gallery{margin-bottom:15px!important;float:left;display:block}.gallery .card-gallery img,.gallery .card.card-gallery img{max-height:150px}.gallery .card-gallery-new{max-height:199px}.list .item.text-left{text-align:left!important}.list .item.large-button-bar,.list .item.text-center{text-align:center!important}.list .item.text-right{text-align:right!important}.list .item-divider.item-divider-top-border{border-top:solid 1px rgba(0,0,0,.12)}.lookupForm .list .item.item-avatar{min-height:80px!important}.lookupForm .list .item.item-avatar.item-checkbox .item-content{padding-left:47px;min-height:auto!important;height:auto!important}.fade-in{opacity:0;-webkit-transform:translate3d(-30px,1px,0);-webkit-transition:all 1s ease-in-out}.fade-in.on{opacity:1;-webkit-transform:translate3d(0,0,0)}.item-avatar{min-height:80px!important}.item-avatar .item-content i.item-image:first-child,.item-avatar .item-content img.item-image:first-child,.item-avatar .item-content>i:first-child,.item-avatar .item-content>img:first-child,.item-avatar i.item-image:first-child,.item-avatar img.item-image:first-child,.item-avatar-left .item-content i.item-image:first-child,.item-avatar-left .item-content img.item-image:first-child,.item-avatar-left .item-content>i:first-child,.item-avatar-left .item-content>img:first-child,.item-avatar-left i.item-image:first-child,.item-avatar-left img.item-image:first-child,.item-avatar-left>i:first-child,.item-avatar-left>img:first-child,.item-avatar>i:first-child,.item-avatar>img:first-child{color:#d9d9d9;background-color:#f8f8f8;border:solid 1px #d9d9d9;overflow:hidden!important;font-size:45px!important;line-height:56px;width:100%!important;max-height:56px!important;max-width:56px!important;top:12px!important}#menu .footer .item-avatar .item-content>.icon-help:first-child:before,#menu .footer .item-avatar .item-image.icon-help:first-child:before,#menu .footer .item-avatar.item-icon-right .icon-help:first-child:before,#menu .footer .item-avatar>.icon-help:first-child:before,.item-avatar #menu .footer .item-content>.icon-help:first-child:before,.item-avatar #menu .footer .item-image.icon-help:first-child:before,.item-avatar .icon.item-image:first-child:before,.item-avatar .item-content>.icon-alert:first-child:before,.item-avatar .item-content>.icon-help:first-child:before,.item-avatar .item-content>.icon:first-child:before,.item-avatar .item-image.icon-alert:first-child:before,.item-avatar .item-image.icon-help:first-child:before,.item-avatar.item-icon-right #menu .footer .icon-help:first-child:before,.item-avatar.item-icon-right .icon-alert:first-child:before,.item-avatar.item-icon-right .icon-help:first-child:before,.item-avatar.item-icon-right .icon:first-child:before,.item-avatar>.icon-alert:first-child:before,.item-avatar>.icon-help:first-child:before,.item-avatar>.icon:first-child:before{width:56px!important}#menu .footer .item-avatar.item-icon-right .icon-help:last-child,.item-avatar.item-icon-right #menu .footer .icon-help:last-child,.item-avatar.item-icon-right .icon-alert:last-child,.item-avatar.item-icon-right .icon-help:last-child,.item-avatar.item-icon-right .icon:last-child{left:auto}.item em{font-weight:700!important}@media screen and (min-width:992px){.list .item.item-border-large{border-bottom:solid 1px #ccc!important}.list.item-border-large .item{border-bottom:solid 1px #ccc!important;margin:0}.list.item-border-large .item-divider{border-top:0}}.list .item.item-border{border-bottom:solid 1px #ccc!important}.list .item.item-small-height{padding-top:2px;padding-bottom:0;min-height:24px}.list .item.item-small-height .badge{padding-top:0!important;top:inherit}.list .item.item-small-height .badge.badge-assertive,.list .item.item-small-height .badge.badge-balanced,.list .item.item-small-height .badge.badge-calm,.list .item.item-small-height .badge.badge-editable:hover,.list .item.item-small-height .badge.badge-energized,.list .item.item-small-height .badge.badge-positive,.list .item.item-small-height .badge.badge-royal{top:1px!important;padding-top:3px!important;padding-bottom:2px!important}.form-errors:first-child{margin:5px 0}.form-errors:last-child{margin:5px 0 0}.form-error{padding:0 16px;font-size:12px;color:red;vertical-align:middle;text-align:end;top:0;position:relative}.item-input-error{border-bottom:2px solid red!important}.item-input.item-button-right input,.item-input.item-button-right textarea{margin-right:100px}.item-input.item-button-right .button,.item-input.item-button-right button{top:6px}.item-input.item-button-right.item-floating-label input,.item-input.item-button-right.item-floating-label textarea{padding-right:100px}.item-input.item-button-right.item-floating-label .button{top:inherit;bottom:6px}.item-input.item-button-right.item-floating-label .button-icon{height:inherit}.item.item-button-right .badge,.item.item-icon-right .badge{right:43px}.badge-editable:hover{cursor:pointer}.badge-editable:hover:before{content:" "}.bar .badge-button{margin:0!important;padding:0 4px!important;font-size:10px;position:absolute!important;top:5px;right:3px}.text-editable:hover{cursor:pointer}.text-editable:hover:after{content:""}.item h2 .text-editable:hover:after{font-size:14px}.modal.modal-full-height{bottom:0}.modal.about .bar.bar-header .button+.title{left:0!important}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{top:16px}.item-button-right .item-content>.button.button-small,.item-button-right .item-content>.buttons .button-small,.item-button-right>.button.button-small,.item-button-right>.buttons .button-small{font-size:14px}.item.large-button-bar{margin-bottom:10px}.item-avatar-left-padding{padding-left:95px}.item-thumbnail-left-padding{padding-left:106px}.item-thumbnail-left,.item.item-thumbnail-left{min-height:100px!important}.item-thumbnail-left .item-content i.item-image,.item-thumbnail-left .item-content>i:first-child,.item-thumbnail-left i.item-image,.item-thumbnail-left>i:first-child{color:#d9d9d9;background-color:#f8f8f8;overflow:hidden!important;font-size:50px!important;line-height:80px;padding:0 15px;background-position:center;background-size:cover;display:inline-block}@media screen and (max-width:400px){.card>.item.item-thumbnail-left,.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:84px!important}.item-thumbnail-left .item-content img.item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left img.item-image,.item-thumbnail-left>img:first-child{max-width:70px;max-height:70px}.item h2{font-size:13px!important}}.item-icon-left-padding{padding-left:40px}.item-icon-right-padding{padding-right:40px}.text-keep-lines{white-space:pre-line!important}.text-italic{font-style:italic!important}#menu .item-button-right>.button,.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.buttons{top:8px!important}@media screen and (max-width:400px){#menu .item.item-divider{min-height:2px;height:2px;padding-top:0;padding-bottom:0}#menu .item,#menu .item.item-complex .item-content{height:40px;min-height:40px;padding-top:12px}#menu .item.item-complex{padding-top:0}#menu .item.item-button-right .button{height:30px;min-height:30px;top:4px}#menu .item.active a{background-color:#b2e0ff!important}#menu ion-content.has-footer{bottom:0!important}}@media screen and (min-width:401px){#menu .item.active a{background-color:#b2e0ff!important}#menu .item.item-divider{min-height:5px;height:5px}#menu .footer a{font-size:14px!important;color:grey!important}}@media screen and (max-width:991px){#menu .bar-header{background-color:#1a237e;color:#fff;height:175px;padding-right:0!important}#menu .bar-header .hero{height:175px;box-shadow:none}#menu .bar-header .hero .content{bottom:5px}#menu .has-header{top:175px}}.hero.stable-bg{background-color:#f8f8f8!important}.certifications .item-divider .badge{top:16px!important}.certifications-lg .avatar-large{left:auto;position:relative;font-size:55px!important;height:88px;width:88px;color:#d9d9d9;background-color:#e0e0e0;border:solid 1px #d9d9d9}.icon-help{font-size:38px;vertical-align:middle}.icon-alert{font-size:38px;vertical-align:middle}#menu .footer .icon-help{font-size:25px!important;position:absolute;left:12px;top:8px;z-index:99}.popover-helptip{background-color:rgba(68,68,68,.85)!important;height:auto!important}.popover-helptip .button-close{padding:8px;height:25px;font-size:18.2px}.popover-helptip a,.popover-helptip a:active,.popover-helptip a:hover{text-decoration:underline}.nobackdrop .popover-backdrop.active{background-color:transparent!important}.helptip-anchor,.helptip-anchor-center,.helptip-anchor-left,.helptip-anchor-right{display:block;position:absolute;width:100%;bottom:0}.helptip-anchor-center{text-align:center}.helptip-anchor-left{text-align:left}.helptip-anchor-right{text-align:right}.helptip-anchor a:before,.helptip-anchor-center a:before,.helptip-anchor-left a:before,.helptip-anchor-right a:before{content:" "}@media (max-width:767px){.popover-helptip{width:auto}}#menu .footer .popover-helptip .icon-left.icon-help,.popover-helptip #menu .footer .icon-left.icon-help,.popover-helptip .icon-left.icon-alert,.popover-helptip .icon-left.icon-help,.popover-helptip .icon.icon-left{font-size:30px;position:relative;top:8px;left:8px}#menu .footer .popover-helptip .icon-right.icon-help,.popover-helptip #menu .footer .icon-right.icon-help,.popover-helptip .icon-right.icon-alert,.popover-helptip .icon-right.icon-help,.popover-helptip .icon.icon-right{font-size:30px;position:relative;top:8px;right:8px}#menu .footer .popover-helptip .icon-center.icon-help,.popover-helptip #menu .footer .icon-center.icon-help,.popover-helptip .icon-center.icon-alert,.popover-helptip .icon-center.icon-help,.popover-helptip .icon.icon-center{font-size:30px;width:100%;text-align:center;position:relative;top:8px;height:0}#menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-helptip .icon-bottom-right.icon-alert,.popover-helptip .icon-bottom-right.icon-help,.popover-helptip .icon.icon-bottom-right{font-size:30px;position:relative;bottom:8px;right:8px}#menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-helptip .icon-bottom-left.icon-alert,.popover-helptip .icon-bottom-left.icon-help,.popover-helptip .icon.icon-bottom-left{font-size:30px;position:relative;bottom:8px;left:8px}#menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-helptip .icon-bottom-center.icon-alert,.popover-helptip .icon-bottom-center.icon-help,.popover-helptip .icon.icon-bottom-center{font-size:30px;position:relative;width:100%;bottom:8px;text-align:center;height:0}.popover.popover-profile{height:200px}.popover.popover-profile .avatar{height:90px;width:90px;left:20px;top:20px}.popover.popover-profile .avatar{border:solid 1px #d9d9d9}.popover.popover-profile .bar.bar-footer{height:58px}.popover.popover-profile .bar.bar-footer .col .button{max-width:inherit;width:100%;padding:5px 0;margin:0}.popover.popover-profile .bar .button-positive,.popover.popover-profile .bar .button-text{background-color:#387ef5!important}.popover.popover-profile .bar .button-stable{color:#444!important}.bar-header .button-icon .avatar{height:35px;width:35px;position:relative;left:0;top:4px;border:solid 1px #d9d9d9}.bar-header .button-icon .avatar.active{background-color:#e0e0e0}.bar-header .button-icon .avatar{height:31px;width:31px;position:relative;left:0;top:6px}.list .badge .badge-secondary,.list .badge.badge-secondary{font-size:12px;font-style:italic;top:37px;font-weight:400!important;margin-right:0;padding-right:0}.popover.popover-login-methods{height:280px;width:260px}.popover.popover-login-methods.auth{height:204px}@media (max-width:767px){.popover.popover-login-methods{height:233px}.popover.popover-login-methods.auth{height:152px}}.ion-es-user-api:before{content:url(../img/logo.small.cs.dune.svg)}.ion-bma-tor-api:before{content:url(data:image/png;base64,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)}.row-header{border-bottom:solid 1px #ccc!important;margin:0;min-height:28px!important}.col-header{text-align:center;display:block!important}.col-15{-webkit-box-flex:0;-webkit-flex:0 0 15%;-moz-box-flex:0;-moz-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}.col-border-left{border-left:solid 1px #ccc!important}.col-border-right{border-right:solid 1px #ccc!important}.ion-spinner-small{height:14px;width:14px;line-height:14px;margin:0;padding:0}.ion-spinner-small svg{height:14px;width:14px}.icon-secondary{position:absolute;height:100%;display:flex;align-items:center;font-size:16px;left:25px;top:-7px}div[dropzone]{border:2px dashed #bbb;border-radius:5px;padding:15px;text-align:center;font:20pt bold;color:#bbb;margin-bottom:20px}.hero .button-fab-top-left,.hero .button-fab-top-right{top:170px!important}.text-no-transform{text-transform:inherit}.button-icon-event,.item-icon-event{text-transform:inherit;pointer-events:none!important}#menu .footer .button-icon-event .icon-help,#menu .footer .item-icon-event .icon-help,.button-icon-event #menu .footer .icon-help,.button-icon-event .icon,.button-icon-event .icon-alert,.button-icon-event .icon-event,.button-icon-event .icon-help,.item-icon-event #menu .footer .icon-help,.item-icon-event .icon,.item-icon-event .icon-alert,.item-icon-event .icon-event,.item-icon-event .icon-help{pointer-events:all!important}.hero.dark-bg,.view-identity .hero,.view-identity .hero.refresher-top-bg:before{background-color:#555}.hero.positive-900-bg,.view-identity .hero.member.refresher-top-bg:before,.view-identity .member .hero,.view-wallet .hero.refresher-top-bg:before,.view-wallet-tx .hero.refresher-top-bg:before{background-color:#1a237e!important}.popover-locked-outputs .item .badge{right:16px}.animate-show-hide.ng-hide{opacity:0}.animate-show-hide.ng-hide-add,.animate-show-hide.ng-hide-remove{transition:all linear .3s}@media screen and (max-width:991px){.modal iframe.iframe-license{width:100%;height:78%}}@media screen and (min-width:992px){.modal iframe.iframe-license{width:100%;height:70%}.modal.modal-license iframe.iframe-license{width:100%;height:85%!important}}.modal.modal-help .row.selected .col:first-child{font-weight:700}@media screen and (max-width:767px){.modal.modal-help .row .col:first-child{font-weight:700}.modal.modal-help h2{padding-left:10px}}.modal.modal-login .item.item-icon-right.item-text-wrap .item-content{margin-right:58px;text-overflow:ellipsis;overflow:hidden}.popover-locales{height:284px;width:200px}.popover-locales .item{height:48px}.buttons-tabs{display:block;height:57px;border:0;padding:16px 16px 0 16px;overflow:hidden}.buttons-tabs .button.button-tab:first-child{border-top-left-radius:15px}.buttons-tabs .button.button-tab:last-child{border-top-right-radius:15px}.buttons-tabs .button.button-tab.active{background-color:#b2e0ff}.buttons-tabs.border-bottom{border-bottom:solid 1px #ccc!important}@media screen and (max-width:767px){.buttons-tabs{padding:10px 10px 0 10px}.buttons-tabs .button.button-tab{padding:2px 10px 0 10px!important}} \ No newline at end of file + */.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink,.popup .button{position:relative;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.ink-ripple{position:absolute;border-radius:50%;width:100px;height:100px;margin-top:-50px;margin-left:-50px;opacity:0;background-color:rgba(255,255,255,.4);-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;transition:all .5s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:transform,opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.ink-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink-button,.ink-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.activated.button-text,.button-clear.activated,.button-clear:active,.button-fab.activated,.button-fab:active,.button-flat.activated,.button-flat:active,.button-raised.activated,.button-raised:active,.button-text:active,.ink-button.activated,.ink-button:active,.ink-circle.activated,.ink-circle:active,.ink.activated,.ink:active,.popup .button.activated,.popup .button:active{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.button-clear,.button-clear:link,.button-clear:visited,.button-fab,.button-fab:link,.button-fab:visited,.button-flat,.button-flat:link,.button-flat:visited,.button-raised,.button-raised:link,.button-raised:visited,.button-text,.button-text:link,.button-text:visited,.ink-button,.ink-button-input,.ink-button:link,.ink-button:visited{white-space:nowrap;vertical-align:middle;cursor:pointer;border:none;outline:0;font-size:14px;text-align:center;text-decoration:none;z-index:1}.ink-button{padding:10px 15px;border-radius:2px}.ink-button-input{margin:0;padding:10px 15px}.ink-input-wrapper{border-radius:2px;vertical-align:bottom}.ink-input-wrapper.ink-button{padding:0}.ink-input-wrapper .ink-button-input{position:relative;top:0;left:0;z-index:1}.ink-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%}.ink-float{-webkit-mask-image:none;-webkit-box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12);box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12)}.ink-float:active{-webkit-box-shadow:0 8px 20px 1px rgba(0,0,0,.3);box-shadow:0 8px 20px 1px rgba(0,0,0,.3)}.ink-block{display:block}.ink-ripple{z-index:0}.button-clear .ink-ripple,.button-text .ink-ripple,.ink-dark .ink-ripple,.list .ink-ripple,[class$="-100"]>.ink-ripple,[class$="-clear"]>.ink-ripple,[class$="-light"]>.ink-ripple,[class$="-stable"]>.ink-ripple{background-color:rgba(0,0,0,.2)}.tab-item{position:relative}*{font-family:RobotoDraft,Roboto,"Helvetica Neue","Segoe UI",sans-serif}.rounded{border-radius:4px}a{cursor:pointer}.has-header.expanded{top:76px}.bar{border-bottom:none;padding:0}.bar .button{min-height:44px;min-width:44px;max-width:48px;margin-bottom:0;max-height:44px;width:48px}.bar .title+.buttons.buttons-right{right:0;top:0}.title-left,.title.title-left{left:48px}.title-right,.title.title-right{left:48px}.activated.button-text,.bar .activated.button-text,.bar .button-positive,.bar .button-positive.activated,.bar .button-positive:active,.bar .button-positive:hover,.bar .button-text,.bar .button-text:active,.bar .button-text:hover,.bar-positive,.bar-positive.activated,.bar-positive:active,.bar-positive:hover,.button-bar-positive,.button-bar-positive.activated,.button-bar-positive:active,.button-bar-positive:hover,.button-positive,.button-positive.activated,.button-positive:active,.button-positive:hover,.button-text,.button-text:active,.button-text:hover,.header-positive,.header-positive.activated,.header-positive:active,.header-positive:hover,.positive-bg,.positive-bg.activated,.positive-bg:active,.positive-bg:hover,.positive-border,.positive-border.activated,.positive-border:active,.positive-border:hover{background-color:#3f51b5;color:#fff}.bar .button-positive-900,.bar .button-positive-900.activated,.bar .button-positive-900:active,.bar .button-positive-900:hover,.bar-positive-900,.bar-positive-900.activated,.bar-positive-900:active,.bar-positive-900:hover,.button-bar-positive-900,.button-bar-positive-900.activated,.button-bar-positive-900:active,.button-bar-positive-900:hover,.button-positive-900,.button-positive-900.activated,.button-positive-900:active,.button-positive-900:hover,.header-positive-900,.header-positive-900.activated,.header-positive-900:active,.header-positive-900:hover,.positive-900-bg,.positive-900-bg.activated,.positive-900-bg:active,.positive-900-bg:hover,.positive-900-border,.positive-900-border.activated,.positive-900-border:active,.positive-900-border:hover,.view-identity .activated.member.refresher-top-bg:before,.view-identity .member .activated.hero,.view-identity .member .hero,.view-identity .member .hero:active,.view-identity .member .hero:hover,.view-identity .member.refresher-top-bg:active:before,.view-identity .member.refresher-top-bg:before,.view-identity .member.refresher-top-bg:hover:before,.view-wallet .activated.refresher-top-bg:before,.view-wallet .refresher-top-bg:active:before,.view-wallet .refresher-top-bg:before,.view-wallet .refresher-top-bg:hover:before,.view-wallet-tx .activated.refresher-top-bg:before,.view-wallet-tx .refresher-top-bg:active:before,.view-wallet-tx .refresher-top-bg:before,.view-wallet-tx .refresher-top-bg:hover:before{background-color:#1a237e;color:#fff}.bar .button-positive-100,.bar .button-positive-100.activated,.bar .button-positive-100:active,.bar .button-positive-100:hover,.bar-positive-100,.bar-positive-100.activated,.bar-positive-100:active,.bar-positive-100:hover,.button-bar-positive-100,.button-bar-positive-100.activated,.button-bar-positive-100:active,.button-bar-positive-100:hover,.button-positive-100,.button-positive-100.activated,.button-positive-100:active,.button-positive-100:hover,.header-positive-100,.header-positive-100.activated,.header-positive-100:active,.header-positive-100:hover,.positive-100-bg,.positive-100-bg.activated,.positive-100-bg:active,.positive-100-bg:hover,.positive-100-border,.positive-100-border.activated,.positive-100-border:active,.positive-100-border:hover{background-color:#c5cae9;color:#fff}.bar .button-calm,.bar .button-calm.activated,.bar .button-calm:active,.bar .button-calm:hover,.bar-calm,.bar-calm.activated,.bar-calm:active,.bar-calm:hover,.button-bar-calm,.button-bar-calm.activated,.button-bar-calm:active,.button-bar-calm:hover,.button-calm,.button-calm.activated,.button-calm:active,.button-calm:hover,.calm-bg,.calm-bg.activated,.calm-bg:active,.calm-bg:hover,.calm-border,.calm-border.activated,.calm-border:active,.calm-border:hover,.header-calm,.header-calm.activated,.header-calm:active,.header-calm:hover{background-color:#2196f3;color:#fff}.bar .button-calm-900,.bar .button-calm-900.activated,.bar .button-calm-900:active,.bar .button-calm-900:hover,.bar-calm-900,.bar-calm-900.activated,.bar-calm-900:active,.bar-calm-900:hover,.button-bar-calm-900,.button-bar-calm-900.activated,.button-bar-calm-900:active,.button-bar-calm-900:hover,.button-calm-900,.button-calm-900.activated,.button-calm-900:active,.button-calm-900:hover,.calm-900-bg,.calm-900-bg.activated,.calm-900-bg:active,.calm-900-bg:hover,.calm-900-border,.calm-900-border.activated,.calm-900-border:active,.calm-900-border:hover,.header-calm-900,.header-calm-900.activated,.header-calm-900:active,.header-calm-900:hover{background-color:#0d47a1;color:#fff}.bar .button-calm-100,.bar .button-calm-100.activated,.bar .button-calm-100:active,.bar .button-calm-100:hover,.bar-calm-100,.bar-calm-100.activated,.bar-calm-100:active,.bar-calm-100:hover,.button-bar-calm-100,.button-bar-calm-100.activated,.button-bar-calm-100:active,.button-bar-calm-100:hover,.button-calm-100,.button-calm-100.activated,.button-calm-100:active,.button-calm-100:hover,.calm-100-bg,.calm-100-bg.activated,.calm-100-bg:active,.calm-100-bg:hover,.calm-100-border,.calm-100-border.activated,.calm-100-border:active,.calm-100-border:hover,.header-calm-100,.header-calm-100.activated,.header-calm-100:active,.header-calm-100:hover{background-color:#bbdefb;color:#fff}.bar .button-royal,.bar .button-royal.activated,.bar .button-royal:active,.bar .button-royal:hover,.bar-royal,.bar-royal.activated,.bar-royal:active,.bar-royal:hover,.button-bar-royal,.button-bar-royal.activated,.button-bar-royal:active,.button-bar-royal:hover,.button-royal,.button-royal.activated,.button-royal:active,.button-royal:hover,.header-royal,.header-royal.activated,.header-royal:active,.header-royal:hover,.royal-bg,.royal-bg.activated,.royal-bg:active,.royal-bg:hover,.royal-border,.royal-border.activated,.royal-border:active,.royal-border:hover{background-color:#673ab7;color:#fff}.bar .button-royal-900,.bar .button-royal-900.activated,.bar .button-royal-900:active,.bar .button-royal-900:hover,.bar-royal-900,.bar-royal-900.activated,.bar-royal-900:active,.bar-royal-900:hover,.button-bar-royal-900,.button-bar-royal-900.activated,.button-bar-royal-900:active,.button-bar-royal-900:hover,.button-royal-900,.button-royal-900.activated,.button-royal-900:active,.button-royal-900:hover,.header-royal-900,.header-royal-900.activated,.header-royal-900:active,.header-royal-900:hover,.royal-900-bg,.royal-900-bg.activated,.royal-900-bg:active,.royal-900-bg:hover,.royal-900-border,.royal-900-border.activated,.royal-900-border:active,.royal-900-border:hover{background-color:#311b92;color:#fff}.bar .button-royal-100,.bar .button-royal-100.activated,.bar .button-royal-100:active,.bar .button-royal-100:hover,.bar-royal-100,.bar-royal-100.activated,.bar-royal-100:active,.bar-royal-100:hover,.button-bar-royal-100,.button-bar-royal-100.activated,.button-bar-royal-100:active,.button-bar-royal-100:hover,.button-royal-100,.button-royal-100.activated,.button-royal-100:active,.button-royal-100:hover,.header-royal-100,.header-royal-100.activated,.header-royal-100:active,.header-royal-100:hover,.royal-100-bg,.royal-100-bg.activated,.royal-100-bg:active,.royal-100-bg:hover,.royal-100-border,.royal-100-border.activated,.royal-100-border:active,.royal-100-border:hover{background-color:#d1c4e9;color:#fff}.balanced-bg,.balanced-bg.activated,.balanced-bg:active,.balanced-bg:hover,.balanced-border,.balanced-border.activated,.balanced-border:active,.balanced-border:hover,.bar .button-balanced,.bar .button-balanced.activated,.bar .button-balanced:active,.bar .button-balanced:hover,.bar-balanced,.bar-balanced.activated,.bar-balanced:active,.bar-balanced:hover,.button-balanced,.button-balanced.activated,.button-balanced:active,.button-balanced:hover,.button-bar-balanced,.button-bar-balanced.activated,.button-bar-balanced:active,.button-bar-balanced:hover,.header-balanced,.header-balanced.activated,.header-balanced:active,.header-balanced:hover{background-color:#4caf50;color:#fff}.balanced-900-bg,.balanced-900-bg.activated,.balanced-900-bg:active,.balanced-900-bg:hover,.balanced-900-border,.balanced-900-border.activated,.balanced-900-border:active,.balanced-900-border:hover,.bar .button-balanced-900,.bar .button-balanced-900.activated,.bar .button-balanced-900:active,.bar .button-balanced-900:hover,.bar-balanced-900,.bar-balanced-900.activated,.bar-balanced-900:active,.bar-balanced-900:hover,.button-balanced-900,.button-balanced-900.activated,.button-balanced-900:active,.button-balanced-900:hover,.button-bar-balanced-900,.button-bar-balanced-900.activated,.button-bar-balanced-900:active,.button-bar-balanced-900:hover,.header-balanced-900,.header-balanced-900.activated,.header-balanced-900:active,.header-balanced-900:hover{background-color:#1b5e20;color:#fff}.balanced-100-bg,.balanced-100-bg.activated,.balanced-100-bg:active,.balanced-100-bg:hover,.balanced-100-border,.balanced-100-border.activated,.balanced-100-border:active,.balanced-100-border:hover,.bar .balanced-100-bg:hover,.bar .button-balanced-100,.bar .button-balanced-100.activated,.bar .button-balanced-100:active,.bar-balanced-100,.bar-balanced-100.activated,.bar-balanced-100:active,.bar-balanced-100:hover,.button-balanced-100,.button-balanced-100.activated,.button-balanced-100:active,.button-balanced-100:hover,.button-bar-balanced-100,.button-bar-balanced-100.activated,.button-bar-balanced-100:active,.button-bar-balanced-100:hover,.header-balanced-100,.header-balanced-100.activated,.header-balanced-100:active,.header-balanced-100:hover{background-color:#c8e6c9;color:#fff}.bar .button-energized,.bar .button-energized.activated,.bar .button-energized:active,.bar .button-energized:hover,.bar-energized,.bar-energized.activated,.bar-energized:active,.bar-energized:hover,.button-bar-energized,.button-bar-energized.activated,.button-bar-energized:active,.button-bar-energized:hover,.button-energized,.button-energized.activated,.button-energized:active,.button-energized:hover,.energized-bg,.energized-bg.activated,.energized-bg:active,.energized-bg:hover,.energized-border,.energized-border.activated,.energized-border:active,.energized-border:hover,.header-energized,.header-energized.activated,.header-energized:active,.header-energized:hover{background-color:#ff9800;color:#fff}.bar .button-energized-900,.bar .button-energized-900.activated,.bar .button-energized-900:active,.bar .button-energized-900:hover,.bar-energized-900,.bar-energized-900.activated,.bar-energized-900:active,.bar-energized-900:hover,.button-bar-energized-900,.button-bar-energized-900.activated,.button-bar-energized-900:active,.button-bar-energized-900:hover,.button-energized-900,.button-energized-900.activated,.button-energized-900:active,.button-energized-900:hover,.energized-900-bg,.energized-900-bg.activated,.energized-900-bg:active,.energized-900-bg:hover,.energized-900-border,.energized-900-border.activated,.energized-900-border:active,.energized-900-border:hover,.header-energized-900,.header-energized-900.activated,.header-energized-900:active,.header-energized-900:hover{background-color:#e65100;color:#fff}.bar .button-energized-100,.bar .button-energized-100.activated,.bar .button-energized-100:active,.bar .button-energized-100:hover,.bar-energized-100,.bar-energized-100.activated,.bar-energized-100:active,.bar-energized-100:hover,.button-bar-energized-100,.button-bar-energized-100.activated,.button-bar-energized-100:active,.button-bar-energized-100:hover,.button-energized-100,.button-energized-100.activated,.button-energized-100:active,.button-energized-100:hover,.energized-100-bg,.energized-100-bg.activated,.energized-100-bg:active,.energized-100-bg:hover,.energized-100-border,.energized-100-border.activated,.energized-100-border:active,.energized-100-border:hover,.header-energized-100,.header-energized-100.activated,.header-energized-100:active,.header-energized-100:hover,.modal.modal-help .activated.row.selected,.modal.modal-help .row.selected,.modal.modal-help .row.selected:active,.modal.modal-help .row.selected:hover{background-color:#ffe0b2}.assertive-bg,.assertive-bg.activated,.assertive-bg:active,.assertive-bg:hover,.assertive-border,.assertive-border.activated,.assertive-border:active,.assertive-border:hover,.bar .button-assertive,.bar .button-assertive.activated,.bar .button-assertive:active,.bar .button-assertive:hover,.bar-assertive,.bar-assertive.activated,.bar-assertive:active,.bar-assertive:hover,.button-assertive,.button-assertive.activated,.button-assertive:active,.button-assertive:hover,.button-bar-assertive,.button-bar-assertive.activated,.button-bar-assertive:active,.button-bar-assertive:hover,.header-assertive,.header-assertive.activated,.header-assertive:active,.header-assertive:hover{background-color:#f44336;color:#fff}.assertive-900-bg,.assertive-900-bg.activated,.assertive-900-bg:active,.assertive-900-bg:hover,.assertive-900-border,.assertive-900-border.activated,.assertive-900-border:active,.assertive-900-border:hover,.bar .button-assertive-900,.bar .button-assertive-900.activated,.bar .button-assertive-900:active,.bar .button-assertive-900:hover,.bar-assertive-900,.bar-assertive-900.activated,.bar-assertive-900:active,.bar-assertive-900:hover,.button-assertive-900,.button-assertive-900.activated,.button-assertive-900:active,.button-assertive-900:hover,.button-bar-assertive-900,.button-bar-assertive-900.activated,.button-bar-assertive-900:active,.button-bar-assertive-900:hover,.header-assertive-900,.header-assertive-900.activated,.header-assertive-900:active,.header-assertive-900:hover{background-color:#b71c1c;color:#fff}.assertive-100-bg,.assertive-100-bg.activated,.assertive-100-bg:active,.assertive-100-bg:hover,.assertive-100-border,.assertive-100-border.activated,.assertive-100-border:active,.assertive-100-border:hover,.bar .button-assertive-100,.bar .button-assertive-100.activated,.bar .button-assertive-100:active,.bar .button-assertive-100:hover,.bar-assertive-100,.bar-assertive-100.activated,.bar-assertive-100:active,.bar-assertive-100:hover,.button-assertive-100,.button-assertive-100.activated,.button-assertive-100:active,.button-assertive-100:hover,.button-bar-assertive-100,.button-bar-assertive-100.activated,.button-bar-assertive-100:active,.button-bar-assertive-100:hover,.header-assertive-100,.header-assertive-100.activated,.header-assertive-100:active,.header-assertive-100:hover{background-color:#ffcdd2;color:#fff}.bar .button-stable,.bar .button-stable.activated,.bar .button-stable:active,.bar .button-stable:hover,.bar-stable,.bar-stable.activated,.bar-stable:active,.bar-stable:hover,.button-bar-stable,.button-bar-stable.activated,.button-bar-stable:active,.button-bar-stable:hover,.button-stable,.button-stable.activated,.button-stable:active,.button-stable:hover,.header-stable,.header-stable.activated,.header-stable:active,.header-stable:hover,.stable-bg,.stable-bg.activated,.stable-bg:active,.stable-bg:hover,.stable-border,.stable-border.activated,.stable-border:active,.stable-border:hover{background-color:#e0e0e0;color:#fff}.icon-help,.icon-help *,.icon-help:active,.icon-help:active *,.icon-help:hover,.icon-help:hover *,.positive,.positive *,.positive:active,.positive:active *,.positive:hover,.positive:hover *,.text-editable:active:hover,.text-editable:active:hover *,.text-editable:hover,.text-editable:hover *{color:#3f51b5}.positive-900,.positive-900 *,.positive-900:active,.positive-900:active *,.positive-900:hover,.positive-900:hover *{color:#3f51b5}.positive-100,.positive-100 *,.positive-100:active,.positive-100:active *,.positive-100:hover,.positive-100:hover *{color:#c5cae9}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#2196f3}.calm-900,.calm-900 *,.calm-900:active,.calm-900:active *,.calm-900:hover,.calm-900:hover *{color:#0d47a1}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#bbdefb}.royal,.royal *,.royal:active,.royal:active *,.royal:hover,.royal:hover *{color:#673ab7}.royal-900,.royal-900 *,.royal-900:active,.royal-900:active *,.royal-900:hover,.royal-900:hover *{color:#311b92}.royal-100,.royal-100 *,.royal-100:active,.royal-100:active *,.royal-100:hover,.royal-100:hover *{color:#d1c4e9}.balanced,.balanced *,.balanced:active,.balanced:active *,.balanced:hover,.balanced:hover *{color:#4caf50}.balanced-900,.balanced-900 *,.balanced-900:active,.balanced-900:active *,.balanced-900:hover,.balanced-900:hover *{color:#1b5e20}.balanced-100,.balanced-100 *,.balanced-100:active,.balanced-100:active *,.balanced-100:hover,.balanced-100:hover *{color:#c8e6c9}.energized,.energized *,.energized:active,.energized:active *,.energized:hover,.energized:hover *{color:#ff9800}.energized-900,.energized-900 *,.energized-900:active,.energized-900:active *,.energized-900:hover,.energized-900:hover *{color:#e65100}.energized-100,.energized-100 *,.energized-100:active,.energized-100:active *,.energized-100:hover,.energized-100:hover *{color:#ffe0b2}.assertive,.assertive *,.assertive:active,.assertive:active *,.assertive:hover,.assertive:hover *,.icon-alert,.icon-alert *,.icon-alert:active,.icon-alert:active *,.icon-alert:hover,.icon-alert:hover *{color:#f44336}.assertive-900,.assertive-900 *,.assertive-900:active,.assertive-900:active *,.assertive-900:hover,.assertive-900:hover *{color:#b71c1c}.assertive-100,.assertive-100 *,.assertive-100:active,.assertive-100:active *,.assertive-100:hover,.assertive-100:hover *{color:#ffcdd2}.stable,.stable *,.stable:active,.stable:active *,.stable:hover,.stable:hover *{color:#e0e0e0}.light,.light *,.light:active,.light:active *,.light:hover,.light:hover *{color:#fff}.button-text-dark,.button-text-dark *,.button-text-dark:active,.button-text-dark:active *,.button-text-dark:hover,.button-text-dark:hover *,.dark,.dark *,.dark:active,.dark:active *,.dark:hover,.dark:hover *{color:#444}.light-border{border-color:#ddd}.navbar-default .navbar-nav>li>a{margin:0;padding-right:26px;padding-left:26px;border-top:3px solid transparent;color:#bfd5c9;opacity:1}.mid-bar{padding:16px}.mid-bar h1,.mid-bar h2,.mid-bar h3,.mid-bar h4,.mid-bar h5,.mid-bar h6{color:#fff;margin-bottom:5px}.mid-bar p{color:rgba(255,255,255,.5);margin-bottom:0}.card>.item-avatar,.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:95px}.item,.item-complex .item-content,.item-radio .item-content{background-color:transparent}.dark-bg h2,.item.dark-bg h2,.view-identity .hero h2,.view-identity .item.hero h2,.view-identity .item.refresher-top-bg:before h2,.view-identity .refresher-top-bg:before h2{color:#fff}.tabs-striped .tabs{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar .button.button-clear,.bar .button.button-text{color:#fff}#menu .footer .bar .button.button-icon .icon-help:before,.bar .button.button-icon #menu .footer .icon-help:before,.bar .button.button-icon .icon-alert:before,.bar .button.button-icon .icon-help:before,.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before{vertical-align:top;font-size:24px}.menu{background-color:transparent}.button-icon.button.activated,.button-icon.button.active{opacity:initial}.popover{opacity:0;position:absolute;right:8px;transform:translate(50%,-50%) scale(0,0);transition:transform .3s ease-in-out,opacity .3s ease-in-out;top:8px}.popover.ng-enter{opacity:1;transform:translate(0,-14px) scale(1,1);transition:transform .3s ease-in-out,opacity .3s ease-in-out}.popover.ng-leave{opacity:0;transform:translate(50%,-50%) scale(0,0);transition:transform .3s ease-in-out,opacity .3s ease-in-out}.button{overflow:hidden!important}@font-face{font-family:Cesiumicons;src:url(../fonts/cesiumicons.eot?v=1.2);src:url(../fonts/cesiumicons.eot?v=1.2#iefix) format("embedded-opentype"),url(../fonts/cesiumicons.ttf?v=1.2) format("truetype"),url(../fonts/cesiumicons.woff?v=1.2) format("woff"),url(../fonts/cesiumicons.woff) format("woff"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9ImNlc2l1bWljb25zIiBob3Jpei1hZHYteD0iMTAyNCI+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMDI0IiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTY0IiAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iMTAyNCIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwOyIgaG9yaXotYWR2LXg9IjUxMiIgZD0iIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMDsiIGQ9Ik03MDQuNjMxIDU3MS4xMjhjLTg4LjYxMy0xNDEuNDA5LTIyMC40MDMtMjYzLjQwOC0zODUuNTIxLTMwNS40NzMtNjcuMjUyLTE4LjQ5My0xMzcuMTEyLTI1LjgyMi0yMDYuNzA1LTI3LjAyMiA4NS41NDktMTYzLjA5NSAyNzUuODEtMjYyLjI3MiA0NTguNTQ1LTIzNy45NSAxODEuMTY2IDE5LjA3NiAzNDEuNjYyIDE1Ny4yMTUgMzg4LjMzOCAzMzMuMTYyLTU0LjYwMSAxMDMuOTI0LTE0MS40OSAxOTcuODc0LTI1NC42NTYgMjM3LjI4M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZD0iTTcwNS45MzcgNTcyLjA4OGMtMTYuNzU2LTExMS44MTUtODUuMDg2LTIwNy4yLTEwNy4yNjctMzE3LjIyMS05LjE4OC01MS41NDEgMjYuNzg2LTExMC42NDItMTQuNTc5LTE1NS41MTQtNDYuMjEtNTIuNDAyLTExOC45MDctNjUuMzc5LTE4MS45MzgtODcuNDY2IDE3Ny43My00Ny45MSAzNzkuNjYgMjQuMjE1IDQ4NS45ODIgMTc0Ljc4IDUwLjU1IDY5LjExNiA4MC45OTIgMTUyLjY4OSA4Ni42OTYgMjM4LjEyNS00Ni4wODUgOS40ODMtNjkuNDM2IDU1LjAyMC0xMTAuNTU2IDc0LjIwMS00OS45MTcgMjkuOTkyLTEwMy41NzEgNTMuNTE0LTE1OC4zMzkgNzMuMDk1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDI7IiBkPSJNNzA0LjQyMiA1NjMuNGMtMjMuNzg2LTUxLjQwOC0yNi40MzYtMTA5Ljc1Ny01NC4wODQtMTU5LjcyNi03LjIxMS0zMi45MDktNDEuMDkxLTg0LjI4OC0yOS40OTgtMTA2LjQ4OSAxMDEuNTktMTYuNTQyIDIwMy4xODEtMzMuMDg1IDMwNC43NzEtNDkuNjI3IDE4LjI3OCAzNS42NDkgMzEuODQ1IDczLjcxMSA0MC4yMDEgMTEyLjg5NC03My44NjggNzkuMjY5LTE1MC40NzEgMTYzLjQyNi0yNTUuMzU4IDIwMC42MzVsLTYuMDMyIDIuMzE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDM7IiBkPSJNNjY4LjYxNiA0NDUuNzk0Yy0yMC45ODMtMzEuNjc5LTI3LjI0NS03MC40MDgtNDQuMTA0LTEwNC40MjYtMTYuMjIxLTM1LjY4OS01MS40MTUtMTE5LjQ3MiAxOS42ODQtMTA5Ljg5IDUwLjQ1OSAyNC42NTQgOTUuMDUwLTEzLjM3OSAxNDUuODE5LTE2LjkyOSA0MC4zMTctNS41NjEgODIuMTM3LTQuNjY1IDEyMS4yOTUgNy4yMDEgMTQuOTgzIDMxLjcxNiA1MC42ODYgODIuNTk0IDM4LjcyNiAxMDguMzA1LTQ4LjU2MyA5Ljg2Ny05OS40NzMgMTMuODc5LTE0NS4yMTUgMzMuNjkgMTkuMjczIDQ1LjU5NS01NC45NzQgNTUuNDY1LTg5Ljk3NiA2OC44NC0xNS4zNDEgNC42MzctMzAuNzY1IDguOTk4LTQ2LjIyOSAxMy4yMDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGQ9Ik02MDcuNzE0IDE2MC44NzNjLTMwLjE4My04NS4wMDItMTIzLjE4Ni0xMTkuOTQ4LTIwMS44MzItMTQ1Ljk0MyA1LjAyMC0xMS4xODYgNzEuMTg2LTE2LjMyNSAxMDAuNzg3LTE3LjMyNiAxMTcuMTE1LTMuMDY3IDIzNC41NDIgNDEuMDg2IDMyMC40OCAxMjAuNzUyLTc0LjgzMSAyLjgzNC0xNDkuNTQ5IDE0Ljc4NC0yMTkuNDM1IDQyLjUxN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA1OyIgZD0iTTU5OC40ODUgMjY4LjUzNGMtNC4xNzQtNDIuNzY0LTI1LjE4OC0xMTUuOTM2IDM0LjAyOC0xMjguNDk0IDU4LjUzNy0xNC41ODEgMTE5LjQzNC0xOC41MTEgMTc3LjA2Ny0zNy4wMjAgNDUuMjAxIDM3LjQ0NyA4My4xNjcgODMuNTk5IDExMS4xMiAxMzUuMjE3LTEwNy45OC0xLjY4MS0yMTkuNDMxLTEwLjIwNC0zMjIuMjE1IDMwLjI5N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA2OyIgZD0iTTYwNy4yMSA2MDAuNzhjMTguOTU5IDIuMjkgMzUuMjM0IDEuODk2IDI4LjI4OC0yMS43MiA1LjkzNS0xNC42NDQtMzYuNjE0LTE0LjYwNy0yOC4yODggMS44NDEgMCA2LjYyNiAwIDEzLjI1MiAwIDE5Ljg3OXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA3OyIgZD0iTTQ0NC41NDEgNzAyLjk2MmMyMS4wODggMy45NTggMzIuNjU0LTEuNjA0IDI2Ljk1NC0yNC40MzUtNS42NzMtMTEuMDcxLTM3LjY5Ny03LjY1LTI2Ljk1NCAxNC4wMzYgMCAzLjQ2NiAwIDYuOTMzIDAgMTAuMzk5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDg7IiBkPSJNNTA0LjUzMiA2ODEuNzhjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwOTsiIGQ9Ik01MDIuNTM5IDQxNy40MjZjMTguNzg2IDAgMzcuNTcyIDAgNTYuMzU4IDAgMC0xOC43ODYgMC0zNy41NzIgMC01Ni4zNTgtMTguNzg2IDAtMzcuNTcyIDAtNTYuMzU4IDAgMCAxOC43ODYgMCAzNy41NzIgMCA1Ni4zNTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYTsiIGQ9Ik01MDguODU2IDYzMC4xNTdjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGQ9Ik01NjkuMTAzIDQ3NC4xNGMxOC45NyAxLjkyOSAzNi40OTIgMi40MDkgMjkuNDA0LTIxLjcyIDYuODk0LTE1LjkzMi0zNy4yMzUtMTUuODMzLTI5LjQwNCAwLjcyNSAwIDYuOTk4IDAgMTMuOTk2IDAgMjAuOTk0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGM7IiBkPSJNNjI3LjA4NyA1MzEuNDAzYzE5LjM1IDcuODY5IDI5LjQwOC05LjU4MiAxOS4zMzgtMjIuMDUzLTIxLjU4My00LjE0Ny0yMC44MDEgMy4zODctMTkuMzM4IDIyLjA1M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBkOyIgZD0iTTU0Ny42MjcgNTI1LjIzMWMxMy40NzgtMy4yOTggNDMuMjM2IDkuNjgyIDM2Ljc1NS0xMy41NzUgNi4yNTQtMjMuMDMwLTcuMDU3LTI2LjQ5Ni0yNy4xNS0yMy4xOC0xOC41NjctNS40OTYtNS44NzEgMjYuNTI3LTkuNjA1IDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBlOyIgZD0iTTQwMy44MDIgMzM1LjAyNGMxNC40MjYtMS45OTggMzYuNzMgMy44ODIgNDYuNTU2LTIuNzE1LTIuMDIwLTE0LjMxNSAzLjkxMy0zNi41ODQtMi43MTUtNDYuMjkyLTEyLjg3OSAzLjU0NS00MC4wMTctNy4xNjktNDMuODQxIDUuNDMgMCAxNC41MjYgMCAyOS4wNTEgMCA0My41Nzd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwZjsiIGQ9Ik00NDcuOTA3IDQwNi4wODRjMTYuODM2LTAuMTE3IDM5LjY3NyA1Ljc3IDMxLjg1NC0xOS4wMDUgNy44Mi0yNC4zNTUtMTYuMDgwLTE2Ljk5LTMxLjg1NC0xNy43NSAwIDEyLjI1MiAwIDI0LjUwMyAwIDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEwOyIgZD0iTTUxNS4yOTEgNDY4LjU2N2MtMTguOTcxIDEuODk0LTM2LjYxMiAyLjQ1OS0yOS41MS0yMS43Mi0yLjUzOC0xMi45OSAzOS42MjctMTMuMzc0IDI5LjUxIDUuODkxIDAgNS4yNzYgMCAxMC41NTMgMCAxNS44Mjl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGQ9Ik01NzguNDg2IDU3Mi44NjZjMjEuMjMyIDQuOTIgMjkuNDY5LTMuMTU2IDI0LjUwMy0yNC40MzUtMTMuMTA0LTguNTMyLTMyLjk1NS0yLjEwNi0yNC41MDMgMTkuMjAxdjUuMjM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTI7IiBkPSJNNjAxLjQ3MSA2NDEuNjg5Yy0xOC45NzEgMS44OTQtMzYuNjEyIDIuNDU5LTI5LjUxLTIxLjcyLTIuNTM4LTEyLjk5IDM5LjYyNy0xMy4zNzQgMjkuNTEgNS44OTEgMCA1LjI3NiAwIDEwLjU1MyAwIDE1LjgyOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE1OyIgZ2x5cGgtbmFtZT0iZGlhc3BvcmEiIGhvcml6LWFkdi14PSIxMDY0IiBkPSJNNjcwLjEgMjIuMTA5Yy0yOC42OTIgNDAuMDQ2LTczLjQ1OSAxMDIuNTcxLTk5LjQ4MiAxMzguOTQ1LTI2LjU3OSAzNy4xNTEtNDguMjAyIDY2LjE0Ni00OS4zNCA2Ni4xNjEtMS4xNjkgMC4wMTUtNDIuOTg2LTU2LjE5Ni05OC45MTItMTMyLjk2MS01My4yODgtNzMuMTQzLTk3LjMzLTEzMi45ODctOTcuODcyLTEzMi45ODctMS41MTYgMC0xOTIuMTE0IDEzNC4yNS0xOTIuNjA1IDEzNS42NjMtMC4yMzcgMC42ODQgNDIuODUgNjMuOTM1IDk1Ljc1MSAxNDAuNTU5czk2LjE4MiAxNDAuNTIzIDk2LjE4MiAxNDEuOTk5YzAgMi4zOC0xNy4xNDIgOC4zOTgtMTUxLjYwNSA1My4yMjYtODMuMzgzIDI3Ljc5OC0xNTIuNDIyIDUwLjg2MS0xNTMuNDIgNTEuMjUxLTEuMzg4IDAuNTQyIDYuNTUgMjcuMTAzIDMzLjc4MyAxMTMuMDMyIDE5LjU3OCA2MS43NzggMzYuMDQwIDExMi44MjggMzYuNTgxIDExMy40NDRzNzMuMDExLTIyLjU3NCAxNjEuMDQzLTUxLjUzNGM4OC4wMzMtMjguOTYgMTYwLjc5Ni01Mi42NTQgMTYxLjY5Ni01Mi42NTNzMS45MTkgMS4zNDggMi4yNjMgMi45OTRjMC4zNDQgMS42NDYgMS4xMDQgNzYuNjAxIDEuNjg4IDE2Ni41NjZzMS41NDYgMTY0LjMyMiAyLjEzNyAxNjUuMjM2YzAuODQ3IDEuMzA5IDI1LjU3NiAxLjY1OCAxMTYuMzY0IDEuNjQyIDYzLjQwOC0wLjAxMSAxMTUuOTQ4LTAuNDYgMTE2Ljc1Ni0wLjk5NyAxLjAxOC0wLjY3NyAyLjc1Ny01MC4xMzggNS42Ny0xNjEuMjI2IDQuNzgzLTE4Mi40MDggNC44ODYtMTg0Ljg1MiA3Ljc5NS0xODQuODUyIDEuMTI4IDAgNzAuODk2IDIzLjM1MyAxNTUuMDQxIDUxLjg5NnMxNTMuNCA1MS40MzMgMTUzLjkwMSA1MC44NjhjMS43LTEuOTE4IDcwLjcxNS0yMjYuNjAyIDY5Ljg2NS0yMjcuNDUxLTAuNDY0LTAuNDY0LTcwLjY5LTI0LjUxNC0xNTYuMDU2LTUzLjQ0NC0xMTcuNDMyLTM5Ljc5Ny0xNTUuMzE1LTUzLjE0My0xNTUuNjMzLTU0LjgyNy0wLjIzNS0xLjI0NCA0MC4xNDktNjEuNTk0IDkxLjQ5OS0xMzYuNzM3IDUwLjU1NS03My45ODEgOTEuNzMzLTEzNS4wNjIgOTEuNTA3LTEzNS43MzctMC41MjEtMS41NDktMTg5LjY4MS0xNDAuODg0LTE5MS4yNjMtMTQwLjg4NC0wLjY0MiAwLTI0LjY0MyAzMi43NjUtNTMuMzM1IDcyLjgxeiIgLz4KPC9mb250PjwvZGVmcz48L3N2Zz4=) format("svg");font-weight:400;font-style:normal}.cesiumicons,.cion,.ion-library:before,.ion-office:before,.ion-social-diaspora:before,.ion-social-duniter:before{display:inline-block;font-family:Cesiumicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-social-duniter:before{content:""}.ion-social-diaspora:before{content:""}.ion-office:before{content:""}.ion-library:before{content:""}@media screen and (max-width:400px){@-ms-viewport{width:320px}.item .badge{right:16px}}@media screen and (max-width:767px){.hidden-xs{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:300px!important;display:block!important}.badge:empty{display:none!important}.item .badge{right:16px}.padding-top-xs{padding-top:10px}}@media screen and (min-width:768px){.hidden-xs{display:inherit;visibility:visible}.row.hidden-xs{display:flex!important}.button.hidden-xs{display:inline-block}.item-toggle .toggle{right:32px}}@media screen and (max-width:767px){.visible-xs{display:inherit!important;visibility:visible!important}.button.visible-xs{display:block!important}}@media screen and (min-width:768px){.visible-xs{display:none!important;visibility:hidden!important}}@media screen and (max-width:767px){.padding-xs{padding:16px!important}}@media screen and (min-width:768px){.padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-padding-xs{padding:0!important}}@media screen and (min-width:768px){.no-padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-margin-xs{margin:0!important}}@media screen and (min-width:768px){.no-margin-xs{margin:inherit}}@media screen and (max-width:991px) and (min-width:768px){.hidden-sm,.row-header.hidden-sm{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (min-width:992px){.hidden-sm{display:inherit;visibility:visible}.row.hidden-sm{display:flex!important}.button.hidden-sm{display:flex}#menu .footer .popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip .icon-center.icon-alert .button.hidden-sm,.popover-helptip .icon-center.icon-help .button.hidden-sm,.popover-helptip .icon-left.icon-alert .button.hidden-sm,.popover-helptip .icon-left.icon-help .button.hidden-sm,.popover-helptip .icon-right.icon-alert .button.hidden-sm,.popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon.icon-bottom-center .button.hidden-sm,.popover-helptip .icon.icon-bottom-left .button.hidden-sm,.popover-helptip .icon.icon-bottom-right .button.hidden-sm,.popover-helptip .icon.icon-center .button.hidden-sm,.popover-helptip .icon.icon-left .button.hidden-sm,.popover-helptip .icon.icon-right .button.hidden-sm,.pull-left .button.hidden-sm,.pull-right .button.hidden-sm{display:inline-block}}@media screen and (max-width:767px){.hidden-sm{display:inherit;visibility:visible}}@media screen and (max-width:991px){.visible-sm{display:inherit!important;visibility:visible!important}.button.visible-sm{display:block!important}}@media screen and (min-width:992px){.visible-sm{display:none;visibility:hidden}}@media screen and (max-width:767px){.visible-sm{display:none;visibility:hidden}}@media screen and (max-width:991px){body{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEbSURBVDiNndMxK4ZRGMbx3zmRMrwvM2XCQFFik/IJpCw+hJLPgfIhLBY+gEEGJQPFwGZg9TIoBrfhOfSQHl7XeM7/fw3nvk+KCPWklEawgGlMlOMrnOMoIm6/8B8FKaWMFazhGQ94LFwbg+jHDvYi4u2zIKWUsIk5XNfE72ljHKfYiIjI5WIZMzhrkJW7s8IuQ8IwdnGDpwa5nhbGsJqxiNcuZIV9xWJWvXY3cr1kOmMSnX8UdDCZEb+RDYmMS9WMu80gLrNqw1r/KGjhPOMQvaol+Wva6MFhjoh7bGEUuVGrkgu7HRH3H8IBTjCLgQZ5oDAnxfnymRKWsI4X1Zw7NbGFPmxjP4qYfvjOQ5jHlGpHqCZ1geOIuKvz76QSW1T3cwmnAAAAAElFTkSuQmCC),auto}}@media screen and (min-width:992px){body{cursor:inherit}}@media screen and (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (min-width:1200px){.hidden-md{display:inherit;visibility:visible}}@media screen and (max-width:991px){.hidden-md{display:inherit;visibility:visible}}@media screen and (min-width:992px) and (max-width:1199px){.visible-md{display:inherit!important;visibility:visible!important}}@media screen and (min-width:1200px){.visible-md{display:none;visibility:hidden}}@media screen and (max-width:991px){.visible-md{display:none;visibility:hidden}}@media screen and (min-width:1200px){.hidden-lg{display:none!important;visibility:hidden!important}.visible-lg{display:inherit!important;visibility:visible!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:450px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (max-width:1199px){.hidden-lg{display:inherit;visibility:visible}}@media screen and (max-width:1199px){.visible-lg{display:none;visibility:hidden}}@media screen and (max-width:768px){.no-padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-margin-xs{margin:0!important}}@media screen and (min-width:992px){.disable-user-behavior,.scroll,body,html{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;-webkit-touch-callout:default!important;-webkit-tap-highlight-color:#387ef5;-webkit-user-drag:none!important;touch-action:auto!important;-ms-touch-action:auto!important;-ms-content-zooming:none!important}}@media screen and (max-width:844px){.hidden-nomenu{display:none!important;visibility:hidden!important}.visible-nomenu{display:inherit!important;visibility:visible!important}}@media screen and (min-width:845px){.hidden-nomenu{display:inherit;visibility:visible}.visible-nomenu{display:none!important;visibility:hidden!important}}@media screen and (min-width:845px){.hidden-menu{display:none!important;visibility:hidden!important}.visible-menu{display:inherit!important;visibility:visible!important}}@media screen and (max-width:844px){.hidden-menu{display:inherit;visibility:visible}.visible-menu{display:none;visibility:hidden}}.item.item-icon-right .item-select select,.item.item-icon-right.item-select select{right:48px;padding:0 20px 0 16px}.item.item-icon-right .item-select:after,.item.item-icon-right.item-select:after{right:56px}#unitPopover .item.selected,.popover-unit .item.selected{background-color:#f8f8f8}@media (max-width:767px){.popover-share{width:auto}}.popover-share{height:110px}.popover-share .bar{box-shadow:none!important}.popover-share .bar-header{height:20px}.popover-share .bar-header .title{font-size:12px;font-weight:700;height:20px;line-height:19px;max-width:260px;margin:0 5px;text-align:left}.popover-share .bar-header span{font-size:10px;margin:5px;height:20px;position:absolute;right:0;top:0;margin:0 5px;display:block}.popover-share .has-header{top:20px}.popover-share .has-footer{bottom:40px}.popover-share .bar-footer{color:#387ef5;height:40px}.popover-share .bar-footer .button-icon{padding:0 5px}.popover-share .bar-footer .button-close{position:absolute;right:0;bottom:0}.popover-share .item{padding:5px}.popover-share .item input{border:1px solid grey;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.3)}.popover-share .item input:focus{border-color:#387ef5;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.3),0 0 8px #08c}.popover-share .list .item{border-bottom:0!important}.popover-light .bar-footer,.popover-light .bar-header,.popover-notification .bar-footer,.popover-notification .bar-header{height:30px}.popover-light .bar-footer .title,.popover-light .bar-header .title,.popover-notification .bar-footer .title,.popover-notification .bar-header .title{color:#000;text-align:left;left:0!important;font-size:14px;line-height:30px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-light .bar-footer .icon.icon-center,.popover-helptip .popover-light .bar-footer .icon.icon-right,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-header .icon-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-center.icon-help,.popover-helptip .popover-light .bar-header .icon-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-center,.popover-helptip .popover-light .bar-header .icon.icon-bottom-right,.popover-helptip .popover-light .bar-header .icon.icon-center,.popover-helptip .popover-light .bar-header .icon.icon-right,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-footer .icon.icon-center,.popover-helptip .popover-notification .bar-footer .icon.icon-right,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-header .icon-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-header .icon.icon-center,.popover-helptip .popover-notification .bar-header .icon.icon-right,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-light .bar-footer .popover-helptip .icon.icon-center,.popover-light .bar-footer .popover-helptip .icon.icon-right,.popover-light .bar-footer .pull-right,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip .icon-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-center.icon-help,.popover-light .bar-header .popover-helptip .icon-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-center,.popover-light .bar-header .popover-helptip .icon.icon-bottom-right,.popover-light .bar-header .popover-helptip .icon.icon-center,.popover-light .bar-header .popover-helptip .icon.icon-right,.popover-light .bar-header .pull-right,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-footer .popover-helptip .icon.icon-center,.popover-notification .bar-footer .popover-helptip .icon.icon-right,.popover-notification .bar-footer .pull-right,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-header .popover-helptip .icon.icon-center,.popover-notification .bar-header .popover-helptip .icon.icon-right,.popover-notification .bar-header .pull-right{margin-right:10px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-light .bar-footer .icon.icon-left,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-header .icon-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-left,.popover-helptip .popover-light .bar-header .icon.icon-left,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-footer .icon.icon-left,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-header .icon-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-header .icon.icon-left,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-light .bar-footer .popover-helptip .icon.icon-left,.popover-light .bar-footer .pull-left,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip .icon-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-left,.popover-light .bar-header .popover-helptip .icon.icon-left,.popover-light .bar-header .pull-left,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-footer .popover-helptip .icon.icon-left,.popover-notification .bar-footer .pull-left,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-header .popover-helptip .icon.icon-left,.popover-notification .bar-header .pull-left{margin-left:10px}.popover-light .bar-footer a,.popover-light .bar-header a,.popover-notification .bar-footer a,.popover-notification .bar-header a{font-size:14px;text-decoration:none;line-height:30px}.popover-light .has-footer,.popover-notification .has-footer{bottom:28px}.popover-light .has-header,.popover-notification .has-header{top:30px}.popover-light .item.unread,.popover-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}.popover-light .item-avatar,.popover-notification .item-avatar{padding-top:12px;padding-bottom:8px;padding-left:76px;padding-right:10px;min-height:80px!important}#menu .footer .popover-light .item-avatar h4 i.icon-help,#menu .footer .popover-notification .item-avatar h4 i.icon-help,.popover-light .item-avatar h4 #menu .footer i.icon-help,.popover-light .item-avatar h4 i.icon,.popover-light .item-avatar h4 i.icon-alert,.popover-light .item-avatar h4 i.icon-help,.popover-notification .item-avatar h4 #menu .footer i.icon-help,.popover-notification .item-avatar h4 i.icon,.popover-notification .item-avatar h4 i.icon-alert,.popover-notification .item-avatar h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.popover-light .item-avatar .item-content .item-image,.popover-light .item-avatar .item-content>img:first-child,.popover-light .item-avatar .item-image,.popover-light .item-avatar>img:first-child,.popover-notification .item-avatar .item-content .item-image,.popover-notification .item-avatar .item-content>img:first-child,.popover-notification .item-avatar .item-image,.popover-notification .item-avatar>img:first-child{top:12px;left:10px}.popover-light .button.button-small,.popover-notification .button.button-small{height:30px;font-size:12px;padding:0 5px!important;line-height:30px}.popover-invitation,.popover-network,.popover-peer-info{width:420px}.popover-endpoints .item .badge,.popover-peer-info .item .badge{right:16px}.popover-endpoints .item .badge.badge-secondary,.popover-peer-info .item .badge.badge-secondary{top:35px!important}.popover-unit{height:108px;max-width:115px}.view-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}#menu .footer .view-notification ion-item h4 i.icon-help,.view-notification ion-item h4 #menu .footer i.icon-help,.view-notification ion-item h4 i.icon,.view-notification ion-item h4 i.icon-alert,.view-notification ion-item h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.bar.bar-header .button.button-clear.button-icon i.ion-android-more-vertical,.bar.bar-header .button.button-clear.button-icon.ion-android-more-vertical,.bar.bar-header .button.button-icon.button-text i.ion-android-more-vertical,.bar.bar-header .button.button-icon.ion-android-more-vertical.button-text{padding-left:8px;padding-right:8px}#menu .footer .popover-helptip .bar .buttons.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-right.icon-help,.bar .buttons.pull-right,.bar .popover-helptip #menu .footer .buttons.icon-bottom-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-bottom-right.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon-bottom-center.icon-alert,.bar .popover-helptip .buttons.icon-bottom-center.icon-help,.bar .popover-helptip .buttons.icon-bottom-right.icon-alert,.bar .popover-helptip .buttons.icon-bottom-right.icon-help,.bar .popover-helptip .buttons.icon-center.icon-alert,.bar .popover-helptip .buttons.icon-center.icon-help,.bar .popover-helptip .buttons.icon-right.icon-alert,.bar .popover-helptip .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon.icon-bottom-center,.bar .popover-helptip .buttons.icon.icon-bottom-right,.bar .popover-helptip .buttons.icon.icon-center,.bar .popover-helptip .buttons.icon.icon-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right,.popover-helptip #menu .footer .bar .buttons.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-right.icon-help,.popover-helptip .bar .buttons.icon-bottom-center.icon-alert,.popover-helptip .bar .buttons.icon-bottom-center.icon-help,.popover-helptip .bar .buttons.icon-bottom-right.icon-alert,.popover-helptip .bar .buttons.icon-bottom-right.icon-help,.popover-helptip .bar .buttons.icon-center.icon-alert,.popover-helptip .bar .buttons.icon-center.icon-help,.popover-helptip .bar .buttons.icon-right.icon-alert,.popover-helptip .bar .buttons.icon-right.icon-help,.popover-helptip .bar .buttons.icon.icon-bottom-center,.popover-helptip .bar .buttons.icon.icon-bottom-right,.popover-helptip .bar .buttons.icon.icon-center,.popover-helptip .bar .buttons.icon.icon-right,.popover-helptip .bar>.button.icon-bottom-center.icon-alert,.popover-helptip .bar>.button.icon-bottom-center.icon-help,.popover-helptip .bar>.button.icon-bottom-right.icon-alert,.popover-helptip .bar>.button.icon-bottom-right.icon-help,.popover-helptip .bar>.button.icon-center.icon-alert,.popover-helptip .bar>.button.icon-center.icon-help,.popover-helptip .bar>.button.icon-right.icon-alert,.popover-helptip .bar>.button.icon-right.icon-help,.popover-helptip .bar>.button.icon.icon-bottom-center,.popover-helptip .bar>.button.icon.icon-bottom-right,.popover-helptip .bar>.button.icon.icon-center,.popover-helptip .bar>.button.icon.icon-right{top:0!important}.bar.bar-header{padding-right:5px!important}.bar.bar-header .buttons-right span{margin-left:0!important}.bar .title+.buttons.buttons-right{right:5px}.button-icon{border-color:transparent;box-shadow:none!important}.button-small-padding{padding:0 7px!important}.button-text{color:grey!important;font-size:12px}.button-text.button-small{padding:5px 2px;font-size:12px!important}.button-text-positive{color:#387ef5!important}.button-text-stable{color:#b2b2b2!important}.popup-buttons .button.icon-left,.popup-buttons .button.icon-right{padding-left:32px!important;padding-right:32px!important;line-height:42px}#home .logo{margin-top:15px;width:100%;background-position:center center;background-repeat:no-repeat}#home .center{float:none;text-align:center;display:inline-block}#home .center .button{display:inline-block}@media screen and (max-width:767px){#home .logo{height:96px;background-image:url(data:image/png;base64,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);background-size:96px 96px}#home .footer{display:none}}@media screen and (min-width:768px) and (max-width:991px){#home .logo{height:144px;background-image:url(../img/logo_144px.png);background-size:144px 144px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){#home .logo{height:200px;background-image:url(../img/logo_200px.png);background-size:200px 200px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){.circle-bg-dark{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-725px -145px;background-size:1024px 1024px}.menu.menu-left{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-500px -100px;background-size:1024px 1024px;background-color:#f5f5f5;height:100%}.menu.menu-left .item.active{background-color:#b2e0ff!important}.menu.menu-left .item.active .item-content{background-color:transparent;opacity:1;color:#000}.menu.menu-left .item{opacity:.75;color:#000}.menu.menu-left .item .item-content{background-color:transparent;opacity:1}.menu.menu-left .item-menu-disable{color:#444!important}}.gray,.popover-helptip .button-close,.popover-share .bar-footer .button-close,.popover-share .bar-header span{color:grey!important}.gray b,.popover-helptip .button-close b,.popover-share .bar-footer .button-close b,.popover-share .bar-header span b{color:grey!important}.gray a,.icon-help a,.popover-helptip .button-close a,.popover-share .bar-footer .button-close a,.popover-share .bar-header span a,.positive a,.text-editable:hover a{color:inherit}.gray a:hover,.icon-help a:hover,.popover-helptip .button-close a:hover,.popover-share .bar-footer .button-close a:hover,.popover-share .bar-header span a:hover,.positive a:hover,.text-editable:hover a:hover{color:inherit}.gray a:visited,.icon-help a:visited,.popover-helptip .button-close a:visited,.popover-share .bar-footer .button-close a:visited,.popover-share .bar-header span a:visited,.positive a:visited,.text-editable:hover a:visited{color:inherit}.item a{text-decoration:none}.no-padding{padding:0!important}.avatar-member{background-image:url(data:image/png;base64,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)}.avatar.disable{opacity:.7}.avatar-wallet{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgBA0JMBOJU4OdAAAB2klEQVR42u3au0ocUQCH8e+IxFRKUohrkG0Eu4BiLrCFDxDBNtjoI1gYTJnGQrRInc4HyBuopNHgBVZIwCJFsHBXLURtQiIyKYyFN3B3zJyd3e/X7e7MmXP+e26zOyBJkiRJkiRJkiRJkiRJkppVSF9E0sk0r+jKuOYnrLMQTqMHkHSzQTHS17fLy3CYroi21JWYj9Z8KDIfvwdUKAC7bGfc+CH6gGrojTyJJBemMr/u+4sLpy2njRZnAAZgAK2t/YHKGUzeZlzz5w2yFU6/EKVsQHAIGIABGIABGIABRN4ILbOVcc1fM9IQCfp7gHOAARiAAbgMXpuhH/GJ0brK/sG78OVfKR0cXPnsQ/iYkwAYY6LOM4eZpXR5q3/t77bH+RkCO5HObZQeEL4nQ7ypcwh8boIAIJQpuwoYQMsugwBJ/73L/h1+3vr+OYtXXn/Lzz7gCV8ZqOH4LUrhz4155IzJvA6B0VqaDwzHu7f/PwEsc1zT8RXWmmoOCJWkl9L95wBWbw6AvO8DfrHkMmgABmAABtDw0j8gUaWHeA9K7odC7GVwhXGgGOmB2ZX4PaDAJs8i9d89XoRq5AAgecoMg3Rm3PhTysyFIyRJkiRJkiRJkiRJkiRJku7wFyuiadmIs5Q9AAAAAElFTkSuQmCC)}.item.item-icon-left>i.avatar:first-child{position:absolute;display:flex;height:100%;align-items:center;font-size:16px;left:16px;top:8px;max-height:32px;max-width:32px}.item.item-checkbox.item-avatar * .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar * .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar *>i.avatar:first-child,.item.item-checkbox.item-avatar *>i.item-image:first-child,.item.item-checkbox.item-avatar .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar>i.avatar:first-child,.item.item-checkbox.item-avatar>i.item-image:first-child{left:65px}.item.item-checkbox .item-content .item-avatar,.item.item-checkbox.item-avatar .item-content{padding-left:65px}.popup-container.confirm .popup,.popup-container.warning .popup{min-width:250px!important;width:350px!important}.popup-container.confirm .popup-head h1,.popup-container.confirm .popup-head h2,.popup-container.confirm .popup-head h3,.popup-container.confirm .popup-head h5,.popup-container.confirm .popup-head h6,.popup-container.confirm .popup-head p,.popup-container.warning .popup-head h1,.popup-container.warning .popup-head h2,.popup-container.warning .popup-head h3,.popup-container.warning .popup-head h5,.popup-container.warning .popup-head h6,.popup-container.warning .popup-head p{color:#fff}.popup-container.warning .popup-head{background-color:#ef473a}.popup-container.confirm .popup-head{background-color:#387ef5}.refresher-top-bg:before{position:absolute;display:block;top:0;width:100%;height:100px;z-index:-10;content:" "}.refresher-top-bg .scroll-refresher{z-index:50}.refresher-light .scroll-refresher .ionic-refresher-content,.view-identity .refresher-top-bg .scroll-refresher .ionic-refresher-content,.view-wallet .refresher-top-bg .scroll-refresher .ionic-refresher-content,.view-wallet-tx .refresher-top-bg .scroll-refresher .ionic-refresher-content{color:#fff}.refresher-light .scroll-refresher .spinner,.view-identity .refresher-top-bg .scroll-refresher .spinner,.view-wallet .refresher-top-bg .scroll-refresher .spinner,.view-wallet-tx .refresher-top-bg .scroll-refresher .spinner{stroke:#fff;fill:#fff}.view-wallet .refresher-top-bg:before{height:200px}.view-wallet .qrcode{position:absolute;top:30px;padding:3px;background:#fff;width:90px;max-width:30%;right:-170px;-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.view-wallet .qrcode img{width:100%}.view-wallet .qrcode.on{right:30px}.view-wallet .qrcode.active{top:0!important;right:0!important;padding:10px;width:200px;max-width:50%}.view-wallet .item-text-wrap{white-space:normal!important}.view-wallet .item .comment{font-style:italic!important}.popover-helptip .view-wallet .item h3 .button-close,.popover-share .bar-footer .view-wallet .item h3 .button-close,.popover-share .bar-header .view-wallet .item h3 span,.view-wallet .item h3 .gray,.view-wallet .item h3 .popover-helptip .button-close,.view-wallet .item h3 .popover-share .bar-footer .button-close,.view-wallet .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet .list .item span{display:inline}.view-wallet .item-divider .badge{top:16px!important}.view-wallet .item.item-wallet-event{padding-top:5px;padding-bottom:5px;min-height:30px;max-height:auto;height:auto}.view-wallet .item.item-wallet-event:last-child{min-height:48px}#menu .footer .view-wallet .item.item-icon-left.item-wallet-event .icon-help,.view-wallet .item.item-icon-left.item-wallet-event #menu .footer .icon-help,.view-wallet .item.item-icon-left.item-wallet-event .icon,.view-wallet .item.item-icon-left.item-wallet-event .icon-alert,.view-wallet .item.item-icon-left.item-wallet-event .icon-help{font-size:15px}@media screen and (max-width:991px){.view-wallet .qrcode{top:8px;width:60px;max-width:30%}.view-wallet .qrcode.on{right:8px}.view-wallet .hero.hero-qrcode-active h1,.view-wallet .hero.hero-qrcode-active h2,.view-wallet .hero.hero-qrcode-active h3,.view-wallet .hero.hero-qrcode-active h4,.view-wallet .hero.hero-qrcode-active h5,.view-wallet .hero.hero-qrcode-active i{margin-right:200px}}.popover-wallet-actions{height:400px}@media screen and (max-width:991px){.view-wallet-tx .hero{height:100px}}@media screen and (min-width:992px){.view-wallet-tx .hero{height:140px}}.view-wallet-tx .refresher-top-bg:before{height:100px}.view-wallet-tx .item-text-wrap{white-space:normal!important}.view-wallet-tx .item .comment{font-style:italic!important}.popover-helptip .view-wallet-tx .item h3 .button-close,.popover-share .bar-footer .view-wallet-tx .item h3 .button-close,.popover-share .bar-header .view-wallet-tx .item h3 span,.view-wallet-tx .item h3 .gray,.view-wallet-tx .item h3 .popover-helptip .button-close,.view-wallet-tx .item h3 .popover-share .bar-footer .button-close,.view-wallet-tx .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet-tx .list .item span{display:inline}.view-wallet-tx .item-divider .badge{top:16px!important}.stable-100-bg{background-color:#f2f2f2!important}.item-tx .badge-energized{background-color:rgba(255,201,0,.3);color:#888!important}.view-identity .hero,.view-identity .refresher-top-bg:before{height:200px}.card .card-header{font-size:90%;opacity:.8}.card .stable-900-bg,.card.stable-900-bg,.item .stable-900-bg,.item-complex .item-content .stable-900-bg,.item-radio .item-content .stable-900-bg,.item.stable-900-bg{background-color:#e0e0e0!important}.card .item{background:inherit}.card .stable-bg,.card.stable-bg,.item .stable-bg,.item-complex .item-content .stable-bg,.item-radio .item-content .stable-bg,.item.stable-bg{background-color:#f8f8f8!important}.card .card-header{padding-top:5px!important;padding-bottom:0!important;min-height:25px}.card .item .card-footer{margin-bottom:5px}.card .card-avatar .avatar,.card.card-avatar .avatar{box-shadow:0 3px 4px 0 rgba(0,0,0,.26);top:7px;background-color:#d9d9d9}.card .card-avatar img.avatar,.card.card-avatar img.avatar{border:0;min-height:54px;min-width:54px}.card .card-avatar .item.item-avatar,.card.card-avatar .item.item-avatar{padding-top:10px;padding-bottom:2px;min-height:45px!important}.card .card-avatar .card-footer,.card.card-avatar .card-footer{padding-left:88px;overflow:hidden}#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card .card-avatar .card-footer .popover-helptip .icon.icon-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-right a,.card .card-avatar .card-footer .pull-right a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card.card-avatar .card-footer .popover-helptip .icon.icon-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-right a,.card.card-avatar .card-footer .pull-right a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card .card-avatar .card-footer .icon.icon-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-right a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card.card-avatar .card-footer .icon.icon-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-right a{margin-right:8px}.a.underline:active,.underline a:active,.underline a:focus,.underline a:hover,a.underline:focus,a.underline:hover{outline:1px!important;text-decoration:underline!important}.card-avatar-small .card,.card-avatar-small .card .card-avatar,.card-avatar-small .card.card-avatar,.card-avatar-small.card{min-height:45px}.card-avatar-small .card .avatar,.card-avatar-small .card .card-avatar .avatar,.card-avatar-small .card .card-avatar .item-avatar .avatar,.card-avatar-small .card .item-avatar .avatar,.card-avatar-small .card.card-avatar .avatar,.card-avatar-small .card.card-avatar .item-avatar .avatar,.card-avatar-small.card .avatar,.card-avatar-small.card .item-avatar .avatar{box-shadow:0 2px 2px 0 rgba(0,0,0,.26);height:30px!important;width:30px!important;left:5px!important}.card-avatar-small .card .card-avatar .item.item-avatar,.card-avatar-small .card .item.item-avatar,.card-avatar-small .card.card-avatar .item.item-avatar,.card-avatar-small.card .item.item-avatar{min-height:25px!important;padding-left:42px!important}.card-avatar-small .card .card-avatar .card-footer,.card-avatar-small .card .card-footer,.card-avatar-small .card.card-avatar .card-footer,.card-avatar-small.card .card-footer{padding-top:0;padding-left:42px!important}.gallery .card-gallery,.gallery .card.card-gallery{margin-bottom:15px!important;float:left;display:block}.gallery .card-gallery img,.gallery .card.card-gallery img{max-height:150px}.gallery .card-gallery-new{max-height:199px}.list .item.text-left{text-align:left!important}.list .item.large-button-bar,.list .item.text-center{text-align:center!important}.list .item.text-right{text-align:right!important}.list .item-divider.item-divider-top-border{border-top:solid 1px rgba(0,0,0,.12)}.lookupForm .list .item.item-avatar{min-height:80px!important}.lookupForm .list .item.item-avatar.item-checkbox .item-content{padding-left:47px;min-height:auto!important;height:auto!important}.fade-in{opacity:0;-webkit-transform:translate3d(-30px,1px,0);-webkit-transition:all 1s ease-in-out}.fade-in.on{opacity:1;-webkit-transform:translate3d(0,0,0)}.item-avatar{min-height:80px!important}.item-avatar .item-content i.item-image:first-child,.item-avatar .item-content img.item-image:first-child,.item-avatar .item-content>i:first-child,.item-avatar .item-content>img:first-child,.item-avatar i.item-image:first-child,.item-avatar img.item-image:first-child,.item-avatar-left .item-content i.item-image:first-child,.item-avatar-left .item-content img.item-image:first-child,.item-avatar-left .item-content>i:first-child,.item-avatar-left .item-content>img:first-child,.item-avatar-left i.item-image:first-child,.item-avatar-left img.item-image:first-child,.item-avatar-left>i:first-child,.item-avatar-left>img:first-child,.item-avatar>i:first-child,.item-avatar>img:first-child{color:#d9d9d9;background-color:#f8f8f8;border:solid 1px #d9d9d9;overflow:hidden!important;font-size:45px!important;line-height:56px;width:100%!important;max-height:56px!important;max-width:56px!important;top:12px!important}#menu .footer .item-avatar .item-content>.icon-help:first-child:before,#menu .footer .item-avatar .item-image.icon-help:first-child:before,#menu .footer .item-avatar.item-icon-right .icon-help:first-child:before,#menu .footer .item-avatar>.icon-help:first-child:before,.item-avatar #menu .footer .item-content>.icon-help:first-child:before,.item-avatar #menu .footer .item-image.icon-help:first-child:before,.item-avatar .icon.item-image:first-child:before,.item-avatar .item-content>.icon-alert:first-child:before,.item-avatar .item-content>.icon-help:first-child:before,.item-avatar .item-content>.icon:first-child:before,.item-avatar .item-image.icon-alert:first-child:before,.item-avatar .item-image.icon-help:first-child:before,.item-avatar.item-icon-right #menu .footer .icon-help:first-child:before,.item-avatar.item-icon-right .icon-alert:first-child:before,.item-avatar.item-icon-right .icon-help:first-child:before,.item-avatar.item-icon-right .icon:first-child:before,.item-avatar>.icon-alert:first-child:before,.item-avatar>.icon-help:first-child:before,.item-avatar>.icon:first-child:before{width:56px!important}#menu .footer .item-avatar.item-icon-right .icon-help:last-child,.item-avatar.item-icon-right #menu .footer .icon-help:last-child,.item-avatar.item-icon-right .icon-alert:last-child,.item-avatar.item-icon-right .icon-help:last-child,.item-avatar.item-icon-right .icon:last-child{left:auto}.item em{font-weight:700!important}@media screen and (min-width:992px){.list .item.item-border-large{border-bottom:solid 1px #ccc!important}.list.item-border-large .item{border-bottom:solid 1px #ccc!important;margin:0}.list.item-border-large .item-divider{border-top:0}}.list .item.item-border{border-bottom:solid 1px #ccc!important}.list .item.item-small-height{padding-top:2px;padding-bottom:0;min-height:24px}.list .item.item-small-height .badge{padding-top:0!important;top:inherit}.list .item.item-small-height .badge.badge-assertive,.list .item.item-small-height .badge.badge-balanced,.list .item.item-small-height .badge.badge-calm,.list .item.item-small-height .badge.badge-editable:hover,.list .item.item-small-height .badge.badge-energized,.list .item.item-small-height .badge.badge-positive,.list .item.item-small-height .badge.badge-royal{top:1px!important;padding-top:3px!important;padding-bottom:2px!important}.form-errors:first-child{margin:5px 0}.form-errors:last-child{margin:5px 0 0}.form-error{padding:0 16px;font-size:12px;color:red;vertical-align:middle;text-align:end;top:0;position:relative}.item-input-error{border-bottom:2px solid red!important}.item-input.item-button-right input,.item-input.item-button-right textarea{margin-right:100px}.item-input.item-button-right .button,.item-input.item-button-right button{top:6px}.item-input.item-button-right.item-floating-label input,.item-input.item-button-right.item-floating-label textarea{padding-right:100px}.item-input.item-button-right.item-floating-label .button{top:inherit;bottom:6px}.item-input.item-button-right.item-floating-label .button-icon{height:inherit}.item.item-button-right .badge,.item.item-icon-right .badge{right:43px}.badge-editable:hover{cursor:pointer}.badge-editable:hover:before{content:" "}.bar .badge-button{margin:0!important;padding:0 4px!important;font-size:10px;position:absolute!important;top:5px;right:3px}.text-editable:hover{cursor:pointer}.text-editable:hover:after{content:""}.item h2 .text-editable:hover:after{font-size:14px}.modal.modal-full-height{bottom:0}.modal.about .bar.bar-header .button+.title{left:0!important}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{top:16px}.item-button-right .item-content>.button.button-small,.item-button-right .item-content>.buttons .button-small,.item-button-right>.button.button-small,.item-button-right>.buttons .button-small{font-size:14px}.item.large-button-bar{margin-bottom:10px}.item-avatar-left-padding{padding-left:95px}.item-thumbnail-left-padding{padding-left:106px}.item-thumbnail-left,.item.item-thumbnail-left{min-height:100px!important}.item-thumbnail-left .item-content i.item-image,.item-thumbnail-left .item-content>i:first-child,.item-thumbnail-left i.item-image,.item-thumbnail-left>i:first-child{color:#d9d9d9;background-color:#f8f8f8;overflow:hidden!important;font-size:50px!important;line-height:80px;padding:0 15px;background-position:center;background-size:cover;display:inline-block}@media screen and (max-width:400px){.card>.item.item-thumbnail-left,.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:84px!important}.item-thumbnail-left .item-content img.item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left img.item-image,.item-thumbnail-left>img:first-child{max-width:70px;max-height:70px}.item h2{font-size:13px!important}}.item-icon-left-padding{padding-left:40px}.item-icon-right-padding{padding-right:40px}.text-keep-lines{white-space:pre-line!important}.text-italic{font-style:italic!important}#menu .item-button-right>.button,.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.buttons{top:8px!important}@media screen and (max-width:400px){#menu .item.item-divider{min-height:2px;height:2px;padding-top:0;padding-bottom:0}#menu .item,#menu .item.item-complex .item-content{height:40px;min-height:40px;padding-top:12px}#menu .item.item-complex{padding-top:0}#menu .item.item-button-right .button{height:30px;min-height:30px;top:4px}#menu .item.active a{background-color:#b2e0ff!important}#menu ion-content.has-footer{bottom:0!important}}@media screen and (min-width:401px){#menu .item.active a{background-color:#b2e0ff!important}#menu .item.item-divider{min-height:5px;height:5px}#menu .footer a{font-size:14px!important;color:grey!important}}@media screen and (max-width:991px){#menu .bar-header{background-color:#1a237e;color:#fff;height:175px;padding-right:0!important}#menu .bar-header .hero{height:175px;box-shadow:none}#menu .bar-header .hero .content{bottom:5px}#menu .has-header{top:175px}}.hero.stable-bg{background-color:#f8f8f8!important}.certifications .item-divider .badge{top:16px!important}.certifications-lg .avatar-large{left:auto;position:relative;font-size:55px!important;height:88px;width:88px;color:#d9d9d9;background-color:#e0e0e0;border:solid 1px #d9d9d9}.icon-help{font-size:38px;vertical-align:middle}.icon-alert{font-size:38px;vertical-align:middle}#menu .footer .icon-help{font-size:25px!important;position:absolute;left:12px;top:8px;z-index:99}.popover-helptip{background-color:rgba(68,68,68,.85)!important;height:auto!important}.popover-helptip .button-close{padding:8px;height:25px;font-size:18.2px}.popover-helptip a,.popover-helptip a:active,.popover-helptip a:hover{text-decoration:underline}.nobackdrop .popover-backdrop.active{background-color:transparent!important}.helptip-anchor,.helptip-anchor-center,.helptip-anchor-left,.helptip-anchor-right{display:block;position:absolute;width:100%;bottom:0}.helptip-anchor-center{text-align:center}.helptip-anchor-left{text-align:left}.helptip-anchor-right{text-align:right}.helptip-anchor a:before,.helptip-anchor-center a:before,.helptip-anchor-left a:before,.helptip-anchor-right a:before{content:" "}@media (max-width:767px){.popover-helptip{width:auto}}#menu .footer .popover-helptip .icon-left.icon-help,.popover-helptip #menu .footer .icon-left.icon-help,.popover-helptip .icon-left.icon-alert,.popover-helptip .icon-left.icon-help,.popover-helptip .icon.icon-left{font-size:30px;position:relative;top:8px;left:8px}#menu .footer .popover-helptip .icon-right.icon-help,.popover-helptip #menu .footer .icon-right.icon-help,.popover-helptip .icon-right.icon-alert,.popover-helptip .icon-right.icon-help,.popover-helptip .icon.icon-right{font-size:30px;position:relative;top:8px;right:8px}#menu .footer .popover-helptip .icon-center.icon-help,.popover-helptip #menu .footer .icon-center.icon-help,.popover-helptip .icon-center.icon-alert,.popover-helptip .icon-center.icon-help,.popover-helptip .icon.icon-center{font-size:30px;width:100%;text-align:center;position:relative;top:8px;height:0}#menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-helptip .icon-bottom-right.icon-alert,.popover-helptip .icon-bottom-right.icon-help,.popover-helptip .icon.icon-bottom-right{font-size:30px;position:relative;bottom:8px;right:8px}#menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-helptip .icon-bottom-left.icon-alert,.popover-helptip .icon-bottom-left.icon-help,.popover-helptip .icon.icon-bottom-left{font-size:30px;position:relative;bottom:8px;left:8px}#menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-helptip .icon-bottom-center.icon-alert,.popover-helptip .icon-bottom-center.icon-help,.popover-helptip .icon.icon-bottom-center{font-size:30px;position:relative;width:100%;bottom:8px;text-align:center;height:0}.popover.popover-profile{height:200px}.popover.popover-profile .avatar{height:90px;width:90px;left:20px;top:20px}.popover.popover-profile .avatar{border:solid 1px #d9d9d9}.popover.popover-profile .bar.bar-footer{height:58px}.popover.popover-profile .bar.bar-footer .col .button{max-width:inherit;width:100%;padding:5px 0;margin:0}.popover.popover-profile .bar .button-positive,.popover.popover-profile .bar .button-text{background-color:#387ef5!important}.popover.popover-profile .bar .button-stable{color:#444!important}.bar-header .button-icon .avatar{height:35px;width:35px;position:relative;left:0;top:4px;border:solid 1px #d9d9d9}.bar-header .button-icon .avatar.active{background-color:#e0e0e0}.bar-header .button-icon .avatar{height:31px;width:31px;position:relative;left:0;top:6px}.list .badge .badge-secondary,.list .badge.badge-secondary{font-size:12px;font-style:italic;top:37px;font-weight:400!important;margin-right:0;padding-right:0}.popover.popover-login-methods{height:280px;width:260px}.popover.popover-login-methods.auth{height:204px}@media (max-width:767px){.popover.popover-login-methods{height:233px}.popover.popover-login-methods.auth{height:152px}}.ion-es-user-api:before{content:url(../img/logo.small.cs.dune.svg)}.ion-bma-tor-api:before{content:url(data:image/png;base64,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)}.row-header{border-bottom:solid 1px #ccc!important;margin:0;min-height:28px!important}.col-header{text-align:center;display:block!important}.col-15{-webkit-box-flex:0;-webkit-flex:0 0 15%;-moz-box-flex:0;-moz-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}.col-border-left{border-left:solid 1px #ccc!important}.col-border-right{border-right:solid 1px #ccc!important}.ion-spinner-small{height:14px;width:14px;line-height:14px;margin:0;padding:0}.ion-spinner-small svg{height:14px;width:14px}.icon-secondary{position:absolute;height:100%;display:flex;align-items:center;font-size:16px;left:25px;top:-7px}div[dropzone]{border:2px dashed #bbb;border-radius:5px;padding:15px;text-align:center;font:20pt bold;color:#bbb;margin-bottom:20px}.hero .button-fab-top-left,.hero .button-fab-top-right{top:170px!important}.text-no-transform{text-transform:inherit}.button-icon-event,.item-icon-event{text-transform:inherit;pointer-events:none!important}#menu .footer .button-icon-event .icon-help,#menu .footer .item-icon-event .icon-help,.button-icon-event #menu .footer .icon-help,.button-icon-event .icon,.button-icon-event .icon-alert,.button-icon-event .icon-event,.button-icon-event .icon-help,.item-icon-event #menu .footer .icon-help,.item-icon-event .icon,.item-icon-event .icon-alert,.item-icon-event .icon-event,.item-icon-event .icon-help{pointer-events:all!important}.hero.dark-bg,.view-identity .hero,.view-identity .hero.refresher-top-bg:before{background-color:#555}.hero.positive-900-bg,.view-identity .hero.member.refresher-top-bg:before,.view-identity .member .hero,.view-wallet .hero.refresher-top-bg:before,.view-wallet-tx .hero.refresher-top-bg:before{background-color:#1a237e!important}.popover-locked-outputs .item .badge{right:16px}.animate-show-hide.ng-hide{opacity:0}.animate-show-hide.ng-hide-add,.animate-show-hide.ng-hide-remove{transition:all linear .3s}@media screen and (max-width:991px){.modal iframe.iframe-license{width:100%;height:78%}}@media screen and (min-width:992px){.modal iframe.iframe-license{width:100%;height:70%}.modal.modal-license iframe.iframe-license{width:100%;height:85%!important}}.modal.modal-help .row.selected .col:first-child{font-weight:700}@media screen and (max-width:767px){.modal.modal-help .row .col:first-child{font-weight:700}.modal.modal-help h2{padding-left:10px}}.modal.modal-login .item.item-icon-right.item-text-wrap .item-content{margin-right:58px;text-overflow:ellipsis;overflow:hidden}.popover-locales{height:284px;width:200px}.popover-locales .item{height:48px}.buttons-tabs{display:block;height:57px;border:0;padding:16px 16px 0 16px;overflow:hidden}.buttons-tabs .button.button-tab:first-child{border-top-left-radius:15px}.buttons-tabs .button.button-tab:last-child{border-top-right-radius:15px}.buttons-tabs .button.button-tab.active{background-color:#b2e0ff}.buttons-tabs.border-bottom{border-bottom:solid 1px #ccc!important}@media screen and (max-width:767px){.buttons-tabs{padding:10px 10px 0 10px}.buttons-tabs .button.button-tab{padding:2px 10px 0 10px!important}} \ No newline at end of file diff --git a/www/i18n/locale-en-GB.json b/www/i18n/locale-en-GB.json index c75bb610c10a5cbb32198e0ea29b7e59c154adb2..ac4d72cb256a0e4f6227971c834a9c15560b5c3c 100644 --- a/www/i18n/locale-en-GB.json +++ b/www/i18n/locale-en-GB.json @@ -89,6 +89,7 @@ "WOT": "Registry", "CURRENCY": "Currency", "ACCOUNT": "My Account", + "WALLETS": "My wallets", "TRANSFER": "Transfer", "SCAN": "Scan", "SETTINGS": "Settings", diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json index 28e8812a7a439006ba76c48b8265aaf764333b71..79b20667330e627b5e32c2c1092f095214bfee9f 100644 --- a/www/i18n/locale-en.json +++ b/www/i18n/locale-en.json @@ -89,6 +89,7 @@ "WOT": "Registry", "CURRENCY": "Currency", "ACCOUNT": "My Account", + "WALLETS": "My wallets", "TRANSFER": "Transfer", "SCAN": "Scan", "SETTINGS": "Settings", diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json index c5c569b4f27a19a6fe379030f5c354a511aa96a6..0d7338e9821d1d449b0c724575b7aead746290e9 100644 --- a/www/i18n/locale-fr-FR.json +++ b/www/i18n/locale-fr-FR.json @@ -89,6 +89,7 @@ "WOT": "Annuaire", "CURRENCY": "Monnaie", "ACCOUNT": "Mon compte", + "WALLETS": "Mes portefeuilles", "TRANSFER": "Virement", "SCAN": "Scanner", "SETTINGS": "Paramètres", diff --git a/www/js/controllers/app-controllers.js b/www/js/controllers/app-controllers.js index 17d1f849bfe11cbdaa3322f1f4df3083520530fb..695d3c4dd00dc6b03a852b0f95d588337b414bb8 100644 --- a/www/js/controllers/app-controllers.js +++ b/www/js/controllers/app-controllers.js @@ -110,10 +110,10 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $ UIUtils.loading.show(); - return CryptoUtils.parseWIF_or_EWIF(data, options) + return csCrypto.keyfile.parseWIF_or_EWIF(data, options) .catch(function(err) { if (err && err == 'CANCELLED') return; - if (err && err.ucode == CryptoUtils.errorCodes.BAD_PASSWORD) { + if (err && err.ucode == csCrypto.errorCodes.BAD_PASSWORD) { // recursive call return parseWIF_or_EWIF(data, {withSecret: options.withSecret, error: 'ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD'}); } @@ -248,26 +248,6 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $ return $scope.login; }; - $scope.showProfilePopover = function(event) { - return UIUtils.popover.show(event, { - templateUrl :'templates/common/popover_profile.html', - scope: $scope, - autoremove: true, - afterShow: function(popover) { - $scope.profilePopover = popover; - $timeout(function() { - UIUtils.ink({selector: '#profile-popover .ink, #profile-popover .ink-dark'}); - }, 100); - } - }); - }; - - $scope.closeProfilePopover = function() { - if ($scope.profilePopover && $scope.profilePopover.isShown()) { - $timeout(function(){$scope.profilePopover.hide();}); - } - }; - // Load wallet data (after login) $scope.loadWalletData = function(options) { options = options || {}; @@ -275,13 +255,9 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $ return wallet.loadData(options) .then(function(walletData) { - if (walletData) { - $rootScope.walletData = walletData; - return walletData; - } - else { // cancel login - throw 'CANCELLED'; - } + // cancel login + if (!walletData) throw 'CANCELLED'; + return walletData; }); }; @@ -463,11 +439,32 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $ return Modals.showHelp(parameters); }; + //////////////////////////////////////// - // Change node (expert mode) + // Useful popovers //////////////////////////////////////// - $scope.showNodeListPopover = function(event) { + $scope.showProfilePopover = function(event) { + return UIUtils.popover.show(event, { + templateUrl :'templates/common/popover_profile.html', + scope: $scope, + autoremove: true, + afterShow: function(popover) { + $scope.profilePopover = popover; + $timeout(function() { + UIUtils.ink({selector: '#profile-popover .ink, #profile-popover .ink-dark'}); + }, 100); + } + }); + }; + + $scope.closeProfilePopover = function() { + if ($scope.profilePopover && $scope.profilePopover.isShown()) { + $timeout(function(){$scope.profilePopover.hide();}); + } + }; + // Change peer info + $scope.showPeerInfoPopover = function(event) { return UIUtils.popover.show(event, { templateUrl: 'templates/network/popover_peer_info.html', autoremove: true, diff --git a/www/js/controllers/login-controllers.js b/www/js/controllers/login-controllers.js index 1ac630b0711a589fdfd10a7c3b6c52671559795c..a7214850f2f1ffaacd2b01245692e9e9b48f2ceb 100644 --- a/www/js/controllers/login-controllers.js +++ b/www/js/controllers/login-controllers.js @@ -7,7 +7,7 @@ angular.module('cesium.login.controllers', ['cesium.services']) ; -function LoginModalController($scope, $timeout, $q, $ionicPopover, CryptoUtils, +function LoginModalController($scope, $timeout, $q, $ionicPopover, CryptoUtils, csCrypto, UIUtils, BMA, Modals, csSettings, Device, parameters) { 'ngInject'; @@ -352,10 +352,10 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, CryptoUtils, }); }; - return CryptoUtils.readKeyFile($scope.formData.file, options) + return csCrypto.keyfile.read($scope.formData.file, options) .catch(function(err) { $scope.formData.file.password = undefined; - if (err && err.ucode == CryptoUtils.errorCodes.BAD_PASSWORD) { + if (err && err.ucode == csCrypto.errorCodes.BAD_PASSWORD) { // Recursive call return $scope.readKeyFile($scope.formData.file, {withSecret: options.withSecret, error: 'ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD'}); } diff --git a/www/js/controllers/transfer-controllers.js b/www/js/controllers/transfer-controllers.js index 889e5af8af6ed3e7ebcfd08c67743e5953fb7e0f..12f2faa7cee67e86b568bfa2dfe8f58e6311b76e 100644 --- a/www/js/controllers/transfer-controllers.js +++ b/www/js/controllers/transfer-controllers.js @@ -346,11 +346,12 @@ function TransferModalController($scope, $q, $translate, $timeout, $filter, $foc UIUtils.toast.show('INFO.TRANSFER_SENT'); }, 500); return res; - }) - .catch(function(err) { - $scope.sending = false; - UIUtils.onError('ERROR.SEND_TX_FAILED')(err); }); + }) + .catch(function(err) { + $scope.sending = false; + if (err == 'CANCELLED') return; // user cancelled + UIUtils.onError('ERROR.SEND_TX_FAILED')(err); }); }; @@ -410,7 +411,9 @@ function TransferModalController($scope, $q, $translate, $timeout, $filter, $foc if (!$scope.enableSelectWallet) return; return Modals.showSelectWallet({ - useRelative: $scope.formData.useRelative + useRelative: $scope.formData.useRelative, + showDefault: true, + showBalance: true }) .then(function(newWallet) { if (!newWallet || (wallet && wallet.id === newWallet.id)) return; diff --git a/www/js/controllers/wallet-controllers.js b/www/js/controllers/wallet-controllers.js index f0a48b0a34952c05f4a9e013dff9b106bd811a37..757a2c996370f6fe2fabac02bc7a840f2ce18aca 100644 --- a/www/js/controllers/wallet-controllers.js +++ b/www/js/controllers/wallet-controllers.js @@ -47,7 +47,7 @@ angular.module('cesium.wallet.controllers', ['cesium.services', 'cesium.currency }) .state('app.view_wallets', { - url: "/wallet/list", + url: "/wallets", views: { 'menuContent': { templateUrl: "templates/wallet/list/view_wallets.html", @@ -55,7 +55,7 @@ angular.module('cesium.wallet.controllers', ['cesium.services', 'cesium.currency } }, data: { - login: true + auth: true } }) @@ -101,10 +101,12 @@ angular.module('cesium.wallet.controllers', ['cesium.services', 'cesium.currency .controller('WalletListCtrl', WalletListController) .controller('WalletSelectModalCtrl', WalletSelectModalController) + + .controller('PopoverWalletSelectModalCtrl', PopoverWalletSelectModalController) ; function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, $translate, $ionicPopover, - UIUtils, Modals, BMA, csConfig, csSettings, csWallet, csHelp) { + UIUtils, Modals, csPopovers, BMA, csConfig, csSettings, csWallet, csHelp) { 'ngInject'; $scope.loading = true; @@ -115,6 +117,7 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, $scope.enter = function(e, state) { $scope.loading = $scope.loading || (state.stateParams && state.stateParams.refresh); + $scope.enableSelectWallet = csWallet.children.count() > 0; if ($scope.loading) { // load once wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet; if (!wallet) { @@ -493,24 +496,7 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, } }; - /* -- popup / UI -- */ - - // Transfer - $scope.showTransferModal = function() { - var hasCredit = (!!$scope.formData.balance && $scope.formData.balance > 0); - if (!hasCredit && !wallet.children.count()) { - UIUtils.alert.info('INFO.NOT_ENOUGH_CREDIT'); - return; - } - Modals.showTransfer() - .then(function(done){ - if (done) { - UIUtils.toast.show('INFO.TRANSFER_SENT'); - $scope.$broadcast('$$rebind::' + 'balance'); // force rebind balance - $scope.motion.show({selector: '.item-pending'}); - } - }); - }; + /* -- UI actions -- */ $scope.startWalletTour = function() { $scope.hideActionsPopover(); @@ -565,6 +551,64 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, }); }; + /* -- modals -- */ + + // Transfer + $scope.showTransferModal = function() { + var hasCredit = (!!$scope.formData.balance && $scope.formData.balance > 0); + if (!hasCredit && !wallet.children.count()) { + UIUtils.alert.info('INFO.NOT_ENOUGH_CREDIT'); + return; + } + Modals.showTransfer() + .then(function(done){ + if (done) { + UIUtils.toast.show('INFO.TRANSFER_SENT'); + $scope.$broadcast('$$rebind::' + 'balance'); // force rebind balance + $scope.motion.show({selector: '.item-pending'}); + } + }); + }; + + $scope.showSecurityModal = function(){ + $scope.hideActionsPopover(); + return Modals.showAccountSecurity() + .then(function(res) { + if (!res) return; + + if (res === 'self') { + return $scope.self(); + } + else if (res === 'membershipIn') { + return $scope.membershipIn(); + } + }); + }; + + $scope.showSelectIdentitiesModal = function(){ + $scope.hideActionsPopover(); + + return Modals.showSelectPubkeyIdentity({ + identities: [$scope.formData.requirements].concat($scope.formData.requirements.alternatives) + }) + .then(function(idty) { + if (!idty || !idty.uid) return; + + $scope.loading = true; + + // Set self (= uid + blockUid) + return wallet.setSelf(idty.uid, idty.blockUid) + .then(function() { + $scope.loading=false; + $scope.updateView(); + UIUtils.loading.hide(); + }); + }); + }; + + + /* -- popovers -- */ + $scope.showActionsPopover = function(event) { if (!$scope.actionsPopover) { $ionicPopover.fromTemplateUrl('templates/wallet/popover_actions.html', { @@ -611,39 +655,16 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, }); }; - $scope.showSecurityModal = function(){ - $scope.hideActionsPopover(); - return Modals.showAccountSecurity() - .then(function(res) { - if (!res) return; - - if (res === 'self') { - return $scope.self(); - } - else if (res === 'membershipIn') { - return $scope.membershipIn(); - } - }); - }; - - $scope.showSelectIdentitiesModal = function(){ - $scope.hideActionsPopover(); - - return Modals.showSelectPubkeyIdentity({ - identities: [$scope.formData.requirements].concat($scope.formData.requirements.alternatives) + $scope.showSelectWalletPopover = function(event) { + return csPopovers.showSelectWallet(event, { + scope: $scope }) - .then(function(idty) { - if (!idty || !idty.uid) return; - - $scope.loading = true; - - // Set self (= uid + blockUid) - return wallet.setSelf(idty.uid, idty.blockUid) - .then(function() { - $scope.loading=false; - $scope.updateView(); - UIUtils.loading.hide(); - }); + .then(function(newWallet) { + if (!newWallet || newWallet.id === wallet.id) return; + if (newWallet.isDefault()) { + return $state.go('app.view_wallet') + } + return $state.go('app.view_wallet_by_id', {id: newWallet.id}); }); }; @@ -651,7 +672,7 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, - UIUtils, Modals, BMA, csSettings, csCurrency, csWallet, csTx) { + UIUtils, Modals, csPopovers, BMA, csSettings, csCurrency, csWallet, csTx) { 'ngInject'; $scope.loading = true; @@ -662,6 +683,7 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, $scope.enter = function(e, state) { $scope.loading = $scope.loading || (state.stateParams && state.stateParams.refresh); + $scope.enableSelectWallet = csWallet.children.count() > 0; if ($scope.loading) { wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet; @@ -670,38 +692,9 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, return $scope.showHome(); } - var options = { - wallet: wallet, - sources: true, - tx: { - enable: true - } - }; + $scope.cleanLocationHref(state); - return $scope.loadWallet(options) - .then(function (walletData) { - $scope.formData = walletData; - $scope.loading = false; // very important, to avoid TX to be display before wallet.currentUd is loaded - $scope.updateView(); - $scope.showFab('fab-transfer'); - $scope.showHelpTip(); - $scope.addListeners(); - UIUtils.loading.hide(); // loading could have be open (e.g. new account) - - // remove the stateParams - if (state.stateParams && state.stateParams.refresh) { - $timeout(function() { - var stateParams = angular.copy(state.stateParams); - delete stateParams.refresh; - $location.search(stateParams).replace(); - }, 300); - } - }) - .catch(function (err) { - if (err == 'CANCELLED') { - $scope.showHome(); - } - }); + return $scope.load(); } else { $scope.addListeners(); @@ -716,6 +709,46 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, }; $scope.$on('$ionicView.leave', $scope.leave); + $scope.load = function() { + if (!wallet) return; + + var options = { + wallet: wallet, + minData: !wallet.isDataLoaded({minData: true}), + sources: true, + tx: { + enable: true + } + }; + + return $scope.loadWallet(options) + .then(function(walletData) { + $scope.formData = walletData; + $scope.loading = false; // very important, to avoid TX to be display before wallet.currentUd is loaded + $scope.updateView(); + $scope.showFab('fab-transfer'); + $scope.showHelpTip(); + $scope.addListeners(); + UIUtils.loading.hide(); // loading could have be open (e.g. during login phase) + }) + .catch(function(err){ + if (err == 'CANCELLED') { + $scope.showHome(); + } + }); + }; + + // remove '?refresh' from the location URI + $scope.cleanLocationHref = function(state) { + if (state && state.stateParams && state.stateParams.refresh) { + $timeout(function() { + var stateParams = angular.copy(state.stateParams); + delete stateParams.refresh; + $location.search(stateParams).replace(); + }, 300); + } + }; + // Update view $scope.updateView = function() { if (!$scope.formData || $scope.loading) return; @@ -759,17 +792,18 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, $scope.addListeners = function() { $scope.listeners = [ + // Reload if wallet balanced changed wallet.api.data.on.balanceChanged($scope, $scope.updateView), + // Reload if useRelative changed $scope.$watch('settings.useRelative', $scope.updateView, true), + // Reload if showUDHistory changed $scope.$watch('settings.showUDHistory', function(newVal, oldVal) { - // Reload if show UD changed - if (!$scope.formData || $scope.loading || (newVal == oldVal)) return; - console.log(arguments); + if (!$scope.formData || $scope.loading || (newVal === oldVal)) return; $scope.doUpdate(); }, true) ]; - // Update on new block + // Listening new block (if auto refresh enable) if ($scope.settings.walletHistoryAutoRefresh) { $scope.listeners.push( csCurrency.api.data.on.newBlock($scope, function(block) { @@ -777,7 +811,7 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, console.debug("[wallet] Received new block. Will reload history."); $timeout(function() { $scope.doUpdate(true); - }, 300/*waiting for node cache propagation*/); + }, 500/*waiting for block propagation*/); }) ); } @@ -831,6 +865,24 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, }); }; + $scope.showSelectWalletModal = function() { + if (!$scope.enableSelectWallet) return; + + return Modals.showSelectWallet({ + showDefault: true, + showBalance: false + }) + .then(function(newWallet) { + if (!newWallet || wallet && newWallet.id === wallet.id) return; + $scope.removeListeners(); + $scope.loading = true; + wallet = newWallet; + console.debug("[transfer] Using {" + wallet.id + "} wallet"); + $scope.formData = {}; + return $scope.load(); + }); + }; + /* -- popover -- */ var paddingIndent = 10; @@ -908,9 +960,22 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location, } }; + $scope.showSelectWalletPopover = function(event) { + return csPopovers.showSelectWallet(event, { + scope: $scope + }) + .then(function(newWallet) { + if (!newWallet || newWallet.id === wallet.id) return; + if (newWallet.isDefault()) { + return $scope.goState('app.view_wallet_tx') + } + return $scope.goState('app.view_wallet_tx_by_id', {id: newWallet.id}); + }); + }; + $scope.goState = function(stateName, stateParams) { $scope.hideLockedOutputsPopover(); - $state.go(stateName, stateParams); + return $state.go(stateName, stateParams); }; } @@ -1388,21 +1453,22 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl $scope.settings = csSettings.data; $scope.listeners = []; - $scope.formData = { - name: undefined - }; + // Initialize the super class and extend it. angular.extend(this, $controller('WalletSelectModalCtrl', {$scope: $scope, parameters: {}})); // Override defaults - $scope.formData.displayDefault = false; + $scope.formData.name = undefined; $scope.motion = UIUtils.motion.default; $scope.enter = function(e, state) { // First enter if ($scope.loading) { - $scope.setParameters({}); + $scope.setParameters({ + showDefault: false, + showBalance: true + }); return $scope.load() .then(function() { @@ -1488,7 +1554,7 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl $scope.hideActionsPopover(); return Modals.showSelectWallet({ wallets: $scope.wallets, - displayDefault: false + showDefault: false }) .then(function(wallet) { if (!wallet || !wallet.id) return; @@ -1605,8 +1671,9 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl $scope.listeners = []; }; + var inheritedUpdateView = $scope.updateView; $scope.updateView = function() { - console.log("Will upodate the view !!"); + inheritedUpdateView(); $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind }; } @@ -1618,8 +1685,8 @@ function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTransl $scope.loading = true; $scope.formData = { useRelative: csSettings.data.useRelative, - displayDefault: true, - displayBalance: true + showDefault: true, + showBalance: false }; $scope.motion = null; // no animation @@ -1628,48 +1695,61 @@ function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTransl $scope.formData.useRelative = angular.isDefined(parameters.useRelative) ? parameters.useRelative : $scope.formData.useRelative; - $scope.formData.displayDefault = angular.isDefined(parameters.displayDefault) ? parameters.displayDefault : $scope.formData.displayDefault; + $scope.formData.showDefault = angular.isDefined(parameters.showDefault) ? parameters.showDefault : $scope.formData.showDefault; - $scope.formData.displayBalance = angular.isDefined(parameters.displayBalance) ? parameters.displayBalance : $scope.formData.displayBalance; + $scope.formData.showBalance = angular.isDefined(parameters.showBalance) ? parameters.showBalance : $scope.formData.showBalance; }; $scope.load = function() { $scope.loading = true; - $scope.wallets = $scope.wallets || $scope.formData.displayDefault ? [csWallet].concat(csWallet.children.all()) : csWallet.children.all(); // Load currency, and filter translations (need by 'formatAmount' filter) var jobs = [ csCurrency.name() .then(function(name) { $scope.currency = name; - return filterTranslations.start(); + return filterTranslations.ready(); }) ]; + // Get children wallets + if (!$scope.wallets) { + jobs.push( + csWallet.children.all() + .then(function(children) { + $scope.wallets = $scope.formData.showDefault ? [csWallet].concat(children) : children; + }) + ); + } + + // Prepare load options var options = { silent: true, minData: true, - sources: $scope.formData.displayBalance, + sources: $scope.formData.showBalance, tx: { enable: false }, api: true }; - return $q.all( - $scope.wallets.reduce(function(res, wallet, counter){ - return wallet.isDataLoaded(options) ? - res : res.concat( + return $q.all(jobs) + // Load wallet data (apply a timeout between each wallet) + .then(function() { + var counter = 0; + return $q.all( + $scope.wallets.reduce(function(res, wallet){ + return wallet.isDataLoaded(options) ? + res : res.concat( $timeout(function(){ return wallet.loadData(options); - }, counter * loadWalletWaitTime)); - }, jobs) - ) - .then(function(res) { + }, loadWalletWaitTime * counter++)); + }, []) + ); + }) + .then(function() { $scope.loading = false; UIUtils.loading.hide(); - if ($scope.motion && $scope.wallets.length) { - $scope.motion.show({selector: '.list .item.item-wallet', ink: true}); - } + $scope.updateView(); }) .catch(function(err) { $scope.loading = false; @@ -1682,10 +1762,21 @@ function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTransl $scope.closeModal(); }; - $scope.select = function(wallet) { + $scope.select = function($event, wallet) { $scope.closeModal(wallet); }; + $scope.updateView = function() { + if (!$scope.wallets.length) return; + + if ($scope.motion) { + $scope.motion.show({selector: '.list .item.item-wallet', ink: true}); + } + else { + UIUtils.ink({selector: '.list .item.item-wallet'}); + } + }; + $scope.doUpdate = function(silent) { if ($scope.loading || !$scope.wallets || !$scope.wallets.length) return $q.when(); @@ -1693,7 +1784,7 @@ function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTransl var options = { silent: true, - sources: $scope.formData.displayBalance, + sources: $scope.formData.showBalance, tx: { enable: false }, @@ -1712,9 +1803,7 @@ function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTransl if (silent) { $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind } - if ($scope.motion) { - $scope.motion.show({selector: '.list .item.item-wallet', ink: true}); - } + $scope.updateView(); }) .catch(function(err) { $scope.loading = false; @@ -1726,3 +1815,33 @@ function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTransl $scope.setParameters(parameters); } + +function PopoverWalletSelectModalController($scope, $controller, UIUtils) { + 'ngInject'; + + // Initialize the super class and extend it. + angular.extend(this, $controller('WalletSelectModalCtrl', {$scope: $scope, parameters: { + showDefault: true, + showBalance: false + }})); + + // Disable list motion + $scope.motion = null; + + $scope.$on('popover.shown', function() { + if ($scope.loading) { + $scope.load(); + } + }); + + $scope.updateView = function() { + if (!$scope.wallets.length) return; + + UIUtils.ink({selector: '.popover-wallets .list .item'}); + }; + + $scope.select = function($event, wallet) { + if ($event.preventDefault() || !wallet) return; // no selection + $scope.closePopover(wallet); + }; +} diff --git a/www/js/filters.js b/www/js/filters.js index 2d0a8e42bd1db58bf133a55c37fe57ce59ccf178..a040ac0a7647c442a5da29b22379184fc9f148f6 100644 --- a/www/js/filters.js +++ b/www/js/filters.js @@ -2,7 +2,7 @@ angular.module('cesium.filters', ['cesium.config', 'cesium.platform', 'pascalprecht.translate', 'cesium.translations' ]) - .factory('filterTranslations', function($rootScope, csPlatform, csSettings, csCurrency, $translate) { + .factory('filterTranslations', function($rootScope, $q, csPlatform, csSettings, csCurrency, $translate) { 'ngInject'; var @@ -47,7 +47,7 @@ angular.module('cesium.filters', ['cesium.config', 'cesium.platform', 'pascalpre } that.ready = function() { - if (started) return $q.when(data); + if (started) return $q.when(); return startPromise || that.start(); }; diff --git a/www/js/services/crypto-services.js b/www/js/services/crypto-services.js index c683f2cd4c4a906c87cc1d89d9c1502728fa5b46..ff44edb4c2e9ac4a81f28b568c059ccdbe80d923 100644 --- a/www/js/services/crypto-services.js +++ b/www/js/services/crypto-services.js @@ -62,6 +62,1001 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) }; } + CryptoAbstractService.prototype.constants = { + crypto_sign_BYTES: 64, + crypto_secretbox_NONCEBYTES: 24, + crypto_box_MACBYTES: 16, + SEED_LENGTH: 32, // Length of the key + SCRYPT_PARAMS:{ + SIMPLE: { + N: 2048, + r: 8, + p: 1, + memory: -1 // default + }, + DEFAULT: { + N: 4096, + r: 16, + p: 1, + memory: -1 // default + }, + SECURE: { + N: 16384, + r: 32, + p: 2, + memory: -1 // default + }, + HARDEST: { + N: 65536, + r: 32, + p: 4, + memory: -1 // default + }, + EXTREME: { + N: 262144, + r: 64, + p: 8, + memory: -1 // default + } + }, + WIF: { + DATA_LENGTH: 35 + }, + EWIF: { + SALT_LENGTH: 4, + DERIVED_HALF_LENGTH: 16, + DATA_LENGTH: 39, + SCRYPT_PARAMS: { + N: 16384, + r: 8, + p: 8 + } + } + }; + + CryptoAbstractService.prototype.async_load_base58 = function(on_ready) { + var that = this; + if (Base58 !== null){return on_ready(Base58);} + else {$timeout(function(){that.async_load_base58(on_ready);}, 100);} + }; + + CryptoAbstractService.prototype.async_load_scrypt = function(on_ready, options) { + var that = this; + if (scrypt_module_factory !== null){ + on_ready(scrypt_module_factory(options.requested_total_memory)); + that.scrypt.requested_total_memory = options.requested_total_memory; + //console.log('inside async_load_scrypt', that); // TODO manage memory changes + } + else {$timeout(function(){that.async_load_scrypt(on_ready, options);}, 100);} + }; + + CryptoAbstractService.prototype.async_load_nacl_js = function(on_ready, options) { + var that = this; + if (nacl_factory !== null) {nacl_factory.instantiate(on_ready, options);} + else {$timeout(function(){that.async_load_nacl_js(on_ready, options);}, 100);} + }; + + CryptoAbstractService.prototype.async_load_base64 = function(on_ready) { + var that = this; + if (Base64 !== null) {on_ready(Base64);} + else {$timetout(function(){that.async_load_base64(on_ready);}, 100);} + }; + + CryptoAbstractService.prototype.async_load_sha256 = function(on_ready) { + var that = this; + if (sha256 !== null){return on_ready(sha256);} + else {$timeout(function(){that.async_load_sha256(on_ready);}, 100);} + }; + + + + CryptoAbstractService.prototype.pkChecksum = function(pubkey) { + var signPk_int8 = this.util.decode_base58(pubkey); + return this.util.encode_base58(this.util.crypto_hash_sha256(this.util.crypto_hash_sha256(signPk_int8))).substring(0,3); + }; + + CryptoAbstractService.prototype.seed_from_signSk = function(signSk) { + var that = this; + var seed = new Uint8Array(that.constants.SEED_LENGTH); + for (var i = 0; i < seed.length; i++) seed[i] = signSk[i]; + return seed; + }; + + + CryptoAbstractService.prototype.generateKeyFileContent = function(keypair, options) { + var that = this; + options = options || {}; + options.type = options.type || "PubSec"; + + switch(options.type) { + + // PubSec + case "PubSec" : + return $q.resolve( + "Type: PubSec\n" + + "Version: 1\n" + + "pub: " + that.base58.encode(keypair.signPk) + "\n" + + "sec: " + that.base58.encode(keypair.signSk) + "\n"); + + // WIF - v1 + case "WIF" : + return that.wif_v1_from_keypair(keypair) + .then(function(data) { + return "Type: WIF\n" + + "Version: 1\n" + + "Data: " + data + "\n"; + }); + + // EWIF - v1 + case "EWIF" : + + if (!options.password) return $q.reject({message: 'Missing EWIF options.password.'}); + + // If not set, resolve password using the given callback + if (options.password && typeof options.password == "function") { + console.debug("[crypto] [EWIF] Executing 'options.password()' to resolve the password..."); + options.password = options.password(); + if (!options.password) { + return $q.reject({message: "Invalid callback result for 'options.password()': must return a promise or a string."}); + } + } + + // If password is a promise, get the result then read data + if (options.password && typeof options.password == "object" && options.password.then) { + return options.password.then(function(password) { + if (!password) throw 'CANCELLED'; + // Recursive call, with the string password in options + return that.generateKeyFileContent(keypair, angular.merge({}, options, {password: password})); + }); + } + + // If password is a valid string, read data + if (options.password && typeof options.password == "string") { + return that.ewif_v1_from_keypair(keypair, options.password) + .then(function(data) { + return "Type: EWIF\n" + + "Version: 1\n" + + "Data: " + data + "\n"; + }); + } + + return $q.reject({message: 'Invalid EWIF options.password. Waiting a callback function, a promise or a string.'}); + + default: + return $q.reject({message: "Unknown keyfile format: " + options.type}); + } + }; + + CryptoAbstractService.prototype.wif_v1_from_keypair = function(keypair) { + + var that = this; + + var seed = that.seed_from_signSk(keypair.signSk); + if (!seed || seed.byteLength !== that.constants.SEED_LENGTH) + throw "Bad see format. Expected {0} bytes".format(that.constants.SEED_LENGTH); + + var fi = new Uint8Array(1); + fi[0] = 0x01; + var seed_fi = concat_Uint8Array(fi, seed); + + // checksum + var checksum = that.nacl.crypto_hash_sha256(that.nacl.crypto_hash_sha256(seed_fi)).slice(0,2); + + var wif_int8 = concat_Uint8Array(seed_fi, checksum); + return that.util.encode_base58(wif_int8); + }; + + CryptoAbstractService.prototype.ewif_v1_from_keypair = function(keypair, password) { + + var that = this; + + var seed = that.seed_from_signSk(keypair.signSk); + if (!seed || seed.byteLength !== that.constants.SEED_LENGTH) + return $q.reject({message: "Bad see format. Expected {0} bytes".format(that.constants.SEED_LENGTH)}); + + // salt + var salt = that.util.crypto_hash_sha256(that.util.crypto_hash_sha256(keypair.signPk)).slice(0,4); + + // scrypt_seed + return that.util.crypto_scrypt( + that.util.encode_utf8(password), + salt, + that.constants.EWIF.SCRYPT_PARAMS.N, + that.constants.EWIF.SCRYPT_PARAMS.r, + that.constants.EWIF.SCRYPT_PARAMS.p, + 64) + .then(function(scrypt_seed) { + var derivedhalf1 = scrypt_seed.slice(0,32); + var derivedhalf2 = scrypt_seed.slice(32,64); + + //XOR & AES + var seed1_xor_derivedhalf1_1 = xor(seed.slice(0,16), derivedhalf1.slice(0,16)); + var seed2_xor_derivedhalf1_2 = xor(seed.slice(16,32), derivedhalf1.slice(16,32)); + + var aesEcb = new aesjs.ModeOfOperation.ecb(derivedhalf2); + var encryptedhalf1 = aesEcb.encrypt(seed1_xor_derivedhalf1_1); + var encryptedhalf2 = aesEcb.encrypt(seed2_xor_derivedhalf1_2); + + encryptedhalf1 = new Uint8Array(encryptedhalf1); + encryptedhalf2 = new Uint8Array(encryptedhalf2); + + // concatenate ewif + var ewif_int8 = new Uint8Array(1); + ewif_int8[0] = 0x02; + ewif_int8 = concat_Uint8Array(ewif_int8,salt); + ewif_int8 = concat_Uint8Array(ewif_int8,encryptedhalf1); + ewif_int8 = concat_Uint8Array(ewif_int8,encryptedhalf2); + + var checksum = that.util.crypto_hash_sha256(that.util.crypto_hash_sha256(ewif_int8)).slice(0,2); + ewif_int8 = concat_Uint8Array(ewif_int8,checksum); + + return that.util.encode_base58(ewif_int8); + }); + + }; + + // Web crypto API - see https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API + var crypto = window.crypto || window.msCrypto || window.Crypto; + if (crypto && crypto.getRandomValues) { + CryptoAbstractService.prototype.crypto = crypto; + CryptoAbstractService.prototype.util = {}; + CryptoAbstractService.prototype.util.random_nonce = function() { + var nonce = new Uint8Array(crypto_secretbox_NONCEBYTES); + this.crypto.getRandomValues(nonce); + return $q.when(nonce); + }; + } + else { + // TODO: add a default function ? + //CryptoAbstractService.prototype.random_nonce = function() { + // var nonce = new Uint8Array(crypto_secretbox_NONCEBYTES); + // var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + // for(var i = 0; i < length; i++) { + // text += possible.charAt(Math.floor(Math.random() * possible.length)); + // } + //} + } + + function FullJSServiceFactory() { + this.id = 'FullJS'; + + // libraries handlers + this.scrypt = null; + this.nacl = null; + this.base58 = null; + this.base64 = null; + var that = this; + + this.util = this.util || {}; + this.util.decode_utf8 = function (s) { + var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + }; + this.util.encode_utf8 = function (s) { + return that.nacl.encode_utf8(s); + }; + this.util.encode_base58 = function (a) { // TODO : move to abstract factory + return that.base58.encode(a); + }; + this.util.decode_base58 = function (a) { // TODO : move to abstract factory + var i; + a = that.base58.decode(a); + var b = new Uint8Array(a.length); + for (i = 0; i < a.length; i++) b[i] = a[i]; + return b; + }; + this.util.decode_base64 = function (a) { + return that.base64.decode(a); + }; + this.util.encode_base64 = function (b) { + return that.base64.encode(b); + }; + + this.util.hash_sha256 = function (message) { + return $q(function (resolve) { + var msg = that.util.decode_utf8(message); + var hash = that.nacl.to_hex(that.nacl.crypto_hash_sha256(msg)); + resolve(hash.toUpperCase()); + }); + }; + this.util.random_nonce = function () { + if (that.crypto && that.crypto.getRandomValues) { + var nonce = new Uint8Array(that.constants.crypto_secretbox_NONCEBYTES); + that.crypto.getRandomValues(nonce); + return $q.when(nonce); + } + else { + return $q.when(that.nacl.crypto_box_random_nonce()); + } + }; + this.util.crypto_hash_sha256 = function(msg_int8) { + return that.nacl.crypto_hash_sha256(msg_int8); + }; + this.util.crypto_scrypt = function(password, salt, N, r, p, seedLength) { + return $q(function(resolve, reject) { + try { + var seed = that.scrypt.crypto_scrypt( + password, + salt, + N, + r, + p, + seedLength); + resolve(seed); + } + catch(err) { + reject(err); + } + }); + }; + + /** + * Compute the box key pair, from a sign key pair + */ + this.box_keypair_from_sign = function (signKeyPair) { + if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair); + return $q.when(that.nacl.crypto_box_keypair_from_sign_sk(signKeyPair.signSk)); + }; + + /** + * Compute the box public key, from a sign public key + */ + this.box_pk_from_sign = function (signPk) { + return $q.when(that.nacl.crypto_box_pk_from_sign_pk(signPk)); + }; + + this.box_sk_from_sign = function (signSk) { + return $q.when(that.nacl.crypto_box_sk_from_sign_sk(signSk)); + }; + + /** + * Encrypt a message, from a key pair + */ + this.box = function(message, nonce, recipientPk, senderSk) { + return $q(function (resolve, reject) { + if (!message) { + resolve(message); + return; + } + var messageBin = that.util.decode_utf8(message); + if (typeof recipientPk === "string") { + recipientPk = that.util.decode_base58(recipientPk); + } + + //console.debug('Original message: ' + message); + try { + var ciphertextBin = that.nacl.crypto_box(messageBin, nonce, recipientPk, senderSk); + var ciphertext = that.util.encode_base64(ciphertextBin); + + //console.debug('Encrypted message: ' + ciphertext); + resolve(ciphertext); + } + catch (err) { + reject(err); + } + }); + }; + + /** + * Decrypt a message, from a key pair + */ + this.box_open = function (cypherText, nonce, senderPk, recipientSk) { + return $q(function (resolve, reject) { + if (!cypherText) { + resolve(cypherText); + return; + } + var ciphertextBin = that.util.decode_base64(cypherText); + if (typeof senderPk === "string") { + senderPk = that.util.decode_base58(senderPk); + } + + try { + var message = that.nacl.crypto_box_open(ciphertextBin, nonce, senderPk, recipientSk); + that.util.array_to_string(message, function (result) { + //console.debug('Decrypted text: ' + result); + resolve(result); + }); + } + catch (err) { + reject(err); + } + + }); + }; + + /** + * Create key pairs (sign and box), from salt+password (Scrypt auth) + */ + this.scryptKeypair = function(salt, password, scryptParams) { + return $q(function(resolve, reject) { + var seed = that.scrypt.crypto_scrypt( + that.util.encode_utf8(password), + that.util.encode_utf8(salt), + scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N, + scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r, + scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p, + that.constants.SEED_LENGTH); + var signKeypair = that.nacl.crypto_sign_seed_keypair(seed); + var boxKeypair = that.nacl.crypto_box_seed_keypair(seed); + resolve({ + signPk: signKeypair.signPk, + signSk: signKeypair.signSk, + boxPk: boxKeypair.boxPk, + boxSk: boxKeypair.boxSk + }); + }); + }; + + /** + * Create key pairs from a seed + */ + this.seedKeypair = function(seed) { + return $q(function(resolve, reject) { + var signKeypair = that.nacl.crypto_sign_seed_keypair(seed); + var boxKeypair = that.nacl.crypto_box_seed_keypair(seed); + resolve({ + signPk: signKeypair.signPk, + signSk: signKeypair.signSk, + boxPk: boxKeypair.boxPk, + boxSk: boxKeypair.boxSk + }); + }); + }; + + /** + * Get sign pk from salt+password (scrypt auth) + */ + this.scryptSignPk = function(salt, password, scryptParams) { + return $q(function(resolve, reject) { + try { + var seed = that.scrypt.crypto_scrypt( + that.util.encode_utf8(password), + that.util.encode_utf8(salt), + scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N, + scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r, + scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p, + that.constants.SEED_LENGTH); + var signKeypair = that.nacl.crypto_sign_seed_keypair(seed); + resolve(signKeypair.signPk); + } + catch(err) { + reject(err); + } + }); + }; + + /** + * Verify a signature of a message, for a pubkey + */ + this.verify = function (message, signature, pubkey) { + return $q(function(resolve, reject) { + var msg = that.util.decode_utf8(message); + var sig = that.util.decode_base64(signature); + var pub = that.util.decode_base58(pubkey); + var sm = new Uint8Array(that.constants.crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < that.constants.crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+that.constants.crypto_sign_BYTES] = msg[i]; + + // Call to verification lib... + var verified = that.nacl.crypto_sign_open(sm, pub) !== null; + resolve(verified); + }); + }; + + /** + * Sign a message, from a key pair + */ + this.sign = function(message, keypair) { + return $q(function(resolve, reject) { + var m = that.util.decode_utf8(message); + var sk = keypair.signSk; + var signedMsg = that.nacl.crypto_sign(m, sk); + var sig = new Uint8Array(that.constants.crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + var signature = that.base64.encode(sig); + resolve(signature); + }); + }; + + this.load = function() { + var deferred = $q.defer(); + var naclOptions = {}; + var scryptOptions = {}; + if (ionic.Platform.grade.toLowerCase()!='a') { + console.info('Reduce NaCl memory because plateform grade is not [a] but [' + ionic.Platform.grade + ']'); + naclOptions.requested_total_memory = 16 * 1048576; // 16 Mo + } + var loadedLib = 0; + var checkAllLibLoaded = function() { + loadedLib++; + if (loadedLib === 4) { + that.loaded = true; + deferred.resolve(); + } + }; + this.async_load_nacl_js(function(lib) { + that.nacl = lib; + checkAllLibLoaded(); + }, naclOptions); + this.async_load_scrypt(function(lib) { + that.scrypt = lib; + checkAllLibLoaded(); + }, scryptOptions); + this.async_load_base58(function(lib) { + that.base58 = lib; + checkAllLibLoaded(); + }); + this.async_load_base64(function(lib) { + that.base64 = lib; + checkAllLibLoaded(); + }); + return deferred.promise; + }; + + // Shortcuts + this.util.hash = that.util.hash_sha256; + this.box = { + keypair: { + fromSignKeypair: that.box_keypair_from_sign, + skFromSignSk: that.box_sk_from_sign, + pkFromSignPk: that.box_pk_from_sign + }, + pack: that.box, + open: that.box_open + }; + } + FullJSServiceFactory.prototype = new CryptoAbstractService(); + + + /* ----------------------------------------------------------------------------------------------------------------- + * Service that use Cordova MiniSodium plugin + * ----------------------------------------------------------------------------------------------------------------*/ + + /*** + * Factory for crypto, using Cordova plugin + */ + function CordovaServiceFactory() { + + this.id = 'MiniSodium'; + + // libraries handlers + this.nacl = null; // the cordova plugin + this.base58= null; + this.sha256= null; + var that = this; + + // functions + this.util = this.util || {}; + this.util.decode_utf8 = function(s) { + return that.nacl.to_string(s); + }; + this.util.encode_utf8 = function(s) { + return that.nacl.from_string(s); + }; + this.util.encode_base58 = function(a) { + return that.base58.encode(a); + }; + this.util.decode_base58 = function(a) { + var i; + a = that.base58.decode(a); + var b = new Uint8Array(a.length); + for (i = 0; i < a.length; i++) b[i] = a[i]; + return b; + }; + this.util.decode_base64 = function (a) { + return that.nacl.from_base64(a); + }; + this.util.encode_base64 = function (b) { + return that.nacl.to_base64(b); + }; + this.util.hash_sha256 = function(message) { + return $q.when(that.sha256(message).toUpperCase()); + }; + this.util.random_nonce = function() { + var nonce = new Uint8Array(that.constants.crypto_secretbox_NONCEBYTES); + that.crypto.getRandomValues(nonce); + return $q.when(nonce); + }; + this.util.crypto_hash_sha256 = function (message) { + return that.nacl.from_hex(that.sha256(message)); + }; + + this.util.crypto_scrypt = function(password, salt, N, r, p, seedLength) { + var deferred = $q.defer(); + that.nacl.crypto_pwhash_scryptsalsa208sha256_ll( + password, + salt, + N, + r, + p, + seedLength, + function (err, seed) { + if (err) { deferred.reject(err); return;} + deferred.resolve(seed); + } + ); + return deferred.promise; + }; + + /** + * Create key pairs (sign and box), from salt+password (Scrypt), using cordova + */ + this.scryptKeypair = function(salt, password, scryptParams) { + var deferred = $q.defer(); + + that.nacl.crypto_pwhash_scryptsalsa208sha256_ll( + that.nacl.from_string(password), + that.nacl.from_string(salt), + scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N, + scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r, + scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p, + that.constants.SEED_LENGTH, + function (err, seed) { + if (err) { deferred.reject(err); return;} + + that.nacl.crypto_sign_seed_keypair(seed, function (err, signKeypair) { + if (err) { deferred.reject(err); return;} + var result = { + signPk: signKeypair.pk, + signSk: signKeypair.sk + }; + that.box_keypair_from_sign(result) + .then(function(boxKeypair) { + result.boxPk = boxKeypair.pk; + result.boxSk = boxKeypair.sk; + deferred.resolve(result); + }) + .catch(function(err) { + deferred.reject(err); + }); + }); + + } + ); + + return deferred.promise; + }; + + /** + * Create key pairs from a seed + */ + this.seedKeypair = function(seed) { + var deferred = $q.defer(); + + that.nacl.crypto_sign_seed_keypair(seed, function (err, signKeypair) { + if (err) { deferred.reject(err); return;} + deferred.resolve({ + signPk: signKeypair.pk, + signSk: signKeypair.sk + }); + }); + return deferred.promise; + }; + + + /** + * Get sign PK from salt+password (Scrypt), using cordova + */ + this.scryptSignPk = function(salt, password, scryptParams) { + var deferred = $q.defer(); + + that.nacl.crypto_pwhash_scryptsalsa208sha256_ll( + that.nacl.from_string(password), + that.nacl.from_string(salt), + scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N, + scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r, + scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p, + that.constants.SEED_LENGTH, + function (err, seed) { + if (err) { deferred.reject(err); return;} + + that.nacl.crypto_sign_seed_keypair(seed, function (err, signKeypair) { + if (err) { deferred.reject(err); return;} + deferred.resolve(signKeypair.pk); + }); + + } + ); + + return deferred.promise; + }; + + /** + * Verify a signature of a message, for a pubkey + */ + this.verify = function (message, signature, pubkey) { + var deferred = $q.defer(); + that.nacl.crypto_sign_verify_detached( + that.nacl.from_base64(signature), + that.nacl.from_string(message), + that.nacl.from_base64(pubkey), + function(err, verified) { + if (err) { deferred.reject(err); return;} + deferred.resolve(verified); + }); + return deferred.promise; + }; + + /** + * Sign a message, from a key pair + */ + this.sign = function(message, keypair) { + var deferred = $q.defer(); + + that.nacl.crypto_sign( + that.nacl.from_string(message), // message + keypair.signSk, // sk + function(err, signedMsg) { + if (err) { deferred.reject(err); return;} + var sig; + if (signedMsg.length > that.constants.crypto_sign_BYTES) { + sig = new Uint8Array(that.constants.crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + } + else { + sig = signedMsg; + } + var signature = that.nacl.to_base64(sig); + deferred.resolve(signature); + }); + + return deferred.promise; + }; + + /** + * Compute the box key pair, from a sign key pair + */ + this.box_keypair_from_sign = function(signKeyPair) { + if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair); + var deferred = $q.defer(); + var result = {}; + that.nacl.crypto_sign_ed25519_pk_to_curve25519(signKeyPair.signPk, function(err, boxPk) { + if (err) { deferred.reject(err); return;} + result.boxPk = boxPk; + if (result.boxSk) deferred.resolve(result); + }); + that.nacl.crypto_sign_ed25519_sk_to_curve25519(signKeyPair.signSk, function(err, boxSk) { + if (err) { deferred.reject(err); return;} + result.boxSk = boxSk; + if (result.boxPk) deferred.resolve(result); + }); + + return deferred.promise; + }; + + /** + * Compute the box public key, from a sign public key + */ + this.box_pk_from_sign = function(signPk) { + var deferred = $q.defer(); + that.nacl.crypto_sign_ed25519_pk_to_curve25519(signPk, function(err, boxPk) { + if (err) { deferred.reject(err); return;} + deferred.resolve(boxPk); + }); + return deferred.promise; + }; + + /** + * Compute the box secret key, from a sign secret key + */ + this.box_sk_from_sign = function(signSk) { + var deferred = $q.defer(); + that.nacl.crypto_sign_ed25519_sk_to_curve25519(signSk, function(err, boxSk) { + if (err) { deferred.reject(err); return;} + deferred.resolve(boxSk); + }); + return deferred.promise; + }; + + /** + * Encrypt a message, from a key pair + */ + this.box = function(message, nonce, recipientPk, senderSk) { + if (!message) { + return $q.reject('No message'); + } + var deferred = $q.defer(); + + var messageBin = that.nacl.from_string(message); + if (typeof recipientPk === "string") { + recipientPk = that.util.decode_base58(recipientPk); + } + + that.nacl.crypto_box_easy(messageBin, nonce, recipientPk, senderSk, function(err, ciphertextBin) { + if (err) { deferred.reject(err); return;} + var ciphertext = that.util.encode_base64(ciphertextBin); + //console.debug('Encrypted message: ' + ciphertext); + deferred.resolve(ciphertext); + }); + return deferred.promise; + }; + + /** + * Decrypt a message, from a key pair + */ + this.box_open = function(cypherText, nonce, senderPk, recipientSk) { + if (!cypherText) { + return $q.reject('No cypherText'); + } + var deferred = $q.defer(); + + var ciphertextBin = that.nacl.from_base64(cypherText); + if (typeof senderPk === "string") { + senderPk = that.util.decode_base58(senderPk); + } + + // Avoid crash if content has not the minimal length - Fix #346 + if (ciphertextBin.length < that.constants.crypto_box_MACBYTES) { + deferred.reject('Invalid cypher content length'); + return; + } + + that.nacl.crypto_box_open_easy(ciphertextBin, nonce, senderPk, recipientSk, function(err, message) { + if (err) { deferred.reject(err); return;} + that.util.array_to_string(message, function(result) { + //console.debug('Decrypted text: ' + result); + deferred.resolve(result); + }); + }); + + return deferred.promise; + }; + + this.load = function() { + var deferred = $q.defer(); + if (!window.plugins || !window.plugins.MiniSodium) { + deferred.reject("Cordova plugin 'MiniSodium' not found. Please load Full JS implementation instead."); + } + else { + that.nacl = window.plugins.MiniSodium; + + var loadedLib = 0; + var checkAllLibLoaded = function() { + loadedLib++; + if (loadedLib == 2) { + that.loaded = true; + deferred.resolve(); + } + }; + that.async_load_base58(function(lib) { + that.base58 = lib; + checkAllLibLoaded(); + }); + that.async_load_sha256(function(lib) { + that.sha256 = lib; + checkAllLibLoaded(); + }); + } + + return deferred.promise; + }; + + // Shortcuts + this.util.hash = that.util.hash_sha256; + this.box = { + keypair: { + fromSignKeypair: that.box_keypair_from_sign, + skFromSignSk: that.box_sk_from_sign, + pkFromSignPk: that.box_pk_from_sign + }, + pack: that.box, + open: that.box_open + }; + } + CordovaServiceFactory.prototype = new CryptoAbstractService(); + + /* ----------------------------------------------------------------------------------------------------------------- + * Create service instance + * ----------------------------------------------------------------------------------------------------------------*/ + + + var service = new CryptoAbstractService(); + + var isDevice = true; + // removeIf(android) + // removeIf(ios) + isDevice = false; + // endRemoveIf(ios) + // endRemoveIf(android) + + //console.debug("[crypto] Created CryptotUtils service. device=" + isDevice); + + ionicReady().then(function() { + console.debug('[crypto] Starting...'); + var now = new Date().getTime(); + + var serviceImpl; + + // Use Cordova plugin implementation, when exists + if (isDevice && window.plugins && window.plugins.MiniSodium && crypto && crypto.getRandomValues) { + console.debug('[crypto] Loading Cordova MiniSodium implementation...'); + serviceImpl = new CordovaServiceFactory(); + } + else { + console.debug('[crypto] Loading FullJS implementation...'); + serviceImpl = new FullJSServiceFactory(); + } + + // Load (async lib) + serviceImpl.load() + .catch(function(err) { + console.error(err); + throw err; + }) + .then(function() { + service.copy(serviceImpl); + console.debug('[crypto] Loaded \'{0}\' implementation in {1}ms'.format(service.id, new Date().getTime() - now)); + }); + + }); + + + return service; + }) + + .factory('CryptoUtils', function($q, $timeout, ionicReady) { + 'ngInject'; + + function xor(a, b) { + var length = Math.max(a.length, b.length); + var buffer = new Uint8Array(length); + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i]; + } + return buffer; + } + + function concat_Uint8Array( buffer1, buffer2 ) { + var tmp = new Uint8Array( buffer1.byteLength + buffer2.byteLength ); + tmp.set( new Uint8Array( buffer1 ), 0 ); + tmp.set( new Uint8Array( buffer2 ), buffer1.byteLength ); + return tmp; + } + + function test(regexpContent) { + return new RegExp(regexpContent); + } + + /** + * CryptoAbstract, abstract class with useful methods + * @type {number} + */ + function CryptoAbstractService() { + this.loaded = false; + var that = this; + + this.copy = function(source) { + _.forEach(_.keys(source), function(key) { + that[key] = source[key]; + }); + }; + + this.isLoaded = function() { + return this.loaded; + }; + + this.util = this.util || {}; + + /** + * Converts an array buffer to a string + * + * @private + * @param {ArrayBuffer} buf The buffer to convert + * @param {Function} callback The function to call when conversion is complete + */ + this.util.array_to_string = function(buf, callback) { + var bb = new Blob([new Uint8Array(buf)]); + var f = new FileReader(); + f.onload = function(e) { + callback(e.target.result); + }; + f.readAsText(bb); + }; + } + CryptoAbstractService.prototype.constants = { crypto_sign_BYTES: 64, crypto_secretbox_NONCEBYTES: 24, @@ -242,9 +1237,9 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) } return that.parseWIF_or_EWIF(matches[1], { - type: type, - password: options.password - }) + type: type, + password: options.password + }) .then(function(signKeypair) { return signKeypair && !options.withSecret ? {signPk: signKeypair.signPk} : signKeypair; }); @@ -373,7 +1368,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) that.constants.EWIF.SCRYPT_PARAMS.p, 64) - // Compute the final seed + // Compute the final seed .then(function(scrypt_seed) { var derivedhalf1 = scrypt_seed.slice(0, 32); @@ -558,7 +1553,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) ewif_int8 = concat_Uint8Array(ewif_int8,checksum); return that.util.encode_base58(ewif_int8); - }); + }); }; @@ -662,7 +1657,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) * Compute the box key pair, from a sign key pair */ this.box_keypair_from_sign = function (signKeyPair) { - if (signKeyPair.bokSk && signKeyPair.boxPk) return $q.when(signKeyPair); + if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair); return $q.when(that.nacl.crypto_box_keypair_from_sign_sk(signKeyPair.signSk)); }; @@ -1077,7 +2072,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) * Compute the box key pair, from a sign key pair */ this.box_keypair_from_sign = function(signKeyPair) { - if (signKeyPair.bokSk && signKeyPair.boxPk) return $q.when(signKeyPair); + if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair); var deferred = $q.defer(); var result = {}; that.nacl.crypto_sign_ed25519_pk_to_curve25519(signKeyPair.signPk, function(err, boxPk) { @@ -1263,4 +2258,431 @@ angular.module('cesium.crypto.services', ['cesium.utils.services']) return service; }) + + .factory('csCrypto', function($q, $rootScope, CryptoUtils) { + 'ngInject'; + + function test(regexpContent) { + return new RegExp(regexpContent); + } + + var constants = { + REGEXP: { + PUBKEY: '[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}', + SECKEY: '[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{86,88}', + FILE: { + TYPE_LINE: '^Type: ([a-zA-Z0-9]+)\n', + VERSION: 'Version: ([0-9]+)\n', + PUB: '[Pp]ub: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44})\n', + SEC: '[Ss]ec: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{86,88})(\n|$)', + DATA: '[Dd]ata: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)(\n|$)' + } + } + }, + regexp = { + FILE: { + TYPE_LINE: test(constants.REGEXP.FILE.TYPE_LINE), + VERSION: test(constants.REGEXP.FILE.VERSION), + PUB: test(constants.REGEXP.FILE.PUB), + SEC: test(constants.REGEXP.FILE.SEC), + DATA: test(constants.REGEXP.FILE.DATA) + } + }, + errorCodes = { + BAD_PASSWORD: 3001, + BAD_CHECKSUM: 3002 + }; + + /* -- keyfile -- */ + + function readKeyFile(file, options) { + + if (file && file.content) { + return parseKeyFileContent(file.content, options); + } + + return $q(function(resolve, reject) { + if (!file) { + return reject('Argument [file] is missing'); + } + + console.debug('[crypto] [keypair] reading file: ', file); + var reader = new FileReader(); + reader.onload = function (event) { + parseKeyFileContent(event.target.result, options) + .then(resolve) + .catch(reject); + }; + reader.readAsText(file, 'utf8'); + }); + } + + function parseKeyFileContent(content, options) { + + if (!content) return $q.reject('Argument [content] is missing'); + + options = options || {}; + options.withSecret = angular.isDefined(options.withSecret) ? options.withSecret : false; + options.defaultType = options.defaultType || 'PubSec'; + + var matches; + + var typeMatch = regexp.FILE.TYPE_LINE.exec(content); + + // If no Type field: add default type + var type = typeMatch && typeMatch[1]; + if (!type && options.defaultType) { + return parseKeyFileContent('Type: {0}\n{1}'.format(options.defaultType, content), options); + } + + // Type: PubSec + if (type == 'PubSec') { + + // Read Pub field + matches = regexp.FILE.PUB.exec(content); + if (!matches) return $q.reject('Missing [pub] field in file, or invalid public key value'); + var signKeypair = { + signPk: CryptoUtils.base58.decode(matches[1]) + }; + if (!options.withSecret) return $q.resolve(signKeypair); + + // Read Sec field + matches= regexp.FILE.SEC.exec(content); + if (!matches) return $q.reject('Missing [sec] field in file, or invalid secret key value'); + signKeypair.signSk = CryptoUtils.base58.decode(matches[1]); + return $q.resolve(signKeypair); + } + + // Type: WIF or EWIF + else if (type == 'WIF' || type == 'EWIF') { + matches = regexp.FILE.DATA.exec(content); + if (!matches) { + return $q.reject('Missing [Data] field in file. This is required for WIF or EWIF format'); + } + + return parseWIF_or_EWIF(matches[1], { + type: type, + password: options.password + }) + .then(function(signKeypair) { + return signKeypair && !options.withSecret ? {signPk: signKeypair.signPk} : signKeypair; + }); + } + + // Type: unknown + if (options.defaultType) { + return $q.reject('Bad file format: missing Type field'); + } + else { + return $q.reject('Bad file format, unknown type [' + type + ']'); + } + } + + + /** + * + * @param data_base58 + * @param options + * @returns {*} + */ + function parseWIF_or_EWIF(data_base58, options) { + options = options || {}; + + var data_int8 = CryptoUtils.base58.decode(data_base58); + if (data_int8.length != constants.EWIF.DATA_LENGTH && data_int8.length != constants.WIF.DATA_LENGTH) { + return $q.reject('Invalid WIF or EWIF format (invalid bytes count).'); + } + + // Detect the type from the first byte + options.type = options.type || (data_int8[0] == 1 && 'WIF') || (data_int8[0] == 2 && 'EWIF'); + + // Type: WIF + if (options.type == 'WIF') { + return parseWIF_v1(data_base58); + } + + // Type: EWIF + if (options.type == 'EWIF') { + + // If not set, resolve password using the given callback + if (typeof options.password == "function") { + console.debug("[crypto] [EWIF] Executing 'options.password()' to resolve the password..."); + options.password = options.password(); + if (!options.password) { + return $q.reject({message: "Invalid callback result for 'options.password()': must return a promise or a string."}); + } + } + + // If password is a promise, get the result then read data + if (typeof options.password === "object" && options.password.then) { + return options.password.then(function(password) { + if (!password) throw 'CANCELLED'; + return parseEWIF_v1(data_base58, password); + }); + } + + // If password is a valid string, read data + if (typeof options.password == "string") { + return parseEWIF_v1(data_base58, options.password); + } + + return $q.reject({message: 'Invalid EWIF options.password. Waiting a callback function, a promise or a string.'}); + } + + // Unknown type + return $q.reject({message: 'Invalid WIF or EWIF format: unknown first byte identifier.'}); + } + + + function parseWIF_v1(wif_base58) { + var that = this, + wif_int8 = CryptoUtils.util.decode_base58(wif_base58); + + // Check identifier byte = 0x01 + if (wif_int8[0] != 1) { + return $q.reject({message: 'Invalid WIF v1 format: expected [0x01] as first byte'}); + } + + // Check length + if (wif_int8.length != constants.WIF.DATA_LENGTH) { + return $q.reject({message: 'Invalid WIF v1 format: Data must be a '+constants.WIF.DATA_LENGTH+' bytes array, encoded in base 58.'}); + } + + var wif_int8_no_checksum = wif_int8.slice(0, -2), + seed = wif_int8.slice(1, -2), + checksum = wif_int8.slice(-2); + + // Compute expected checksum + var expectedChecksum = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(wif_int8_no_checksum)).slice(0,2); + if (CryptoUtils.util.encode_base58(checksum) != CryptoUtils.util.encode_base58(expectedChecksum)) { + $q.reject({message: 'Invalid WIF format: bad checksum'}); + } + + // Generate keypair from seed + return CryptoUtils.seedKeypair(seed); + } + + function parseEWIF_v1(ewif_base58, password) { + var that = this, + ewif_int8 = CryptoUtils.util.decode_base58(ewif_base58); + + // Check identifier byte = 0x02 + if (ewif_int8[0] != 2) { + return $q.reject({message: 'Invalid EWIF v1 format: Expected [0x02] as first byte'}); + } + + // Check length + if (ewif_int8.length != constants.EWIF.DATA_LENGTH) { + return $q.reject({message: 'Invalid EWIF v1 format: Expected {0} bytes, encoded in base 58.'.format(constants.EWIF.DATA_LENGTH)}); + } + + var ewif_int8_no_checksum = ewif_int8.slice(0,-2); + var checksum = ewif_int8.slice(-2); + var salt = ewif_int8.slice(1,5); + var encryptedhalf1 = ewif_int8.slice(5,21); + var encryptedhalf2 = ewif_int8.slice(21,37); + + // Retrieve the scrypt_seed + return CryptoUtils.util.crypto_scrypt( + CryptoUtils.util.encode_utf8(password), + salt, + constants.EWIF.SCRYPT_PARAMS.N, + constants.EWIF.SCRYPT_PARAMS.r, + constants.EWIF.SCRYPT_PARAMS.p, + 64) + + // Compute the final seed + .then(function(scrypt_seed) { + + var derivedhalf1 = scrypt_seed.slice(0, 32); + var derivedhalf2 = scrypt_seed.slice(32, 64); + + //AES + var aesEcb = new aesjs.ModeOfOperation.ecb(derivedhalf2); + var decryptedhalf1 = aesEcb.decrypt(encryptedhalf1); + var decryptedhalf2 = aesEcb.decrypt(encryptedhalf2); + + decryptedhalf1 = new Uint8Array(decryptedhalf1); + decryptedhalf2 = new Uint8Array(decryptedhalf2); + + //xor + var seed1 = xor(decryptedhalf1, derivedhalf1.slice(0, 16)); + var seed2 = xor(decryptedhalf2, derivedhalf1.slice(16, 32)); + var seed = concat_Uint8Array(seed1, seed2); + + return seed; + }) + + // Get the keypair, from the seed + .then(CryptoUtils.seedKeypair) + + // Do some controls + .then(function(keypair) { + + // Check salt + var expectedSalt = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(keypair.signPk)).slice(0,4); + if(CryptoUtils.util.encode_base58(salt) !== CryptoUtils.util.encode_base58(expectedSalt)) { + throw {ucode: errorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD'}; + } + + // Check checksum + var expectedChecksum = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(ewif_int8_no_checksum)).slice(0,2); + if (CryptoUtils.util.encode_base58(checksum) != CryptoUtils.util.encode_base58(expectedChecksum)) { + throw {ucode: errorCodes.BAD_CHECKSUM, message: 'ERROR.BAD_CHECKSUM'}; + } + + return keypair; + }); + } + + /* -- box (pack/unpack a record) -- */ + + function getBoxKeypair(keypair) { + if (!keypair) { + throw new Error('Missing keypair'); + } + if (keypair.boxPk && keypair.boxSk) { + return $q.when(keypair); + } + + return $q.all([ + CryptoUtils.box.keypair.skFromSignSk(keypair.signSk), + CryptoUtils.box.keypair.pkFromSignPk(keypair.signPk) + ]) + .then(function(res) { + return { + boxSk: res[0], + boxPk: res[1] + }; + }); + } + + function packRecordFields(record, keypair, recipientFieldName, cypherFieldNames, nonce) { + + recipientFieldName = recipientFieldName || 'recipient'; + if (!record[recipientFieldName]) { + return $q.reject({message:'ES_WALLET.ERROR.RECIPIENT_IS_MANDATORY'}); + } + + cypherFieldNames = cypherFieldNames || 'content'; + if (typeof cypherFieldNames == 'string') { + cypherFieldNames = [cypherFieldNames]; + } + + // Work on a copy, to keep the original record (as it could be use again - fix #382) + record = angular.copy(record); + + // Get recipient + var recipientPk = CryptoUtils.util.decode_base58(record[recipientFieldName]); + + return $q.all([ + getBoxKeypair(keypair), + CryptoUtils.box.keypair.pkFromSignPk(recipientPk), + nonce ? $q.when(nonce) : CryptoUtils.util.random_nonce() + ]) + .then(function(res) { + //var senderSk = res[0]; + var boxKeypair = res[0]; + var senderSk = boxKeypair.boxSk; + var boxRecipientPk = res[1]; + var nonce = res[2]; + + return $q.all( + cypherFieldNames.reduce(function(res, fieldName) { + if (!record[fieldName]) return res; // skip undefined fields + return res.concat( + CryptoUtils.box.pack(record[fieldName], nonce, boxRecipientPk, senderSk) + ); + }, [])) + + .then(function(cypherTexts){ + // Replace field values with cypher texts + var i = 0; + _.forEach(cypherFieldNames, function(cypherFieldName) { + if (!record[cypherFieldName]) { + // Force undefined fields to be present in object + // This is better for ES storage, that always works on lazy update mode + record[cypherFieldName] = null; + } + else { + record[cypherFieldName] = cypherTexts[i++]; + } + }); + + // Set nonce + record.nonce = CryptoUtils.util.encode_base58(nonce); + + return record; + }); + }); + } + + function openRecordFields(records, keypair, issuerFieldName, cypherFieldNames) { + + issuerFieldName = issuerFieldName || 'issuer'; + cypherFieldNames = cypherFieldNames || 'content'; + if (typeof cypherFieldNames == 'string') { + cypherFieldNames = [cypherFieldNames]; + } + + var now = new Date().getTime(); + var issuerBoxPks = {}; // a map used as cache + + var jobs = [getBoxKeypair(keypair)]; + return $q.all(records.reduce(function(jobs, message) { + var issuer = message[issuerFieldName]; + if (!issuer) {throw 'Record has no ' + issuerFieldName;} + if (issuerBoxPks[issuer]) return res; + return jobs.concat( + CryptoUtils.box.keypair.pkFromSignPk(CryptoUtils.util.decode_base58(issuer)) + .then(function(issuerBoxPk) { + issuerBoxPks[issuer] = issuerBoxPk; // fill box pk cache + })); + }, jobs)) + .then(function(res){ + var boxKeypair = res[0]; + return $q.all(records.reduce(function(jobs, record) { + var issuerBoxPk = issuerBoxPks[record[issuerFieldName]]; + var nonce = CryptoUtils.util.decode_base58(record.nonce); + record.valid = true; + + return jobs.concat( + cypherFieldNames.reduce(function(res, cypherFieldName) { + if (!record[cypherFieldName]) return res; + return res.concat(CryptoUtils.box.open(record[cypherFieldName], nonce, issuerBoxPk, boxKeypair.boxSk) + .then(function(text) { + record[cypherFieldName] = text; + }) + .catch(function(err){ + console.error(err); + console.warn('[ES] [crypto] a record may have invalid cypher ' + cypherFieldName); + record.valid = false; + })); + }, [])); + }, [])); + }) + .then(function() { + console.debug('[ES] [crypto] All record decrypted in ' + (new Date().getTime() - now) + 'ms'); + return records; + }); + + } + + // exports + return { + errorCodes: errorCodes, + constants: constants, + // copy CryptoUtils + utils: CryptoUtils.utils, + keyfile: { + read: readKeyFile, + parseWIF_or_EWIF: parseWIF_or_EWIF, + }, + box: { + getKeypair: getBoxKeypair, + pack: packRecordFields, + open: openRecordFields + } + }; + }) ; diff --git a/www/js/services/modal-services.js b/www/js/services/modal-services.js index d01eb749419a14882bc7c2a4f846933771d2a857..f3cda1e8464bfbb1e327c82dd58ea1056d531cc3 100644 --- a/www/js/services/modal-services.js +++ b/www/js/services/modal-services.js @@ -280,4 +280,24 @@ angular.module('cesium.modal.services', []) showPassword: showPassword }; -}); +}) + +.factory('csPopovers', function($rootScope, $translate, $ionicPopup, $timeout, UIUtils) { + 'ngInject'; + + function showSelectWallet(event, options) { + options = options || {}; + var scope = options.scope && options.scope.$new() || $rootScope.$new(true); + scope.parameters = options; + delete options.scope; + return UIUtils.popover.show(event, angular.merge({ + templateUrl :'templates/wallet/list/popover_wallets.html', + autoremove: true + }, options)); + } + + return { + showSelectWallet: showSelectWallet + }; + + }); diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js index 78fecdab5e424549d542ff7bd05cbcffd6f4d361..7fd054fe7aabef558d002141894df852dbf5e2ee 100644 --- a/www/js/services/wallet-services.js +++ b/www/js/services/wallet-services.js @@ -15,6 +15,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se BMA = BMA || defaultBMA; var + exports, constants = { // @Deprecated OLD_STORAGE_KEY: 'CESIUM_DATA', @@ -52,7 +53,15 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se data.sigStock = null; data.isMember = false; data.events = []; - data.children = []; // children's wallets + + // children's wallets + data.children = []; + + // Encryption (e.g. for children wallet) + data.encryption = { + enable: false, + nonce: null + }; resetKeypair(); resetTxAndSources(); @@ -64,7 +73,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se api.data.raise.init(data); } else { - if (!csSettings.data.useLocalStorage) { + if (isDefault() && !csSettings.data.useLocalStorage) { csSettings.reset(); } api.data.raise.reset(data); @@ -102,6 +111,14 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se resetTx(); }, + isDefault = function(){ + return id === 'default'; + }, + + isEncrypted = function(){ + return data.encryption && data.encryption.enable; + }, + addSource = function(src, sources, sourcesIndexByKey) { var srcKey = src.type+':'+src.identifier+':'+src.noffset; if (angular.isUndefined(sourcesIndexByKey[srcKey])) { @@ -127,6 +144,18 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se }); } + var needDecrypt = !isDefault() && isEncrypted(); + if (needDecrypt) { + var parentWallet = exports.parent; + return parentWallet.auth() + .then(function(parentData) { + return decrypt(parentData.keypair); + }) + .then(function() { + return login(options); // loop + }); + } + var needLogin = !isLogin(); var needAuth = options && ((options.auth && !isAuth()) || options.forceAuth); @@ -240,7 +269,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se }, isLogin = function() { - return !!data.pubkey; + return !!data.pubkey && !isEncrypted(); }, auth = function(options) { @@ -367,19 +396,8 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se jobs.push(localStorage.put(constants.STORAGE_UID, null)); } - // Use local storage for uid - fix #625 - if (data.children && data.children.length) { - var childrenPubkeys = data.children.reduce(function(res, wallet) { - return wallet.isLogin() ? res.concat({ - pubkey: wallet.data.pubkey, - name: wallet.data.name - }) : res; - }, []); - jobs.push(localStorage.put(constants.STORAGE_CHILDREN_WALLET, JSON.stringify(childrenPubkeys))); - } - else { - jobs.push(localStorage.put(constants.STORAGE_CHILDREN_WALLET, null)); - } + // Store children wallets + jobs.push(storeChildrenWallets()); return $q.all(jobs).then(function() { console.debug('[wallet] Saved locally'); @@ -389,8 +407,9 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se return $q.all([ sessionStorage.put(constants.STORAGE_SECKEY, null), localStorage.put(constants.STORAGE_PUBKEY, null), - localStorage.put(constants.STORAGE_UID, null), - localStorage.put(constants.STORAGE_CHILDREN_WALLET, null) + localStorage.put(constants.STORAGE_UID, null) + // do NOT clean children wallets when logout + //localStorage.put(constants.STORAGE_CHILDREN_WALLET, null) ]); } } @@ -405,6 +424,53 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se }, + storeChildrenWallets = function() { + var storageKey = constants.STORAGE_CHILDREN_WALLET + '-' + data.pubkey; + + // No children; remove value + if (!data.children || !data.children.length) { + return localStorage.put(storageKey, null); + } + + // If not auth: skip storage (could not encrypt) = keep old values + if (!isAuth()) return $q.when(); + + var now = new Date().getTime(); + console.debug("[wallet] Store children wallets into the local storage..."); + + return $q.all([ + // Get a unique nonce + CryptoUtils.util.random_nonce(), + // Get box keypair + CryptoUtils.box.keypair.fromSignKeypair(data.keypair) + .then(function(boxKeypair) { + if (!data.keypair.boxSk) { + console.log("[wallet] WARN: Add boxkeypair into wallet data"); + data.keypair.boxSk = boxKeypair.boxSk; + data.keypair.boxPk = boxKeypair.boxPk; + } + return boxKeypair; + }) + ]) + .then(function(res) { + var nonce = res[0]; + var keypair = res[1]; + + return $q.all( + _.map(data.children, function(wallet) { + return wallet.encrypt(keypair, nonce); + }) + ); + }) + .then(function(wallets) { + console.log("Encrypted childre wallets: ", wallets); + return localStorage.put(storageKey, JSON.stringify(wallets)) + .then(function() { + console.debug("[wallet] {"+wallets.length+"} children wallets stored in "+ (new Date().getTime() - now) +"ms"); + }); + }); + }, + restore = function() { // Clean old storage localStorage.get(constants.OLD_STORAGE_KEY) @@ -415,14 +481,12 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se return $q.all([ sessionStorage.get(constants.STORAGE_SECKEY), localStorage.get(constants.STORAGE_PUBKEY), - localStorage.get(constants.STORAGE_UID), - localStorage.get(constants.STORAGE_CHILDREN_WALLET) + localStorage.get(constants.STORAGE_UID) ]) .then(function(res) { var seckey = res[0]; var pubkey = res[1]; var uid = res[2]; - var childrenStr = res[3]; if (!pubkey || pubkey == 'null') return; console.debug('[wallet] Restore {'+pubkey.substring(0,8)+'} from local storage'); @@ -441,27 +505,33 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se } } - // Children's wallet - var children = childrenStr && JSON.parse(childrenStr); - var jobs = []; - if (children) { - _.forEach(children, function(child, index) { - console.debug('[wallet] - {'+child.pubkey.substring(0,8)+'} sub wallet'); - var wallet = service.instance('secondary-' + (index+1)); - wallet.data.pubkey = child.pubkey; - wallet.data.name = child.name; - jobs.push(addChildWallet(wallet, {store: false/*skip store*/})); - }); - } - data.pubkey = pubkey; data.uid = uid && uid != 'null' ? uid : undefined; data.keypair = keypair || {signPk: undefined, signSk: undefined}; - // Call extend api - jobs.push(api.data.raisePromise.login(data)) + var storageChildrenKey = constants.STORAGE_CHILDREN_WALLET + '-' + pubkey; + return localStorage.get(storageChildrenKey) + .then(function(childrenStr){ + var jobs = []; + + // Decrypt children wallet + var children = childrenStr && JSON.parse(childrenStr); + if (children && children.length) { + _.forEach(children, function(child, index) { + var wallet = service.instance('secondary-' + (index+1)); + wallet.data.pubkey = child.pubkey; + wallet.data.name = child.name; + wallet.data.encryption.enable = true; + wallet.data.encryption.nonce = child.nonce; + jobs.push(addChildWallet(wallet, {store: false/*skip store*/})); + }); + } + + // Call extend api + jobs.push(api.data.raisePromise.login(data)); - return $q.all(jobs); + return $q.all(jobs); + }) }) .then(function(){ return data; @@ -542,7 +612,8 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se addEvents = function() { // Add user events if (data.requirements.revoked) { - addEvent({type:'warn', message: 'ERROR.WALLET_REVOKED', context: 'requirements'}); + console.log("REVOKED !!"); + addEvent({type:'info', message: 'ERROR.WALLET_REVOKED', context: 'requirements'}); } else if (data.requirements.pendingRevocation) { addEvent({type:'pending', message: 'INFO.REVOCATION_SENT_WAITING_PROCESS', context: 'requirements'}); @@ -566,7 +637,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se else { if (data.requirements.needCertificationCount > 0) { - addEvent({type:'warn', message: 'ACCOUNT.WAITING_CERTIFICATIONS', messageParams: data.requirements, context: 'requirements'}); + addEvent({type:'info', message: 'ACCOUNT.WAITING_CERTIFICATIONS', messageParams: data.requirements, context: 'requirements'}); } if (data.requirements.willNeedCertificationCount > 0) { addEvent({type:'warn', message: 'ACCOUNT.WILL_MISSING_CERTIFICATIONS', messageParams: data.requirements, context: 'requirements'}); @@ -1428,20 +1499,17 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se getCryptedId = function(record){ return getkeypairSaveId(record) - .then(function() { - return CryptoUtils.util.random_nonce(); - }) + .then(CryptoUtils.util.random_nonce) .then(function(nonce) { - record.nonce = nonce; - return CryptoUtils.box.pack(record.salt, record.nonce, record.keypair.boxPk, record.keypair.boxSk); - }) - .then(function (cypherSalt) { - record.salt = cypherSalt; - return CryptoUtils.box.pack(record.pwd, record.nonce, record.keypair.boxPk, record.keypair.boxSk); + record.nonce = CryptoUtils.util.encode_base58(nonce); + return $q.all([ + CryptoUtils.box.pack(record.salt, nonce, record.keypair.boxPk, record.keypair.boxSk), + CryptoUtils.box.pack(record.pwd, nonce, record.keypair.boxPk, record.keypair.boxSk) + ]) }) - .then(function (cypherPwd) { - record.pwd = cypherPwd; - record.nonce = CryptoUtils.util.encode_base58(record.nonce); + .then(function (res) { + record.salt = res[0]; + record.pwd = res[1]; return record; }); }, @@ -1645,24 +1713,24 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se }, downloadRevocation = function(){ - return $q.all([ - csCurrency.get(), - getRevocationDocument() - ]) - .then(function(res) { - var currency = res[0]; - var revocation = res[1]; - var revocationFile = new Blob([revocation], {type: 'text/plain; charset=utf-8'}); - return $translate('ACCOUNT.SECURITY.REVOCATION_FILENAME', { - uid: data.uid, - currency: currency.name, - pubkey: data.pubkey - }) - .then(function (fileName) { - FileSaver.saveAs(revocationFile, fileName); - }); + return $q.all([ + csCurrency.get(), + getRevocationDocument() + ]) + .then(function(res) { + var currency = res[0]; + var revocation = res[1]; + var revocationFile = new Blob([revocation], {type: 'text/plain; charset=utf-8'}); + return $translate('ACCOUNT.SECURITY.REVOCATION_FILENAME', { + uid: data.uid, + currency: currency.name, + pubkey: data.pubkey + }) + .then(function (fileName) { + FileSaver.saveAs(revocationFile, fileName); }); - }, + }); + }, cleanEventsByContext = function(context){ data.events = data.events.reduce(function(res, event) { @@ -1673,10 +1741,27 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se addChildWallet = function(wallet, options) { + // Propage some event to default wallet api + /*_.forEach(['init', 'reset'], function(method) { + wallet.api.data.on[method]($rootScope, function(data) { + api.data.raise[method](data); + }, this); + });*/ + _.forEach(['load'], function(method) { + wallet.api.data.on[method]($rootScope, function(data, deferred) { + deferred = deferred || $q.defer(); + api.data.raisePromise[method](data) + .then(deferred.resolve) + .catch(deferred.reject); + return deferred.promise; + }, this); + }); + + // Add data loading listeners - wallet.api.data.on.load($rootScope, function(data, deferred) { + wallet.api.data.on.reset($rootScope, function(data, deferred) { deferred = deferred || $q.defer(); - api.data.raisePromise.load(data) + api.data.raisePromise.reset(data) .then(deferred.resolve) .catch(deferred.reject); return deferred.promise; @@ -1696,6 +1781,9 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se return deferred.promise; }, this); + // Link to parent + wallet.parent = exports; // = self wallet + data.children = data.children || []; data.children.push(wallet); @@ -1719,10 +1807,90 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se return _.find(data.children|| [], function(child) {return child.id == id;}); }, + getAllChildrenWalletOLD = function() { + + if (!data.children || !data.children.length) return a.children; + + return data.children.reduce(function(res, wallet) { + + }, []); + }, + getAllChildrenWallet = function() { - return data.children; + var hasEncryptedWallet = _.find(data.children || [], function(wallet) { + return wallet.isEncrypted(); + }); + if (!hasEncryptedWallet) return $q.when(data.children); + + // Make sure to auth (need to get keypair) + if (!isAuth()) return auth().then(getAllChildrenWallet); + + // Get box beypair + return CryptoUtils.box.keypair.fromSignKeypair(data.keypair) + .then(function(keypair) { + // encrypte all encrypted wallet + return $q.all( + _.map(data.children, function(wallet) { + return wallet.decrypt(keypair) + .then(function() { + return wallet; + }); + }) + ); + }); }, + decrypt = function(keypair) { + if (!isEncrypted()) return $q.when(data); + return CryptoUtils.box.keypair.fromSignKeypair(keypair) + .then(function(keypair) { + var nonce = CryptoUtils.util.decode_base58(data.encryption.nonce); + return $q.all([ + CryptoUtils.box.open(data.pubkey, nonce, keypair.boxPk, keypair.boxSk), + CryptoUtils.box.open(data.name, nonce, keypair.boxPk, keypair.boxSk) + ]); + }) + .then(function(res) { + data.pubkey = res[0]; + data.name = res[1]; + data.encryption.enable = false; + data.encryption.nonce = null; + return data; + }); + }; + + encrypt = function(keypair, nonce) { + // If already encrypt, then reuse previous encryption + if (isEncrypted()) return $q.when({ + pubkey: data.pubkey, + name: data.name, + nonce: data.encryption.nonce + }); + + return $q.all([ + // Get a unique nonce + nonce ? $q.when(nonce) : CryptoUtils.util.random_nonce(), + // Get box keypair + CryptoUtils.box.keypair.fromSignKeypair(keypair) + ]) + .then(function(res) { + var nonce = res[0]; + var keypair = res[1]; + var nonceStr = CryptoUtils.util.encode_base58(nonce); + return $q.all([ + CryptoUtils.box.pack(data.pubkey, nonce, keypair.boxPk, keypair.boxSk), + CryptoUtils.box.pack(data.name, nonce, keypair.boxPk, keypair.boxSk) + ]) + .then(function (cypherRes) { + return { + pubkey: cypherRes[0], + name: cypherRes[1], + nonce: nonceStr + }; + }); + }); + }; + /** * De-serialize from JSON string */ @@ -1904,7 +2072,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se }; } - return { + exports = { id: id, data: data, ready: ready, @@ -1924,13 +2092,17 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se return data.isMember; }, isDataLoaded : isDataLoaded, - isDefault: function() {return id === "default"}, + isDefault: isDefault, isNeverUsed: isNeverUsed, isNew: isNew, isUserPubkey: isUserPubkey, getData: getData, loadData: loadData, refreshData: refreshData, + // encryption + decrypt: decrypt, + encrypt: encrypt, + isEncrypted: isEncrypted, // operations transfer: transfer, transferAll: transferAll, @@ -1962,6 +2134,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se }, api: api }; + return exports; } service = factory('default', BMA); diff --git a/www/plugins/es/i18n/locale-fr-FR.json b/www/plugins/es/i18n/locale-fr-FR.json index 6dfdfa65cd3c49da41b82d3aede241dcef56f2c1..90471cb465bc7befb2dbfe288afc6b20405f2d0d 100644 --- a/www/plugins/es/i18n/locale-fr-FR.json +++ b/www/plugins/es/i18n/locale-fr-FR.json @@ -488,8 +488,9 @@ "PLUGIN_NAME": "Cesium+", "PLUGIN_NAME_HELP": "Profils, notifications, messages privés", "ENABLE_TOGGLE": "Activer l'extension ?", + "ENABLE_REMOTE_STORAGE": "Activer le stockage distant ?", + "ENABLE_REMOTE_STORAGE_HELP": "Permet de stockage (chiffré) de vos paramètres sur les noeuds Cesium+", "ENABLE_MESSAGE_TOGGLE": "Activer les messages privés ?", - "ENABLE_SETTINGS_TOGGLE": "Activer le stockage distant des paramètres ?", "PEER": "Addresse du nœud de données", "POPUP_PEER": { "TITLE" : "Nœud de données", diff --git a/www/plugins/es/js/controllers/invitation-controllers.js b/www/plugins/es/js/controllers/invitation-controllers.js index cd7f080329d82e21f726e820ee26e2bde0669400..59ea417666111b1542980d48f3399f83ad0241a0 100644 --- a/www/plugins/es/js/controllers/invitation-controllers.js +++ b/www/plugins/es/js/controllers/invitation-controllers.js @@ -175,10 +175,11 @@ function InvitationsController($scope, $q, $ionicPopover, $state, $timeout, UIUt if (!$scope.search.results || !$scope.search.results.length) return; var lastNotification = $scope.search.results[0]; var readTime = lastNotification.time ? lastNotification.time : 0; - if (readTime && (!csSettings.data.plugins.es.invitations || csSettings.data.plugins.es.invitations.readTime != readTime)) { - csSettings.data.plugins.es.invitations = csSettings.data.plugins.es.invitations || {}; - csSettings.data.plugins.es.invitations.readTime = readTime; - csSettings.store(); + if (readTime && (!wallet.data.invitations.time != readTime)) { + wallet.data.invitations.readTime = readTime; + // TODO: check this ! + console.log("Resetting invitations readTime to {0}. TODO: check if store wallet is necessary !".format(readTime)); + wallet.store(); } }; @@ -294,9 +295,7 @@ function PopoverInvitationController($scope, $controller, csWallet) { $scope.$on('popover.shown', function() { if ($scope.search.loading) { - $scope.addListeners(); - $scope.load(); } }); diff --git a/www/plugins/es/js/controllers/notification-controllers.js b/www/plugins/es/js/controllers/notification-controllers.js index 38eca42c17667388f14fe84dc8cf214fc35487b8..4abc3a8c6fc20df50259b6b723801af6968644c8 100644 --- a/www/plugins/es/js/controllers/notification-controllers.js +++ b/www/plugins/es/js/controllers/notification-controllers.js @@ -46,6 +46,7 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil } } }; + $scope.listeners = []; var wallet; @@ -70,6 +71,8 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil $scope.load(); UIUtils.loading.hide(); + $scope.addListeners(); + // Reset unread counter return $timeout(function() { $scope.resetUnreadCount(); @@ -83,7 +86,10 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil }; $scope.load = function(from, size, silent) { - if (!csWallet.data.pubkey) { + // Make sure wallet is init (need by PopoverInvitationCtrl) + wallet = wallet || csWallet; + + if (!wallet.data.pubkey) { $scope.search.loading = true; return; } @@ -127,8 +133,8 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil $scope.markAllAsRead = function() { // Make sure to be auth before doing this - if (!csWallet.isAuth()) { - return csWallet.auth().then(function(){ + if (!wallet.isAuth()) { + return wallet.auth().then(function(){ UIUtils.loading.hide(); return $scope.markAllAsRead(); // loop }); @@ -140,9 +146,9 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil UIUtils.loading.show() .then(function() { - csWallet.data.notifications.unreadCount = 0; + wallet.data.notifications.unreadCount = 0; var lastNotification = $scope.search.results[0]; - csWallet.data.notifications.readTime = lastNotification ? lastNotification.time : 0; + wallet.data.notifications.readTime = lastNotification ? lastNotification.time : 0; _.forEach($scope.search.results, function (item) { if (item.markAsRead && typeof item.markAsRead == 'function') item.markAsRead(); }); @@ -152,14 +158,15 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil }; $scope.resetUnreadCount = function() { - if (!csWallet.data.notifications.unreadCount || !$scope.search.results || !$scope.search.results.length) return; - csWallet.data.notifications.unreadCount = 0; + if (!wallet.data.notifications.unreadCount || !$scope.search.results || !$scope.search.results.length) return; + wallet.data.notifications.unreadCount = 0; var lastNotification = $scope.search.results[0]; var readTime = lastNotification.time ? lastNotification.time : 0; - if (readTime && (!csSettings.data.wallet || csSettings.data.wallet.notificationReadTime != readTime)) { - csSettings.data.wallet = csSettings.data.wallet || {}; - csSettings.data.wallet.notificationReadTime = readTime; - csSettings.store(); + if (readTime && (!wallet.data.notifications.readTime != readTime)) { + wallet.data.notifications.readTime = readTime; + // TODO: check this ! + console.log("Resetting notifications readTime to {0}. TODO: check if store wallet is necessary !".format(readTime)); + wallet.store(); } }; @@ -244,10 +251,29 @@ function NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtil /* -- listeners -- */ - csWallet.api.data.on.logout($scope, $scope.resetData); - esHttp.api.node.on.stop($scope, $scope.resetData); - esHttp.api.node.on.start($scope, $scope.load); - esNotification.api.data.on.new($scope, $scope.onNewNotification); + $scope.addListeners = function() { + if (!wallet) throw "Controller wallet not set !"; + + $scope.listeners = [ + esHttp.api.node.on.stop($scope, $scope.resetData), + esHttp.api.node.on.start($scope, $scope.load), + wallet.api.data.on.logout($scope, $scope.resetData) + ]; + + if (wallet.isDefault()) { + // Subscribe to new notification + $scope.listeners.push( + esNotification.api.data.on.new($scope, $scope.onNewNotification) + ); + } + }; + + $scope.removeListeners = function() { + _.forEach($scope.listeners, function(remove){ + remove(); + }); + $scope.listeners = []; + }; } function PopoverNotificationsController($scope, $timeout, $controller, $state, @@ -260,9 +286,12 @@ function PopoverNotificationsController($scope, $timeout, $controller, $state, // Disable list motion $scope.motion = null; + // Set the wallet to use + $scope.setWallet(csWallet); + $scope.$on('popover.shown', function() { if ($scope.search.loading) { - $scope.setWallet(csWallet); + $scope.addListeners(); $scope.load(); } }); diff --git a/www/plugins/es/js/services/message-services.js b/www/plugins/es/js/services/message-services.js index 1e708db202e082290b1eeced93785682014eead2..9797c8ed63064a6a5301d6ed467a14cae0626a56 100644 --- a/www/plugins/es/js/services/message-services.js +++ b/www/plugins/es/js/services/message-services.js @@ -75,7 +75,7 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform', deferred.resolve(data); }) .catch(function(err){ - console.error('Error chile counting message: ' + (err.message ? err.message : err)); + console.error('Error while counting messages: ' + (err.message ? err.message : err)); deferred.resolve(data); }); return deferred.promise; diff --git a/www/plugins/es/js/services/modal-services.js b/www/plugins/es/js/services/modal-services.js index e955ff66bc6990c1d56765b14bcaafefcc29c437..24edc1b31270d07ab17f1cfb21a5bdfcdcdfd34a 100644 --- a/www/plugins/es/js/services/modal-services.js +++ b/www/plugins/es/js/services/modal-services.js @@ -8,25 +8,12 @@ angular.module('cesium.es.modal.services', ['cesium.modal.services', 'cesium.es. parameters, {focusFirstInput: true}); } - function updateNotificationCountAndReadTime() { - csWallet.data.notifications.unreadCount = 0; - if (csWallet.data.notifications && csWallet.data.notifications.history.length) { - var lastNotification = csWallet.data.notifications.history[0]; - var readTime = lastNotification ? lastNotification.time : 0; - csSettings.data.wallet = csSettings.data.wallet || {}; - if (readTime && csSettings.data.wallet.notificationReadTime != readTime) { - csSettings.data.wallet.notificationReadTime = readTime; - csSettings.store(); - } - } - } - function showNotificationsPopover(scope, event) { return UIUtils.popover.show(event, { templateUrl :'plugins/es/templates/common/popover_notification.html', scope: scope, autoremove: false, // reuse popover - afterHidden: updateNotificationCountAndReadTime + afterHidden: scope.resetUnreadCount }) .then(function(notification) { if (!notification) return; // no selection diff --git a/www/plugins/es/js/services/notification-services.js b/www/plugins/es/js/services/notification-services.js index e60adedad0721311b047c09720dc175a4f86d998..5df41e2debba3c0b54accbdbf7a10e1461d9cf41 100644 --- a/www/plugins/es/js/services/notification-services.js +++ b/www/plugins/es/js/services/notification-services.js @@ -27,6 +27,7 @@ angular.module('cesium.es.notification.services', ['cesium.platform', 'cesium.es }, that = this, listeners, + wsUserEventCloseFn, api = new Api(this, 'esNotification') ; @@ -235,7 +236,10 @@ angular.module('cesium.es.notification.services', ['cesium.platform', 'cesium.es data.notifications.warnCount = null; data.notifications.time = null; // Stop listening notification - that.raw.ws.getUserEvent().close(); + if (wsUserEventCloseFn) { + wsUserEventCloseFn(); + wsUserEventCloseFn = null; + } } function onWalletLoad(data, deferred) { @@ -275,18 +279,25 @@ angular.module('cesium.es.notification.services', ['cesium.platform', 'cesium.es console.debug('[ES] [notification] Loaded count (' + unreadCount + ') in '+(new Date().getTime()-now)+'ms'); deferred.resolve(data); }) - .catch(function(err){ - deferred.reject(err); - }) + .catch(deferred.reject) + + + + return deferred.promise; + } + + function onWalletLogin(data, deferred) { + // Call load + return onWalletLoad(data, deferred) - // Listen new events + // then start listening new events .then(function(){ console.debug('[ES] [notification] Starting listen user event...'); - var userEventWs = that.raw.ws.getUserEvent(); - listeners.push(userEventWs.close); - return userEventWs.on(onNewUserEvent, - {pubkey: data.pubkey, locale: csSettings.data.locale.id} - ) + var wsUserEvent = that.raw.ws.getUserEvent(); + wsUserEvent.on( + onNewUserEvent, + {pubkey: data.pubkey, locale: csSettings.data.locale.id} + ) .catch(function(err) { console.error('[ES] [notification] Unable to listen user event', err); @@ -294,9 +305,8 @@ angular.module('cesium.es.notification.services', ['cesium.platform', 'cesium.es // And display such connectivity errors in UI UIUtils.alert.error('ACCOUNT.ERROR.WS_CONNECTION_FAILED'); }); + wsUserEventCloseFn = wsUserEvent.close; }); - - return deferred.promise; } function countWarnEvents(data){ @@ -309,7 +319,7 @@ angular.module('cesium.es.notification.services', ['cesium.platform', 'cesium.es function addListeners() { // Listen some events listeners = [ - csWallet.api.data.on.login($rootScope, onWalletLoad, this), + csWallet.api.data.on.login($rootScope, onWalletLogin, this), csWallet.api.data.on.load($rootScope, onWalletLoad, this), csWallet.api.data.on.init($rootScope, onWalletReset, this), csWallet.api.data.on.reset($rootScope, onWalletReset, this) @@ -336,7 +346,7 @@ angular.module('cesium.es.notification.services', ['cesium.platform', 'cesium.es console.debug("[ES] [notification] Enable"); addListeners(); if (csWallet.isLogin()) { - return onWalletLoad(csWallet.data); + return onWalletLogin(csWallet.data); } } } diff --git a/www/plugins/es/js/services/settings-services.js b/www/plugins/es/js/services/settings-services.js index 96d8f98061536cb16fb147a72176b6be843d2fa8..e288251e769a98a6c5e85b82f5b060fd483b25e7 100644 --- a/www/plugins/es/js/services/settings-services.js +++ b/www/plugins/es/js/services/settings-services.js @@ -16,21 +16,28 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt var SETTINGS_SAVE_SPEC = { - includes: ['locale', 'showUDHistory', 'useRelative', 'useLocalStorage', 'expertMode', 'logoutIdle'], + includes: ['locale', 'showUDHistory', 'useRelative', 'useLocalStorage', 'expertMode', 'logoutIdle', 'blockValidityWindow'], excludes: ['timeout', 'cacheTimeMs', 'time', 'login', 'build'], plugins: { es: { excludes: ['enable', 'host', 'port', 'wsPort', 'fallbackNodes'] } }, + wallet: { + includes: ['alertIfUnusedWallet', 'notificationReadTime'] + }, helptip: { excludes: ['installDocUrl'] + }, + notifications: { + excludes: ['readTime'] } }, defaultSettings = angular.merge({ plugins: { es: { askEnable: false, + useRemoteStorage: true, notifications: { readTime: true, txSent: true, @@ -208,6 +215,7 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt var isEnable = that.isEnable(); if (isEnable && csWallet.isAuth()) { + console.log(data); if (!wasEnable) { onWalletAuth(csWallet.data); } @@ -236,6 +244,11 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt return $q.when(); } + // Skip remote saving, if remote storage disable + if (!csSettings.data.plugins.es.useRemoteStorage) { + return storeSettingsLocally(); + } + var time = esHttp.date.now(); // always update time console.debug('[ES] [settings] Saving user settings remotely...'); @@ -266,7 +279,12 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt // create or update return angular.isUndefined(data.time) ? that.add(record) : - that.update(record, {id: record.issuer}); + that.update(record, {id: record.issuer}) + .catch(function(err) { + // update failed: try add + if (err && err.ucode == 404) return that.add(record); + throw err; + }) }) .then(function() { return true; @@ -277,7 +295,7 @@ angular.module('cesium.es.settings.services', ['cesium.services', 'cesium.es.htt // Update settings version, then store (on local store only) data.time = time; previousRemoteData = filteredData; - console.debug('[ES] [settings] Saved user settings in ' + (esHttp.date.now() - time) + 'ms'); + console.debug('[ES] [settings] Saved user settings remotely in ' + (esHttp.date.now() - time) + 'ms'); return storeSettingsLocally(); }) .catch(function(err) { diff --git a/www/plugins/es/templates/settings/plugin_settings.html b/www/plugins/es/templates/settings/plugin_settings.html index 5c97942bf6f1e22e1fa6f59c7fc2f965e9e62455..8520e1d345a360e005fb2f3a7923b1b7f8c37ce7 100644 --- a/www/plugins/es/templates/settings/plugin_settings.html +++ b/www/plugins/es/templates/settings/plugin_settings.html @@ -14,6 +14,17 @@ </label> </div> + <div class="item item-toggle dark"> + <div class="input-label" translate>ES_SETTINGS.ENABLE_REMOTE_STORAGE</div> + <h4 class="gray" ng-bind-html="'ES_SETTINGS.ENABLE_REMOTE_STORAGE_HELP' | translate"></h4> + <label class="toggle toggle-royal"> + <input type="checkbox" ng-model="formData.useRemoteStorage" > + <div class="track"> + <div class="handle"></div> + </div> + </label> + </div> + <span class="item item-divider" translate>SETTINGS.NETWORK_SETTINGS</span> <div class="item ink" ng-click="formData.enable && changeEsNode()" ng-disabled="!formData.enable"> diff --git a/www/templates/menu.html b/www/templates/menu.html index 7221d87c703f975715dedbf00acc464c80d559a2..5aad90fedfc1a85d0247bf7c5539f3e83448a83f 100644 --- a/www/templates/menu.html +++ b/www/templates/menu.html @@ -15,7 +15,7 @@ <button class="button button-clear hidden-xs hidden-sm gray icon-left" ng-if="$root.settings.expertMode" style="max-width: 450px !important;" - ng-click="showNodeListPopover($event)"> + ng-click="showPeerInfoPopover($event)"> <small class="ion-locked" ng-if="$root.currency.node.useSsl"> </small> {{$root.currency.node.host}}{{$root.currency.node.port != 80 && $root.currency.node.port != 443 ? ':'+$root.currency.node.port : ''}} <small> </small> @@ -137,7 +137,7 @@ <a menu-close class="item item-icon-left" active-link="active" - active-link-path-prefix="#/app/wallet" + active-link-path-prefix="#/app/wallet/main" ui-sref="app.view_wallet" ng-class="{'item-menu-disable': !login}"> <i class="icon ion-person"></i> @@ -145,6 +145,17 @@ </a> <a id="helptip-menu-btn-account"></a> + <a menu-close + class="item item-icon-left hidden-xs hidden-sm" + active-link="active" + active-link-path-prefix="#/app/wallets" + ui-sref="app.view_wallets" + ng-class="{'item-menu-disable': !auth}"> + <i class="icon ion-card " style="top: -5px; left: 22px; font-size: 18px;"></i> + <i class="icon-secondary ion-card" style="top: 22px; left: 19px; font-size: 20px; background-color: white; width:17px; height: 14px;"></i> + {{:locale:'MENU.WALLETS'|translate}} + </a> + <a menu-close class="item item-icon-left" active-link="active" @@ -156,6 +167,7 @@ </a> <a id="helptip-menu-btn-tx"></a> + <div class="item item-divider visible-xs visible-sm"></div> <!-- Allow extension here --> diff --git a/www/templates/wallet/list/item_wallet.html b/www/templates/wallet/list/item_wallet.html index 7dd409669036825e65757cdf8be540c79c18a527..b8cd592a4e11e307e1656ff12b884c5fe98d1f27 100644 --- a/www/templates/wallet/list/item_wallet.html +++ b/www/templates/wallet/list/item_wallet.html @@ -37,7 +37,7 @@ </span> </h4> - <span class="badge" ng-if="formData.displayBalance" + <span class="badge" ng-if="formData.showBalance" ng-class=":rebind:{'badge-assertive': (walletData.balance <= 0), 'badge-balanced': (walletData.balance > 0) }"> <span ng-bind-html=":rebind:walletData.balance|formatAmount:{useRelative: true, currency: currency}"></span> </span> diff --git a/www/templates/wallet/list/item_wallet_light.html b/www/templates/wallet/list/item_wallet_light.html new file mode 100644 index 0000000000000000000000000000000000000000..a42032208a6e0cf681c4c27fa84982204aef239e --- /dev/null +++ b/www/templates/wallet/list/item_wallet_light.html @@ -0,0 +1,31 @@ + +<div class="item item-avatar item-icon-right item-border-large item-wallet" + ng-click="select($event, wallet)" + ng-init="walletData=wallet.data;"> + + <i ng-if="::!walletData.avatar" class="item-image icon" + ng-class=":rebind:{'ion-card': !walletData.isMember, 'ion-persion': walletData.isMember}"></i> + <i ng-if="::walletData.avatar" class="item-image avatar" style="background-image: url({{::walletData.avatar.src}})"></i> + + <h2> + <ng-if ng-if="::walletData.name||walletData.uid" ng-bind-html="::walletData.name||walletData.uid"></ng-if> + <ng-if ng-if="::!walletData.name && !walletData.uid">{{::walletData.pubkey|formatPubkey}}</ng-if> + </h2> + + <h4 class="gray"> + <span class="positive" ng-if="::walletData.name && walletData.uid"> + <i class="ion-person"></i> + {{::walletData.uid}} + </span> + <b class="ion-key"></b> + {{::walletData.pubkey | formatPubkey}} + <span ng-if="::!walletData.uid" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span> + </h4> + + <div class="badge" ng-if="formData.showBalance" + ng-class="{'badge-assertive': (walletData.balance <= 0), 'badge-balanced': (walletData.balance > 0) }"> + <span ng-bind-html="walletData.balance|formatAmount:{useRelative: true, currency: currency}"></span> + </div> + + <i class="icon ion-ios-arrow-right "></i> +</div> diff --git a/www/templates/wallet/list/modal_wallets.html b/www/templates/wallet/list/modal_wallets.html index b27f3cade5ef02dc1a25fdf7ddeae0260a141667..c309863f9c17a045976d744167541d04bd9513d4 100644 --- a/www/templates/wallet/list/modal_wallets.html +++ b/www/templates/wallet/list/modal_wallets.html @@ -15,37 +15,8 @@ </div> <ion-list ng-if="!loading" class="{{::motion.ionListClass}}"> - <ng-repeat ng-repeat="wallet in wallets track by wallet.id"> - <div class="item item-avatar item-icon-right item-border-large item-wallet" - ng-click="select(wallet)" - ng-init="walletData=wallet.data;"> - - <i ng-if="::!walletData.avatar" class="item-image icon" - ng-class=":rebind:{'ion-card': !walletData.isMember, 'ion-persion': walletData.isMember}"></i> - <i ng-if="::walletData.avatar" class="item-image avatar" style="background-image: url({{::walletData.avatar.src}})"></i> - - <h2> - <ng-if ng-if="::walletData.name||walletData.uid" ng-bind-html="::walletData.name||walletData.uid"></ng-if> - <ng-if ng-if="::!walletData.name && !walletData.uid">{{::walletData.pubkey|formatPubkey}}</ng-if> - </h2> - - <h4 class="gray"> - <span class="positive" ng-if="::walletData.name && walletData.uid"> - <i class="ion-person"></i> - {{::walletData.uid}} - </span> - <b class="ion-key"></b> - {{::walletData.pubkey | formatPubkey}} - <span ng-if="::!walletData.uid" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span> - </h4> - - <span class="badge" - ng-class="{'badge-assertive': (walletData.balance <= 0), 'badge-balanced': (walletData.balance > 0) }"> - <span ng-bind-html="walletData.balance|formatAmount:{useRelative: true, currency: currency}"></span> - </span> - - <i class="icon ion-ios-arrow-right "></i> - </div> + <ng-repeat ng-repeat="wallet in wallets track by wallet.id" + ng-include="'templates/wallet/list/item_wallet_light.html'"> </ng-repeat> </ion-list> diff --git a/www/templates/wallet/list/popover_wallets.html b/www/templates/wallet/list/popover_wallets.html new file mode 100644 index 0000000000000000000000000000000000000000..080071a94c6de2aa39f934c2a42ef111b029c91d --- /dev/null +++ b/www/templates/wallet/list/popover_wallets.html @@ -0,0 +1,23 @@ +<ion-popover-view class="fit popover-wallets" + ng-controller="PopoverWalletSelectModalCtrl"> + <ion-header-bar> + <h1 class="title" translate>ACCOUNT.SELECT_WALLET_MODAL.TITLE</h1> + </ion-header-bar> + <ion-content scroll="true"> + + <div class="center padding" ng-if="loading"> + <ion-spinner icon="android"></ion-spinner> + </div> + + <div class="center padding gray" ng-if="!loading && !wallets.length"> + {{:locale:'ACCOUNT.WALLET_LIST.NO_WALLET'|translate}} + </div> + + <ion-list ng-if="!loading"> + <ng-repeat ng-repeat="wallet in wallets track by wallet.id" + ng-include="'templates/wallet/list/item_wallet_light.html'"> + + </ng-repeat> + </ion-list> + </ion-content> +</ion-popover-view> diff --git a/www/templates/wallet/list/view_wallets.html b/www/templates/wallet/list/view_wallets.html index 6739414f69a03143ae552033a435300120dafce0..89db65e6078c39d190fee2fd4c89e1c556a7c71d 100644 --- a/www/templates/wallet/list/view_wallets.html +++ b/www/templates/wallet/list/view_wallets.html @@ -50,8 +50,8 @@ </div> <ion-list ng-if="!loading" class="{{::motion.ionListClass}}"> - <ng-repeat ng-repeat="wallet in wallets track by wallet.id"> - <ng-include src="'templates/wallet/list/item_wallet.html'"></ng-include> + <ng-repeat ng-repeat="wallet in wallets track by wallet.id" + ng-include="'templates/wallet/list/item_wallet.html'"> </ng-repeat> </ion-list> diff --git a/www/templates/wallet/popover_actions.html b/www/templates/wallet/popover_actions.html index bc1ce199326aa692565a275b9e04e1ed9bed0e49..244eb66e5a08468ef7b8800f08366875e37f6a6f 100644 --- a/www/templates/wallet/popover_actions.html +++ b/www/templates/wallet/popover_actions.html @@ -11,7 +11,6 @@ {{'COMMON.BTN_SHARE' | translate}} </a> - <!-- alternatives identities --> <a class="item item-icon-left ink" ng-if="walletData.requirements.alternatives" diff --git a/www/templates/wallet/view_wallet.html b/www/templates/wallet/view_wallet.html index 61f2568b6569df07b00ff351b63e4dc21af93d43..69b85f8a0dd09accb75094b9ed516fb6dca63872 100644 --- a/www/templates/wallet/view_wallet.html +++ b/www/templates/wallet/view_wallet.html @@ -24,19 +24,19 @@ <div class="positive-900-bg hero" id="wallet-header" ng-class="{'hero-qrcode-active': toggleQRCode}"> <div class="content" ng-if="!loading"> + <i class="avatar" ng-if=":rebind:!formData.avatar" ng-class=":rebind:{'avatar-wallet': !formData.isMember, 'avatar-member': formData.isMember}"></i> <i class="avatar" ng-if=":rebind:formData.avatar" style="background-image: url({{:rebind:formData.avatar.src}})"></i> - <ng-if ng-if=":rebind:formData.name"> - <h3 class="light">{{:rebind:formData.name}}</h3> - </ng-if> - <ng-if ng-if=":rebind:!formData.name"> - <h3 class="light" ng-if=":rebind:formData.uid">{{:rebind:formData.uid}}</h3> - <h3 class="light" ng-if=":rebind:!formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</h3> - </ng-if> + <h3 class="light"> + <ng-if ng-if=":rebind:formData.name">{{:rebind:formData.name}}</ng-if> + <ng-if ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</ng-if> + <ng-if ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</ng-if> + </h3> + <h4 class="assertive"><ng-if ng-if=":rebind:(formData.name || formData.uid) && !formData.isMember" translate>WOT.NOT_MEMBER_PARENTHESIS</ng-if></h4> </div> <h4 class="content light" ng-if="loading"> @@ -171,7 +171,7 @@ </a> <!-- Other wallets --> - <a class="item item-icon-left item-icon-right ink" + <a class="item item-icon-left item-icon-right ink visible-xs visible-sm" ng-if="isDefaultWallet" ui-sref="app.view_wallets"> <i class="icon ion-card " style="top: -5px; left: 22px; font-size: 18px;"></i> diff --git a/www/templates/wallet/view_wallet_tx.html b/www/templates/wallet/view_wallet_tx.html index 995d810d12bfb626d1c6add7e590ade61310fc53..49bc1513f2dbe8ac3e32d3f5c67d0c90f4ef353a 100644 --- a/www/templates/wallet/view_wallet_tx.html +++ b/www/templates/wallet/view_wallet_tx.html @@ -1,23 +1,41 @@ <ion-view left-buttons="leftButtons" class="view-wallet-tx"> <ion-nav-title> - <!-- no title--> + <!-- no title on large screen--> + <span class="visible-xs visible-sm" ng-if="!loading"> + {{formData.name || formData.uid}} - <i class="ion-key"></i> {{formData.pubkey|formatPubkey}} + </span> </ion-nav-title> <ion-nav-buttons side="secondary"> <cs-extension-point name="nav-buttons"></cs-extension-point> + + <button class="button button-icon button-clear icon ion-arrow-down-b visible-xs visible-sm" + ng-if="enableSelectWallet" + ng-click="showSelectWalletModal()"> + </button> </ion-nav-buttons> <ion-content scroll="true" class="refresher-top-bg refresher-light" bind-notifier="{ rebind:settings.useRelative, locale:settings.locale.id}"> - <ion-refresher pulling-text="{{'COMMON.BTN_REFRESH' | translate}}" + <ion-refresher pulling-text="{{:locale:'COMMON.BTN_REFRESH' | translate}}" on-refresh="doUpdate(true)"> </ion-refresher> <div class="positive-900-bg hero"> <div class="content" ng-if="!loading"> + <!-- select wallet button --> + <a class="hidden-xs hidden-sm" + style="color: lightgray;" + ng-if="enableSelectWallet" + title="{{:locale:'ACCOUNT.SELECT_WALLET_MODAL.TITLE'|translate}}" + ng-click="showSelectWalletPopover($event)"> + {{formData.name || formData.uid}} - <i class="ion-key"></i> {{formData.pubkey|formatPubkey}} + <i class="ion-arrow-down-b"></i> + </a> + <h1 class="light"> <span ng-bind-html=":balance:rebind:formData.balance | formatAmount:{currency: $root.currency.name}"></span> </h1>